一字节爆破QQ2009密码监控器6.6,附其它方法。
最近闲着没事,就试着在天空软件站随便下了个软件练一下手,本人也是新手。希望和大家一起交流,一起学习。软件地址 :http://shareware.skycn.com/soft/27680.htm好进入正题。首先用PEID查壳,无壳是用VC写的东西,心中窃喜,少了好多麻烦,
OD载入,记得一定要隐藏OD,我看了一下,里面有反调试代码。
F9直接运行一次,点软件注册,会提示注册码和订单号,输入后确定,提示重启验证,说明是重启验证类的,无非就是写文件或注册表了。
Ctrl+F2重新载入,右键查找当前模块中的名称,会显示出所有调用API,发现有名称位于 QQ2009密, 条目 159
地址=0043829C
区段=.rdata
类型=输入 (已知)
名称=KERNEL32.GetProfileStringAGetProfileStringA这个函数,是关键了,用BP GetProfileStringA下断,然后按F9两次查看堆栈处0012F1CC 0040D02C/CALL 到 GetProfileStringA 来自 QQ2009密.0040D02A
0012F1D0 02236E98|Section = "DDLook"
0012F1D4 00447464|Key = "notetext"
0012F1D8 00449834|Default = ""
0012F1DC 0012F1F0|ReturnBuffer = 0012F1F0
0012F1E0 00000100\BufSize = 100 (256.)没有文件名说明是读写的win.ini文件位于c:\windows中,打开这个文件查看尾部
C:\WINDOWS\system32\ddinfo.db=1
version=1021
auto=0
notetext=manbug
noteid=123123
update=0取消断点,F9直接运行后,点击设置登陆密码会提示“只有注册用户才能设置密码”,这就是关键了点确定后,用OD查找字符串。Ultra String Reference, 条目 214
Address=00409852
Disassembly=push offset <aVSZSI>
Text String=只有注册用户才能设置登录密码!双击此行会来到代码处00409827 . /0F84 AF000000 je <loc_4098DC>
0040982D . |8D4C24 6C lea ecx, dword ptr
00409831 . |E8 3A350000 call <sub_40CD70>
00409836 . |68 E06E4400 push offset <aVSS> ;未注册提示
0040983B . |8D8C24 040100>lea ecx, dword ptr
00409842 . |C78424 140100>mov dword ptr , 0
0040984D . |E8 F6DD0100 call <CString::operator=(char const *>
00409852 . |68 D0704400 push offset <aVSZSI> ;只有注册用户才能设置登录密码!
00409857 . |8D8C24 080100>lea ecx, dword ptr
0040985E . |E8 E5DD0100 call <CString::operator=(char const *>
00409863 . |8D4C24 68 lea ecx, dword ptr
00409867 . |E8 A82F0200 call <CDialog::DoModal(void)>
0040986C . |8D8C24 040100>lea ecx, dword ptr 看到代码上面的je没有,这就是关键点,当然改此处是没有作用的,我们继续向上看。00409800 .64:A1 0000000>mov eax, dword ptr fs: 大家可以在这里下断分析
00409806 .6A FF push -1
00409808 .68 B7604300 push <unknown_libname_159>
0040980D .50 push eax
0040980E .A1 E4974400 mov eax, dword ptr [<dword_4497E4>] 将4497E4的值送eax,那么4497e4就是关键点了,估计是个全局变量或静态变量了
00409813 .64:8925 00000>mov dword ptr fs:, esp
0040981A .81EC 04010000 sub esp, 104
00409820 .85C0 test eax, eax 这是比较eax是否为0,如果为0就已经注册了否则未注册
00409822 .56 push esi
00409823 .8BF1 mov esi, ecx
00409825 .6A 00 push 0
00409827 .0F84 AF000000 je <loc_4098DC>
0040982D .8D4C24 6C lea ecx, dword ptr
00409831 .E8 3A350000 call <sub_40CD70>
00409836 .68 E06E4400 push offset <aVSS> ;未注册提示
0040983B .8D8C24 040100>lea ecx, dword ptr
00409842 .C78424 140100>mov dword ptr , 0
0040984D .E8 F6DD0100 call <CString::operator=(char const *>
00409852 .68 D0704400 push offset <aVSZSI> ;只有注册用户才能设置登录密码!我们直接用命令 d 4497E4 会看到值为02,在此处下硬件访问断点,删除以前所有断点。Ctrl+F2重新载入程序,F9运行程序,发生硬件中断0040CEE6|.C746 14 02000>mov dword ptr , 2 此处为给 4497e4赋值2 只要将2直接改为0就算爆破了
0040CEED|.E8 56A70100 call <CString::operator=(char const *>我也跟了他的注册算法,很简单的,大家可以跟进去看一下。注册码是本地验证然后网络验证的。00407B27|.B9 D0974400 mov ecx, offset <unk_4497D0>
00407B2C|.E8 DF560000 call <算法部分。。。> ;这里面就是算法了,跟进
00407B31|.A1 28984400 mov eax, dword ptr [<dword_449828>]其实还有一种不用爆破的方法更为简单,当然就要用到算法了,我已经算出来了一组:注册码:man5Rx3hG3aG
订单号:123'or'='or'注册码是可以算出来的,单是订单号是服务器上的。其实如果知道注入的朋友一定会对'or'='or'不陌生吧。呵呵,因为我找到了他的网站有注入漏洞,所以。。。嘿嘿
上面的注册码和订单号应该哪里都可以用吧,没有机器限制的。
归纳一下这次破解过程:
1.这个程序有一定的反调试能力,所以没有加壳,但是现在一些反调试对于OD N多牛人写的插件来说的话约等于无了。
2.软件作者就用一个全局变量来判断软件是否注册,实在是有点失策,写了那多反调试代码和算法。为什么能一字节破解呢?唉。
3.作为一个共享软件,服务器的判断地址居然还有注入漏洞,实在不该。
好了,就写到这了!本文目的在于交流,请不要用这个软件用于非法用途! 进来学习下, 不错哈,楼主加油! 支持一下,今天上午就玩的这个软件/:017 好像有人求这个的破解呢/:014 刚刚才看到一个帖子 呵呵,。,。不错,,又学到新知识了 楼主对API真的很熟悉,佩服 学习一下楼主的方法,多谢分享。 水平真高,最需要这样详细有破文。感谢 真牛,向你学习,什么时候也把算法经我们分析一下啊。
页:
[1]
2