好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 llight 于 2009-8-30 19:06 编辑
【文章标题】: 破解“搜搜问问刷分器”
【文章作者】: Mr.vit
【作者邮箱】: llight@yahoo.cn
【下载地址】: 自己搜索下载
【保护方式】: 壳+网络验证
【使用工具】: OD FastScanner
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
昨天在论坛里看到一位兄弟发了这样一个程序,我也经常去问问的,想赚点分,于是想到了破解
因为是第一次写破解,写得不好,大家见谅!
FastScanner查壳如下:VMProtect 1.70.4 -> *Sign by phpbb3
PEID查不出来,也许是userdb.txt太古老的缘故
软件是用VB写的
分两部分,一是追码,二是网络验证(这里感谢mantoou 提出来,中午匆匆破解一下,发现还没有去除网络验证部分,后天去外地工作了,所以忙着准备)
追码:
首先隐藏一下OD,然后载入程序
00470585 68 BA7122AE push AE2271BA
0047058A E8 CB080000 call 搜搜问问.00470E5A
0047058F 88C0 mov al,al
00470591 0F9CC0 setl al
00470594 AC lods byte ptr ds:[esi]
00470595 60 pushad
00470596 FEC8 dec al
00470598 38DA cmp dl,bl
0047059A C70424 1C7E3835 mov dword ptr ss:[esp],35387E1C
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Shift+F9,这样程序就跑起来了,注册对话框出现,因为是VB程序嘛,所以在OD中下bp rtcMsgBox这个断点
这是我的机器码:EE3C913F66873BF0
注册码我随便填写:0123456789
点注册后,程序断在
7351C5F3 m> 55 push ebp
7351C5F4 8BEC mov ebp,esp
7351C5F6 83EC 4C sub esp,4C
7351C5F9 8B4D 14 mov ecx,dword ptr ss:[ebp+14]
7351C5FC 53 push ebx
7351C5FD 56 push esi
7351C5FE 57 push edi
7351C5FF 66:8339 0A cmp word ptr ds:[ecx],0A
7351C603 B8 04000280 mov eax,80020004
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
按ALT+F9,注册错误提示出现了,点确定
00446282 8D4D BC lea ecx,dword ptr ss:[ebp-44]
00446285 6A 10 push 10
00446287 51 push ecx
00446288 FF15 B4104000 call dword ptr ds:[4010B4] ; msvbvm60.rtcMsgBox
0044628E 8D55 8C lea edx,dword ptr ss:[ebp-74] ; 来了到这里
00446291 8D45 9C lea eax,dword ptr ss:[ebp-64]
00446294 52 push edx
。。。。。。。。。。。。。。。。。。。。。。。。。
一直向上找,找到这一段的段首
00445FC0 55 push ebp ; 这就是段首
00445FC1 8BEC mov ebp,esp
00445FC3 83EC 0C sub esp,0C
00445FC6 68 762E4000 push 搜搜问问.00402E76 ; jmp 到
00445FCB 64:A1 00000000 mov eax,dword ptr fs:[0]
00445FD1 50 push eax
00445FD2 64:8925 00000000 mov dword ptr fs:[0],esp
00445FD9 81EC C4000000 sub esp,0C4
00445FDF 53 push ebx
00445FE0 56 push esi
00445FE1 57 push edi
00445FE2 8965 F4 mov dword ptr ss:[ebp-C],esp
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
把刚才的rtcMsgBox断点删除,在断首下一个硬件执行断点(右击--断点--设置硬件执行断点)
然后CTRL+F2,重新载入程序,SHIFT+F9,在出现的对话框中,随便输入出注册码,然后程序就断在刚才设置断点的地方了
00445FC0 55 push ebp ; 断在这里
00445FC1 8BEC mov ebp,esp
00445FC3 83EC 0C sub esp,0C
00445FC6 68 762E4000 push 搜搜问问.00402E76 ; jmp 到
00445FCB 64:A1 00000000 mov eax,dword ptr fs:[0]
00445FD1 50 push eax
00445FD2 64:8925 00000000 mov dword ptr fs:[0],esp
00445FD9 81EC C4000000 sub esp,0C4
00445FDF 53 push ebx
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
接下来就是F8单步跟踪
00446224 F7DB neg ebx
00446226 FF15 AC124000 call dword ptr ds:[4012AC] ; msvbvm60.__vbaFreeStr
0044622C 8D4D D0 lea ecx,dword ptr ss:[ebp-30]
0044622F FF15 A8124000 call dword ptr ds:[4012A8] ; msvbvm60.__vbaFreeObj
00446235 66:85DB test bx,bx
00446238 74 74 je short 搜搜问问.004462AE ; 这里的跳一定要实现,不然完蛋
0044623A B9 0A000000 mov ecx,0A
0044623F B8 04000280 mov eax,80020004
00446244 894D 8C mov dword ptr ss:[ebp-74],ecx
00446247 894D 9C mov dword ptr ss:[ebp-64],ecx
0044624A 894D AC mov dword ptr ss:[ebp-54],ecx
0044624D 8D95 7CFFFFFF lea edx,dword ptr ss:[ebp-84]
00446253 8D4D BC lea ecx,dword ptr ss:[ebp-44]
00446256 8945 94 mov dword ptr ss:[ebp-6C],eax
00446259 8945 A4 mov dword ptr ss:[ebp-5C],eax
0044625C 8945 B4 mov dword ptr ss:[ebp-4C],eax
0044625F C745 84 E8F14000 mov dword ptr ss:[ebp-7C],搜搜问问.0040F1E8
00446266 C785 7CFFFFFF 080000>mov dword ptr ss:[ebp-84],8
00446270 FF15 4C124000 call dword ptr ds:[40124C] ; msvbvm60.__vbaVarDup
00446276 8D4D 8C lea ecx,dword ptr ss:[ebp-74]
00446279 8D55 9C lea edx,dword ptr ss:[ebp-64]
0044627C 51 push ecx
0044627D 8D45 AC lea eax,dword ptr ss:[ebp-54]
00446280 52 push edx
00446281 50 push eax
00446282 8D4D BC lea ecx,dword ptr ss:[ebp-44]
00446285 6A 10 push 10
00446287 51 push ecx
00446288 FF15 B4104000 call dword ptr ds:[4010B4] ; msvbvm60.rtcMsgBox
0044628E 8D55 8C lea edx,dword ptr ss:[ebp-74] ; 来了到这里
00446291 8D45 9C lea eax,dword ptr ss:[ebp-64]
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
上面的那个跳一定要实现,不然注册错误的提示会出现
继续单步跟踪
00446348 FFD7 call edi
0044634A 8D55 E4 lea edx,dword ptr ss:[ebp-1C]
0044634D 52 push edx
0044634E E8 4D2E0000 call 搜搜问问.004491A0
00446353 8BD0 mov edx,eax ; 这里真正的注册码出现了
00446355 8D4D E4 lea ecx,dword ptr ss:[ebp-1C]
00446358 FFD7 call edi
0044635A 8B06 mov eax,dword ptr ds:[esi]
0044635C 56 push esi
0044635D FF90 0C030000 call dword ptr ds:[eax+30C]
00446363 8D4D D0 lea ecx,dword ptr ss:[ebp-30]
00446366 50 push eax
00446367 51 push ecx
00446368 FF15 AC104000 call dword ptr ds:[4010AC] ; msvbvm60.__vbaObjSet
0044636E 8BD8 mov ebx,eax
00446370 8D45 D8 lea eax,dword ptr ss:[ebp-28]
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
我的注册码为:9B5BC5FB22D27D2C
继续单步,再看看相关的信息
0044639C 52 push edx
0044639D FF15 FC104000 call dword ptr ds:[4010FC] ; msvbvm60.__vbaStrCmp
004463A3 8BD8 mov ebx,eax
004463A5 8D4D D8 lea ecx,dword ptr ss:[ebp-28]
004463A8 F7DB neg ebx
004463AA 1BDB sbb ebx,ebx
004463AC F7DB neg ebx
004463AE F7DB neg ebx
004463B0 FF15 AC124000 call dword ptr ds:[4012AC] ; msvbvm60.__vbaFreeStr
004463B6 8D4D D0 lea ecx,dword ptr ss:[ebp-30]
004463B9 FF15 A8124000 call dword ptr ds:[4012A8] ; msvbvm60.__vbaFreeObj
004463BF 66:85DB test bx,bx
004463C2 74 74 je short 搜搜问问.00446438 ; 这个跳转也让它实现,不然完蛋
004463C4 B9 0A000000 mov ecx,0A
004463C9 B8 04000280 mov eax,80020004
004463CE 894D 8C mov dword ptr ss:[ebp-74],ecx
004463D1 894D 9C mov dword ptr ss:[ebp-64],ecx
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
继续
00446494 FF15 8C104000 call dword ptr ds:[40108C] ; msvbvm60.__vbaHresultCheckObj
0044649A 8B45 D8 mov eax,dword ptr ss:[ebp-28]
0044649D 50 push eax
0044649E 68 4CC54000 push 搜搜问问.0040C54C ; UNICODE "/License.dat"
004464A3 FF15 74104000 call dword ptr ds:[401074] ; msvbvm60.__vbaStrCat
004464A9 8BD0 mov edx,eax
004464AB 8D4D D4 lea ecx,dword ptr ss:[ebp-2C]
004464AE FFD7 call edi
。。。。。。。。。。。。。。。。
程序会把注册码放在当前目录下的License.dat文件中,到此为止,追码部分也就结束了
网络验证:
试了正确的注册码后,提示注册成功,但立即又会有非法用户这样的提示,断开网络后再进行注册,没有非法用户这样的提示,
表明这是一个网络验证的,下面就来看看是什么样的网络验证
首先在程序目录下,创建一个License.dat,再把注册码写入到这个文件中,保存。
用OD载入程序,下断点 bp rtcMsgBox,SHIFT+F9,程序运行后断在此处
7351C5F3 m> 55 push ebp
7351C5F4 8BEC mov ebp,esp
7351C5F6 83EC 4C sub esp,4C
7351C5F9 8B4D 14 mov ecx,dword ptr ss:[ebp+14]
7351C5FC 53 push ebx
7351C5FD 56 push esi
7351C5FE 57 push edi
7351C5FF 66:8339 0A cmp word ptr ds:[ecx],0A
7351C603 B8 04000280 mov eax,80020004
7351C608 0F85 FC000000 jnz msvbvm60.7351C70A
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
ALF+F9,程序就会有非法用户这样的提示,点击确定,继续F8跟踪,直到返回到程序领空为止
0041D0CA 51 push ecx
0041D0CB FF15 B4104000 call dword ptr ds:[4010B4] ; msvbvm60.rtcMsgBox
0041D0D1 8D4D D0 lea ecx,dword ptr ss:[ebp-30] ; 来到这里
0041D0D4 FF15 AC124000 call dword ptr ds:[4012AC] ; msvbvm60.__vbaFreeStr
0041D0DA 8D95 68FFFFFF lea edx,dword ptr ss:[ebp-98]
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
向上找到程序的段首,把刚才的断点去除,再在段首下一个硬件执行断点
0041CC60 55 push ebp ;下硬件执行断点
0041CC61 8BEC mov ebp,esp
0041CC63 83EC 18 sub esp,18
0041CC66 68 762E4000 push 搜搜问问.00402E76 ; jmp 到
0041CC6B 64:A1 00000000 mov eax,dword ptr fs:[0]
0041CC71 50 push eax
0041CC72 64:8925 00000000 mov dword ptr fs:[0],esp
0041CC79 B8 BC010000 mov eax,1BC
0041CC7E E8 ED61FEFF call 搜搜问问.00402E70 ; jmp 到
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
接着重新载入程序,注册程序目录下,那个License.dat是否还存在,如果不存在,则要重新构造一个
Shift+F9,运行程序,来到
刚才下硬件断点的地方,F8单步
0041CD65 83C4 10 add esp,10
0041CD68 0FBF85 80FEFFFF movsx eax,word ptr ss:[ebp-180]
0041CD6F 85C0 test eax,eax
0041CD71 0F84 0F0A0000 je 搜搜问问.0041D786 ; 这个跳转一定要让它实现
0041CD77 C745 FC 04000000 mov dword ptr ss:[ebp-4],4
0041CD7E E8 6DC20200 call 搜搜问问.00448FF0
0041CD83 8BD0 mov edx,eax
0041CD85 8D4D D0 lea ecx,dword ptr ss:[ebp-30]
0041CD88 FF15 74124000 call dword ptr ds:[401274] ; msvbvm60.__vbaStrMove
0041CD8E 50 push eax
0041CD8F E8 1CC30200 call 搜搜问问.004490B0
0041CD94 8BD0 mov edx,eax
0041CD96 8D4D B0 lea ecx,dword ptr ss:[ebp-50]
0041CD99 FF15 74124000 call dword ptr ds:[401274] ; msvbvm60.__vbaStrMove
0041CD9F E8 BCC60200 call 搜搜问问.00449460
0041CDA4 8BD0 mov edx,eax
0041CDA6 8D4D AC lea ecx,dword ptr ss:[ebp-54]
0041CDA9 FF15 74124000 call dword ptr ds:[401274] ; msvbvm60.__vbaStrMove
0041CDAF BA 74BF4000 mov edx,搜搜问问.0040BF74 ; UNICODE "gb2312"
0041CDB4 8D4D B4 lea ecx,dword ptr ss:[ebp-4C]
0041CDB7 FF15 08124000 call dword ptr ds:[401208] ; msvbvm60.__vbaStrCopy
0041CDBD 8B4D B0 mov ecx,dword ptr ss:[ebp-50]
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
这一个网络验证是登录时不会再显示非法用户的出错提示了(
那个跳转实现后,再SHIFT+F9运行程序,接着点击问问的载入类别,程序就会断在(因为刚才下过rtcMsgBox这个断点)
7351C5F3 m> 55 push ebp ; 断在此
7351C5F4 8BEC mov ebp,esp
7351C5F6 83EC 4C sub esp,4C
7351C5F9 8B4D 14 mov ecx,dword ptr ss:[ebp+14]
7351C5FC 53 push ebx
7351C5FD 56 push esi
7351C5FE 57 push edi
7351C5FF 66:8339 0A cmp word ptr ds:[ecx],0A
接着就再ALT+F9,把出现的错误提示点击确定,然后程序返回
0041DD9C 51 push ecx
0041DD9D FF15 B4104000 call dword ptr ds:[4010B4] ; msvbvm60.rtcMsgBox
0041DDA3 8D4D B8 lea ecx,dword ptr ss:[ebp-48] ; 返回到此
0041DDA6 FF15 AC124000 call dword ptr ds:[4012AC] ; msvbvm60.__vbaFreeStr
0041DDAC 8D95 50FFFFFF lea edx,dword ptr ss:[ebp-B0]
。。。。。。。。。。。。。。。。。。
找到程序的段首,下一个硬件执行断点,载入程序,接下来怎么做相信大家都了解了!因为网络验证有多处,用同样的办法
去破解,麻烦了一点,但还是很实用的
破解也到此为止
对于这个软件的网络验证我个人只能一个一个去破解, 希望大家能提供更好的方法! |
免费评分
-
查看全部评分
|