MsgBox_upx.exe 를 올리디버거로 실행해보자
맨 처음에 PUSHAD 라는게 보일텐데, 얘는 레지스터 A~D(EAX부터 EDI까지) 까지 다 스택에 push 하라는 거다
이걸 왜 하냐? 레지스터에 있는 값을 보관하기 위해 함.
왜 보관을 하냐? 패커는 종종 이렇게 레지스터의 값 임의로 저장을 해두고 나중에 다시 복원해서 씀!
그럼 PUSHAD 가 있으면 그 반대는 POPAD이다!!
ctrl+S 로 popad를 찾아보면 다음과 같이 나옴
upx에는 popad가 하나가 아닐 수 있기 때문에 일단 F2를 눌러 bp를 설정하고 ctrl+L을 눌러 다음 popad를 찾는다
여기에도 마찬가지로 bp를 걸어준다
여기서 한번 더 ctrl+L을 눌러주면 밑에 Item Not Found 라고 오류메세지가 뜬다!!
그러면 여기서 F9를 눌러서 실행을 해주게 되면
저기 OEP(Original Entry Point: 파일의 실제 시작 부분)로 들어가는 부분이 보인다!
여기서 BP를 걸고 다시 실행을 하자
그러면 0041340 으로 점프되고 이렇게 코드가 나오는걸 볼 수 있다!!
이제 여기서 원래 패킹되지 않은 MsgBox.exe를 올리디버거로 한번 보자
여기서도 00401340 으로 시작하는 걸 볼 수 있다~~!
덤프를 떠봅시다
플러그인 중 올리덤프를 고르고 dump debugged process를 누른다 (이 디버깅 중인 프로세스를 덤프)
덤프파일을 바탕화면에 저장해주고
실행해보면~
실행이 제대로 안된다!
왜냐? 임포트가 제대로 되지 않기 때문
그래서 임포트를 생성해줘야함
이걸 해결하기 위해 importREC 라는 툴이 있음 (import 를 reconstruct 해줌)
요 아이를 실행해봅쉬다
프로세스는 현재 디버깅 중인 msgbox_upx.exe를 넣어놓고
밑에 OEP에 00001340을 적어줍니당
IAT AutoSearch를 눌러주고 Found something이 뜨면 ok 누르고 밑에 Get Imports 누르면
이렇게 저장되어 있지 않던 import 들을 찾음!!
이제 이 임포트들을 덤프에 적용시키기 위해 Fix Dump를 눌러주고
이렇게 바탕화면에 새로운 덤프 파일이 생성되게 되는데 실행을 해보면 정상적으로 잘 작동 된다!!
그럼 이 덤프의 Pe view를 한번 봅시다
조금 지저분하긴 하지만 훨씬 분석하기에 좋음!!
'study > 보안' 카테고리의 다른 글
트로이목마(드로퍼)란? (1) | 2024.02.04 |
---|---|
C언어로 다운로더 만들기 (0) | 2024.02.04 |
UPX 언패킹 실습 (0) | 2024.01.31 |
IDA 단축키 모음 (0) | 2023.09.15 |
x86 어셈블리 언어 - 주요 명령어 정리 (2) (0) | 2023.09.08 |