[리버싱] Crackme2.exe 크랙하기

Updated:

IDA 를 이용하여 Crackme2.exe 크랙하는 방법에 대해 기술한다.

  1. 코드 disassembly
  2. 코드해석 및 크랙

1. 코드 disassembly

[Shift + F12] 를 통해 String 을 검색한 후, 크랙과 관련이 있는 문자열을 더블 클릭한다.

다음과 같이 노란색 블럭이 된 상태에서 [x] 를 누르면 해당 문자열을 참조하는 함수를 확인할 수 있다.

해당 함수를 확인하면 다음과 같은 assembly graph 화면을 볼 수 있다. 이 상태에서 [F5] 를 눌러 disassembly 한다.

다음은 disassembly 된 pseudo code 화면이며, 변수를 선택한 상태에서 [n] 을 클릭하여 변수명을 재설정할 수 있다.

2. 코드해석 및 크랙

for(i=0; i<lengthOfUser; ++i)
  v5 += User[i];
User 문자열의 각 문자를 Hex 값으로 더한 값이 v5 에 저장된다.
예를 들어, User = "1124" 이라면, v5 = 0x31 + 0x31 + 0x32 + 0x34 = 0xC8 이 된다.
sprintf(&String1, "%d", 1337 * v5);
String1 에 1337 * v5 값을 십진수형태로 저장한다.
예를 들어, v5 = 0xC8 = 200 이고, String1 = 1337 * 200 = 267400 이 된다.
if ( lstrcmpA(&String1, &Serial) )
  MessageBoxA(hDlg, "Bad Boy!", "Doh!", 0x10u);
else
  MessageBoxA(hDlg, "Good Boy!\n If this key is from your keygen u should write an solution!", "Wee!", 0x40u);
String1 과 Serial 문자열을 비교하여 같으면 Good Boy 를 띄어준다.

u should write a solution! -> Yea, I did.

Comments