修改记事本程序
一个简单的逆向练习,实现了打开记事本程序之后先弹窗提示信息,然后再进入记事本程序。
事情缘起
最近在B站上看了安天的逆向工程教程,由安天的李柏松工进行讲解。
视频链接为:https://www.bilibili.com/video/BV1nf4y1R7Mz
在上面视频合集里,第一集最后面,李工给了这个练习题。
在第二集后面,程俊杰同学给出了在 Windows 10 上的解决方案。
他的方案大致是使用 Stud_PE
新增加一个 section
,同时导入 user32.dll
,然后再新增加的 section
里添加代码,实现弹窗,最后修改程序入口。
我在 Windows XP SP3 虚拟机上增加 section
时会报错,第一步没成功。
按部就班
按照李工PPT里的步骤进行实践,最终成功实现了目标。
寻找 MessageBoxA 的地址
找到 MessageBoxA
的地址为 77D507EA
编写弹窗代码
在 https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messageboxa 网站上,对于 MessageBoxA
有详细的描述。
函数接收4个参数,汇编传参时先 push 后面的参数入栈。
int MessageBoxA( |
在空白的地方设置需要弹窗的标题和内容,可以按住 Ctrl + E
快捷键进行编辑。
(新增内容与原程序之间的间隔距离应该有限制,没具体了解,不能隔太远)
增加弹窗代码如下,弹窗代码执行之后需要再跳转到原程序的入口点。
完成上述修改之后,需要导出修改的程序,另存为新程序。
修改程序入口点为新的新增的弹窗代码。
效果展示
免责说明
这篇文章旨在学习逆向工程及汇编代码。请遵守法律要求、不得用于任何非法目的的行为。