吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 627|回复: 8
收起左侧

[新手问题] pe空白区添加弹窗程序运行错误

[复制链接]
route 发表于 2023-11-29 10:49
作为一个新手,想着先从简单的做起,pe文件头部在文件中转换到内存中不需要考虑内存对齐,我在节表后面的空白区加入弹窗代码,加入弹窗二进制数据后,未修改oep之前,我调试代码在我预期的位置看到了我加入的messagebox代码,但是当我修改oep到我添加的代码处后,程序运行报错,怀疑是有代码还未加载入内存,求大佬解惑,下面是我问题及修改步骤

问题1:我插入代码应该调用本程序自身的MessagexBoxA函数还是user32.dll的还是都可以使用?
问题2:为什么修改oep为我插入代码处后调回,程序运行出错?


1.分析程序,初始程序在77B4DD处开始运行

pe结构信息

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函数

程序本身中的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部分

pe部分


4,通过x64dbg查看插入代码在预期的内存4003C0处,未修改oep前,程序正常运行

未修改oep前

未修改oep前


5,修改oep为03c后,程序报错0xc000007b

修改oep后pe信息

修改oep后pe信息

运行报错截图

运行报错截图









发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

董督秀 发表于 2023-11-29 13:11
route 发表于 2023-11-29 12:39
大佬,能详细说下么,我看MessageBoxA反汇编也是这5条指令,没有push ebp ,mov ebp,esp,pop ebp这些操作

在写弹窗的汇编指令之前,需要通过pushad pushfd 保存寄存器;弹窗的汇编指令完成之后,通过popfd popad 还原寄存器,之后恢复被填充的字节并执行跳回原处的下一条指令。
董督秀 发表于 2023-11-29 12:02
 楼主| route 发表于 2023-11-29 12:39

大佬,能详细说下么,我看MessageBoxA反汇编也是这5条指令,没有push ebp ,mov ebp,esp,pop ebp这些操作
 楼主| route 发表于 2023-11-29 14:12
董督秀 发表于 2023-11-29 13:11
在写弹窗的汇编指令之前,需要通过pushad pushfd 保存寄存器;弹窗的汇编指令完成之后,通过popfd popad  ...

是把汇编代码改成
pushad
pushfd
push 0
push 0
push 0
push 0
call MessageBoxA
popfd
popad
jmp oep
然后把oep改成pushad的地址了,但是还是一样运行报错
lies2014 发表于 2023-11-29 15:05
出错代码的意思是 STATUS_INVALID_IMAGE_FORMAT 映像无效
楼上讲的问题可能会影响后面指令的执行,如果入口正确至少会先弹出messagebox
但你把代码写在文件头是几个意思?代码段是从401000开始的
 楼主| route 发表于 2023-11-29 16:43
本帖最后由 route 于 2023-11-29 16:45 编辑
lies2014 发表于 2023-11-29 15:05
出错代码的意思是 STATUS_INVALID_IMAGE_FORMAT 映像无效
楼上讲的问题可能会影响后面指令的执行,如果入 ...

我看网上课讲的文件头部空白区也可以插入,401000是内存中节开始的位置吧
lies2014 发表于 2023-11-29 19:38
route 发表于 2023-11-29 16:43
我看网上课讲的文件头部空白区也可以插入,401000是内存中节开始的位置吧

你第4步骤那张x64dbg的图中 4003c0 不就是内存地址?你试试x64dbg载入程序是否能够停在你修改后的入口就知道可不可以了
 楼主| route 发表于 2023-12-1 09:38
lies2014 发表于 2023-11-29 19:38
你第4步骤那张x64dbg的图中 4003c0 不就是内存地址?你试试x64dbg载入程序是否能够停在你修改后的入口就 ...

只能设置硬件断点,但是断不下来
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 01:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表