-
Notepad_upx.exe 분석리버싱/리버싱스러운것 2023. 6. 1. 17:34
원본 notepad.exe의 코드, 이것이 우리가 찾아야하는 OEP(오리지널 엔트리 포인트) 이다.
upx로 패킹된 파일은 실행하면 내부에 압축되어있는 코드를 해제한 뒤에 원래 코드를 실행 시킨다 했다
고로 우리가 찾아야되는게 위에 코드.
패킹된 파일을 키면 이렇게 불라불라한다 ok를 누른다.
음~ 이게 뭔 소리들이야
책에써있는대로 첫줄부터 읽으면, PUSHAD = 레지스터의 값들을 스택에 저장하는 명령어
그밑에 mov, lea
ESI와 EDI 레지스터를 각각 두 번째 섹션 시작 주소(01011000)와 첫 번째 섹션 시작주소(01001000)로 세팅
근데 여기서 든 생각 첫 번째와 두 번째 섹션 시작주소를 어떻게 알아야하나? PEVIEW를 켜보면 알 수 있다
notepad_upx의 Image Base가 01000000인데(image base는 실행파일이 로딩되는 시작주소인데, 여기에
UPX0, 원래 코드의 압축을 해제할 공간의 RVA(00001000)를 더하면 첫 번째 섹션의 시작주소
전에 얘기한대로 rawdatasize가 0인게 포인트
UPX1의 RVA인 00011000을 더하면 두 번째 섹션의 시작주소가 된다
정확히 좀 알려달라고? 나도 몰라
아무튼 목표인 OEP를 찾기위해서 한줄한줄 트레이싱(그냥 개노가다)를 시작해봄
컨트롤 f8을 누르다 보면 막 뻉뻉이돌아가는 부분이 있다 그 부분에서 F7을 눌러 멈춰본다
ECX = 36B 번 동안 반복문을 도는데,
EDX의 내용을 EDI에 한 바이트씩 읽어 쓰는 코드임을 알 수 있다.
EDX의 값을 보면 01001000인데 이것은 아까 우리가 본 첫 번째 섹션의 시작주소와 같다
반복문 밑에 JMP문에 F2를 눌러 BREAK POINT를 걸면 바로 나갈 수 있다.
그리고 1시간 정도의 노가다 끝에 책이랑 같은 화면을 볼 수가 없어 트레이싱은 포기했다
다음은 UPX로 패킹된 파일의 OEP를 쉽게 찾아가는 방법이다
첫 번째는 POPAD명령어 이후의 JMP 명령어에 BP를 설치하는 것 이다
UPX는 EP코드가 PUSHAD/POPAD 명령어로 둘러싸여 있는데, OEP 코드로 가는 JMP 명령어가 POPAD명령어의
바로밑에 나타난다
이 JMP 명령어에 BP를 설정하고 실행하면 바로 OEP로 갈 수 있다.
검색기능을 이용해 POPAD로 바로 도착, 어떻게 검색하냐고 묻는다면 마우스 오른쪽 SEARCH FOR -> ALL COMMANDS에 POPAD를 입력하면 바로 와짐
밑에 점프문에 보이니 저기 BP를 설정해봄 그리고 F9를 눌러서 저까지 실행한뒤 한줄 넘기면
짠 우리가 처음 본 원래 코드가 나타남
이건 처음에 올린 원본파일의 EP부분, 어때요 똑같죠
두 번째는 스택에 하드웨어 브레이크 포인트를 설치하는 것이다
이름부터 뭔 개소린가 싶다, 하지만 앞에서 본 UPX의 특징인 PUSHAD/POPAD 명령어의 특성을 이용하는 것은 같은데
맨 처음 EP에서 실행된 PUSHAD 명령을 실행한 직후의 레지스터들의 모습인데 스택의 윗 부분(000DFF54)으로
따라가서 DUMP 해보면
000DFF54의 덤프창으로 가서 맨 앞에 하드웨어 BP를 건다 거는법은 캡쳐하기 빡새서 안넣었다 다 알거라고 믿는다
그리고 F9를 눌러서 실행해보면 POPAD 다음 부분으로 와 있는데 하드웨어 BP는 BP가 설치된 부분이 실행되고 나서
멈춘다는 차이점이있다(우리가 하던 BP는 명령어 실행되기전에 멈춤)
밑의 0100739D는 아까 본 원본코드로 점프하는 구문인거 아시죠
이렇게 UPX패킹된 메모장을 분석하는 시간을 가져봤습니다
'리버싱 > 리버싱스러운것' 카테고리의 다른 글
Basic RCE L14, KeyCrackmMe - #2 (0) 2023.06.09 Basic RCE L10 (0) 2023.06.06 실행압축 - 194p (0) 2023.05.30 Abex Crack me #3 (0) 2023.05.11 Tut.ReverseMe1 분석 (0) 2023.05.11