본문 바로가기

About../Security

실행 파일 팩킹

실행파일 팩킹

   

이 문서에서는 실행파일 팩킹에 관해서 설명합니다.

우선 크랙미 프로그램을 다운받습니다.

cffo-2.7z

압축을 푸시면 파일이 여러개가 있는데 CrackMe2.exe 라는 실행파일이 우리가 크랙해야 할 크랙미입니다.

( 다른 파일들은 크랙이 이미 된 겁니다. )

우선 실행해보시면 다음과 같은 창이 뜹니다.

   

   

지금까지 크랙해왔던 크랙미보다 디자인이 훨씬 더 멋있어졌음을 알 수 있습니다. ( 델파이로 만들었네요. )

이제 우리는 이 크랙미 프로그램의 시리얼 키를 알아내기 위해서 이전과 같이 올리디버거로 열어봅니다.

   

   

올리 디버거로 열어보면 이상한 창이 하나 뜨게 됩니다.

이러한 메세지가 뜨는 이유는 열려는 실행파일이 팩킹이 되어 있기 때문입니다.

즉, 실행파일 자체가 압축이 되어 있다는 것 입니다.

실행파일이 이미 압축이 되어있으므로 이 압축을 풀어야 합니다.

압축을 풀기 위해서는 마찬가지로 툴을 이용하게 되는데 여기서는 PEiD 라는 툴을 이용해서 압축을 풀어보겠습니다.

PEiD.7z

PEiD 를 다운받고 실행시키면 다음과 같은 화면이 뜨게 됩니다.

   

   

... 라는 버튼을 눌러서 다음과 그림과 같이 하시면 압축을 풀 수 있습니다.

   

   

   

   

압축 풀기가 완료되면 해당 실행파일이 있는 경로에 CrackMe2.exe.unpacked_.exe 라는 파일이 생기게 됩니다.

이 파일이 압축을 푼 실행파일입니다.

   

해당 파일을 다시 올리디버거로 열면 이제 아까와 같은 메세지는 뜨지 않습니다.

이전까지 풀었던 크랙미와는 달리 파일 크기부터가 상당히 크므로 시리얼 키를 체크하는 루틴을 눈으로 찾기는 힘듭니다.

우선 크랙미를 실행 후 아무 시리얼키나 적은 후 Check The Serial 버튼을 누르면 다음과 같은 메세지가 뜹니다.

   

   

해당 메세지를 사용하는 부분에 코드를 올리디버거를 이용해서 찾아보겠습니다.

   

   

   

   

   

메뉴를 클릭하시면 다음과 같은 창이 뜨는데 이 프로그램에서 사용하는 문자열들이 어느 코드에서 사용되는지 알려줍니다.

   

   

   

   

   

   

찾아 낸 문자열 또한 만만치 않게 많습니다.

오른쪽 버튼으로 메뉴를 띄운 후 Search for text 를 클릭한 후에 "You are a bad cracker!" 라는 메세지를 찾습니다.

( 해당 메세지는 시리얼 키가 틀렸을 때 나오는 메세지입니다.

  검색을 하실 때는 반드시 스크롤 바를 맨 위로 하시고 리스트 가장 첫 번째 아이템을 선택하신 후에 하셔야 합니다. )

찾으셨다면 해당 아이템을 더블 클릭하시면 찾은 문자열을 사용하는 주소로 포커스가 이동하게 됩니다.

   

   

   

   

   

조금만 위로 올리시면 시리얼 키가 보이게 됩니다.

어떻게 보면 이전 크랙미보다 쉽게 느껴질 수 있는 부분입니다.

   

   

   

   

   

   

   

저 부분에 코드를 해석하자면 다음과 같습니다.

   

   

00442B50  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]

   

부분에서 DWORD PTR SS:[EBP-4] 는 내가 입력한 시리얼값이 들어가게 된다.

그리고 바로 밑에 줄에

   

00442B53  |. BA E82B4400    MOV EDX,CrackMe2.00442BE8                ;  ASCII "12011982"

   

CrackMe2.00442BE8 에는 아스키 값 "12011982" 있는 것을 알 수 있고

   

00442B58  |. E8 E70FFCFF    CALL CrackMe2.00403B44

   

부분에서 함수를 호출하는데 EAX 레지스터와 EDX 레지스터가 같은지 비교하는

CMP 명령어가 나오고 함수가 리턴된다.

   

이제 그 다음줄에서

   

00442B5D  |. 75 1A          JNZ SHORT CrackMe2.00442B79

   

만약 EAX, EDX 레지스터가 다르다면 시리얼 키가 다르다는 메세지가 출력되는 코드로 점프하고

아니라면 다음줄의 코드로 이동하는데 그 다음줄에 코드가 시리얼 키가 맞다는 코드이다.

   

즉, 시리얼키는 "12011982" 가 된다.

   

   

   

   

   

실행파일을 압축했을 때에는 시리얼키가 보이지 않지만 압축을 풀면 바로 시리얼 키가 들어난다는 내용이 이번 크랙미가 주는 교훈입니다.

   

실행파일을 압축하는 프로그램은 UPX, ASPack 같은게 있는데 저같은 경우에는 UPX 를 사용하며 다음 사이트에서 구하실 수 있습니다.

   

http://upx.sourceforge.net/

   

Microsoft Office OneNote 2007을 사용하여 작성했습니다.
모든 노트 및 정보를 한 곳에서 볼 수 있습니다.