过程:
以前没破过VB编的程序,拿到程序后先扫描一下,得知是VB,没有加壳.反汇编.想着VB是双字节,不知能不能看到字符串,果然,什么有价值的字符串都没找到.没法,设断点吧.
bpxtext,无效
bpx __vbaStrCmp,无效
bpx messageboxexa,无效
无柰翻开破解教程看看,大多都是用SmartCheck做的介绍.以前用了一次,因硬盘坏软件都没了.下载.省略若干.运行SmartCheck,打开程序并运行,本来应该在窗口上显示的VB调用却一个都不出来.急人.在事件窗口上突然发现有VB运行时所调用的API函数.如下:
RegQueryValA
="RegCode"
嘿嘿.下断点Bpx RegQueryValA if*(esp->8)='RegCode'.
成功拦下,找比较的地方了.乖乖,到底是VB,一路下去,走了好远.有几处调用.改标志位试一下了.结果前两个都出错了.第三个成功.
于是往前.由于判断语句是检测AX是否为"FFFF",如果不是跳转.
再向前进入最近的一个调用.程序压栈几个参数后就是一个调用.返回后有判断语句.第一次我没有改,继续跟下去.程序马上跳到调用的结尾,AX值减一(原值为零),返回.
再运行程序,进入调用,改标志位,这次程序出错了.看来只好改调用后的判断语句了.简单讲就是这样.第一次晕晕的.呵.
修改地址:
:004097B2 E8F9120000 call 0040AAB0<==程序比较过程
:004097B7 8B7D08 mov edi, dword ptr [ebp+08]
;004097BA 663DFFFF cmp ax, FFFF<==不等则转,此处Nop掉