티스토리 툴바

Search Results for 'R E !!/Unpacking'


2 POSTS

  1. 2009/09/03 Unpack !! - ASProtect 1.23 RC1 -> Alexey Solodovnikov (8)
  2. 2009/09/03 언패킹 기초 지식 !! (3)

Unpack !! - ASProtect 1.23 RC1 -> Alexey Solodovnikov

Posted 2009/09/03 06:06 by 앗함

첫번째 타겟은 ASProtect 1.23 RC1으로 정했다.
UPX로 하자니 시시하다고 욕할거같다.
타겟 파일은

이다. 아무래도 API가 적으니 IAT복구도 쉽겠지.
...
잡음은 집어치우고.

PEiD로 열었을때의 화면이다. 뭐, 버전에 따라 다르게 보일 수도 있다.


올디로 열었을 때의 화면이다.
강좌할때의 처음 부분과 많이 다르다.
아무튼, ▶를 눌러 실행해보자.

어? 시발. 여기서 멈췄다. 뜨라는 메세지창은 안뜨고 브레이크포인트 걸렸을때 처럼 멈춰있다.
아, 밑을 보니 저렇게 써있군. 딴거 해석하지 말고 use Shift+F7/F8/F9 만 보자.
일반적으로 F7, F8, F9의 차이는 Step into, Step Over, Run의 차이이다.
너님들을 위해 해석하자면, 콜문 안으로 들어가느냐, 안들어가느냐, 그냥 실행하느냐이다.
F9를 눌렀는데 안되는걸 쉬프트 합쳐서 누르라는걸 보니 쉬프트가 존나 쌘분같다.
같이 눌러보자.
눌렀는데도 또나온다. 또나온다. 또나온다. 또나온다... 그러다가,,,
어느 순간부터인가, 두번째 줄에 보이는 코드가 다르다. 눈치빠른것들은 느꼈을 것이다.
그렇다. 여기서 한번만 더 누르면 프로그램이 실행된다. 하지만 우리가 찾아야 할 것은
프로그램이 실행되기 바로 직전 !! 바로 오리지날 엔트리 포인트이다.
헌데 저곳의 주소를 보면 003E2CD1이다. 우리가 아는 00401000이녀석이랑은 좀 많이
다르다.
부연설명을 하자면, ASProtect 1.23 RC1 이녀석이 만들어놓은 가상공간에, 프로그램이 실행될 경우 가상공간에서 프로그램의 실제 공간에 코드를 재배열한다. 우리가 찾을 곳은 재배열하고 난뒤에 프로그램을 시작하는 부분이다.
모르겠으면 닥치고 따라해라.
Alt + M이나 위의 M버튼을 클릭하면 다음 창이 뜬다.
이중에서 우리가 봐야 할 곳은 실제 코드가 배열되는 곳이 00401000부터이므로 저부분이다.
사이즈는 파일마다 다를 수 있다.

마우스 오른쪽을 클릭하여 Set memory breakpoint on access를 클릭한다.
왜냐고? 지금 가상공간에서 실제공간으로 들어가는 부분을 모르니까 이 기능을 이용하는 것이다. 굳이 해석하자면 저기에 연결될때 브레이크포인트를 건다는 것이다.
그런다음에 Shift + F9를 한번 누르면 다음과 같이 익숙한 광경이 펼쳐진다.
이래도 모르겠다면 Ctrl + A를 눌러서 Analysing해보면 된다.
이제 OEP를 찾았다. 이게 끝이다.
이제 덤프뜨자.
덤프는 올리디버거 플러그인을 이용해도 좋고 LodePE라는 프로그램을 이용해도 좋다.
참고로 LodePE를 이용할때 OEP찾았다고 디버거 끄지마라. 다시해야된다.
본인은 LodePE를 이용했다. 해당 프로세스를 찾고 마우스 오른쪽을 클릭하면 dump full이라고 있다. 이걸 클릭하면 dump.exe라는 파일명으로 저장된다.
이제 덤프도 끝났다. IAT를 복구할 차례이다. (LoadPE는 꺼도 좋다.)
이것은 IAT를 복구해주는 ImportREC라는 프로그램이다.
여기서 잠깐.
대부분 언팩 강좌에서 저기다가 OEP넣고 오토서치, 겟임포트, 오토트레이스, 픽스덤프하면 끝이에여 이러는데, 난좀 색다르게 하련다.
오토트레이스가 안되는 경우도 있기 때문이다.
우선 맨위에 프로세스를 선택한다.
그럼 Log창에 뭐가 막 뜬다.
이제 우측의 IAT Infos Needed 창이 활성화된다. 여기다가 우리가 찾은 OEP의 Address를 넣자. 우리가 찾은 OEP는 00401000-00400000=00001000이다. (Address만 넣어도 된다.)
이런 메세지가 뜰 것이다. 이제 Get Imports를 클릭하자.
(저런 메세지가 안뜰수도 있다. 그럼 OEP를 잘못 넣은 것일 가능성이 크다.)
맨 끝에 valid가 NO라고 뜬다. 정상적으로 작동하려면 YES가 떠야 한다. 물론 여기서 Auto Trace를 하면 YES가 뜬다. 하지만 안뜨는 것도 있으니 이제 그것을 찾는 방법을 쓰려 한다.
전부 펼친 다음에 하나씩 마우스 오른쪽을 클릭한 뒤에 Disassemble / HexView를 클릭하자.
감이 오냐?
그렇다. 저곳은 kernel32.dll의 GetDriveTypeA라는 함수가 적용되어야 한다.
이제 OK를 클릭하고 다시 더블클릭하면 임포트 에디터가 뜬다. 여기서 다음과 같이 해라.
그러면 다음과 같이 변할 것이다.
마찬가지 방법으로 나머지 두개도 해보자.
이제 valid가 전부 YES가 됐다. 이제 덤프한 것을 이것으로 수정하자.
우측 아래에 Fix Dump를 클릭하여 아까 덤프한 dumped.exe를 선택하면 dumped_.exe로 저장될 것이다.
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License

'R E !! > Unpacking' 카테고리의 다른 글

Unpack !! - ASProtect 1.23 RC1 -> Alexey Solodovnikov  (8) 2009/09/03
언패킹 기초 지식 !!  (3) 2009/09/03

Tag : aspr1.23, ASProtect 1.23 RC1, ASProtect 1.23 RC1 -> Alexey Solodovnikov, ASProtect 1.2x, Unpack, Unpacking, 언패킹, 언팩

언패킹 기초 지식 !!

Posted 2009/09/03 05:29 by 앗함

아마도 이 블로그의 방문자 중 대부분은 본인의 카페나 네이버블로그등을 보면서 어느 정도
기초 지식을 쌓았으리라 생각되지만, 아닌 사람도 있기에 이 글을 쓴다.
아주 짧고 간단하게 설명하겠다.

언패킹이란 무엇인가?
패킹의 반대말이다.

그럼 패킹이란 무엇인가?
쉽게 예를 들어, 당신이 만든 프로그램이 있다. 컴파일하고 난 뒤의 용량을 보니 11MB였다.
티스토리 블로그에 올리려고 보니, 티스토리 용량 제한은 10MB이다.
그런데 당신은 곧죽어도 올려야겠다.
물론 ZIP등으로 압칙하는 방법이 있겠지만, 보통 단일파일을(executable file or etc..) 압축할
경우 패킹이라는 방법을 많이 쓴다.
한마디로 패킹도 압축, ZIP도 압축이다. 그럼 무슨 차이가 있을까?
ZIP으로 압축할 경우 다시 사용할 때에 압축을 풀고 사용해야 한다.
하지만 패킹할 경우는 압축을 풀 필요가 없이 그냥 실행이 된다.

그렇다면, 패킹이 무조건 좋은 것일까?
물론 아니다. 좋은 점이 있으면 나쁜 점도 있기 마련. 참고로 패커의 종류는 많다. A라는 패커의 경우, 1번 프로그램을 패킹하면 잘 실행이 되는 반면, 2번 프로그램을 패킹하면 실행할 때 오류가 난다. 이런거다. 무조건 패킹한다고 잘 되는게 아니라 궁합처럼 맞는 프로그램이 있고 아닌 프로그램이 있다고 생각하면 된다.
가장 좋은 예가 서든어택이나 리니지등의 프로텍터가 themida라는 프로그램으로 패킹되었을 때다. 처음에 많은 사람들이 themida라는 오류메세지가 뜬다며 바이러스라고 소문내고 다닐때가 있었다. 이처럼 무조건 좋다고 쓰지 말고 좀 가려가면서 쓰자.

언패킹의 과정은?
1. OEP(Original Entry Point) 찾기
     프로그램을 패킹하기 전의 원래 Entry Point를 찾는 과정이다.
2. 덤프.
     OEP를 찾은 뒤에 그 프로그램의 코드를 전부 복사하는 과정이라고 보면 된다.
3. IAT(Import Address Table)복구하기.
     덤프하고 난 뒤의 생성물은 헥스값만 그대로 붙여넣었다고 볼 수 있다.
     한마디로 API등이 지정되어있지 않다. 이것을 지정해 주는 작업이다.
     위의 3가지가 기본적인 과정이다. 하지만 패커의 종류에 따라 Stolen Code등 많은 옵션
     이 붙을 수 있다.

초기 패커의 목적은 용량을 줄이는 압축이지만, 시대가 흐르고 보안의 중요성이 알려지자,
여러가지 옵션을 추가해 더이상 패커가 아닌 프로텍터로 변해가고 있다.
프로그램의 용량을 줄이는 과정에서 압축된 코드들은 일반적으로 알아볼 수 없기 때문이다.

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License

'R E !! > Unpacking' 카테고리의 다른 글

Unpack !! - ASProtect 1.23 RC1 -> Alexey Solodovnikov  (8) 2009/09/03
언패킹 기초 지식 !!  (3) 2009/09/03

Tag : 언패킹, 언패킹 기초 지식, 언팩, 언팩강좌