今天和大家分享一个push窗口法的另一种利用方法暂且叫它call窗口法(不知道什么是push窗口法的先论坛搜索)
有些易语言程序搜ff25找到位置之后没有push 0x5201000X
通常是因为易语言IDE在菜单工具->系统配置->通常中有个选项被修改过
红框中的部分一般默认是启动窗口
如果选择启动窗口启动那么编译出来的程序就可以使用原版push窗口法
但是如果选择了启动子程序就会出现没有push 0x5201000X的情况
下图是比较
例程中的启动窗口.exe 可以看到push 0x52010001
例程中的启动子程序.exe 则没有push 0x5201000X
不能使用push窗口法那我们就换个思路
push 0x80000002
push 0x0
push 0x1 //载入函数 的第三个参数 是否采用对话框方式 一般填 真
push 0x0
push 0x0
push 0x0
push 0x10001
push 0x6010002 //这个值会变动 但是经测验未发现影响
push 窗口ID
push 0x3
mov ebx,载入窗口函数
call 支持库命令调用函数
add esp,0x28
这是易语言程序中一个标准的调用载入函数载入窗口的汇编代码
那么我们可以模拟这个调用实现无中生有地载入窗口
(写过外挂会写call的朋友肯定明白了这个方法的思路)
那么我们需要的参数就是窗口ID 载入窗口函数地址 支持库命令调用函数地址
(在下文制作补丁时 实际上只使用了窗口ID与载入窗口函数地址)
先用例程来测试下
本人写了个小插件方便大家制作补丁
将EWND.DLL插件放到OD目录下的plugin目录中
OD载入例程启动子程序+多窗口.exe F9运行 插件栏找到EWND 点打开插件
主窗口长这样 (目标基址保留给易语言dll 若程序为exe则不用改)
点击一键获取 然后点击枚举窗口
经过测试 52010003是启动子程序中载入的窗口1 52010008与5201000A分别是窗口2与窗口3
将52010008或5201000A填入测试载入窗口ID中点击载入测试
可以看到在不点击窗口1上的按钮的情况下也能载入窗口2
接下来制作补丁
以上图程序为例 那么两个参数窗口ID 载入窗口函数地址分别是0x52010008 0x00401110
(因为使用DLL补丁 支持库命令调用函数地址可省略)
看补丁例程
这里我用的是xjun大大写的LOADER
最后将编译出来的loader.exe 补丁例程.dll与启动子程序+多窗口.exe放到同一目录下双击loader启动程序
窗口2被成功载入
LOL喜洋洋使用了启动子程序启动 不适用原版push窗口法 但适用call窗口法
注意:
1.如果出现
就将补丁源码中的RtlCopyMemory改为RtlMoveMemory
2.本方法可能会导致程序的皮肤无法加载原因不明
3.此方法同样适用与因代码被VM 搜索0x10001无法找到窗口ID的易语言程序
例程与插件 源码下载
http://pan.baidu.com/s/1gd6MzpL