斗地主 6.4.0.581 by [email]zzhzihui@163.net[/email]
工具:WKTVBDEBUGGER,VBDE.85(iorior)
***********************************************************
方法:
1.)非法复制问题
00475D15: 1C BranchF 00475D55 (Jump ?
;这里!!改1C...为1E E1 00 00 39 04 38 FF F5 EC 00 00 00 05 07 00
2.)30次及7局限制!!!!!!这个是关键.
0044CFEB: 1C BranchF 0044D0DB ? ;注册后应该就jmp
机器码:1CAB01768400F51E000000E0767800F5 (offset 4cfeb)
3.)主窗口 未注册 字样(参考5.2)
offset 54A8Fh(rva:454a8f): 1CBF00 0470FFF5C90000000
改成: 1E3A00...
4.)启动画面 未注册 字样(参考5.2)
44fd04:1C2B01 0478FF210F2C0319
改成: 1E...
5.)关于窗口 未注册 字样
0045F4A9: 1C BranchF 0045F53A (Jump ? ;这里不跳OK
机器码:1CC203 1B0C00210F30031970FF0870FF
改: 1E3403
***********************************************************
总结:WKTVBDebugger确实不凡,但有待改进,可成为VB-PCODE杀手.
也许作者修改了文件头,或者被压缩后,没有准确脱壳.导致EXDEC,VBParser报告说不是VB程序,VBExplorer在反编译过程时出错,SMARTCHECK运行时出错.
WKT中的地址其实也是OFFSET+imagebase得到的.
VBDE.85中的过程地址实际是过程结束地址,在WKT中下断是没有效果的,把那个地址-1,-2,-3,-4,-5下断,就有可能在过程的最后一行返回代码断下.这也是找断点的一个技巧.一个程序如果没有太多暗桩,其实也是减少的被查到关键的次数,像这个6.4版本没有了检测文件大小的功能(这个在5.2中用来检测是否被脱壳),但是少了一个可用断点.让我多花了好几天时间啊.
***********************************************************
详细过程:
我以前曾经动过5.2.0.489版本,太让人恼火了,关闭我的机器N次!
早就有了防备之心,但是,嘿嘿,作者回心转意,这回没有暗桩了.
本来不想动它,但有网友的REG文件导入也不能注册,本来安在C盘可以,但我安在D盘了,就不可以注册了.
;REG文件
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\DDZ\Infomation]
"LicenseNumber"="0"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion]
"programeID"="0"
所以试试,容易的我就不敢相信,也没有兴趣了.
UPX脱壳.WKTVBDebugger载入,一直按F8单步执行,直到消息窗口出现如下消息:
Stack dump is enabled and relative to ESP<-EBP.
FStStr -> ''
FStStrNoPop -> ''
FStStr -> 'DDZ060040040530'
FStStr -> 'DDZ060040040530' ;注意要有两行,仔细再跟几步,
然后可以在代码窗口看到如下代码:
00475CFF: 31 FStStr
00475D02: 32 FFreeStr
00475D09: 00 LargeBos
00475D0B: 6C ILdRf 001786ACh
00475D0E: 4A FnLenStr
00475D0F: F5 LitI4: -> Fh 15
00475D14: CC NeI4
00475D15: 1C BranchF 00475D55 (Jump ?
;这里!!改1C...为1E E1 00 00 39 04 38 FF F5 EC 00 00 00 05 07 00
00475D18: 00 LargeBos
00475D1A: 04 FLdRfVar 0012FCA4h
00475D1D: F5 LitI4: -> ECh 236
00475D22: 05 ImpAdLdRf
00475D25: 24 NewIfNullPr 0041BCCC
00475D28: 0D VCallHresult CVBApp::Licenses
00475D2D: 27 LitVar_Missing 0012FC34h
00475D30: 27 LitVar_Missing 0012FC54h
00475D33: 27 LitVar_Missing 0012FC74h
00475D36: F5 LitI4: -> 0h 0
00475D3B: 3E FLdZeroAd
======
16:24 2005-2-17
不是这么简单,上面好像只是解决非法复制问题,照样未注册.
程序会访问%system%\comocx32.drv这个文件,它和注册也相关,存放机器码.
查看以前 斗地主5.2.0.489 过程.
用WKTVBDebugger载入ddz.exe,在FormManager中
找到frmAbout 的img()下断,就是那个注册按钮.这样会弹出注册框,而注册框就是IKnow,在注册框IKnow的cmdCancel命令按钮下断,因为当玩到超过7局时也会弹出注册框,而且按取消会退出程序,它是用END语句结束程序的,也就是如下PCODE代码:
这样我们在PCODE Lead1/End上下断,玩到第8局时弹出程序,在如下代码断下:
0043C51B: 76 ImpAdLdI4
0043C51E: 0A ImpAdCallFPR4 kernel32!FreeLibrary
0043C523: 3C SetLastSystemError
0043C524: 76 ImpAdLdI4
0043C527: 0A ImpAdCallFPR4 kernel32!FreeLibrary
0043C52C: 3C SetLastSystemError
0043C52D: FC Lead1/End ;这里断下,执行退出程序.
0043C52F: 13 ExitProcHresult
0043C530: 34 CStr2Ansi
0043C531: 40 Ary1LdRf
这时按AnalizeBranch分析跳转,发现它附近的跳转有:
43C46FH:BranchF 43c477h
43c47ah:BranchF 43c48dh
43c484h:BranchF 43c4c9h
43c4e1h:BranchF 43c4e9h
很不幸,这样没有用!
---
0043C52D: FC Lead1/End ;这里断下,执行退出程序.
IKnow.cmdCancel 004339F4h 00433A0Ch
43c4b4 branchF 433a55
43c4e1 branchF 433a75
43c4c1 ...>end
43c4b4 ...>end
43c4a1 ...>end
43c468 ...>end 43c46e
4339f4 断下 59下F12
454a62
454a8f
454a8f 1d branchT .... 改1e3a00
这样也没有结果!!
==
437c30
437c66
==
476d30 spalsh
4465bd num16761024 ;这个不跳表示是第一次使用,显示帮助
45b938
455ddf mainform
4531d7 menuenable
473be9 将要已经载入
46ca4c mainload
======
44deb8 :注册窗载入
=====
476561 取comocx.drv中的机器码
Stack DS:[0012F6D8]=0014C9E4, (ASCII "6078352425")
毫无进展!找断点好困难!!!
===========================================================
用vbde试试.
vbde反的proc地址是结束地址,注意在WKTVBDEBUG中要减1或减3才是EXITPROC地址.
end wktstart size
homepage 438c30 438BAC 84
newsoft 438dc8 438D44 84
onlinereg 438f60 438EDC 84
看来他们的大小都是64h了,但是有其他的不是,这个不一定,不能用来推起始地址.
新游戏是发牌代码是个关键,因为在超过次数后如果发牌才会弹出注册框,它应该是个PICBOX.
gamemain中的picbox有:
'offset: 0002BBAC
Begin VB.PictureBox GamePic
'offset: 0002BBF2
Begin VB.PictureBox Img1
Index = 1
End
'offset: 0002BC39
Begin VB.PictureBox Img1
Index = 0
End
'offset: 0002BC80
Begin VB.PictureBox Hand
End
'offset: 0002C0CA
Begin VB.PictureBox TmpPic
Index = 0
End
'offset: 0002C101
Begin VB.PictureBox TmpPic
Index = 1
End
VBDE中关于过程地址找找这几个PICBOX的地址.
试验几个HAND都不行.
GAMEPIC有好几个,分别把结束地址-1,-2,-3,-4,-5设断,因为WKTVBDEBUG只有在地址完全匹配才中断,例如后面找到的44CFEB处会断下,但44CFEC就不会断下.
4402c8 gamepic 启动断下
465c98 gamepic 发牌断下,哈哈就要这个vbde 得到465c9c的gamepic
43d0d9 发牌继续断下,用这个返回调用程序跟.哈哈跟到...
-----
44cf33 有个跳转!!jump
44cfeb 前面调用了取CODE的代码.!!regcode chk?yeah!!!yes!
根据跟踪,点击发牌这时好像调用的是一个FORM_CLICK过程.
代码如下:
0044CFDE: C5 OrI4
0044CFDF: 3206005CFF58FF54FF FFreeStr
0044CFE8: 1A64FF FFree1Ad
0044CFEB: 1EAB01 BranchF 0044D0DB ? ;注册后应该就jmp
0044CFEE: 768400 ImpAdLdI4
0044CFF1: F51E000000 LitI4: -> 1Eh 30 ;30次了吗
0044CFF6: E0 GeI4
0044CFF7: 767800 ImpAdLdI4
0044CFFA: F507000000 LitI4: -> 7h 7 ;7局了吗
0044CFFF: E0 GeI4 7h,0h ?
0044D000: 751E00 ImpAdLdI2
0044D003: F400 LitI2_Byte: -> 0h 0
0044D005: C6 EqI2
0044D006: C4 AndI4
0044D007: C5 OrI4
0044D008: 1CAB01 BranchF 0044D0DB ? ;超过限制就不跳
0044D00B: 751E00 ImpAdLdI2
0044D00E: 756B00 ImpAdLdI2
---
0044CFEB: 1C BranchF 0044D0DB ? ;注册后应该就jmp
机器码:1CAB01768400F51E000000E0767800F5 (offset 4cfeb)
0044D008: 1C BranchF 0044D0DB ? ;超过限制就不跳
机器码:1CAB01751E00756B00C51CEA00100407
把其中任意一个前面1C改1E强制跳转(改前面较好),限制解除!!其实和5.2.0.489版本很相像..
====================
主窗口,未注册字样.懒得跟了.参考5.20版本搜索以下特征字符,成功.
offset 54A8Fh(rva:454a8f): 1CBF00 0470FFF5C90000000
改成: 1E3A00...
代码如下:
00454A78: 0F VCallAd
00454A7B: 19 FStAdFunc
00454A7E: 08 FLdPr
00454A81: 0D VCallHresult
00454A86: 6B FLdI2
00454A89: F4 LitI2_Byte: -> 0h 0
00454A8B: C6 EqI2
00454A8C: 1A FFree1Ad
00454A8F: 1D BranchT 00454B17 ? ;不跳ok,改:Branch 454a92跳到下行一样.
00454A92: 04 FLdRfVar 0012FB04h
00454A95: F5 LitI4: -> C9h 201
00454A9A: 05 ImpAdLdRf
00454A9D: 24 NewIfNullPr 0041BCCC
00454AA0: 0D VCallHresult CVBApp::Licenses
00454AA5: 6C ILdRf 00000000h
00454AA8: 04 FLdRfVar 0012FB0Ch
00454AAB: 05 ImpAdLdRf
00454AAE: 24 NewIfNullPr 0041BCCC
00454AB1: 0D VCallHresult CVBApp::get_App
=======
关于窗,未注册
0045F48F: 24 NewIfNullPr GameMain 00414034
0045F492: 0F VCallAd GameMain.MyCode
0045F495: 19 FStAdFunc
0045F498: 08 FLdPr
0045F49B: 0D VCallHresult get__ipropVISIBLEMENU
0045F4A0: 6B FLdI2
0045F4A3: F4 LitI2_Byte: -> 0h 0
0045F4A5: C6 EqI2
0045F4A6: 1A FFree1Ad
0045F4A9: 1C BranchF 0045F53A (Jump ? ;这里不跳OK
0045F4AC: 1B LitStr: '**********'
0045F4AF: 21 FLdPrThis 00178440h
0045F4B0: 0F VCallAd frmAbout.L7
0045F4B3: 19 FStAdFunc
0045F4B6: 08 FLdPr
0045F4B9: 0D VCallHresult put__ipropCAPTIONLABEL
0045F4BE: 1A FFree1Ad
0045F4C1: 1B LitStr: 'regname'
0045F4C4: 43 FStStrCopy
--
0045F4A9: 1C BranchF 0045F53A (Jump ? ;这里不跳OK
机器码:1CC203 1B0C00210F30031970FF0870FF
改: 1E3403
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)