VB anti-loader 2种常用方法介绍
所谓loader,主要指smartceck、wkt vb debugger等。
从目前VB共享软件的保护情况看,源代码层面主要还是运用二种方法来对抗。
1. 查找特定的窗口标题
A: 调用vb函数AppActivate语句查找smartcheck窗口并关闭。
这种方法见于exdec附带教程中的vb crackme anti3.exe
403937: 27 LitVar_Missing
40393A: 3a LitVarStr: (
local_0094 ) Numega SmartCheck
40393F: 4e FStVarCopyObj
local_00A4
403942: 04 FLdRfVar
local_00A4
403945: 0a ImpAdCallFPR4: rtcAppActivate
40394A: 36 FFreeVar
403951:
63 LitVar_TRUE
403954: 1b LitStr: %{F4}
403957: 0a ImpAdCallFPR4:
rtcSendKeys
40395C: 35 FFree1Var
local_00A4
40395F:
63 LitVar_TRUE
403962: 1b LitStr: %Y
403965: 0a ImpAdCallFPR4:
rtcSendKeys
40396A: 35 FFree1Var
local_00A4
AppActivate "Numega SmartCheck"
尝试激活SmartCheck窗口, "Numega SmartCheck"
是SC的窗口标题
SendKeys "%{F4}", True 发送ALT+F4关闭smartcheck
SendKeys "%Y", True 发送ALT+Y确定
B: 用API findwindow查找
FindWindow('nmscmw50',nil);
//nmscmw50系SC类名
或 FindWindow(nil,'numega
SmartCheck');
2. 时间记数
通过计算某段代码运行时间来知道有否被load(类似SC、WKT等loader载入目标程序时需要较多时间)
以下代码见于 斗地主 4.6 Build 438
46B729: 0a ImpAdCallFPR4: rtcgettimer
// (1)
....
....
46BEF0: 0a ImpAdCallFPR4: rtcgettimer
// (2)
46BEF5: 6e FLdFPR4
46BEF8:
af SubR4
// (2)- (1)
46BEF9:
ea CR4R4
46BEFA: f4 LitI2_Byte:
0x14 20
46BEFC: eb CR8I2
46BEFD: dc GtR4
// >20秒
46BEFE: 1c BranchF:
46BF05 |
46BF01: 00 LargeBos
|
46BF03: Lead1/c8 End
结束 <-- YES
46BF05: 00 LargeBos
继续
<-- NO
....
....
46C34F: 0a ImpAdCallFPR4: rtegettimer
// (3)
46C354: 6e FLdFPR4
46C357: af
SubR4
// (3)-(1)
46C358: ea CR4R4
46C359: f4 LitI2_Byte: 0x14 20
46C35B: eb CR8I2
46C35C: dc GtR4
// >20秒
46C35D: 1c BranchF:
46C364 |
46C360: 00
LargeBos
|
46C362: Lead1/c8 End
结束 <--
YES
46C364: 00 LargeBos
继续
<-- NO
以上只是讲述了常见的VB anti-loader保护方法;然而,通过使用内联汇编(VB中确实可以不完全实现)或者结构化异常技术,完全能实现更强大的anti功能----有兴趣的话不妨试试aming或我的vb
crackme。只是因为目前还没有见到有采用类似技术的共享软件,暂时对此保持沉默。
- 标 题:VB anti-loader 2种常用方法介绍 (3千字)
- 作 者:小楼
- 时 间:2002-7-13 11:35:34
- 链 接:http://bbs.pediy.com