资源描述
聪明宝宝健康成长指南算法分析
文/KYO
前面写过一些关于crackme的算法分析,一直没有涉及真正软件的破解。而现在那些共享软件在注册算法或者软件保护方面基本上都不弱,因此把大多数象我一样的菜鸟堵在了门外。近几天在我有空的时候找了一些共享软件尝试着分析,不想被我找到一个特别简单的,就是《聪明宝宝健康成长指南》,下载地址是
***************************************************************
这里插播个广告,黑友们请无视,只是为朋友的网站能被搜索引擎收录,多加点流量。
返利网,淘你喜欢,淘宝返利,淘宝返现购物。
***************************************************************
好现在进入正题。下载安装完后,在“C:\Program Files\聪明宝宝健康成长指南”目录发现BB.exe就是主文件了。用PEID查看后得出壳是:ASPack 2.12 -> Alexey Solodovnikov,里面所用的加密算法有MD5。第一步就先脱壳吧。由于这个也不是什么加密壳,我也懒得手脱了,直接用Unpacker1.01.exe来脱吧。这个东东是看雪的Wulje写的,用来脱一些压缩壳还是比较方便的。如图1
图1
一般情况选择后面的 自动搜索OEP即可。完成后会在同目录下生成一个New_BB.exe。再用PEID加载可得知软件所用的编程语言是Borland Delphi 6.0 - 7.0。先打开程序看看界面是怎么样的吧。如图2
我随便输入了用户名kyo327注册码12345678,点注册后没有任何反应。先不管,直接用OD加载再用插件里的万能断点断吧。
程序断在了004cbc79处,先用F8粗略的走一遍来到下面代码处
004CBD46 /0F85 DD000000 JNZ New_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
004CBD5E . |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_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
可以猜到虽然爆破成功。可软件每次启动会把图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.0040887C
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 > 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 . 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 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]
004CBCD0 . 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 . 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 . 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 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 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]
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后的数
通过上面的分析,可以简单把算法描述为:
Sn=md5(md5(user)& 聪明宝宝健康成长指南)
这样的话我可以得到
用户名为:kyo327
注册码为:2f5db3f80b74af5c732f0a68213ab231
填上注册码再次重起后 如图4
可以看到软件上面没有那个“未注册版本”的字了,并且帮助下拉菜单也没有了注册的选项。那么就是成功注册了。
***************************************************************
这里插播个广告,黑友们请无视,只是为朋友的网站能被搜索引擎收录,多加点流量。
返利网,淘你喜欢,淘宝返利,淘宝返现购物。
***************************************************************
从上面的分析可以知道,这个软件的算法的确是太简单了。正好给我们这些菜鸟们一些自信,然后朝自己的目标不断努力吧。最后,如果你想再玩一遍请把注册表HKEY_CURRENT_USER\Software\WinBB的项删除。
展开阅读全文