안녕하세요
Lafarge's CrackMe 0.2버전의 시리얼 생성루틴을 그대로 어셈블리 언어와 합쳐서
코딩해 봤습니다.
위 파일을 크랙미 원본입니다.
위 사진은 키젠 입니다.
음..
이렇게 딸랑 올리기는 좀 그래서 아래 소스코드 첨부합니다.
//Open Source Project
//Language : C
#include
#include
int main()
{
static int namelen;
static int keylen;
static char name[0x20];
char keytable[0x100] = "_r <()<1-Z2[l5,^";
static char result[0x100];
printf("/////////////////////////////////////////\n");
printf("/////Larfarge's CrackMe 0.2v ///////\n");
printf("///// Key-Gen ///////\n");
printf("/////////////////////////////////////////\n");
printf("MY NAME IS : ");
gets(name);
namelen = strlen(name);
keylen = strlen(keytable);
__asm
{
XOR ESI,ESI
LEA EDI,DWORD PTR DS:keytable
MOV EAX,DWORD PTR DS:namelen
}
__asm
{
go:
mov eax,esi
push 0x19
cdq
idiv DWORD PTR DS:keylen
mov eax,esi
pop ebx
lea ecx,DWORD PTR DS:[EDI EDX]
cdq
idiv DWORD PTR DS:namelen
LEA EAX,DWORD PTR DS:name
MOVZX EAX,BYTE PTR DS:[EAX EDX]
MOVZX EDX,BYTE PTR DS:[ECX]
XOR EAX,EDX
cdq
IDIV EBX
add dl,0x41
inc esi
cmp esi,DWORD PTR DS:keylen
mov BYTE PTR DS:[ECX],DL
jl go
}
__asm
{
LEA ESI,DWORD PTR DS:keytable
LEA EDI,DWORD PTR DS:result
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
MOV BYTE PTR DS:[result 0x4],0x2D
LEA ESI,DWORD PTR DS:[keytable 0x4]
LEA EDI,DWORD PTR DS:[result 0x5]
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
MOV BYTE PTR DS:[result 0x9],0x2D
LEA ESI,DWORD PTR DS:[keytable 0x8]
LEA EDI,DWORD PTR DS:[result 0xA]
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
MOV BYTE PTR DS:[result 0xE],0x2D
LEA ESI,DWORD PTR DS:[keytable 0xC]
LEA EDI,DWORD PTR DS:[result 0xF]
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
}
printf("My serial is : %s\n\nMade By sweetchip 2012/10/16\n\nhttp://pgnsc.tistory.com, http://studyc.co.kr\n\n",result);
system("pause");
}
이름모를 Crackme 풀이 키젠포함 (0) | 2012.11.24 |
---|---|
Duelist's Crackme 2 Keyfile (0) | 2012.11.21 |
Duelist's Crackme 1 Keygen (2) | 2012.11.21 |
UPX, Olly-dbg 로 직접 언패킹 하기 (11) | 2012.09.16 |
[리버싱] For 문 분석 (2) | 2012.08.14 |