陈贱伟 发表于 2012-11-24 11:12:57

VC++写WG内存不能为

OD上               用call测试工具   测试成功
关闭OD 打开游戏 用call测试工具测试失败
在VC++写入汇编也是一样
请看图
第一幅图在 OD上 用 call测试工具测试成功


第二幅图关闭OD 打开游戏 打开Call测试工具    测试失败


メ㊣逆ご帅☆ 发表于 2012-11-24 11:12:58

push 5;加数1,这里不可能出现内存错误
push 5;加数2,这里同上
push 00A47170
call 00459924;地址,这里不可能变
看弹出的错误看来错误应该出在第三个参数错误
1.第三参数可能是动态值(自己向上找应该可以找到指针)
2.可能需要改变内存页属性为可读,用VirtualProtect或者VirtualProtectEx(这里可能性比较小)
如果第二种情况成立 代表程序自身也是用VirtualProtect来Call所以可能性很小,但作者找茬的话倒是可能

陈贱伟 发表于 2012-11-24 16:16:11

这是push 00A47170 静态的
用VC++DLL注入出现这样的错误

陈贱伟 发表于 2012-11-24 16:23:00

メ㊣逆ご帅☆ 发表于 2012-11-24 16:05 static/image/common/back.gif
push 5;加数1,这里不可能出现内存错误
push 5;加数2,这里同上
push 00A47170


push 00A47170 是静态的

很奇怪的是用OD加载游戏 然后运行用VC++DLL注入游戏能成功
然后关闭OD重新打开游戏 在用VC++DLL注入游戏 失败

刘力 发表于 2012-11-24 16:32:53

メ㊣逆ご帅☆ 发表于 2012-11-24 16:42:42

本帖最后由 メ㊣逆ご帅☆ 于 2012-11-24 16:55 编辑

我去试下
发现不是静态的

メ㊣逆ご帅☆ 发表于 2012-11-24 16:43:53

第一次
ebx==00A87170
我测试调用成功
第二次
ebx== 00A77170
你RETN下看看能不能找到EBX的出处

メ㊣逆ご帅☆ 发表于 2012-11-24 16:52:09

我现在人在网吧,调试工具都在家里
要现场下载,刚才又不小心重启,所以
你自己先解决动态问题把,能解决最好
不能解决我晚上看看,我没碰过什么CALL,所以不知道能不能解决。。。

メ㊣逆ご帅☆ 发表于 2012-11-24 16:55:04

还有,我看你好像一会儿用CALL01测试
一会儿用CALL01_B测试
估计你是知道的,两个程序那个参数不同

陈贱伟 发表于 2012-11-24 17:40:51

还是搞不定    我是看着视频来做的 http://bbs.fishc.com/forum.php?mod=viewthread&tid=2025

陈贱伟 发表于 2012-11-24 20:40:44

是动态地址      我看错了

陈贱伟 发表于 2012-11-24 20:44:00

打开OD几次观察 才发现   A37170
                                    A47170
                                    A57170
                                    A67170
只有第二位 才有变化

天枰座 发表于 2012-11-28 10:49:10

应该是这个样子、就知道个大概、变化应该就不是基址了。好像是测试的时候下F2断点停下来时候内存地址、然后要是写程序的时候应该使用基址。
页: [1]
查看完整版本: VC++写WG内存不能为