叶良辰和赵总 发表于 2016-8-27 13:20

某Vb程序利用常量破解并浅谈补码

本帖最后由 叶良辰和赵总 于 2016-9-2 10:37 编辑

本教程由热情洋溢的木木不哭赞助播出(“哎呀我摔倒了要漂亮姐姐亲亲才能起来{:5_187:}”)
**** Hidden Message *****
方法二:那么我们就可以用常量PJ了,因为他都是赋值在一个地址。所以我们可以先看看他判断注册版哪里看下
004C85D1   .51            push ecx
004C85D2   .FF50 04       call dword ptr ds:
004C85D5   .C745 FC 01000>mov dword ptr ss:,0x1
004C85DC   .C745 FC 02000>mov dword ptr ss:,0x2
004C85E3   .6A FF         push -0x1                              ; /OnErrEvent = Resume Next
004C85E5   .FF15 E0104000 call dword ptr ds:[<&MSVBVM60.__vbaOnErr>; \__vbaOnError
004C85EB   .C745 FC 03000>mov dword ptr ss:,0x3
004C85F2   .66:833D C0105>cmp word ptr ds:,0xFFFF 关键常量
004C85FA   .75 6A         jnz short sdczit.004C8666
004C85FC   .C745 FC 04000>mov dword ptr ss:,0x4
004C8603   .BA BC254100   mov edx,sdczit.004125BC                  ;考试系统提示
004C8608   .8D8D 68FFFFFF lea ecx,dword ptr ss:
004C860E   .FF15 6C124000 call dword ptr ds:[<&MSVBVM60.__vbaStrCo>;MSVBVM60.__vbaStrCopy
004C8614   .66:C785 94FEF>mov word ptr ss:,0x3
004C861D   .BA 88C74100   mov edx,sdczit.0041C788                  ;已经是注册版本,无需再次注册!
004C8622   .8D8D 6CFFFFFF lea ecx,dword ptr ss:
004C8628   .FF15 6C124000 call dword ptr ds:[<&MSVBVM60.__vbaStrCo>;MSVBVM60.__vbaStrCopy
004C862E   .8D95 68FFFFFF lea edx,dword ptr ss:
004C8634   .52            push edx
004C8635   .8D85 94FEFFFF lea eax,dword ptr ss:
004C863B   .50            push eax
004C863C   .8D8D 6CFFFFFF lea ecx,dword ptr ss:
004C8642   .51            push ecx

那我们在这里下断004C85F2 . 66:833D C0105>cmp word ptr ds:,0xFFFF 关键常量

断下后我们往下跟我们发现他跳转了 很显然他跳过了已注册


我们看下关键跳转是那种跳转 是jnz跳转
Jnz其实就是 JNAE: jump not above and equal 低于,即不高于且不等于则转移


我们在看下关键跳上面的的cmp指令
cmp word ptr ds:,0xFFFF
ffff是16进制转化为10进制就是-1
这条指令也就是说比较关键常量与-1的大小
而jnz这条指令的意思是低于,即不高于且不等于则转移
那么意思就很明显了这个常量必须等于或者大于或者等于-1才不会跳转
我们就搜索0x5210C0这条指令。
或者这样搜索

我们搜到了很多我们只进入mov因为mov是赋值 我们必须在赋值上做工作。

我们把所有带有变量的mov改成FFFF也就是-1我们找到了这两个指令
00447903   .66:C705 C0105>mov word ptr ds:,0x0

0044B3AD   .66:C705 C0105>mov word ptr ds:,0x0
我们改了试试

最后 我来浅谈下补码!注意 是浅谈!浅谈
我们来搜索www   找到这一段代码

00512665   . /0F84 25060000 je sdczit.00512C90
0051266B   . |66:3935 C0105>cmp word ptr ds:,si
00512672   . |0F85 C5000000 jnz sdczit.0051273D
00512678   . |8B0D 64105200 mov ecx,dword ptr ds:
0051267E   . |8B35 78104000 mov esi,dword ptr ds:[<&MSVBVM60.__vbaSt>;MSVBVM60.__vbaStrCat
00512684   . |68 D8E04100   push sdczit.0041E0D8                     ;http://www.zxrd.com/ncre/reg/zcksreg1.asp?msjqm=
00512689   . |51            push ecx                                 ; /String => "N"
0051268A   . |FFD6          call esi                                 ; \__vbaStrCat
0051268C   . |8B1D 0C134000 mov ebx,dword ptr ds:[<&MSVBVM60.__vbaSt>;MSVBVM60.__vbaStrMove
00512692   . |8BD0          mov edx,eax
00512694   . |8D4D E0       lea ecx,dword ptr ss:
00512697   . |FFD3          call ebx                                 ;<&MSVBVM60.__vbaStrMove>
00512699   . |50            push eax
0051269A   . |68 40E14100   push sdczit.0041E140                     ; /&mskm=
0051269F   . |FFD6          call esi                                 ; \__vbaStrCat
005126A1   . |8BD0          mov edx,eax
005126A3   . |8D4D DC       lea ecx,dword ptr ss:
005126A6   . |FFD3          call ebx                                 ;<&MSVBVM60.__vbaStrMove>
005126A8   . |8B15 BC105200 mov edx,dword ptr ds:
005126AE   . |50            push eax
005126AF   . |52            push edx                                 ; /String => "s"
005126B0   . |FFD6          call esi                                 ; \__vbaStrCat
005126B2   . |8BD0          mov edx,eax
005126B4   . |8D4D D8       lea ecx,dword ptr ss:
005126B7   . |FFD3          call ebx                                 ;<&MSVBVM60.__vbaStrMove>
005126B9   . |50            push eax
005126BA   . |68 54E14100   push sdczit.0041E154                     ; /&mskh=
005126BF   . |FFD6          call esi                                 ; \__vbaStrCat
005126C1   . |8BD0          mov edx,eax
005126C3   . |8D4D D4       lea ecx,dword ptr ss:
005126C6   . |FFD3          call ebx                                 ;<&MSVBVM60.__vbaStrMove>
005126C8   . |50            push eax
005126C9   . |A1 B4105200   mov eax,dword ptr ds:
005126CE   . |50            push eax                                 ; /String => "9"
005126CF   . |FFD6          call esi                                 ; \__vbaStrCat
005126D1   . |8BD0          mov edx,eax
005126D3   . |8D4D D0       lea ecx,dword ptr ss:
005126D6   . |FFD3          call ebx                                 ;<&MSVBVM60.__vbaStrMove>
005126D8   . |50            push eax
005126D9   . |68 68E14100   push sdczit.0041E168                     ; /&zxver=
005126DE   . |FFD6          call esi                                 ; \__vbaStrCat
005126E0   . |8BD0          mov edx,eax
005126E2   . |8D4D CC       lea ecx,dword ptr ss:
005126E5   . |FFD3          call ebx                                 ;<&MSVBVM60.__vbaStrMove>
005126E7   . |8B0D 4C105200 mov ecx,dword ptr ds:
005126ED   . |50            push eax
005126EE   . |51            push ecx                                 ; /String => "V"
005126EF   . |FFD6          call esi                                 ; \__vbaStrCat
005126F1   . |8BD0          mov edx,eax
005126F3   . |8D4D C8       lea ecx,dword ptr ss:
005126F6   . |FFD3          call ebx                                 ;<&MSVBVM60.__vbaStrMove>
005126F8   . |50            push eax
005126F9   . |68 7CE14100   push sdczit.0041E17C                     ; /&dver=
005126FE   . |FFD6          call esi                                 ; \__vbaStrCat
00512700   . |8BD0          mov edx,eax
00512702   . |8D4D C4       lea ecx,dword ptr ss:
00512705   . |FFD3          call ebx                                 ;<&MSVBVM60.__vbaStrMove>
00512707   . |8B15 50105200 mov edx,dword ptr ds:
0051270D   . |50            push eax
0051270E   . |52            push edx                                 ; /String => "1"
0051270F   . |FFD6          call esi                                 ; \__vbaStrCat
00512711   . |8BD0          mov edx,eax
00512713   . |8D4D E8       lea ecx,dword ptr ss:
00512716   . |FFD3          call ebx                                 ;<&MSVBVM60.__vbaStrMove>
00512718   . |8D45 C4       lea eax,dword ptr ss:
0051271B   . |8D4D C8       lea ecx,dword ptr ss:
0051271E   . |50            push eax
0051271F   . |8D55 CC       lea edx,dword ptr ss:
00512722   . |51            push ecx
00512723   . |8D45 D0       lea eax,dword ptr ss:
00512726   . |52            push edx
00512727   . |8D4D D4       lea ecx,dword ptr ss:
0051272A   . |50            push eax
0051272B   . |8D55 D8       lea edx,dword ptr ss:
0051272E   . |51            push ecx

我整来了一个用过的正版码注意 是用过的
然后下断断下

然后往下跟
跟到他出现网址 然后我们访问下网站

注意 这里是error 53
然后我们继续往下跟

经过这个call的时候 出现了error 53
也就是说 他是判断error是多少来返回的 比如error 53就是已经用过了。
所以如果有正版号可以看他到这个call这里返回的数据是多少
只是小菜的想法 大神勿喷 我也没有正版号 因为正版号也不便宜
    写了足足1个小时   求加个精华吧{:5_188:}   @Shark恒   不加精华我就自杀{:5_191:}

叶良辰和赵总 发表于 2016-8-27 13:27

本帖最后由 叶良辰和赵总 于 2016-8-27 06:34 编辑

@Shark恒 {:5_121:}老大 我真的真的很详细写了@Shark恒

Shark恒 发表于 2016-8-27 13:58

虽然没有完美解决问题,但确实很详细,相信可以帮到很多人!
另外有个疑问,如果教程中的判断版本是真的判断版本,而不是防逆向误导的话,通过修改版本号会不会达到反检测效果?是否尝试过?

叶良辰和赵总 发表于 2016-8-27 14:09

Shark恒 发表于 2016-8-27 06:58
虽然没有完美解决问题,但确实很详细,相信可以帮到很多人!
另外有个疑问,如果教程中的判断版本是真的判 ...

额 老大这样说我没试过 但是我发现如果后面一堆xxxxx-xxxxx-xxxxx-xxxxx-xxxxx改成别的格式error的返回值也会不一样 而我跟到call的话 也是返回网站的数据(返回的数据也不是error也不是53了)   所以我认为应该是error:xx的问题

LYQingYe 发表于 2016-8-27 14:54

{:6_211:} mark下

892644330 发表于 2016-8-27 15:09

新鲜出炉的精华文章看起来是不错的~

a767421378 发表于 2016-8-27 15:24

膜拜大神 ,继续学习了~~~

lxwen 发表于 2016-8-27 20:41

好东西,谢谢楼主!!!!!!!!!!!!!

动物凶猛 发表于 2016-8-29 09:19

很喜欢这样的教程,谢谢了

酒醒黄昏 发表于 2016-8-29 10:00

好好学习一下
页: [1] 2 3 4 5
查看完整版本: 某Vb程序利用常量逆向并浅谈补码