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 http://52pojie.cn/images/common/back.gif
咣当~我改下。。 回复 3# zaas
呵呵,不改也没关系.
页:
[1]