羽夏壳世界——实现篇

写在前面

  此系列是本人一个字一个字码出来的,包括代码实现和效果截图。 如有好的建议,欢迎反馈。码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作。如想转载,请把我的转载信息附在文章后面,并声明我的个人信息和本人博客地址即可,但必须事先通知我

你如果是从中间插过来看的,请仔细阅读 羽夏壳世界——序 ,方便学习本教程。

简述

  既然是实现篇了,我就再提一提与本教程配套的代码:

托管平台 链接
https://gitee.com/wingsummer/WingProtect
https://github.com/Wing-summer/WingProtecter

  注意,本教程并不会从零开始教你利用PE结构的知识写一个壳,但我会告诉你我是怎样做的。在开始进入下一篇实现篇正题,我们需要准备一下工具:VS2022(根据你自己喜欢的IDE来,我会使用它作为开发环境)、ASMJIT编译好的开发包,其他的就没啥了。
  ASMJIT是一个生成机器码的C++库,也就是所谓的汇编,它的 GitHub 地址在此,点击即可到它的源码仓库。在开发之前建议看它的 文档 ,不过看起来比较难受,很多功能我并没有看懂多少,不过看懂如何生成汇编并导出十六进制数据就足够了。如果你对ASMJIT的提供的函数使用有疑问,不要问我,我也不会。
  编译ASMJIT对于某些小白可能又是一个新问题,尤其是严重依赖VS的。但是,这个项目有CMakeLists.txt,说明我们可以用CMake将该项目转为VS项目,然后进行编译。至于怎么转成VS项目,怎么编译成功并使用,这个并不是我们实现篇的关注点。
  由于静态库我编译成功但无法让使用它的项目编译成功,故使用了动态链接库的方式进行使用。在托管平台上我提供的代码并没有该DLL,故需要自行编译该动态链接库,然后拷贝到调试目录下,才能够正常运行。
  如下是我的代码实现的一个节区的内存结构,如果感兴趣的话可以自行研究,后面的教程将会介绍每一处的实现细节:

  有关实现篇的注意事项大概就这么多,下一篇就正式进入实现篇正题。

下一篇

  羽夏壳世界—— PE 解析的实现

posted @ 2022-04-10 17:54  寂静的羽夏  阅读(180)  评论(0编辑  收藏  举报