一个简单的逆向练习,实现了打开记事本程序之后先弹窗提示信息,然后再进入记事本程序。

事情缘起

最近在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(
HWND hWnd,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType
);

空白的地方设置需要弹窗的标题和内容,可以按住 Ctrl + E 快捷键进行编辑。
(新增内容与原程序之间的间隔距离应该有限制,没具体了解,不能隔太远)

增加弹窗代码如下,弹窗代码执行之后需要再跳转到原程序的入口点。

完成上述修改之后,需要导出修改的程序,另存为新程序。

修改程序入口点为新的新增的弹窗代码。

效果展示

免责说明

这篇文章旨在学习逆向工程及汇编代码。请遵守法律要求、不得用于任何非法目的的行为。