출처: https://forum.tuts4you.com/topic/34146-mpress-v219-x32x64-for-newbies/
x64dbg 다운로드: https://x64dbg.com/#start
참고: https://www.goggleheadedhacker.com/blog/post/6
x64dbg 디버거를 이용해서 MPRESS 압축 풀기입니다.
압축을 해제하는 방법은 "ESP(32 비트) / RSP(64 비트)" 로 하드웨어 중단점을 설정 후,
OEP(Original Entry Point) 를 찾아서 Scylla(내장 덤프 도구) 로 덤프합니다.
그리고 이 번 "MPRESS 압축풀기-2" 가 숙달되면 UPX 압축 풀기도 대동소이합니다.
테스트 파일(원본): MPress2.19x32x64(Unpacking).7z
테스트 파일(덤프): UnPackMe32_dump_SCY.7z
1. x32dbg 및 x64dbg 공통
- F7 키[(2) 번 버튼] 대신에 우측 옆에 있는 버튼[F8 키] 를 이용해도 됩니다.
- 디버거 실행은 release 폴더의 x96dbg.exe 를 클릭하시면 x32dbg / x64dbg 선택 창이 나옵니다.
- 압축을 푼 후 리소스 수정이 불가 한 것은 Resource Tuner 로 로드한 다음에,
Resource Tuner 로 수정하든지 아니면 저장한 다음에 다른 리소스 편집기를 사용하시면 됩니다.
///////////////////////////////////////////////////////////////////////////////////////////
2. MPRESS 로 압축된 32 비트 파일 압축 풀기
2-1. DIE 로 UnPackMe32.exe 압축 여부 확인하기
2-2. x64dbg 실행시 대상 파일이 32 비트이면 x32dbg 를 선택합니다.
2-3. UnPackMe32.exe 를 로드하면 나타나는 첫 화면입니다.
2-4. 위에서 F9 을 클릭해서 엔트리 포인트가 있는 pushad 까지 와야 합니다.
pushad 우측에 적색으로 된 EntryPoint 가 있으면 정상입니다.
2-5. 위에서 F7 을 클릭해서 call 로 진입합니다.
2-6. 우측 "FPU 숨기기" 창에서 마우스로 ESP 를 우클릭한 후 "덤프에서 따라가기" 를 클릭합니다.
- 참고로 32 비트이면 ESP 이지만 64 비트는 RSP 입니다.
2-7. 좌하단 "덤프1" 창을 보면 HEX 밑에 "12" 즉 1 바이트만 선택되어 있습니다.
2-8. "덤프1" 창에서 하드웨어 중단점 설정하기
좌하단 "덤프1" 창의 HEX 밑 "12" 부터 4 바이트를 마우스로 선택합니다.
그 4 바이트에서 마우스로 우클릭한 후 "중단점(B) - 하드웨어, 액세스(A) - Dword" 를 선택합니다.
참고: 마우스로 우클릭한 후 "하드웨어 제거" 가 있으면 클릭하고, 다시 마우스로 우클릭을 하시면 됩니다.
2-9. 위에서 "하드웨어 중단점" 설정한 후 F9 을 클릭하면 jmp 에 도달합니다.
2-10. 위에서 F7 을 클릭하면 push 에 도달합니다. 여기가 OEP 입니다.
주의: 여기서 키(key) 로 더 이상 진행하시면 안됩니다.
2-11. 덤프하기
위의 1 번에서 "3 번 아이콘" 을 클릭하면 Scylla 창이 뜨면, (1)-(2)-(3)-(4) 순으로 진행 하시면 됩니다.
(1) 번 "IAT Autosearch" 를 실행한다.
"예" 를 선택하면 "고급 IAT 검색" 을 사용하고, "아니오" 를 선택하면 "고급 IAT 검색" 을 미 사용하는 겁니다.
둘 다 사용해 보시고 기본값 설정은 메뉴의 "Misc - Options - Use advanced IAT serach" 에서 하시면 됩니다.
(2) 번 "Get Impots" 를 실행한다.
중요: Impots 칸에 적색 X 자 표시가 있는 것은 우클릭 후,
"Delete tree node" 를 클릭해서 전부 제거한 다음에 (3) 번 Dump 를 시행해야 dll 에러가 안 나옵니다.
(3) 번 "Dump" 를 실행한다.
UnPackMe32_dump.exe 파일이 생성됩니다.
(4) 번 "Fix dump" 를 실행한다.
파일명 끝에 "_dump" 가 붙은 UnPackMe32_dump.exe 를 선택해야 됩니다.
그러면 UnPackMe32_dump.exe 에 "_SCY" 가 붙은 UnPackMe32_dump_SCY.exe 파일이 생성됩니다.
이 파일이 압축이 풀린 최종 파일입니다.
- 덤프한 다음에 안될 경우
메뉴 "다시 시작" 아이콘을 클릭하시고 다시 실행보세요.
디버거를 종료하고 처음부터 다시 시작해보세요.
덤프 전에 수정할 것이 있거나 또는 덤프 후에 수정할 것이 있을 수도 있습니다.
그래도 안 되면 다른 고수님께 부탁하세요.
2-12. 언팩된 UnPackMe32_dump_SCY.exe 를 실행한 모습입니다.
2-13. UnPackMe32_dump_SCY.exe 를 DIE 로 살펴본 것입니다.
///////////////////////////////////////////////////////////////////////////////////////////
3. MPRESS 로 압축된 64 비트 파일 압축 풀기
3-1. DIE 로 UnPackMe64.exe 압축 여부 확인하기
3-2. x64dbg 실행시 대상 파일이 64 비트이면 x64dbg 를 선택합니다.
3-3. UnPackMe64.exe 를 로드하면 나타나는 첫 화면입니다.
3-4. 위에서 F9 을 클릭해서 엔트리 포인트가 있는 push 까지 와야 합니다.
push 우측에 적색으로 된 EntryPoint 가 있으면 정상입니다.
3-5. 위에서 F7 을 클릭해서 lea 로 진입합니다.
3-6. 우측 "FPU 숨기기" 창에서 마우스로 RSP 를 우클릭한 후 "덤프에서 따라가기" 를 클릭합니다.
- 참고로 32 비트이면 ESP 이지만 64 비트는 RSP 입니다.
3-7. 좌하단 "덤프1" 창을 보면 HEX 밑에 "00" 즉 1 바이트만 선택되어 있습니다.
3-8. "덤프1" 창에서 하드웨어 중단점 설정하기
좌하단 "덤프1" 창의 HEX 밑 "00" 부터 4 바이트를 마우스로 선택합니다.
그 4 바이트에서 마우스로 우클릭한 후 "중단점(B) - 하드웨어, 액세스(A) - Dword" 를 선택합니다.
참고: 마우스로 우클릭한 후 "하드웨어 제거" 가 있으면 클릭하고, 다시 마우스로 우클릭을 하시면 됩니다.
3-9. 위에서 "하드웨어 중단점" 설정한 후 F9 을 클릭하면 pop 에 도달합니다.
3-9-1. 위에서 F7 을 클릭하면 jmp 에 도달합니다.
3-10. 위에서 F7 을 클릭하면 sub 에 도달합니다. 여기가 OEP 입니다.
주의: 여기서 키(key) 로 더 이상 진행하시면 안됩니다.
3-11. 덤프하기
위의 1 번에서 "3 번 아이콘" 을 클릭하면 Scylla 창이 뜨면, (1)-(2)-(3)-(4) 순으로 진행 하시면 됩니다.
(1) 번 "IAT Autosearch" 를 실행한다.
"예" 를 선택하면 "고급 IAT 검색" 을 사용하고, "아니오" 를 선택하면 "고급 IAT 검색" 을 미 사용하는 겁니다.
둘 다 사용해 보시고 기본값 설정은 메뉴의 "Misc - Options - Use advanced IAT serach" 에서 하시면 됩니다.
(2) 번 "Get Impots" 를 실행한다.
중요: Impots 칸에 적색 X 자 표시가 있는 것은 우클릭 후,
"Delete tree node" 를 클릭해서 전부 제거한 다음에 (3) 번 Dump 를 시행해야 dll 에러가 안 나옵니다.
(3) 번 "Dump" 를 실행한다.
UnPackMe64_dump.exe 파일이 생성됩니다.
(4) 번 "Fix dump" 를 실행한다.
파일명 끝에 "_dump" 가 붙은 UnPackMe64_dump.exe 를 선택해야 됩니다.
그러면 UnPackMe64_dump.exe 에 "_SCY" 가 붙은 UnPackMe64_dump_SCY.exe 파일이 생성됩니다.
이 파일이 압축이 풀린 최종 파일입니다.
- 덤프한 다음에 안될 경우
메뉴 "다시 시작" 아이콘을 클릭하시고 다시 실행보세요.
디버거를 종료하고 처음부터 다시 시작해보세요.
덤프 전에 수정할 것이 있거나 또는 덤프 후에 수정할 것이 있을 수도 있습니다.
그래도 안 되면 다른 고수님께 부탁하세요.
3-12. 언팩된 UnPackMe64_dump_SCY.exe 를 실행한 모습입니다.
3-13. UnPackMe64_dump_SCY.exe 를 DIE 로 살펴본 것입니다.
32 비트에서는 안 보이던 compiler 가 나타났네요.
END ///////////////////////////////////////////////////////////////////////////////////////////