본문 바로가기

Security study/Reversing

notepad.exe 패킹 언패킹(tool없이 패킹 풀기 & PEID 결과 비교)

notepad.exe 파일 UPX로 패킹하기

notepad.exe 파일을 설치 후 upx.exe와 같은 경로로 옮긴다.

upx.exe와 같은 경로에 notepad.exe가 있다.

upx로 notepad.exe를 패킹하여 notepad_upx.exe 파일을 생성하자.

upx로 패킹시킨 화면
notepad_upx.exe 파일이 생성된 것을 확인할 수 있다.

 

PEID 비교

패킹 전 peid
패킹 후 peid

둘의 차이점은 패킹된 notepad_upx.exe 파일을 PEID에 넣었을 때는 upx 0.89.6 - 1.02 ~ 라는 문자열을 확인할 수 있다는 점이다. 패킹된 파일이라는 것을 알 수 있다.

 

PEview 비교

패킹 전 notepad.exe 파일
패킹 후 notepad.exe 파일

직접 pe 파일의 구조를 hex 값을 보면서 비교해본 결과 MS-DOS Stub program 까지는 일치하는 것을 볼 수 있었다.

그 후 IMAGE_NT_HEADERS 부터 달라지는 값을 확인할 수 있었다.

tool 없이 패킹 풀기

원본 파일 : notepad.exe를 x32dbg 에 넣은 결과

패킹된 파일을 언패킹에 성공하면 위의 화면과 같은 화면이 나와야 할 것 같다.

패킹된 파일을 디버거에 넣고 툴없이 언패킹을 시도해보자.

notepad_upx.exe 파일을 x32dbg 에 넣은 결과

일단 F8로 계속 실행시켜보자.

첫 번째 루프가 나타난다.

F8로 실행시키다 보니 계속 반복되고 넘어가지 않는 부분이 나온다. 끝나는 부분에 BP를 걸어서 탈출해주자.

BP 걸어준 모습

바로 밑의 루프에서 또 걸리는 모습을 볼 수 있다. cmp문을 보아 무결성 체크 부분이라는 것을 추측할 수 있다. 좀 더 밑에 또 BP를 걸어주어 F9를 눌러 탈출하자.

BP를 걸어준 모습

F8로 실행시키면서 밑으로 좀 더 내려갔더니 또 루프를 만나게 된다. 

IAT를 세팅하는 루프라고 한다.

일반적인 패커에서는 디코딩 루프가 끝나면 원본 파일에 맞게 IAT를 새롭게 구성한다고 한다. 여기서는 원본 notepad의 IAT를 구성하는 부분인 것 같다. 

또 BP를 걸고 F9로 넘어가보자.

F9로 루프를 탈출한 모습

밑으로 조금 더 F8로 실행시켰더니 popad라는 어셈블리어가 보인다.

제일 처음 패킹된 노트패드 파일을 디버거에 넣었을 때 pushad라는 어셈블리어가

entry point 위치에 있었던 걸 기억해보자. popad는 pushad로 스택에 저장했던 레지스터 값을 복구해주는 명령어이다.

언패킹이 끝났다는 것을 추측할 수 있다. 실제로 조금 밑의 010154ab에 브레이크 포인트를 걸고 F9로 실행시킨 후 F7로 내부에 진입하면 OEP를 찾을 수 있다.

F7로 진입하기 전 화면
F7로 진입한 결과

원본 파일의 entry point에서 보였던 어셈블리어인 "push 70" 이 보인다.

이렇게 디버거에서 tool 없이 패킹 풀기 실습을 완료할 수 있었다.

 

참고 링크

https://dyoerr9030.tistory.com/entry/%EB%A6%AC%EB%B2%84%EC%8B%B1-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC19%EC%9E%A5-UPack-%EB%94%94%EB%B2%84%EA%B9%85-OEP-%EC%B0%BE%EA%B8%B0

 

'Security study > Reversing' 카테고리의 다른 글

DLL Injection 코드  (0) 2021.11.13
32bit IAT, EAT 로딩 과정 및 개념  (0) 2021.09.27
PE 헤더(PE Header)  (0) 2021.09.13
어셈블리 명령어 정리  (0) 2021.09.13
32bit / 64bit 함수 호출 규약  (0) 2021.09.11