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。只是因为目前还没有见到有采用类似技术的共享软件,暂时对此保持沉默。
|