upx 언패킹, 레나 듀토리얼 21번

악성코드 및 포렌식|2021. 3. 6. 19:34

 

cd Desktop

 

upx.exe ori_notepad.exe

 

그럼 패킹이되고

 

파일의 size가 줄은것을 확인할 수 있습니다.

 

 

 

 

다시 줄이고 언패킹을 하려면

 

upx.exe -d ori_notepad.exe

 

를 진행하면됩니다. 그럼 파일 사이즈가 다시돌아오고 언패킹이 완료됩니다.

 

 

 

 

 

upx.exe ori_notepad.exe -o ori_notepad._upx.exe

 

 

원본파일의 수정을하지말고 압축을 새로운 파일로 만듭니다

 

 

peview 로 원본파일과 패킹한 파일을 비교해보니까

조금씩 다릅니다

 

 

 

다 조금씩바뀐걸알 수있습니다.

 

 

 

 

 

 

image_ section_hearder 도 바뀌고

 

전체적인 권한 설정이나 write도 하나 생겼습니다 특히 파일 사이즈도 달라졌다고알수있었습니다.

 

그리고 밑에는 실제적으로 파일사이즈가 존재하지 않는것처럼 보이게되고

하지만 이사이즈가 없다하더라도 위에보면 000100000 virtual size를 보면

가상 사이즈 10000바이트를 할당해서 write를 한다고생각하면됩니다.

 

upx0가 압축을 푸는 곳이라고생각하면됩니다.

 

 

데이터가 왜곡 되서 분석하기가 어려워집니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ollydebug로 열게되니까 압축된 파일같은데? 라는 문구가 나오게됩니다.

 

 

 

 

 

실제존재하지 않는 메모리에 메모를했던가.. 브레이크를 걸엇던가해도 실행하면 다 사라질수가 있어서 분석하기가 힘들기떄문

 

 

 

 

 

 

그래서 upx는 PUSHAD라는 특징이 있습니다.

 

애는 스텍에 레지스터에 EAX~ EDI까지 싹다넣습니다

 

 

 

그래서 한 스텝을 실행해 보니까

 

이렇게 레지스터들 EDI 값부터 

7c 910228 이 edi 값인것을 알수있고 

EAX 값 즉 00000000 값도 데이터가 새로들어간 데이터입니다.

 

레지스터에다가 값을 저장해놓고

언패킹을 다시다한다음에  POPAD라는 명령어로  저걸들을 다시다 살립니다

original CODE로 넘어가는데

그중간에 압축 코드들이 있다고해도 레지스터를 망가뜨리지않고

원래 entry point로 갈수있는 것입니다

 

그래서 이값들을 살리기위에서 잠깐 보관해놨다가 나중에 꺼내서 쓰는것입니다.

 

그래서 보관을 먼저하고 압축을 풀고나서 레지스터를 복구하고나서

정상적으로 프로그램 실행하기위해서

pushad와 popad를 사용합니다

 

 

 

 

 

 

 

 

압축을 푸는것을 자세히 보기위해 animate over를 누릅니다.

 

 

이쪽부분을 계속 저구간만 실행하고 잇습니다.

 

 

이곳에 숫자가 계속 늘어나고 데이터를 이쪽에 계속 복사를 합니다.

 

 

 

 

 

 

 

===================================================

 

 

 

 

 

 

 

레나 듀토리얼 21번

 

 

 

comjjin.tistory.com/37

 

[Tool] ImportREC v1.7 Final 다운로드

PE 관련 툴 입니다. 사용하시기 전에 사용 방법을 꼭 배우고 사용하시기 바랍니다.

comjjin.tistory.com

 

 

수동 언패킹을 위해 import rec를 다운받습니다.

 

수동으로 하는 방식은

 

메모리에 올라가면 압축이 다풀리는데 oep에 접근하기직전에 압축이풀리는 시점에 가지고오는것이다.

 

 

 

www.google.com/search?q=unpacked+fsg&rlz=1C1JJTC_koKR942KR942&oq=unpacked+fsg&aqs=chrome..69i57j0i19j0i13i19i30l2j0i8i10i13i19i30.4935j0j15&sourceid=chrome&ie=UTF-8

 

unpacked fsg - Google 검색

2017. 2. 19. · 1. Exeinfo_PE로 파일을 열면, FSG v1.33으로 Packing되어 있음을 알 수 있습니다. 2. PEview로 파일을 열어 첫 번째 SECTION HEADER를 보면, ...

www.google.com

 

 

 

upx라고 압축이되어있다고 알수있었다.

 

 

FSG 같은경우는 언패커가 거의없다.

 

하지만 

unpacker 없이 우리는 수동으로 언패킹을 진행할 것입니다.

 

 

unpacker 를 구하지못하면 우리는 수동으로 언패킹을 할수 있는 방법을 알아봅니다.

 

 

 

 

 

이런식으로 PUSHAD 가 있어 레지스터에 한번에 저장하는 것을 알수있습니다.

 

 

 

그래서

hex쪽 창에서

 

ctrl + g를 눌러esp로 이동을합니다

 

이곳으로 이동하는이유가 esp는

스택이 들어가고나서 맨위에있는 포인트이고

PUSHAD가 진행되고 POPAD로 나오게될때 그 esp 값쪽에 나오게되기 때문입니다. 그이유는 스택에 맨윗부분이기 떄문이다.

 

그래서 esp를 찾아서 가면 pushad -> popad가 끝나는 그지점이 원본 즉 oep (original entry point 시작 주소)

가 된다고 생각하면됩니다.

 

 

 

 

그리고 byte 

 

break point를 겁니다

 

다음에 2byte접근할때 이 내용이 보입니다. 

 

이쪽에서

 

hardware breakpoints를 확인할 수 있습니다.

 

 

실제로 popad가 나오나 확인을 해봅니다

 

F9 를 눌러봅니다

 

 

 

 

그러면 POPAD가 나오는것을 알수가있습니다

PUSHAD POPAD는 한쌍

 

그래서 POPAD로 잠깐 보관해 놨던 레지스터를 꺼내고 처음시작했을때의 레지스터로 돌아옵니다.

 

 

00401000으로 점프하는 구간이 생겼는데 바로 이곳이 oep입니다 original end point

 

다시 f8을 눌러보게되면

이제 원본 프로그램이 실행되는것입니다.

 

압축이다 풀린상태

 

이곳이 우리가 원하는 곳입니다

 

자 그래서

 

 

 

 

 

여기서 메모리를 덤프 뜹니다.

 

 

import 압축해제를 잘 못하니까 빼줍시다

 

 

 

 

그리고 import REC 를 다운받은 것을 키고

 

 

 

우리가 oec 시작주소를 401000 으로 바꿀꺼니까

앞에 40 빼고 

 

 

 

이런식으로 진행을 합니다

import size가 작으면안되서 1000정도로하고

우리가 oec 시작 주소를 1000으로 하고

 

autosearch 와 import둘다 진행을해줍니다.

그리고 저 import 내용들을 덤프에 적용을 할때는 fix Dump를 누르고

덤프지정하고 오픈을 합니다.

 

그렇게되면 이제 실행이 가능하게 언패킹이 진행됫습니다.

 

 

 

결론을 내면

 

언패킹에서 oep 직전까지 실행을하고 이상태로 메모리 덤프를 뜨고 뜬걸 가지고와서 저장을했고

( oep시작하기직전에하면 원본이다.)

 

 

import는 구현이 안됬기때문에 reconstructor 를 하기위해 import reconstructor 를 사용해서

 

import 구축을 다시해줬습니다.

 

 

 

'악성코드 및 포렌식' 카테고리의 다른 글

기초 정적 분석 실습 -1  (0) 2021.03.06
악성코드 분석 방법 및 기초 정적 분석  (0) 2021.03.06
패커  (0) 2021.03.06
PE 파일의 개요  (0) 2021.03.06
올리디버거 레나 듀토리얼 -1  (0) 2021.03.06

댓글()