1

我学习如何使用 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创建一个内存转储:

在此处输入图像描述

我做的步骤:

  1. 在 OEP 中插入我的新入口点,对我来说是005E14C0
  2. 其次,我点击按钮IAT Autosearch
  3. 然后我点击获取进口
  4. 下一步是使用选定的设置转储内存,我单击转储并将文件另存为main-upx_dump.exe
  5. 毕竟,我只需单击最后一个按钮Fix Dump即可修复导入表并保存文件。

我要做的下一步是运行 .exe,当我在 .exe 中启动它时cmd,我收到的输出什么都没有,只是一个空字符串,这里是:

在此处输入图像描述

我只是不明白我做错了什么,如果您知道可能出了什么问题,请写一个答案,非常感谢!

4

0 回答 0