我学习如何使用 UPX 和 C 语言打包然后解包脚本。这是我打包的脚本:
这很简单,只需在屏幕上键入字符串“hello world”。好吧,我使用下一个命令打包它:
gcc -m32 main.c -o main
upx main.exe -o main-upx.exe
这对我来说一切正常,这是 DIE 的输出
如您所见,在这里我得到 PE 包含 UPX(best
选项,但没关系)。接下来我要做的是使用 x64dbg(x32 模式)打开打包文件。在那里我找到了popad规则,在一些命令之后,我到达了应用程序的实际解包入口点。这里是:
我确信这是实际的入口点,因为当我执行下面的所有代码直到它正常工作时,执行结果如下:
好吧,在它之后,当我找到程序运行的实际点时,我尝试使用内置应用程序Scylla创建一个内存转储:
我做的步骤:
- 在 OEP 中插入我的新入口点,对我来说是005E14C0
- 其次,我点击按钮IAT Autosearch
- 然后我点击获取进口
- 下一步是使用选定的设置转储内存,我单击转储并将文件另存为main-upx_dump.exe
- 毕竟,我只需单击最后一个按钮Fix Dump即可修复导入表并保存文件。
我要做的下一步是运行 .exe,当我在 .exe 中启动它时cmd
,我收到的输出什么都没有,只是一个空字符串,这里是:
我只是不明白我做错了什么,如果您知道可能出了什么问题,请写一个答案,非常感谢!