首页
社区
课程
招聘
CRACKME分析(入门级的KEYFILE适合新手)
发表于: 2006-3-19 11:56 8071

CRACKME分析(入门级的KEYFILE适合新手)

2006-3-19 11:56
8071

【破文标题】CRACKME分析
【破文作者】逍遥风
【作者邮箱】tc-xb@163.com
【破解工具】WINHEX OD
【破解平台】WINXP
【破解声明】入门级的KEYFILE
------------------------------------------------------------------------
1)先用WINHEX等工具新建KEY文件(任意的)。
字节数少一些这样分析起来比较方便,我字节数定的是4
内容00000000:11  12  13  14  
把内容记住,随便起个名字。开始下一步。
2)用OD载入这个CRACKME,CTRL+N找到READFILE,发现有两处在第一处下断。
重新载入程序后,打开刚才的KEY文件,程序中断。
来到这里:
004044E8  /$  53            PUSH EBX                                 ;  记住这里
004044E9  |.  8BD8          MOV EBX,EAX
004044EB  |.  8B4B 04       MOV ECX,DWORD PTR DS:[EBX+4]
004044EE  |.  81E9 B1D70000 SUB ECX,0D7B1
004044F4  |.  74 05         JE SHORT echap542.004044FB
004044F6  |.  83E9 02       SUB ECX,2
004044F9  |.  75 29         JNZ SHORT echap542.00404524
004044FB  |>  6A 00         PUSH 0
004044FD  |.  8BC4          MOV EAX,ESP
004044FF  |.  6A 00         PUSH 0                                   ; /pOverlapped = NULL
00404501  |.  50            PUSH EAX                                 ; |pBytesRead
00404502  |.  FF73 08       PUSH DWORD PTR DS:[EBX+8]                ; |BytesToRead
00404505  |.  52            PUSH EDX                                 ; |Buffer
00404506  |.  FF33          PUSH DWORD PTR DS:[EBX]                  ; |hFile
00404508  |.  E8 2BCCFFFF   CALL <JMP.&kernel32.ReadFile>            ; \ReadFile
0040450D  |.  5A            POP EDX
0040450E  |.  48            DEC EAX
0040450F  |.  75 07         JNZ SHORT echap542.00404518
00404511  |.  3B53 08       CMP EDX,DWORD PTR DS:[EBX+8]
00404514  |.  75 15         JNZ SHORT echap542.0040452B
00404516  |>  5B            POP EBX
00404517  |.  C3            RETN
现在关键的位置已经找到了,为了好好分析一下它,取消掉刚才的断点,在004044E8处重新下断。
3)下断后重新载入程序,打开文件,中断。
F8一路向下,走到00404517 处的RETN时。
来到了这里。。。
00429DA3   .  E8 40A7FDFF   CALL echap542.004044E8                   ;  开始读KEY文件的内容
00429DA8   .  E8 6B88FDFF   CALL echap542.00402618
00429DAD   .  33C0          XOR EAX,EAX
00429DAF   .  8A45 FF       MOV AL,BYTE PTR SS:[EBP-1]               ;  取KEY里的每个字节的值。
00429DB2   .  03D8          ADD EBX,EAX                              ;  与前一次取得的内容相加
00429DB4   >  8D85 B0FEFFFF LEA EAX,DWORD PTR SS:[EBP-150]
00429DBA   .  E8 D5A6FDFF   CALL echap542.00404494
00429DBF   .  E8 5488FDFF   CALL echap542.00402618
00429DC4   .  84C0          TEST AL,AL                               ;  计算完了吗
00429DC6   .^ 74 D2         JE SHORT echap542.00429D9A               ;  没有就继续,计算的次数就是字节数
00429DC8   .  8D85 B0FEFFFF LEA EAX,DWORD PTR SS:[EBP-150]
00429DCE   .  E8 85A6FDFF   CALL echap542.00404458
00429DD3   .  E8 4088FDFF   CALL echap542.00402618
00429DD8   .  81FB A9200000 CMP EBX,20A9                             ;  计算的结果与20A9比较
00429DDE   .  75 0E         JNZ SHORT echap542.00429DEE              ;  不相等就失败
00429DE0   .  BA 4C9E4200   MOV EDX,echap542.00429E4C                ;  status: registered - well done
00429DE5   .  8BC6          MOV EAX,ESI
00429DE7   .  E8 5CEEFEFF   CALL echap542.00418C48
00429DEC   .  EB 0C         JMP SHORT echap542.00429DFA
00429DEE   >  BA 2C9E4200   MOV EDX,echap542.00429E2C                ;  status: unregistered
00429DF3   .  8BC6          MOV EAX,ESI
00429DF5   .  E8 4EEEFEFF   CALL echap542.00418C48
现在结果很明显,KEY文件里的内容加起来的和要等于20A9。
满足条件组和有很多种。
例如:74*48+9=20A9(16进制)
再次用WINHEX新建一个文件。字节应为73。。。。。。(48的十进制为72,在加上一个09。所以为73字节)
内容
00000010:74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74
00000020:74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74
00000030:74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74
00000040:74 74 74 74 74 74 74 74 09
保存后,再打开新的KEY,显示status: registered - well done

----------------------------------------------------------------------
一点心得:
在建立KEY时,字节数少一些可以减少分析的工作量。
KEY内容我选的是11 12 13 14每一次计算都取不一样且有规律的值,这样也可以加快分析的效率。不过具体问题还要具体对待.
过程和结果都很简单。适合和我一样的菜鸟.
----------------------------------------------------------------------


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (12)
雪    币: 222
活跃值: (100)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
顶下

问个问题:KEY文件一般开始写假的都是这么写的吗?

还有:
就是是否可以这样,我直接去“搜索/查看参考文本”,直接通过分析字符串来找到判别的地方,
毕竟往上第一个跳转
JNZ SHORT echap542.00429DEE              
而它的判断是:CMP EBX,20A9
而一般读入数据前基本上是通过EAX,所以发现有清零就可以判定,毕竟在
XOR EAX,EAX
和CMP EBX,20A9 之间有用到了EBX(ADD EBX,EAX)
所以我就在那附近设了断点

问题来了
是否断点只是为了调试的容易,至于如何找,如何断都不会有太大的影响,换句话说:就是“断点无定点”?还请大虾指教
2006-3-19 17:16
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
不知第一个ReadFile起何作用?
2006-3-19 18:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哪个ReadFile为在keyfile中读一个字节的数据
2006-3-20 13:56
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
5
最初由 rockandtcl 发布
顶下

问个问题:KEY文件一般开始写假的都是这么写的吗?

还有:
........

这种方式我只敢说是一种比较普遍的方式,不同的KEYFILE在读写方式上很有可能不一样。
我认为根据不同的目的下断点的地方是不确定的
例如,只找注册码的话在算法结束的地方或是注册码比较CALL附近的地方下断就行了。要追算法的话那就得在算法开始的地方下断了。
2006-3-20 16:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
顶一个!晕 回复帖子也有 字数限制啊......还有对了 看雪 论坛老出问题 我觉得是因为访问时候出的问题我都遇到 n次了 .......希望您们能 改进啊....
2006-3-20 16:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
非常感谢共享你的文章,对我这个新手来说,能看到这样的文章,是非常的好的哦!!!希望大家以后多多照顾!
2006-3-21 09:08
0
雪    币: 183
活跃值: (563)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
8
强悍。。。。。。。
2006-4-15 10:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
恩,很好的东西.很适合新手,支持下.谢谢
2006-4-15 16:47
0
雪    币: 249
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
LZ是不是附件不对啊,怎么断下来不对呢
2006-5-21 14:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我连这个都不明白是在说什么 怎么办,我很想学的
2006-5-21 18:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
下下来研究一下。
2006-5-24 17:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
有点不太明白,能不能再详细点
2006-5-24 18:12
0
游客
登录 | 注册 方可回帖
返回
//