study/보안

수동 언패킹 실습

lucykorea414 2024. 2. 2. 15:16
728x90

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를 한번 봅시다

 

조금 지저분하긴 하지만 훨씬 분석하기에 좋음!!

 

 

 

728x90

'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