-
-
CRACKME分析(KEYFILE进阶篇)
-
发表于:
2006-3-26 12:21
7048
-
【破文标题】CRACKME分析
【破文作者】逍遥风
【作者邮箱】tc-xb@163.com
【破解工具】OD
【破解平台】WINXP
【破解声明】keyFile进阶
------------------------------------------------------------------------
由于这个KEYFILE,必须读取指定文件的内容。所以,不能像上次那个一样任意建立一个KEY文件去分析,在具体分析之前
必须收集一些关于程序指定KEY文件的一些基本信息。具体到这个KEYFILE就是在分析之前需要知道KEY文件的文件名和文
件字的节数。一步一步走。
1)OD载入程序。命令行下断bp CreateFileA,F9运行后,停在这里
7C801A24 > 8BFF MOV EDI,EDI ; ntdll.7C930738
7C801A26 55 PUSH EBP
7C801A27 8BEC MOV EBP,ESP
7C801A29 FF75 08 PUSH DWORD PTR SS:[EBP+8]
7C801A2C E8 73C80000 CALL kernel32.7C80E2A4
7C801A31 85C0 TEST EAX,EAX
此时注意看堆栈的提示。如下。。。。。。
{ 0012FFA4 00401032 /CALL 到 CreateFileA 来自 echap544.0040102D 。。。。。。注意这里
0012FFA8 004020D7 |FileName = "CRACKME3.KEY" 。。。。。。注意这里
0012FFAC C0000000 |Access = GENERIC_READ|GENERIC_WRITE
0012FFB0 00000003 |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012FFB4 00000000 |pSecurity = NULL
0012FFB8 00000003 |Mode = OPEN_EXISTING
0012FFBC 00000080 |Attributes = NORMAL
0012FFC0 00000000 \hTemplateFile = NULL }
根据堆栈的提示,了解到指定的KEY文件的文件名是CRACKME3.KEY。还要注意一个地方"来自 echap544.0040102D"
来到0040102D处,看到如下代码:
0040102D |. E8 76040000 CALL <JMP.&KERNEL32.CreateFileA> ; \CreateFileA
00401032 |. 83F8 FF CMP EAX,-1 ; 开始检查是否有CRACKME3.KEY这个文件
00401035 |. 75 0C JNZ SHORT echap544.00401043 ; 有这个文件就跳走,没有就出现未注册的字样
00401037 |> 68 0E214000 PUSH echap544.0040210E ; ASCII "CrackMe v3.0 "
0040103C |. E8 B4020000 CALL echap544.004012F5
00401041 |. EB 6B JMP SHORT echap544.004010AE
00401043 |> A3 F5204000 MOV DWORD PTR DS:[4020F5],EAX
00401048 |. B8 12000000 MOV EAX,12 ; 使EAX=12(18)
0040104D |. BB 08204000 MOV EBX,echap544.00402008 ; 开始读取文件信息
00401052 |. 6A 00 PUSH 0 ; /pOverlapped = NULL
00401054 |. 68 A0214000 PUSH echap544.004021A0 ; |pBytesRead = echap544.004021A0
00401059 |. 50 PUSH EAX ; |BytesToRead => 12 (18.)
0040105A |. 53 PUSH EBX ; |Buffer => echap544.00402008
0040105B |. FF35 F5204000 PUSH DWORD PTR DS:[4020F5] ; |hFile = 00000040 (window)
00401061 |. E8 30040000 CALL <JMP.&KERNEL32.ReadFile> ; \ReadFile
00401066 |. 833D A0214000>CMP DWORD PTR DS:[4021A0],12 ; 检查文件是否为18字节
0040106D |.^ 75 C8 JNZ SHORT echap544.00401037 ; 不相等就出现未注册
0040106F |. 68 08204000 PUSH echap544.00402008 ;
00401074 |. E8 98020000 CALL echap544.00401311 ; 关键CALL
以上代码的作用就是,检验KEY文件的相关信息后,如果信息符合要求,就对KEY文件的内容做进一步的处理,以检验
内容的有效性。所以,一般KEYFILE都是分两步走的,先检验文件形式的有效性,再检验文件内容的有效性。要知道程序
对文件内容是如何处理的,F7跟进上面的那个关键CALL。
00401311 /$ 33C9 XOR ECX,ECX ; kernel32.7C801898
00401313 |. 33C0 XOR EAX,EAX
00401315 |. 8B7424 04 MOV ESI,DWORD PTR SS:[ESP+4]
00401319 |. B3 41 MOV BL,41 ; BL=41
0040131B |> 8A06 /MOV AL,BYTE PTR DS:[ESI] ; 取第一个字节
0040131D |. 32C3 |XOR AL,BL ; 第一个字节与41做XOR运算
0040131F |. 8806 |MOV BYTE PTR DS:[ESI],AL
00401321 |. 46 |INC ESI ; 每计算一次就指向下一字节
00401322 |. FEC3 |INC BL ; 每计算一次BL+1
00401324 |. 0105 F9204000 |ADD DWORD PTR DS:[4020F9],EAX ; 把每一次XOR运算后的结果累加
0040132A |. 3C 00 |CMP AL,0
0040132C |. 74 07 |JE SHORT echap544.00401335
0040132E |. FEC1 |INC CL ; 每计算一次CL+1
00401330 |. 80FB 4F |CMP BL,4F ; 注意这里
00401333 |.^ 75 E6 \JNZ SHORT echap544.0040131B
00401335 |> 890D 49214000 MOV DWORD PTR DS:[402149],ECX
0040133B \. C3 RETN
这段代码就是对文件内容做进一步的处理,注意00401330处的CMP BL,4F。
4F对应的是字母o,从这个CALL可以看出,BL的值是从41(A)开始的到4F(O)结束。所以这个CALL
的作用就是对KEY文件的前14个字节按顺序与ABCDEFGHIJKLMN做XOR运算,并把结果相加,得到一个值设为A
前14字节计算完毕后,会来到这里。。。。。。
00401079 |. 8135 F9204000>XOR DWORD PTR DS:[4020F9],12345678 ; 计算结果与12345678做XOR运算,结果设为B
00401083 |. 83C4 04 ADD ESP,4
00401086 |. 68 08204000 PUSH echap544.00402008 ;
0040108B |. E8 AC020000 CALL echap544.0040133C
00401090 |. 83C4 04 ADD ESP,4
00401093 |. 3B05 F9204000 CMP EAX,DWORD PTR DS:[4020F9] ; B与KEY文件的后四个字节进行比较
00401099 |. 0F94C0 SETE AL
0040109C |. 50 PUSH EAX
0040109D |. 84C0 TEST AL,AL
0040109F |.^ 74 96 JE SHORT echap544.00401037
比较后,如果相等就会出现成功的提示。
------------------------------------------------------------------------
1)KEY文件的文件名为CrackMe v3.0,18字节
2)KEY的前14个字节,按次与ABCDEFGHIJKLMN做XOR运算,并把结果累加,设为A
3)A与12345678做XOR运算,结果设为B
4)B与KEY的后4个字节比较,相等就注册成功。
例:用WINHEX创建一个新文件
文件名:CrackMe v3.0
字节数:18
内容:
00000000 :31 32 33 34 35 36 37 38 39 30 31 32 33 34 22 50
00000010: 34 12
------------------------------------------------------------------------
【版权声明】欢迎转载,请保留作者及文章完整性
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课