某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 06:34 编辑
@Shark恒 {:5_121:}老大 我真的真的很详细写了@Shark恒 虽然没有完美解决问题,但确实很详细,相信可以帮到很多人!
另外有个疑问,如果教程中的判断版本是真的判断版本,而不是防逆向误导的话,通过修改版本号会不会达到反检测效果?是否尝试过?
Shark恒 发表于 2016-8-27 06:58
虽然没有完美解决问题,但确实很详细,相信可以帮到很多人!
另外有个疑问,如果教程中的判断版本是真的判 ...
额 老大这样说我没试过 但是我发现如果后面一堆xxxxx-xxxxx-xxxxx-xxxxx-xxxxx改成别的格式error的返回值也会不一样 而我跟到call的话 也是返回网站的数据(返回的数据也不是error也不是53了) 所以我认为应该是error:xx的问题 {:6_211:} mark下 新鲜出炉的精华文章看起来是不错的~ 膜拜大神 ,继续学习了~~~ 好东西,谢谢楼主!!!!!!!!!!!!!
很喜欢这样的教程,谢谢了 好好学习一下