zaas 发表于 2010-6-22 11:00

XXXX日记 算法分析及一点感叹

本帖最后由 zaas 于 2010-6-22 11:17 编辑

【破文标题】XXXX日记 算法分析及一点感叹
【破文作者】zaas
【破解工具】OllyICE,PEiD v0.94
【破解平台】WinXP
【应用平台】WinXP/2000/2003/Vista
【软件性质】共享(收费)软件
【保护方式】注册码
【软件简介】国产软件,看得出作者是用心在写软件的,因此不提供下载。
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
查壳无壳。Borland Delphi 6.0 - 7.0编写。
下断很容易,无论Dede,字符串。。。均可。不说了。直接来到算法部分:
00676CBC/.55            push    ebp
00676CBD|.8BEC          mov   ebp, esp
00676CBF|.B9 0A000000   mov   ecx, 0A
00676CC4|>6A 00         /push    0
00676CC6|.6A 00         |push    0
00676CC8|.49            |dec   ecx
00676CC9|.^ 75 F9         \jnz   short 00676CC4
00676CCB|.51            push    ecx
00676CCC|.53            push    ebx
00676CCD|.56            push    esi
00676CCE|.8BD8          mov   ebx, eax
00676CD0|.33C0          xor   eax, eax
00676CD2|.55            push    ebp
00676CD3|.68 A66F6700   push    00676FA6
00676CD8|.64:FF30       push    dword ptr fs:
00676CDB|.64:8920       mov   dword ptr fs:, esp
00676CDE|.8D55 F8       lea   edx, dword ptr
00676CE1|.8B83 FC020000 mov   eax, dword ptr
00676CE7|.E8 500CE1FF   call    0048793C                         ;取出假码
00676CEC|.8B45 F8       mov   eax, dword ptr
00676CEF|.8D55 FC       lea   edx, dword ptr
00676CF2|.E8 7D2BD9FF   call    00409874
00676CF7|.8D4D E0       lea   ecx, dword ptr
00676CFA|.BA 02000000   mov   edx, 2
00676CFF|.8B45 FC       mov   eax, dword ptr
00676D02|.E8 0DAEDCFF   call    00441B14                         ;前两字符
00676D07|.8B45 E0       mov   eax, dword ptr
00676D0A|.8D55 E4       lea   edx, dword ptr
00676D0D|.E8 36FCFFFF   call    00676948
00676D12|.8D45 E4       lea   eax, dword ptr
00676D15|.8D55 F4       lea   edx, dword ptr
00676D18|.E8 9FFCFFFF   call    006769BC                         ;Md5之
00676D1D|.8B45 F4       mov   eax, dword ptr
00676D20|.50            push    eax
00676D21|.8D55 E4       lea   edx, dword ptr
00676D24|.B8 BC6F6700   mov   eax, 00676FBC                  ;68
00676D29|.E8 1AFCFFFF   call    00676948                         ;“68” 的MD5
00676D2E|.8D45 E4       lea   eax, dword ptr
00676D31|.8D55 DC       lea   edx, dword ptr
00676D34|.E8 83FCFFFF   call    006769BC
00676D39|.8B55 DC       mov   edx, dword ptr
00676D3C|.58            pop   eax
00676D3D|.E8 1EE0D8FF   call    00404D60                         ;前两字符的Md5和“68”的MD5比较
00676D42|.74 3F         je      short 00676D83                   ;不等跳死
00676D44|.6A 30         push    30
00676D46|.8D55 D8       lea   edx, dword ptr
00676D49|.A1 94D16800   mov   eax, dword ptr
00676D4E|.8B00          mov   eax, dword ptr
00676D50|.E8 5F1EE3FF   call    004A8BB4
00676D55|.8B45 D8       mov   eax, dword ptr
00676D58|.E8 B7E0D8FF   call    00404E14
00676D5D|.8BC8          mov   ecx, eax
00676D5F|.BA C06F6700   mov   edx, 00676FC0                  ;注册码有误
00676D64|.A1 94D16800   mov   eax, dword ptr
00676D69|.8B00          mov   eax, dword ptr
00676D6B|.E8 D024E3FF   call    004A9240
00676D70|.8B83 FC020000 mov   eax, dword ptr
00676D76|.8B10          mov   edx, dword ptr
00676D78|.FF92 C4000000 call    dword ptr
00676D7E|.E9 DB010000   jmp   00676F5E
00676D83|>8B45 FC       mov   eax, dword ptr          ;假码
00676D86|.E8 89DED8FF   call    00404C14
00676D8B|.83F8 0A       cmp   eax, 0A                        ;注册码长度10
00676D8E|.74 3F         je      short 00676DCF                   ;不等跳死
00676D90|.6A 30         push    30
00676D92|.8D55 D4       lea   edx, dword ptr
00676D95|.A1 94D16800   mov   eax, dword ptr
00676D9A|.8B00          mov   eax, dword ptr
00676D9C|.E8 131EE3FF   call    004A8BB4
00676DA1|.8B45 D4       mov   eax, dword ptr
00676DA4|.E8 6BE0D8FF   call    00404E14
00676DA9|.8BC8          mov   ecx, eax
00676DAB|.BA C06F6700   mov   edx, 00676FC0                  ;注册码有误
00676DB0|.A1 94D16800   mov   eax, dword ptr
00676DB5|.8B00          mov   eax, dword ptr
00676DB7|.E8 8424E3FF   call    004A9240
00676DBC|.8B83 FC020000 mov   eax, dword ptr
00676DC2|.8B10          mov   edx, dword ptr
00676DC4|.FF92 C4000000 call    dword ptr
00676DCA|.E9 8F010000   jmp   00676F5E
00676DCF|>8D55 C0       lea   edx, dword ptr
00676DD2|.A1 90F86800   mov   eax, dword ptr
00676DD7|.8B80 F8020000 mov   eax, dword ptr
00676DDD|.E8 5A0BE1FF   call    0048793C                         ;机器码
00676DE2|.8B45 C0       mov   eax, dword ptr
00676DE5|.E8 9631D9FF   call    00409F80                         ;机器码转数字
00676DEA|.8BF0          mov   esi, eax
00676DEC|.B8 E86F6700   mov   eax, 00676FE8                  ;20100602
00676DF1|.E8 8A31D9FF   call    00409F80                         ;20100602转数字
00676DF6|.03F0          add   esi, eax                         ;相加
00676DF8|.8BC6          mov   eax, esi
00676DFA|.8D55 C4       lea   edx, dword ptr
00676DFD|.E8 4230D9FF   call    00409E44                         ;转字符串
00676E02|.8B45 C4       mov   eax, dword ptr
00676E05|.8D4D C8       lea   ecx, dword ptr
00676E08|.BA 08000000   mov   edx, 8
00676E0D|.E8 02ADDCFF   call    00441B14
00676E12|.8B4D C8       mov   ecx, dword ptr
00676E15|.8D45 CC       lea   eax, dword ptr
00676E18|.BA BC6F6700   mov   edx, 00676FBC                  ;68
00676E1D|.E8 3EDED8FF   call    00404C60                         ;前缀“68”
00676E22|.8B45 CC       mov   eax, dword ptr           ;真码出现
00676E25|.8D55 E4       lea   edx, dword ptr
00676E28|.E8 1BFBFFFF   call    00676948
00676E2D|.8D45 E4       lea   eax, dword ptr
00676E30|.8D55 D0       lea   edx, dword ptr
00676E33|.E8 84FBFFFF   call    006769BC                         ;真码的MD5
00676E38|.8B45 D0       mov   eax, dword ptr
00676E3B|.50            push    eax
00676E3C|.8D55 E4       lea   edx, dword ptr
00676E3F|.8B45 FC       mov   eax, dword ptr
00676E42|.E8 01FBFFFF   call    00676948
00676E47|.8D45 E4       lea   eax, dword ptr
00676E4A|.8D55 BC       lea   edx, dword ptr
00676E4D|.E8 6AFBFFFF   call    006769BC                         ;假码的MD5
00676E52|.8B55 BC       mov   edx, dword ptr
00676E55|.58            pop   eax
00676E56|.E8 05DFD8FF   call    00404D60                         ;真假码MD5比较
00676E5B|.74 3F         je      short 00676E9C                   ;不等跳死
00676E5D|.6A 30         push    30
00676E5F|.8D55 B8       lea   edx, dword ptr
00676E62|.A1 94D16800   mov   eax, dword ptr
00676E67|.8B00          mov   eax, dword ptr
00676E69|.E8 461DE3FF   call    004A8BB4
00676E6E|.8B45 B8       mov   eax, dword ptr
00676E71|.E8 9EDFD8FF   call    00404E14
00676E76|.8BC8          mov   ecx, eax
00676E78|.BA C06F6700   mov   edx, 00676FC0                  ;注册码有误
00676E7D|.A1 94D16800   mov   eax, dword ptr
00676E82|.8B00          mov   eax, dword ptr
00676E84|.E8 B723E3FF   call    004A9240
00676E89|.8B83 FC020000 mov   eax, dword ptr
00676E8F|.8B10          mov   edx, dword ptr
00676E91|.FF92 C4000000 call    dword ptr
00676E97|.E9 C2000000   jmp   00676F5E
00676E9C|>A1 40CF6800   mov   eax, dword ptr
00676EA1|.8B00          mov   eax, dword ptr
00676EA3|.8B40 5C       mov   eax, dword ptr
00676EA6|.33D2          xor   edx, edx
00676EA8|.8B08          mov   ecx, dword ptr
00676EAA|.FF91 78010000 call    dword ptr
00676EB0|.8D55 E4       lea   edx, dword ptr
00676EB3|.8B45 FC       mov   eax, dword ptr          ;假码
00676EB6|.E8 8DFAFFFF   call    00676948
00676EBB|.8D45 E4       lea   eax, dword ptr
00676EBE|.8D55 AC       lea   edx, dword ptr
00676EC1|.E8 F6FAFFFF   call    006769BC                         ;假码MD5
00676EC6|.8B45 AC       mov   eax, dword ptr
00676EC9|.8D55 B0       lea   edx, dword ptr
00676ECC|.E8 5B2AD9FF   call    0040992C
00676ED1|.8B4D B0       mov   ecx, dword ptr
00676ED4|.8D45 B4       lea   eax, dword ptr
00676ED7|.BA FC6F6700   mov   edx, 00676FFC                  ;update xl set xl =
00676EDC|.E8 7FDDD8FF   call    00404C60                         ;连接
00676EE1|.8B45 B4       mov   eax, dword ptr
00676EE4|.50            push    eax
00676EE5|.A1 40CF6800   mov   eax, dword ptr
00676EEA|.8B00          mov   eax, dword ptr
00676EEC|.8B40 5C       mov   eax, dword ptr
00676EEF|.E8 303AFFFF   call    0066A924
00676EF4|.5A            pop   edx                              ;(initial cpu selection)
00676EF5|.8B08          mov   ecx, dword ptr
00676EF7|.FF51 2C       call    dword ptr                ;写入文件
00676EFA|.A1 40CF6800   mov   eax, dword ptr
00676EFF|.8B00          mov   eax, dword ptr
00676F01|.8B40 5C       mov   eax, dword ptr
00676F04|.E8 4339FFFF   call    0066A84C
00676F09|.33D2          xor   edx, edx
00676F0B|.8B83 F8020000 mov   eax, dword ptr
00676F11|.8B08          mov   ecx, dword ptr
00676F13|.FF51 64       call    dword ptr
00676F16|.33D2          xor   edx, edx
00676F18|.8B83 FC020000 mov   eax, dword ptr
00676F1E|.8B08          mov   ecx, dword ptr
00676F20|.FF51 64       call    dword ptr
00676F23|.33D2          xor   edx, edx
00676F25|.8B83 0C030000 mov   eax, dword ptr
00676F2B|.8B08          mov   ecx, dword ptr
00676F2D|.FF51 64       call    dword ptr
00676F30|.33D2          xor   edx, edx
00676F32|.8B83 10030000 mov   eax, dword ptr
00676F38|.8B08          mov   ecx, dword ptr
00676F3A|.FF51 64       call    dword ptr
00676F3D|.BA 18706700   mov   edx, 00677018                  ;注册版本,感谢你的支持!
00676F42|.8B83 14030000 mov   eax, dword ptr
00676F48|.E8 1F0AE1FF   call    0048796C
00676F4D|.B8 3C706700   mov   eax, 0067703C                  ;注册成功,感谢您的支持
00676F52|.E8 215FDCFF   call    0043CE78
00676F57|.8BC3          mov   eax, ebx
00676F59|.E8 9AE8E2FF   call    004A57F8

【算法总结】机器码和20100602相加,前边加上“68”就是注册码。
算法就这样了。简单到让人提不起兴趣写注册机。
【一点感叹】这个软件的算法其实根本不值得写一篇破文。只是有些话想说说。
一些国产软件作者的自我防护意识太差。看得出作者也想做一些自我保护,也想了一些办法。可软件保护方面的知识太少。
虽然使用了MD5算法,但Md5算法在这里根本就是摆设。如果要用MD5保护,至少不应该在软件里出现真码,然后求其MD5。
软件既然想分段验证,后半段至少不应该再去包含前半段。。。
最严重的是,看起来还在一直运算,其实中间过程中明码已经出现。。。
此外,爆破点太容易找到,字符串,dede。。。随便一个菜鸟都能搞定。。。
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
【后    记】已与软件作者联系,指出以上问题。期待软件的下一个版本。

Hmily 发表于 2010-6-22 11:06

百度了下文章中的扣扣号发现了是什么软件...

zaas 发表于 2010-6-22 11:17

百度了下文章中的扣扣号发现了是什么软件...
Hmily 发表于 2010-6-22 11:06 http://52pojie.cn/images/common/back.gif


    咣当~我改下。。

Hmily 发表于 2010-6-22 12:28

回复 3# zaas


呵呵,不改也没关系.
页: [1]
查看完整版本: XXXX日记 算法分析及一点感叹