飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2922|回复: 2

[转贴] CRACKME分析(KEYFILE菜鸟巩固练习)

[复制链接]

该用户从未签到

发表于 2010-5-25 18:01:13 | 显示全部楼层 |阅读模式
标 题: CRACKME分析(KEYFILE菜鸟巩固练习)
作 者: 逍遥风
时 间: 2006-04-07,20:48:09
链 接: http://bbs.pediy.com/showthread.php?t=23785

【破文标题】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的格式非常典型。很有代表性。
------------------------------------------------------------------------

评分

参与人数 1威望 +8 收起 理由
月之精灵 + 8 您的贴子很精彩,希望能再次分享!

查看全部评分

PYG19周年生日快乐!

该用户从未签到

发表于 2010-5-26 12:50:24 | 显示全部楼层
就喜欢这种教程!支持一个!
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-9-9 09:51
  • 签到天数: 82 天

    [LV.6]常住居民II

    发表于 2010-5-26 22:43:52 | 显示全部楼层
    不错不错 跟着做一做 提高一下
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表