llight 发表于 2009-8-30 12:54

破解“搜搜问问刷分器”

本帖最后由 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:
    00470595   60                   pushad
    00470596   FEC8               dec al
    00470598   38DA               cmp dl,bl
    0047059A   C70424 1C7E3835      mov dword ptr ss:,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:
    7351C5FC   53                   push ebx
    7351C5FD   56                   push esi
    7351C5FE   57                   push edi
    7351C5FF   66:8339 0A         cmp word ptr ds:,0A
    7351C603   B8 04000280          mov eax,80020004
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。
   
    按ALT+F9,注册错误提示出现了,点确定
    00446282   8D4D BC            lea ecx,dword ptr ss:
    00446285   6A 10                push 10
    00446287   51                   push ecx
    00446288   FF15 B4104000      call dword ptr ds:                ; msvbvm60.rtcMsgBox
    0044628E   8D55 8C            lea edx,dword ptr ss:             ; 来了到这里
    00446291   8D45 9C            lea eax,dword ptr ss:
    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:
    00445FD1   50                   push eax
    00445FD2   64:8925 00000000   mov dword ptr fs:,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:,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:
    00445FD1   50                   push eax
    00445FD2   64:8925 00000000   mov dword ptr fs:,esp
    00445FD9   81EC C4000000      sub esp,0C4
    00445FDF   53                   push ebx
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    接下来就是F8单步跟踪
    00446224   F7DB               neg ebx
    00446226   FF15 AC124000      call dword ptr ds:                ; msvbvm60.__vbaFreeStr
    0044622C   8D4D D0            lea ecx,dword ptr ss:
    0044622F   FF15 A8124000      call dword ptr ds:                ; 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:,ecx
    00446247   894D 9C            mov dword ptr ss:,ecx
    0044624A   894D AC            mov dword ptr ss:,ecx
    0044624D   8D95 7CFFFFFF      lea edx,dword ptr ss:
    00446253   8D4D BC            lea ecx,dword ptr ss:
    00446256   8945 94            mov dword ptr ss:,eax
    00446259   8945 A4            mov dword ptr ss:,eax
    0044625C   8945 B4            mov dword ptr ss:,eax
    0044625F   C745 84 E8F14000   mov dword ptr ss:,搜搜问问.0040F1E8
    00446266   C785 7CFFFFFF 080000>mov dword ptr ss:,8
    00446270   FF15 4C124000      call dword ptr ds:                ; msvbvm60.__vbaVarDup
    00446276   8D4D 8C            lea ecx,dword ptr ss:
    00446279   8D55 9C            lea edx,dword ptr ss:
    0044627C   51                   push ecx
    0044627D   8D45 AC            lea eax,dword ptr ss:
    00446280   52                   push edx
    00446281   50                   push eax
    00446282   8D4D BC            lea ecx,dword ptr ss:
    00446285   6A 10                push 10
    00446287   51                   push ecx
    00446288   FF15 B4104000      call dword ptr ds:                ; msvbvm60.rtcMsgBox
    0044628E   8D55 8C            lea edx,dword ptr ss:             ; 来了到这里
    00446291   8D45 9C            lea eax,dword ptr ss:
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    上面的那个跳一定要实现,不然注册错误的提示会出现
    继续单步跟踪
    00446348   FFD7               call edi
    0044634A   8D55 E4            lea edx,dword ptr ss:
    0044634D   52                   push edx
    0044634E   E8 4D2E0000          call 搜搜问问.004491A0
    00446353   8BD0               mov edx,eax                               ; 这里真正的注册码出现了
    00446355   8D4D E4            lea ecx,dword ptr ss:
    00446358   FFD7               call edi
    0044635A   8B06               mov eax,dword ptr ds:
    0044635C   56                   push esi
    0044635D   FF90 0C030000      call dword ptr ds:
    00446363   8D4D D0            lea ecx,dword ptr ss:
    00446366   50                   push eax
    00446367   51                   push ecx
    00446368   FF15 AC104000      call dword ptr ds:                ; msvbvm60.__vbaObjSet
    0044636E   8BD8               mov ebx,eax
    00446370   8D45 D8            lea eax,dword ptr ss:
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    我的注册码为:9B5BC5FB22D27D2C
    继续单步,再看看相关的信息
    0044639C   52                   push edx
    0044639D   FF15 FC104000      call dword ptr ds:                ; msvbvm60.__vbaStrCmp
    004463A3   8BD8               mov ebx,eax
    004463A5   8D4D D8            lea ecx,dword ptr ss:
    004463A8   F7DB               neg ebx
    004463AA   1BDB               sbb ebx,ebx
    004463AC   F7DB               neg ebx
    004463AE   F7DB               neg ebx
    004463B0   FF15 AC124000      call dword ptr ds:                ; msvbvm60.__vbaFreeStr
    004463B6   8D4D D0            lea ecx,dword ptr ss:
    004463B9   FF15 A8124000      call dword ptr ds:                ; 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:,ecx
    004463D1   894D 9C            mov dword ptr ss:,ecx
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    继续
    00446494   FF15 8C104000      call dword ptr ds:                ; msvbvm60.__vbaHresultCheckObj
    0044649A   8B45 D8            mov eax,dword ptr ss:
    0044649D   50                   push eax
    0044649E   68 4CC54000          push 搜搜问问.0040C54C                  ; UNICODE "/License.dat"
    004464A3   FF15 74104000      call dword ptr ds:                ; msvbvm60.__vbaStrCat
    004464A9   8BD0               mov edx,eax
    004464AB   8D4D D4            lea ecx,dword ptr ss:
    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:
7351C5FC   53                  push ebx
7351C5FD   56                  push esi
7351C5FE   57                  push edi
7351C5FF   66:8339 0A          cmp word ptr ds:,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:                ; msvbvm60.rtcMsgBox
0041D0D1   8D4D D0             lea ecx,dword ptr ss:             ; 来到这里
0041D0D4   FF15 AC124000       call dword ptr ds:                ; msvbvm60.__vbaFreeStr
0041D0DA   8D95 68FFFFFF       lea edx,dword ptr ss:
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
向上找到程序的段首,把刚才的断点去除,再在段首下一个硬件执行断点
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:
0041CC71   50                  push eax
0041CC72   64:8925 00000000    mov dword ptr fs:,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:
0041CD6F   85C0                test eax,eax
0041CD71   0F84 0F0A0000       je 搜搜问问.0041D786                      ; 这个跳转一定要让它实现
0041CD77   C745 FC 04000000    mov dword ptr ss:,4
0041CD7E   E8 6DC20200         call 搜搜问问.00448FF0
0041CD83   8BD0                mov edx,eax
0041CD85   8D4D D0             lea ecx,dword ptr ss:
0041CD88   FF15 74124000       call dword ptr ds:                ; msvbvm60.__vbaStrMove
0041CD8E   50                  push eax
0041CD8F   E8 1CC30200         call 搜搜问问.004490B0
0041CD94   8BD0                mov edx,eax
0041CD96   8D4D B0             lea ecx,dword ptr ss:
0041CD99   FF15 74124000       call dword ptr ds:                ; msvbvm60.__vbaStrMove
0041CD9F   E8 BCC60200         call 搜搜问问.00449460
0041CDA4   8BD0                mov edx,eax
0041CDA6   8D4D AC             lea ecx,dword ptr ss:
0041CDA9   FF15 74124000       call dword ptr ds:                ; msvbvm60.__vbaStrMove
0041CDAF   BA 74BF4000         mov edx,搜搜问问.0040BF74                     ; UNICODE "gb2312"
0041CDB4   8D4D B4             lea ecx,dword ptr ss:
0041CDB7   FF15 08124000       call dword ptr ds:                ; msvbvm60.__vbaStrCopy
0041CDBD   8B4D B0             mov ecx,dword ptr ss:
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
这一个网络验证是登录时不会再显示非法用户的出错提示了(
那个跳转实现后,再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:
7351C5FC   53                  push ebx
7351C5FD   56                  push esi
7351C5FE   57                  push edi
7351C5FF   66:8339 0A          cmp word ptr ds:,0A
接着就再ALT+F9,把出现的错误提示点击确定,然后程序返回
0041DD9C   51                  push ecx
0041DD9D   FF15 B4104000       call dword ptr ds:                ; msvbvm60.rtcMsgBox
0041DDA3   8D4D B8             lea ecx,dword ptr ss:             ; 返回到此
0041DDA6   FF15 AC124000       call dword ptr ds:                ; msvbvm60.__vbaFreeStr
0041DDAC   8D95 50FFFFFF       lea edx,dword ptr ss:
。。。。。。。。。。。。。。。。。。
找到程序的段首,下一个硬件执行断点,载入程序,接下来怎么做相信大家都了解了!因为网络验证有多处,用同样的办法
去破解,麻烦了一点,但还是很实用的
破解也到此为止
对于这个软件的网络验证我个人只能一个一个去破解,希望大家能提供更好的方法!

mantoou 发表于 2009-8-30 15:50

网络验证那部分有好几处呢,单改一处还是不行哦

vienna 发表于 2009-8-30 13:20

啊!我看见vm直接放弃了。。实在要看看楼主的文章

llight 发表于 2009-8-30 16:49

回复3#
刚才中午匆匆破解了一下,现在仔细看了一下,是有问题,网络验证还是没有去除,后天工作了嘛,也没有时间
反正明天有空我再看一下

11212122 发表于 2009-8-30 17:24

额.看来是我不坚定啊。

楼主不错啊。

至少让我肯定了,带壳破解,比脱壳容易。

VM也不是太可怕。

虽然咱扒不掉,但是照样能搞它。

redrains 发表于 2009-8-31 00:21

学习了,新手也怕网络验证,希望论坛多一点这样的好帖

dz818 发表于 2009-8-31 09:35

楼主能发出来么???

jiaxu826 发表于 2009-9-29 23:46

这个我喜欢

ayayapsb 发表于 2010-8-4 21:26

楼主能发出来么???

xie83544109 发表于 2010-8-4 21:39


学习了,多谢楼主分享
页: [1] 2
查看完整版本: 破解“搜搜问问刷分器”