VB的小CRACKME(P-CODE)的分析破文
【破文标题】VB的小CRACKME的分析破文【破文作者】caterpilla(惊涛)
【作者邮箱】
【作者主页】
【破解工具】搜索引擎,VBEXPLORER,WKTVBDE,OD,计算器
【破解平台】XP SP2
【软件名称】一个VB 的小CrackMe (简单)
【软件大小】
【原版下载】https://www.chinapyg.com/viewthread.php?tid=5918&extra=page%3D1
【保护方式】
【软件简介】
------------------------------------------------------------------------
VB P-CODE的CRACKME,P-CODE从来没弄过,只好现学现用。。。。。。
1、搜索引擎
充分利用百度、GOOGLE在网上寻找参考资料,其实这点对于找到解决问题的方法是很有效的途径,希望大家能够记住这一点。
把P-CODE VB当作关键词搜索,找到了很多有价值的东西,有PYG的,也有看雪学院上的文章。一一看下先~~~~~~~~
2、根据文章所述,寻找适合自己的工具
对P-CODE有静态和动态两类分析工具,静态有VB EXPLORER,VB-PARSER等,动态的有WKTVBDE。把这些工具收集下来备用,
其中WKTVBDE在安装时有点小问题,参考了PYG老大们的说明,安妥了,呵呵。
3、静态分析
喜欢用VB EXPLORER,用它打开这个CRACKME后,找到命令按钮对应的事件处理程序。
程序加简单注解如下:
:00402E3CFEC16CFF182E3505 LitVarI4 ;取一四位整型立即数
:00402E44080800 FLdPr ;=
:00402E47FD865400 MemStVar ;存入变量
:00402E4BFEC16CFF21529315 LitVarI4 ;再取一个四位整型立即数
:00402E53080800 FLdPr ;=
:00402E56065400 MemLdRfVar ;Push +STACK_0054
:00402E59FB9C5CFF SubVar ;取到的两个数相减
:00402E5D080800 FLdPr ;=
:00402E60FD864400 MemStVar ;结果存入变量
:00402E640454FF FLdRfVar ;Push LOCAL_00AC
:00402E6721 FLdPrThis ;=
:00402E680FFC02 VCallAd ;Return the control index 01
:00402E6B1958FF FStAdFunc ;
:00402E6E0858FF FLdPr ;=
***********Reference To:TextBox.Text
|
:00402E710DA0000000 VCallHresult ;Call ptr_00402844读出文本框中的值
:00402E766C54FF ILdRf ;Push DWORD 值存于此处
**********Reference To->msvbvm60.rtcR8ValFromBstr
|
:00402E790A01000400 ImpAdCallFPR4 ;Call ptr_00401030; check stack 0004; Push EAX
:00402E7EFD6B6CFF CVarR8 ;字符串转化成一个实数
:00402E82080800 FLdPr ;=
:00402E85FD863400 MemStVar ;
:00402E892F54FF FFree1Str ;SysFreeString ; =0
:00402E8C1A58FF FFree1Ad ;Push ; Call [[]+8]; []=0
:00402E8FFEC144FFDBA80101 LitVarI4 ;取立即数
:00402E97080800 FLdPr ;=
:00402E9A063400 MemLdRfVar ;Push +STACK_0034读内存数出来
:00402E9D286CFF0B00 LitVarI2 ;PushVarInteger 000B取立即数,其值为0XB即11(十进制)
:00402EA2FBB45CFF MulVar ;相乘
:00402EA6FB9434FF AddVar ;相加
:00402EAA2824FF5701 LitVarI2 ;PushVarInteger 0157取立即数,值勤为0X157
:00402EAFFB9414FF AddVar ;相加
:00402EB3080800 FLdPr ;=
:00402EB6065400 MemLdRfVar ;Push +STACK_0054读出内存中的值
:00402EB9FB9C04FF SubVar ;相减
:00402EBD080800 FLdPr ;=
:00402EC0FD863400 MemStVar ;保存结果
:00402EC436040034FF14FF FFreeVar ;Free 0004/2 variants
:00402ECB0454FF FLdRfVar ;Push LOCAL_00AC
:00402ECE21 FLdPrThis ;=
:00402ECF0FFC02 VCallAd ;Return the control index 01
:00402ED21958FF FStAdFunc ;
:00402ED50858FF FLdPr ;=
***********Reference To:TextBox.Text
|
:00402ED80DA0000000 VCallHresult ;Call ptr_00402844再取文本框中文本
:00402EDD6C54FF ILdRf ;Push DWORD
******Possible String Ref To->""
|
:00402EE01B0200 LitStr ;Push ptr_00402858一个空串
:00402EE3FB30 EqStr ;判断文本是否为空
:00402EE52F54FF FFree1Str ;SysFreeString ; =0
:00402EE81A58FF FFree1Ad ;Push ; Call [[]+8]; []=0
:00402EEB1CDB00 BranchF ;If Pop=0 then ESI=00402F17为假的分支,相当于IF。。ELSE中的ELSE部分
:00402EEE2704FF LitVar ;PushVar LOCAL_00FC
:00402EF12714FF LitVar ;PushVar LOCAL_00EC
:00402EF42734FF LitVar ;PushVar LOCAL_00CC
:00402EF7F500000000 LitI4 ;Push 00000000
******Possible String Ref To->"???????誹纇?????"
|
:00402EFC3A6CFF0300 LitVarStr ;PushVarString ptr_00402860
:00402F014E5CFF FStVarCopyObj ;=vbaVarDup(Pop)
:00402F04045CFF FLdRfVar ;Push LOCAL_00A4
**********Reference To->msvbvm60.rtcMsgBox
|
:00402F070A04001400 ImpAdCallFPR4 ;Call ptr_00401036; check stack 0014; Push EAX
:00402F0C3608005CFF34FF14 FFreeVar ;Free 0008/2 variants
:00402F17080800 FLdPr ;=
:00402F1A063400 MemLdRfVar ;Push +STACK_0034//取刚才计算出的结果
:00402F1D080800 FLdPr ;=
:00402F20064400 MemLdRfVar ;Push +STACK_0044//取程序开始计算出的结果
:00402F23FB33 EqVarBool ;比较是否相等
:00402F251C1801 BranchF ;If Pop=0 then ESI=00402F54//如果是爆破的话,在这把1C改成1D就可以了
:00402F282704FF LitVar ;PushVar LOCAL_00FC
:00402F2B2714FF LitVar ;PushVar LOCAL_00EC
:00402F2E2734FF LitVar ;PushVar LOCAL_00CC
:00402F31F500000000 LitI4 ;Push 00000000
******Possible String Ref To->"??????蟟菼?"
|
:00402F363A6CFF0500 LitVarStr ;PushVarString ptr_00402884成功
:00402F3B4E5CFF FStVarCopyObj ;=vbaVarDup(Pop)
:00402F3E045CFF FLdRfVar ;Push LOCAL_00A4
**********Reference To->msvbvm60.rtcMsgBox
|
:00402F410A04001400 ImpAdCallFPR4 ;Call ptr_00401036; check stack 0014; Push EAX
:00402F463608005CFF34FF14 FFreeVar ;Free 0008/2 variants
:00402F511E4101 Branch ;ESI=00402F7D
:00402F542704FF LitVar ;PushVar LOCAL_00FC
:00402F572714FF LitVar ;PushVar LOCAL_00EC
:00402F5A2734FF LitVar ;PushVar LOCAL_00CC
:00402F5DF500000000 LitI4 ;Push 00000000
******Possible String Ref To->"?睩翫??????"
|
:00402F623A6CFF0600 LitVarStr ;PushVarString ptr_0040289C失败
:00402F674E5CFF FStVarCopyObj ;=vbaVarDup(Pop)
:00402F6A045CFF FLdRfVar ;Push LOCAL_00A4
**********Reference To->msvbvm60.rtcMsgBox
|
:00402F6D0A04001400 ImpAdCallFPR4 ;Call ptr_00401036; check stack 0014; Push EAX
:00402F723608005CFF34FF14 FFreeVar ;Free 0008/2 variants
:00402F7D13 ExitProcHresult ;
:00402F7E0000 LargeBos ;IDE beginning of line with 00 byte codes
4、动态分析
静态分析完了,用WKTVBDE载入CRACKME,把其中的立即数找出来,看看是不是我们所想的样子。。。。。。。
用FORM MANAGER打开窗口,在COMMAND1按钮上下断点,然后GO运行,之后就就行单步执行,这里关键在于要时刻注意堆栈和内存的变化。要打开MEMORY DUMP窗口,
观察每一步执行后,内存中值的变化,同时注意右上角堆栈中地址的变化。VB中内存值比较有趣,由于是变体类型,所以不是在我们所看到内存地址处直接存放值的,而在地址+8的这个偏移处存放,有时是值,有时是指针,根据变体的实际类型来决定。
P-CODE第一次调,本想再细点写的,不过单位机器上WKTVBDE不好用了,呵呵,只能凭记忆写些了,兄弟们有兴趣,可用搜索引擎在网上找到相应的资料。
CODE:31371821,为固定码
有五个常数参与计算
#define C1 0x010AA8DB
#define C2 0x157
#define C3 0xB
#define C4 0x5352e18
#define C5 0x15935221
根据算式来计算CODE
CODE * C3+C1+C2-C4=C5-C4
即:CODE*0xb+0x0101a8db+0x157-0x5352e18=0x15935221-0x5352e18
解出来CODE=31371821
------------------------------------------------------------------------
题外话:用好搜索引擎,提高自学能力,敢于猜想,小心求证~~~~~~~~~~~~~~~~
------------------------------------------------------------------------
【版权声明】
[ 本帖最后由 caterpilla 于 2006-7-10 15:16 编辑 ] 详细 ,强,学习啊。。。。。。。。。。。。。。。。。。。。。。。 哈哈 最怕VB 所以我是一定要收下来哈 惊涛 兄,能否做个语音动画来学习? 建议初学者先看这几篇,再看 惊涛 的文章,会有事半功倍之效果!
https://www.chinapyg.com/viewthread.php?tid=3270
https://www.chinapyg.com/viewthread.php?tid=3277
https://www.chinapyg.com/viewthread.php?tid=3334
https://www.chinapyg.com/viewthread.php?tid=5056 原帖由 飘云 于 2006-7-10 14:50 发表
建议初学者先看这几篇,再看 惊涛 的文章,会有事半功倍之效果!
https://www.chinapyg.com/viewthread.php?tid=3270
https://www.chinapyg.com/viewthread.php?tid=3277
https://www.chinapyg.com/viewthread.p ...
也是初学,继续学习,谢谢PY兄~~~~~~~~~ P-CODE 一定要往死里顶,呵呵
支持惊涛兄~~!!~~ 原帖由 野猫III 于 2006-7-10 14:38 发表
惊涛 兄,能否做个语音动画来学习?
已做,请兄弟们一观,呵呵~~~~~~~~~
破解录像,WKTVBDE
https://www.chinapyg.com/viewthread.php?tid=6007&page=1&extra=page%3D1#pid36193
也可到我PYG目录下下载。
[ 本帖最后由 caterpilla 于 2006-7-10 18:47 编辑 ] 顶起
PYG越来越有教学气氛了,飘云领导有方,众版主尽职
后缀符号会越叫越响的! 这样详细的资料太珍贵了,收藏先 。。。
页:
[1]
2