EASY7
UPX 패킹 / 언패킹 방법 본문
패킹이란...?
패킹은 "실행 압축"이라고 표현할 수 있다.
실행 파일 내부에 있는 코드를 압축하여 평소에는 코드를 압축한 상태로 저장하고 있다가
파일을 실행하면 메모리에서 압축을 해제 시킨 후 파일을 실행시키는 기술이다.
-장점
1. 파일의 크기를 줄일 수 있다.(전 후 3~4배의 차이가 있다)
2. 크래커의 리버싱으로부터 보호할 수 있다.
UPX 패킹에 대해서..
1. UPX 툴 다운로드
환경 변수 등록하기
(PATH 맨뒤에 ';' 추가하고 디렉터리 추가)->윈도우 다시 시작
2. 패킹하기
upx -1 원본파일 : 원본파일을 패킹하여 덮어씌운다.
UPX0, UPX1, .rsrc 로 구성된다.
* Section UPX0 : 메모리에 로드된 후 압축코드가 해제 될 공간
* Section UPX1 : 압축코드가 저장되는 공간
3. 언패킹하기
upx -d 패킹된파일 : 패킹된 파일을 언패킹하여 덮어씌운다.
UPX 다운로드 링크 :
https://github.com/upx/upx/releases/tag/v3.95
수동으로 언패킹하기 (소프트웨어 BP 이용)
1. 패킹된 파일을 올리디버거에서 열기
패킹된 파일이라고 친절하게 알려주는 올리
2. 커서를 아래로 내리면서 "POPAD"명령어를 찾는다.
POPAD 명령어를 찾음.
3. POPAD를 클릭 -> F2(breakpoint 설정) -> F9(breakpoint까지 실행)
4. JMP 00441270 : 점프될 주소(00441270)이 패킹되기전 원래 EP로 점프하라
F7 두번 입력
원래 EP로 왔음.
5. ollydbg plugin인 OllyDump->Dump debugged process 클릭
Entry Point 를 OEP의 RVA(Relative Virtual Address)로 변경.
Dump 클릭.
파일 저장.
자동으로 덤프 떠주고 파일을 지정한 자리에 던져줌!
수동으로 언패킹하기 (하드웨어 BP이용)
1. 파일을 올리디버거로 연다.
2. PUSHAD를 실행(F8)
-레지스터 값들을 스택에 저장하는 것을 볼 수 있다.
-아래에 POPAD에서 해당 스택 값에 접근할 것이다.
3. 덤프 창에서 오른쪽 마우스->Go to -> Expressiong 클릭
4. 스택의 마지막 주소 기입 후 검색
5. 실제 스택이 저장되어있는 메모리가 나온다.
첫 바이트를 클릭->오른쪽마우스->break point -> hardware on access-> byte 클릭.
6. F9를 누르면 POPAD명령어까지 실행하는 것을 볼 수 있다.
그 이후는 위에 소프트웨어 BP를 이용한 방법과 동일하다...!!!
**Break point의 종류
1. BP(하드웨어 브레이크포인트)
-메모리 break point
-명령어 관계 없이 그 주소에 대해 읽기/쓰기/실행에 대해 BP
-최대 설정 개수가 4개라는 단점(x86 기준)
2. SB (= F2 break point)
-F8, going to return address 등에 쓰임.
'보안 공부 > 리버싱' 카테고리의 다른 글
ASPACK 패킹 / 언패킹 (진행) (0) | 2019.11.17 |
---|---|
Exeinfo PE/PEiD 툴 사용법 (0) | 2019.11.17 |
스택과 레지스터 실습 (010 editor, OllyDbg, IDA 이용) (0) | 2019.10.28 |
msdn (0) | 2019.10.28 |
010 editor 툴 (0) | 2019.10.28 |