constWORLDant

EasyKeygen 본문

0x02 Reverse Engineer/0x02. Reversing.kr

EasyKeygen

data type ConS_tanT 2017.07.28 03:20

반복되는 루틴 배열 찾고, 이름과 시리얼의 관계만 파악하면 된다.


Find the Name when the Serial is 5B134977135E7D13


시리얼 길이 16자리 



네임 : aa일때 

시리얼 : 7141 (4자리)  



1)

0040107E  |> \0FBE4C34 0C   |movsx ecx,byte ptr [esp+esi+0xC]                      ;   10 20 30 이 [esp+esi+0xc]에 들어감

00401083  |.  0FBE542C 10   |movsx edx,byte ptr [esp+ebp+0x10]                     ;  내가 입력한 네임이 들어감

00401088  |.  33CA          |xor ecx,edx                                           ;  입력한 한 값과 ^ 10 , 입력한 값과 ^ 20, ^ 30



2) 저 루틴 다 돌면 7141이 나오는데 

네임 * 2 = 시리얼 값 



3) 5B ^ 10 13 ^ 20  49 ^ 30 ??



4) a*8 (input)


[0] = 61 ^ 10 = 71 

[1] = 61 ^ 20 = 41

[2] = 61 ^ 30   = 51  // 이까지 범위임  

[3] = 61 ^ 10 = 71 


5) 키젠 나왔네 


-> 조건 : 이름은 4자리

          시리얼 8자리 인데


시리얼을 만들 때 [0]은 10을 xor [1]은 20을 xor [2]는 30을 xor

        [3]은 10을 xor



5B ^ 10 4b

13 ^ 20 33

49 ^ 30 79

77 ^ 10 67

13 ^ 20 33

5E ^ 30 2e

7D ^ 10 6d

13 ^ 20 33


4b337967336e6d33   === K3yg3nm3




#include <stdio.h>

#include <string.h>


int main(void)

{

int routine[3] = {0x10,0x20,0x30};


char name[9] ="\0";

char serial[9] = {0x5B,0x13,0x49,0x77,0x13,0x5E,0x7D,0x13};

int i=0;

int j=0;


printf("name length  = %d\n",sizeof(name)-1);

printf("serial length = %d\n", sizeof(name)*2-2);

printf("Name = ");

for(i=0; i<8 ; i++)

{

if(j==3)

j=0;

name[i] = serial[i] ^ routine[j];

j++;

printf("%c",name[i]);

}

}

'0x02 Reverse Engineer > 0x02. Reversing.kr' 카테고리의 다른 글

CRC1  (0) 2018.01.05
PEpasswd  (0) 2017.12.01
RansomeWare  (0) 2017.07.28
MusicPlayer  (0) 2017.07.28
EasyUnpackMe  (0) 2017.07.28
EasyKeygen  (0) 2017.07.28
0 Comments
댓글쓰기 폼