notepad.exe 파일 UPX로 패킹하기
notepad.exe 파일을 설치 후 upx.exe와 같은 경로로 옮긴다.
upx로 notepad.exe를 패킹하여 notepad_upx.exe 파일을 생성하자.
PEID 비교
둘의 차이점은 패킹된 notepad_upx.exe 파일을 PEID에 넣었을 때는 upx 0.89.6 - 1.02 ~ 라는 문자열을 확인할 수 있다는 점이다. 패킹된 파일이라는 것을 알 수 있다.
PEview 비교
직접 pe 파일의 구조를 hex 값을 보면서 비교해본 결과 MS-DOS Stub program 까지는 일치하는 것을 볼 수 있었다.
그 후 IMAGE_NT_HEADERS 부터 달라지는 값을 확인할 수 있었다.
tool 없이 패킹 풀기
패킹된 파일을 언패킹에 성공하면 위의 화면과 같은 화면이 나와야 할 것 같다.
패킹된 파일을 디버거에 넣고 툴없이 언패킹을 시도해보자.
일단 F8로 계속 실행시켜보자.
F8로 실행시키다 보니 계속 반복되고 넘어가지 않는 부분이 나온다. 끝나는 부분에 BP를 걸어서 탈출해주자.
바로 밑의 루프에서 또 걸리는 모습을 볼 수 있다. cmp문을 보아 무결성 체크 부분이라는 것을 추측할 수 있다. 좀 더 밑에 또 BP를 걸어주어 F9를 눌러 탈출하자.
F8로 실행시키면서 밑으로 좀 더 내려갔더니 또 루프를 만나게 된다.
일반적인 패커에서는 디코딩 루프가 끝나면 원본 파일에 맞게 IAT를 새롭게 구성한다고 한다. 여기서는 원본 notepad의 IAT를 구성하는 부분인 것 같다.
또 BP를 걸고 F9로 넘어가보자.
밑으로 조금 더 F8로 실행시켰더니 popad라는 어셈블리어가 보인다.
제일 처음 패킹된 노트패드 파일을 디버거에 넣었을 때 pushad라는 어셈블리어가
entry point 위치에 있었던 걸 기억해보자. popad는 pushad로 스택에 저장했던 레지스터 값을 복구해주는 명령어이다.
언패킹이 끝났다는 것을 추측할 수 있다. 실제로 조금 밑의 010154ab에 브레이크 포인트를 걸고 F9로 실행시킨 후 F7로 내부에 진입하면 OEP를 찾을 수 있다.
원본 파일의 entry point에서 보였던 어셈블리어인 "push 70" 이 보인다.
이렇게 디버거에서 tool 없이 패킹 풀기 실습을 완료할 수 있었다.
참고 링크
'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 |