羽夏壳世界之花指令的实现,介绍花指令的实现原理和实现方式。 写在前面 此系列是本人一个字一个字码出来的,包括代码实现和效果截图。 如有好的建议,欢迎反馈。码字不易
此系列是本人一个字一个字码出来的,包括代码实现和效果截图。 如有好的建议,欢迎反馈。码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作。如想转载,请把我的转载信息附在文章后面,并声明我的个人信息和本人博客地址即可,但必须事先通知我。
花指令原理你如果是从中间插过来看的,请仔细阅读 羽夏壳世界——序 ,方便学习本教程。
在学习指令的原理之前,我建议你学一下硬编码,相关博文可以参考 羽夏笔记——硬编码(32位) 或者官方的 Intel
白皮书。
花指令的原理十分简单,本篇可能是我写过最短的文章。花指令无非就是干扰人的视线以及静态分析器的,在英文为JunkCode
,即垃圾代码,下面我以32位为例,写一个示例看看:
这是啥,什么乱七八糟的,看不明白,如果我执行完跳转之后,代码就成这样了:
这会就可以明显的看清楚它的真面目了,就是传参调用puts
函数。我们可以用nop
指令清楚干扰视线的花指令,会和正常阅读代码差不多了。
上面的例子已经把花指令的原理和简单的实现都给介绍了,下面我们来看看该项目代码的花指令相关代码:
#define FakeProtect(a) a.embed(WingProtectFakeCode, SizeofWingProtectFakeCode);
#define WingProtectFakeCode "\xEB\xCWingProtect\xEB"
别看这是一条简单的字符串内联宏,用起来可是相当的恶心人,如下是效果:
上面的代码就是调用了一个简单的Sleep
函数,它的真实面目如下图所示:
有关花指令的实现,就到此结束了。
下一篇羽夏壳世界——实现篇小结
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可