首页
社区
课程
招聘
CRACKME分析(KEYFILE菜鸟巩固练习)
2006-4-7 20:48 9689

CRACKME分析(KEYFILE菜鸟巩固练习)

2006-4-7 20:48
9689
【破文标题】CRACKME分析(KEYFILE菜鸟巩固练习)
【破文作者】逍遥风
【破解工具】winHex,OD
【破解平台】winxp
【破解声明】基本没什么技术含量,主要是熟练一下对付KEYFILE的套路。

1)用OD载入这个CRACKME,第一步还是先寻找文件名。
   用字符串查找的方法会比较快,当然也可以再命令行下断bp ReadFile 或 bp CreateFileA
   用字符串查找,找到ketfile not present\n\nor incorrec。很容易来到这里
------------------------------------------------------------------------00401557   >  6A 00         PUSH 0                                   ; /Style = MB_OK|MB_APPLMODAL
00401559   .  68 63364000   PUSH noodles-.00403663                   ; |error!
0040155E   .  68 6A364000   PUSH noodles-.0040366A                   ; |ketfile not present\n\nor incorrect
00401563   .  6A 00         PUSH 0                                   ; |hOwner = NULL
00401565   .  E8 4A010000   CALL <JMP.&USER32.MessageBoxA>           ; \MessageBoxA
------------------------------------------------------------------------
向上找找到有CreateFileA字样的地方
在这里找到了。。。并在这里下断
004014AB   .  68 F1354000   PUSH noodles-.004035F1                   ; |spook.key
004014B0   .  E8 6F010000   CALL <JMP.&KERNEL32.CreateFileA>         ; \CreateFileA                      (下断)
004014B5   .  83F8 FF       CMP EAX,-1                               ;  检查有spook.key这个文件吗?
004014B8   .  0F84 99000000 JE noodles-.00401557                     ;  没有就跳向失败
这段代码是对KEY文件是否存在进行一个检测。注释信息的‘spook.key’就是KEY文件的文件名了。
现在,只需用WINHEX建立一个名位spook.key的文件就可以继续分析了
------------------------------------------------------------------------
004014BE   .  A3 E9354000   MOV DWORD PTR DS:[4035E9],EAX
004014C3   .  FF35 E9354000 PUSH DWORD PTR DS:[4035E9]               ; /hFile = 0000014C
004014C9   .  E8 32010000   CALL <JMP.&KERNEL32.GetFileType>         ; \GetFileType
004014CE   .  68 FB354000   PUSH noodles-.004035FB                   ; /pFileSizeHigh = noodles-.004035FB
004014D3   .  FF35 E9354000 PUSH DWORD PTR DS:[4035E9]               ; |hFile = 0000014C (window)
004014D9   .  E8 1C010000   CALL <JMP.&KERNEL32.GetFileSize>         ; \GetFileSize
004014DE   .  A3 ED354000   MOV DWORD PTR DS:[4035ED],EAX            ;  检查文件字节数
004014E3   .  83F8 08       CMP EAX,8                                ;  字节为8吗?
004014E6   .  75 6F         JNZ SHORT noodles-.00401557              ;  不为8就跳向失败
这段代码是检测文件的字节数的,这个CRACKME所要的KEY文件的字节数必须为8。所以还是用WINHEX把刚才建立的
文件字节数定为8,就可以继续分析了。
----------------------------------------------------------------------
经过前两关。下面开始对文件的内容进行计算和检验。
004014E8   .  6A 00         PUSH 0                                   ; /pOverlapped = NULL
004014EA   .  68 FB354000   PUSH noodles-.004035FB                   ; |pBytesRead = noodles-.004035FB
004014EF   .  50            PUSH EAX                                 ; |BytesToRead
004014F0   .  68 FF354000   PUSH noodles-.004035FF                   ; |Buffer = noodles-.004035FF
004014F5   .  FF35 E9354000 PUSH DWORD PTR DS:[4035E9]               ; |hFile = 0000014C (window)
004014FB   .  E8 BE000000   CALL <JMP.&KERNEL32.ReadFile>            ; \ReadFile
00401500   .  85C0          TEST EAX,EAX                             ;  开始读取文件内容
00401502   .  74 53         JE SHORT noodles-.00401557
00401504   .  33C0          XOR EAX,EAX                              ;  EAX清空
00401506   .  FF35 E9354000 PUSH DWORD PTR DS:[4035E9]               ; /hObject = 0000014C (window)
0040150C   .  E8 A7000000   CALL <JMP.&KERNEL32.CloseHandle>         ; \CloseHandle
00401511   .  B8 FF354000   MOV EAX,noodles-.004035FF                ;  取文件的前4个字节(倒序)
00401516   .  C100 05       ROL DWORD PTR DS:[EAX],5                 ;  循环左移
00401519   .  8300 0F       ADD DWORD PTR DS:[EAX],0F                ;  结果加上0F
0040151C   .  C148 04 07    ROR DWORD PTR DS:[EAX+4],7               ;  取文件的后4个字节(倒序),并循环右移
00401520   .  8368 04 05    SUB DWORD PTR DS:[EAX+4],5               ;  结果减去5
00401524   .  8178 04 BDD84>CMP DWORD PTR DS:[EAX+4],C642D8BD        ;  后4个字节的计算结果与C642D8BD相比较
0040152B   .  75 2A         JNZ SHORT noodles-.00401557
0040152D   .  8138 FC098E2E CMP DWORD PTR DS:[EAX],2E8E09FC          ;  前4个字节的运算结果与2E8E09FC相比较
可以看出程序对文件内容的计算和检测是分段进行的。
计算也很简单,就是循环左移,循环右移。在加,减一下
把后四个字节的内容进行计算后将结果与C642D8BD比较
再把前四个字节的内容进行计算后将结果与2E8E09FC比较
如果两段都相等就成功。
------------------------------------------------------------------------
00401533   .  75 22         JNZ SHORT noodles-.00401557
00401535   .  68 88130000   PUSH 1388
0040153A   .  68 94334000   PUSH noodles-.00403394                   ; /your keyfile is fine happy happy joy joy
0040153F   .  68 8B130000   PUSH 138B                                ; |ControlID = 138B (5003.)
00401544   .  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hWnd
00401547   .  E8 62010000   CALL <JMP.&USER32.SetDlgItemTextA>       ; \SetDlgItemTextA
0040154C   .  8B25 BD334000 MOV ESP,DWORD PTR DS:[4033BD]
00401552   .^ E9 CBFDFFFF   JMP noodles-.00401322

------------------------------------------------------------------------
整个分析过程非常简单,但是这个KEYFILE的格式非常典型。很有代表性。
------------------------------------------------------------------------

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (11)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wire 2006-4-7 21:14
2
0
我是文盲  能不能把hex创建keyfile的过程详细说一下!谢谢
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wire 2006-4-7 21:21
3
0
不用了  算我没问  我已经会了!
雪    币: 211
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ooshanshui 2006-4-8 00:33
4
0
不错顶一下!
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vire 2006-4-8 08:16
5
0
我的第一张帖子,帮楼主顶一下!
雪    币: 180
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
末日星魂 2010-4-23 14:27
6
0
这个Crackme是很简单,但是画面效果做的好漂亮啊.
雪    币: 45
活跃值: (27)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
qinxijp 1 2010-4-23 16:55
7
0
下载学习~~~
雪    币: 146
活跃值: (1215)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
曹无咎 1 2010-4-24 12:10
8
0
这程序的效果。。。。
雪    币: 435
活跃值: (1142)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
bitt 5 2010-4-24 16:54
9
0
Optical!
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秦皇陵墓 2010-4-25 19:09
10
0
学习学习 感谢LZ
雪    币: 19
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
纠结 2010-5-8 12:32
11
0
。。。。。。。。。。。。。。。
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
我继续飘 2010-5-8 14:36
12
0
你好,我Google了一下如何用hex创建spook.key,但是没有找到我要的信息。
你能解释一下吗
游客
登录 | 注册 方可回帖
返回