好友
阅读权限10
听众
最后登录1970-1-1
|
route
发表于 2023-11-29 10:49
作为一个新手,想着先从简单的做起,pe文件头部在文件中转换到内存中不需要考虑内存对齐,我在节表后面的空白区加入弹窗代码,加入弹窗二进制数据后,未修改oep之前,我调试代码在我预期的位置看到了我加入的messagebox代码,但是当我修改oep到我添加的代码处后,程序运行报错,怀疑是有代码还未加载入内存,求大佬解惑,下面是我问题及修改步骤
问题1:我插入代码应该调用本程序自身的MessagexBoxA函数还是user32.dll的还是都可以使用?
问题2:为什么修改oep为我插入代码处后调回,程序运行出错?
1.分析程序,初始程序在77B4DD处开始运行
pe结构信息
程序运行入口图
2.我要插入的代码在pe文件头部的3C0处,在内存中展开的位置位4003C0,插入的代码为:
6A 00
6A 00
6A 00
6A 00
E8 00 00 00 00 (红色部分需要计算)
E9 00 00 00 00 (红色部分需要计算)
3.计算插入代码,这里我查找插入的MessageBoxA函数,程序自身和user32中均有MessageBoxA函数,均做尝试过,这里只展示调用user32中的
程序本身中的MessageBoxA函数
user32中的MessageBoxA函数
根据公式红色部分为:跳转地址-当前地址-5
77C29D50-4003C8-5=7782 9983
77B4DD-4003CD-5=37B10B
根据小端存储,插入的代码为:
6A 00
6A 00
6A 00
6A 00
E8 83 99 82 77
E9 0B B1 37 00
pe部分
4,通过x64dbg查看插入代码在预期的内存4003C0处,未修改oep前,程序正常运行
未修改oep前
5,修改oep为03c后,程序报错0xc000007b
修改oep后pe信息
运行报错截图
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|