无依赖的程序

逆向工程 视窗 恶意软件 发展 登录
2021-06-29 09:27:08

在阅读我可以静态链接(不导入)Windows 系统 DLL的答案时吗?我想出了另一个问题。所以:

  1. 有没有办法编写一个没有依赖项的程序(也没有静态编译的东西——它只有我的代码),并且假设kernel32.dll无论如何都会加载/映射到进程中,一切都在运行时得到解决
  2. 我的假设kernel32.dll是否正确?

在运行时,我的意思是使用PEB结构。

4个回答

如果您问的是 PE 文件,并且“无依赖关系”的意思是“没有静态导入的 DLL”,那么是的。

看到\yoda\NoImports.exehttps://corkami.googlecode.com/files/BinaryCorpus_v2.zip作为一个例子。

这不是一个可移植的技巧,但是当可执行文件启动时,kernel32.dll 总是加载在相同的地址,这意味着 LoadLibraryA 和 GetProcAddress 总是在相同的地址。您可以对这些偏移进行硬编码,然后从那里开始。

是的,没有依赖关系的程序是可能的。

要导入 APi,首先需要定位 kernel32(通过堆栈+MZ扫描,或PEB)然后定位导出(通过导出解析或硬编码值)。

是的。

  1. 使用任何已知技巧(PEB 或任何其他方式)查找 kernel32 的地址
  2. 实现一个简单的出口部分解析器和找到的地址LoadLibraryGetProcAddress
  3. 使用它们来加载您想要的任何其他 API。