-
-
[求助]用WriteProcessMemory修改kernel32.dll返回487错误
-
发表于:
2009-5-5 00:58
6787
-
[求助]用WriteProcessMemory修改kernel32.dll返回487错误
以CREATE_SUSPENDED方式调用CreateProcessA创建进程后,希望修改被创建进程的kernel32.dll的一个导出函数的入口代码。先是用VirtualProtectEx修改页面保护属性,也一样调用失败,错误号487(无效地址)。
修改地址是从Loader那里得到的,不过kernel32.dll加载的位置基本上都相同,地址应该不会错。如果将修改地址改成0x00400000即Exe基地址,则调用成功。如果等被CreateProcessA的进程ResumeThread以后再调用也是成功。
当进程被CreateProcessA,但尚未ResumeThread之前,用调试器附加它的话,可以看到kernel32已经被加载,但是如果这时候不用调试器附加,直接用LordPE查看(进程名是系统,不过进程号是对的)内存区域,那么会发现kernel32这时候尚未被加载(kernel32对应的0x7c800000的区域不存在),但如果用调试器附加,再用LordPE查看那么kernel32就出现了。
那么问题来了,kernel32到底是什么时候加载的?不过这个问题也不重要,因为现在需要修改kernel32一个导出函数的入口,到底有没有办法让它在一开始就加载kernel32呢?这样才有办法修改吧?或者有其他方法可以实现同一效果吗?
等待大侠指点迷经……
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)