1、聪明宝宝健康成长指南算法分析 文/KYO 前面写过一些关于crackme的算法分析,一直没有涉及真正软件的破解。而现在那些共享软件在注册算法或者软件保护方面基本上都不弱,因此把大多数象我一样的菜鸟堵在了门外。近几天在我有空的时候找了一些共享软件尝试着分析,不想被我找到一个特别简单的,就是《聪明宝宝健康成长指南》,下载地址是 *************************************************************** 这里插播个广告,黑友们请无视,只是为朋友的网站能被搜索引擎收
2、录,多加点流量。 返利网,淘你喜欢,淘宝返利,淘宝返现购物。 *************************************************************** 好现在进入正题。下载安装完后,在“C:\Program Files\聪明宝宝健康成长指南”目录发现BB.exe就是主文件了。用PEID查看后得出壳是:ASPack 2.12 -> Alexey Solodovnikov,里面所用的加密算法有MD5。第一步就先脱壳吧。由于这个也不是什么加密壳,我也懒得手脱了,直接用Unpacker1.01.exe来脱吧。这个东东是看雪的Wulje写的
3、用来脱一些压缩壳还是比较方便的。如图1 图1 一般情况选择后面的 自动搜索OEP即可。完成后会在同目录下生成一个New_BB.exe。再用PEID加载可得知软件所用的编程语言是Borland Delphi 6.0 - 7.0。先打开程序看看界面是怎么样的吧。如图2 我随便输入了用户名kyo327注册码12345678,点注册后没有任何反应。先不管,直接用OD加载再用插件里的万能断点断吧。 程序断在了004cbc79处,先用F8粗略的走一遍来到下面代码处 004CBD46 /0F85 DD000000 JNZ New
4、BB.004CBE29 004CBD4C . |B2 01 MOV DL,1 004CBD4E . |A1 74B64300 MOV EAX,DWORD PTR DS:[43B674] 004CBD53 . |E8 1CFAF6FF CALL New_BB.0043B774 004CBD58 . |8945 EC MOV DWORD PTR SS:[EBP-14],EAX 004CBD5B . |33C0 XOR EAX,EAX 004CBD5D . |55 PUSH EBP 0
5、04CBD5E . |68 C7BD4C00 PUSH New_BB.004CBDC7 004CBD63 . |64:FF30 PUSH DWORD PTR FS:[EAX] 004CBD66 . |64:8920 MOV DWORD PTR FS:[EAX],ESP 004CBD69 . |BA 01000080 MOV EDX,80000001 004CBD6E . |8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] 004CBD71 . |E8 9EFAF6FF CALL New_
6、BB.0043B814 004CBD76 . |B1 01 MOV CL,1 004CBD78 . |BA D4BE4C00 MOV EDX,New_BB.004CBED4 ; ASCII "\Software\WinBB\" 在004CBD46处跳转是实现的,另外在004cbd78处注释里有这个\Software\WinBB\。尝试着把004CBD46处的JNZ改为JZ是可以爆破的。不过重新启动后会弹出错误的注册码。通过注册表HKEY_CURRENT_USER\Software\WinBB的键值 如图3 图3 可
7、以猜到虽然爆破成功。可软件每次启动会把图3中注册表的键值和正确的注册码做比对,如果注册码错误,则仍然不能成功注册。 看来还是老老实实分析算法吧。 不过从此也可得到算法的地方也就是从004cbc79到004cbd41. 首先看下面这一段 004CBC79 . 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C] ;用户名放入ebp-1c 004CBC7C . 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18] 004CBC7F . E8 F8CBF3FF CALL New_BB.004088
8、7C 004CBC84 . 837D E8 00 CMP DWORD PTR SS:[EBP-18],0 ;对比用户名是否为0,不然则跳向失败 004CBC88 . 75 0F JNZ SHORT New_BB.004CBC99 004CBC8A . B8 84BE4C00 MOV EAX,New_BB.004CBE84 004CBC8F . E8 F89BF6FF CALL New_BB.0043588C 004CBC94 . E9 90010000 JMP New_BB.004CBE29 004CBC99 >
9、 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24] 004CBC9C . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 004CBC9F . 8B80 08030000 MOV EAX,DWORD PTR DS:[EAX+308] 004CBCA5 . E8 8A7CF9FF CALL New_BB.00463934 004CBCAA . 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24] ;输入的假码放入ebp-24 004CBCAD
10、 . 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] 004CBCB0 . E8 C7CBF3FF CALL New_BB.0040887C 004CBCB5 . 837D E0 00 CMP DWORD PTR SS:[EBP-20],0 ;对比假玛是否为0,不然则跳向失败 004CBCB9 . 75 0F JNZ SHORT New_BB.004CBCCA 004CBCBB . B8 9CBE4C00 MOV EAX,New_BB.004CBE9C 004CBCC0 . E8
11、C79BF6FF CALL New_BB.0043588C 004CBCC5 . E9 5F010000 JMP New_BB.004CBE29 004CBCCA > 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28] 可以看到这一段也不是算法那一块,只是验证输入用户注册码不能为空。接着看下面 004CBCCA > \8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28] 004CBCCD . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 004
12、CBCD0 . 8B80 04030000 MOV EAX,DWORD PTR DS:[EAX+304] 004CBCD6 . E8 597CF9FF CALL New_BB.00463934 ;取用户名到ebp-28 004CBCDB . 8B45 D8 MOV EAX,DWORD PTR SS:[EBP-28] 004CBCDE . 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8] 004CBCE1 . E8 96CBF3FF CALL New_BB.0040887C 004CBCE6 .
13、 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C] 004CBCE9 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 004CBCEC . 8B80 08030000 MOV EAX,DWORD PTR DS:[EAX+308] 004CBCF2 . E8 3D7CF9FF CALL New_BB.00463934 ;取假码到ebp-2c 004CBCF7 . 8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C] 004CBCFA .
14、 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C] 004CBCFD . E8 7ACBF3FF CALL New_BB.0040887C 004CBD02 . 8D55 C4 LEA EDX,DWORD PTR SS:[EBP-3C] 004CBD05 . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] 004CBD08 E8 CFFBFFFF CALL New_BB.004CB8DC ;对用户名做MD5运算 004CBD0D . 8D45 C4
15、 LEA EAX,DWORD PTR SS:[EBP-3C] 004CBD10 . 8D55 C0 LEA EDX,DWORD PTR SS:[EBP-40] 004CBD13 . E8 38FCFFFF CALL New_BB.004CB950 ;MD5结果转换为ASCII 004CBD18 . 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-40] 004CBD1B . BA B4BE4C00 MOV EDX,New_BB.004CBEB4 004CBD20 . E8 5B87F3FF
16、CALL New_BB.00404480 ;连接md5(用户名)与聪明宝宝健康成长指南组成新的字符串 004CBD25 . 8B45 C0 MOV EAX,DWORD PTR SS:[EBP-40] 004CBD28 . 8D55 C4 LEA EDX,DWORD PTR SS:[EBP-3C] 004CBD2B . E8 ACFBFFFF CALL New_BB.004CB8DC ;对组成的新的字符串再次做MD5运算 004CBD30 . 8D45 C4 LEA EAX,DWORD PTR SS:[EBP-3C]
17、004CBD33 . 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] 004CBD36 . E8 15FCFFFF CALL New_BB.004CB950 004CBD3B . 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] 004CBD3E . 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] 004CBD41 . E8 7E88F3FF CALL New_BB.004045C4 ;对比输入的注册码和第2次MD5后的数 通
18、过上面的分析,可以简单把算法描述为: Sn=md5(md5(user)& 聪明宝宝健康成长指南) 这样的话我可以得到 用户名为:kyo327 注册码为:2f5db3f80b74af5c732f0a68213ab231 填上注册码再次重起后 如图4 可以看到软件上面没有那个“未注册版本”的字了,并且帮助下拉菜单也没有了注册的选项。那么就是成功注册了。 *************************************************************** 这里插播个广告,黑友们请无视,只是为朋友的网站能被搜索引擎收录,多加点流量。 返利网,淘你喜欢,淘宝返利,淘宝返现购物。 *************************************************************** 从上面的分析可以知道,这个软件的算法的确是太简单了。正好给我们这些菜鸟们一些自信,然后朝自己的目标不断努力吧。最后,如果你想再玩一遍请把注册表HKEY_CURRENT_USER\Software\WinBB的项删除。






