首页
社区
课程
招聘
[原创]一个CM算法的追踪,成功做出注册机。
发表于: 2009-10-19 19:06 6617

[原创]一个CM算法的追踪,成功做出注册机。

2009-10-19 19:06
6617

这个CM很简单,爆破或者明码比较都很EASY。

其实算法也很简单,就是有点诡异。

开始了。前面都很简单,主要是后面分析算法。

先用PEid查壳

delphi 3.0,没壳
试运行一下,随便输入

嘿嘿,有线索。
OD载入,【查找所有参考字符串】
找到
ASCII "Try Again!"
ASCII "Sorry , The serial is incorect !"
双击,来到这里


在它的上面一些就是算法了
我贴出来,注释是我的分析。

0042F9B5  |.  C705 50174300> MOV DWORD PTR DS:[431750],29                       ;看似没什么用..
0042F9BF  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
0042F9C2 >|.  8B83 DC010000 MOV EAX,DWORD PTR DS:[EBX+1DC]                   ;  Edit1
0042F9C8 >|.  E8 8BB0FEFF   CALL CM.0041AA58                         ;  getText -- 取Name
0042F9CD  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  Name -> EAX
0042F9D0  |.  E8 DB40FDFF   CALL CM.00403AB0                         ;  检查是否为空
0042F9D5  |.  A3 6C174300   MOV DWORD PTR DS:[43176C],EAX
0042F9DA  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
0042F9DD >|.  8B83 DC010000 MOV EAX,DWORD PTR DS:[EBX+1DC]                  ;  Edit1
0042F9E3 >|.  E8 70B0FEFF   CALL CM.0041AA58                         ;  getText -- 取Name(同上)
0042F9E8  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  Name -> EAX
0042F9EB  |.  0FB600        MOVZX EAX,BYTE PTR DS:[EAX]              ;  [COLOR="Red"]第一个字符 -> EAX[/COLOR]
0042F9EE  |.  8BF0          MOV ESI,EAX
0042F9F0  |.  C1E6 03       SHL ESI,3                                ;  逻辑左移3位 == 乘8
0042F9F3  |.  2BF0          SUB ESI,EAX                              ;  减运算
0042F9F5  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
0042F9F8 >|.  8B83 DC010000 MOV EAX,DWORD PTR DS:[EBX+1DC]                  ;  Edit1
0042F9FE >|.  E8 55B0FEFF   CALL CM.0041AA58                         ;  getText -- 取Name(同上)
0042FA03  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]
0042FA06  |.  0FB640 01     MOVZX EAX,BYTE PTR DS:[EAX+1]            ; [COLOR="Red"] 第二个字符 -> EAX[/COLOR]
0042FA0A  |.  C1E0 04       SHL EAX,4                                ;  左移四位 == 乘16
0042FA0D  |.  03F0          ADD ESI,EAX                              ;  [COLOR="DarkRed"]ESI是第1个字符的处理结果;EAX是第2个的。ADD起来[/COLOR]
0042FA0F  |.  8935 54174300 MOV DWORD PTR DS:[431754],ESI
0042FA15  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
0042FA18 >|.  8B83 DC010000 MOV EAX,DWORD PTR DS:[EBX+1DC]                   ;  Edit1
0042FA1E >|.  E8 35B0FEFF   CALL CM.0041AA58                         ;  getText -- 取Name(同上)
0042FA23  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
0042FA26  |.  0FB640 03     MOVZX EAX,BYTE PTR DS:[EAX+3]            ;  [COLOR="Red"]第四个字符 -> EAX[/COLOR]
0042FA2A  |.  6BF0 0B       IMUL ESI,EAX,0B                          ;  乘11 , 结果放在ESI中
0042FA2D  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
0042FA30 >|.  8B83 DC010000 MOV EAX,DWORD PTR DS:[EBX+1DC]                  ;  Edit1
0042FA36 >|.  E8 1DB0FEFF   CALL CM.0041AA58                         ;  getText -- 取Name(同上)
0042FA3B  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]
0042FA3E  |.  0FB640 02     MOVZX EAX,BYTE PTR DS:[EAX+2]            ; [COLOR="Red"] 第三个字符 -> EAX[/COLOR]
0042FA42  |.  6BC0 0E       IMUL EAX,EAX,0E                          ;  乘以14
0042FA45  |.  03F0          ADD ESI,EAX                              ;  ADD到ESI中
0042FA47  |.  8935 58174300 MOV DWORD PTR DS:[431758],ESI            ; [COLOR="Blue"] 四个字符的处理结果储存起来[/COLOR]
0042FA4D  |.  A1 6C174300   MOV EAX,DWORD PTR DS:[43176C]
0042FA52  |.  E8 D96EFDFF   CALL CM.00406930                         ;  计算Name的位数
0042FA57  |.  83F8 04       CMP EAX,4                                ;  和4比较
0042FA5A  |.  7D 1D         JGE SHORT CM.0042FA79                    ;  大于等于则跳;小于则出错
0042FA5C  |.  6A 00         PUSH 0
0042FA5E  |.  B9 74FB4200   MOV ECX,CM.0042FB74                      ;  ASCII "Try Again!"
0042FA63  |.  BA 80FB4200   MOV EDX,CM.0042FB80                      ;  ASCII "Sorry , The serial is incorect !"
0042FA68  |.  A1 480A4300   MOV EAX,DWORD PTR DS:[430A48]
0042FA6D  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
0042FA6F  |.  E8 FCA6FFFF   CALL CM.0042A170
0042FA74  |.  E9 BE000000   JMP CM.0042FB37
0042FA79  |>  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]                      ;正常应该是跳到这里



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (23)
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错啊,高手都是从这步做起的
2009-10-19 19:25
0
雪    币: 74
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
谢谢你

你也加油啊
2009-10-20 08:29
0
雪    币: 505
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错的,学习一下
2009-10-20 08:34
0
雪    币: 431
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
呵呵 支持 继续努力~~~
2009-10-20 12:30
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个看不懂!!!!!!!
2010-5-7 13:02
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
很详细,学习了
2010-5-7 14:55
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
支持下,这个我看懂了,感动,应该多一些这些帖子,让我们不知道怎么起步的人学习
2010-5-7 18:48
0
雪    币: 355
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习一下
2010-5-7 21:30
0
雪    币: 288
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
本人菜鸟,第一次跟踪CM算法,请多多指教。

我下下来一看还有另一个对话框,试着搞定它。

先输入楼主的注册机生成的序列号,失败。使用OD,定位到关键代码:
0042F4BC  |.  8D55 F0       lea     edx, dword ptr [ebp-10]
0042F4BF  |.  8B83 E0010000 mov     eax, dword ptr [ebx+1E0]
0042F4C5  |.  E8 8EB5FEFF   call    0041AA58
0042F4CA  |.  8B45 F0       mov     eax, dword ptr [ebp-10];用户输入的序列号
0042F4CD  |.  8B55 F4       mov     edx, dword ptr [ebp-C];Hello Dude!
[COLOR="Red"]0042F4D0  |.  E8 2745FDFF   call    004039FC[/COLOR]
0042F4D5  |.  75 1A         jnz     short 0042F4F1
0042F4D7  |.  6A 00         push    0
0042F4D9  |.  B9 64F54200   mov     ecx, 0042F564                    ;  ASCII "Congratz!"
0042F4DE  |.  BA 70F54200   mov     edx, 0042F570                    ;  ASCII "God Job dude !! =)"

跟了半天,原来 call    004039FC是判断输入的序列号是否等于Hello Dude!,等于则成功。遂作罢,于是跟踪楼主所破的这个对话框。先不看,搞定后和楼主对照。
先爆破,成功,此程序爆破确实很简单,然后跟踪算法,跟了半天才找到关键代码,其余都是糊弄人的。关键代码如下:
0042FA87  |.  8B45 F0       mov     eax, dword ptr [ebp-10]
0042FA8A  |.  0FB600        movzx   eax, byte ptr [eax]
0042FA8D  |.  F72D 50174300 imul    dword ptr [431750]
0042FA93  |.  A3 50174300   mov     dword ptr [431750], eax
0042FA98  |.  A1 50174300   mov     eax, dword ptr [431750]
0042FA9D  |.  0105 50174300 add     dword ptr [431750], eax

其实就是计算:0x29*输入的第一个字节*2,然后把它转化为字符串,相当于C中的sprintf(tmp,"%d", value)。
对照楼主的,基本吻合;但不大明白楼主的注册机,为什么要强迫用户输入多于3个字节的串。

一直用C、C++,第一次跟踪delphi的程序,还真不习惯,调用函数传递参数,怎么不压栈呢。
2010-5-8 02:16
0
雪    币: 281
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
呵呵····不错·····
2010-5-8 21:34
0
雪    币: 288
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
刚才看了一下CCDebuger老大的OD教程,OllyDBG 入门系列(二)-字串参考(http://bbs.pediy.com/showthread.php?s=&threadid=21308),那个例子中判断字符串相等的算法竟然与本文的例子判断字符串相同的算法(0042F4D0  |.  E8 2745FDFF   call    004039FC)非常的相似。老大分析的非常详细!
2010-5-9 00:39
0
雪    币: 656
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
ls也是有精华的人
2010-5-9 01:44
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
开始有点感觉了
2010-5-9 10:37
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
这个,一定要顶..连我这么菜的小菜都看出点门道道来了
2010-5-13 09:57
0
雪    币: 3
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
什么时候才能转正呢
2010-5-13 10:44
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
顶哈顶哈生生世世
2010-5-16 09:36
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢分享 学习了。
2010-5-20 00:17
0
雪    币: 6270
活跃值: (3335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
看到这篇贴子,我顿时热泪盈眶!!!

因为这里面的CrackMe就是我人生中接触到的第一个CrackMe!!!

当年我跟着教程一步一步学着爆破它的情景历历在目!

哥现在心情很激动
2010-5-21 17:04
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
楼主太厉害啦,向楼主学习!
2010-5-26 18:21
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
初学者请教:

0042F9DD >|.  8B83 DC010000 MOV EAX,DWORD PTR DS:[EBX+1DC]                  ;  Edit1   怎么知道是edit1  或是其它的选项呢??
0042F9E3 >|.  E8 70B0FEFF   CALL CM.0041AA58                         ;  getText -- 取Name(同上)  怎么知道是取注册用户名? 如果注册用户名有两个以上的如用户名,地址电话,机器码这样的怎么判断?
0042F9E8  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  Name -> EAX         
0042F9EB  |.  0FB600        MOVZX EAX,BYTE PTR DS:[EAX]              ;  第一个字符 -> EAX              

谢谢
2010-6-1 09:13
0
雪    币: 129
活跃值: (333)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xed
22
不错
过来支持 你一下

..
2010-6-1 10:29
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
恩     不错   学习了
2010-6-1 13:13
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
小有成就啊,恭喜!
2010-6-1 14:29
0
游客
登录 | 注册 方可回帖
返回
//