游戏迷提供最新游戏下载和手游攻略!

小工具的诞生:特征代码生成学习器2码4码6码衣服是多大

发布时间:2024-06-02浏览:6

2020.02.16

周六大家在大白群里讨论签名的问题,我也参与了话题,发表了一些想法:

首先,我们需要区分是否是代码(如果是数据,就不需要替换签名代码),然后从代码开头提取字节,然后添加规则进行更改(不建议更改与签名相关的立即值)。最后,记得告诉用户:不要从函数开头提取,而是寻找明显的签名。最后,我们需要使用工具来测试提取的数据是否唯一。如果不唯一,我们需要在调试器中再次分析。现在你知道我为什么不写这样的工具了吧……

没必要提取真实签名的多个版本,懂的人自然就能明白什么情况下应该用??代替。而加入新旧版本进行对比的想法本身就是错误的方向。??需要改的情况有几种:一是重定位数据,基本上每个版本都不一样,必须改。E8之后的(相对偏移值)也需要改;二是类成员偏移;三是函数局部变量的堆栈偏移值。如果除了这三种情况之外还改变了签名代码,那么很有可能就是签名代码所在的函数的代码被改了。

当然我还是支持这些小玩意儿的发展的,小玩意儿能增加大家对变化的体验和理解,但要让它们适合所有年龄段的人,就有点难了。

2020.02.16

周日早上醒来,心想既然昨天已经想得差不多了,不如趁着周日不用上班的时候把这个小工具实现一下。

(01)之前用过capstone库,想象的是先输入代码HEX数据,然后界面就会显示对应的汇编指令,这样大家先了解一下汇编指令对应的HEX格式(因为每条汇编指令都有格式)。

后来发现上面的文本控件没有对齐效果,于是就用列表控件代替了:

(02)首先需要解决x64的反汇编和替换重定位函数(x86应该类似,后续可以完善)。重定位是特征代码替换中最重要的部分。如何从capstone返回数据中找出哪些是全局的,哪些是(比如E8)指令相对偏移数据,还需要更多的测试和分析。最后我们找到了一个满意的解决方案。有了思路,剩下的就好办了。

(03)接着我开始研究“替换寄存器偏移量”、“替换立即值”和“替换跳转偏移量”等功能。通过比较,我发现 x64dbg 中的反汇编窗口只是简单地列出了 HEX 值,字节之间有空格,而 OD 则将相关数据组合在一起,并去除了中间的空格。我觉得这样的体验更好,所以我就遵循了 OD 的展示风格。

(04)做完这些,已经快到吃晚饭的时间了,不过总体的工作量也差不多完成了。从调试器里找了几组数据,在 x64 模式下简单测试了一下四个替换函数。然后加入了检查逻辑,检查输入的数据(HEX 和代码地址栏里的数据)是否合规。这部分我有现成的代码,直接复制粘贴就行了。现在开始加入 x86 模式。和上面一样,也需要分析一些细节,不过好在不是太难。

问题解决之后我们发现需要将原有的指令和新的特性代码进行对比,上下对比的方式比左右对比的方式效果更好,因此对布局进行了调整。

2020.02.17

凌晨一点,一个小工具完成了。从设计到实现花了差不多一天的时间,代码有六七百行(包括复制的一两百行)。分享的时候已经是周一早上了,刷完牙洗完脸,趁着还不算太困,就把这个工具的开发过程记录下来,分享给对编程感兴趣的朋友。

由于开发仓促,功能虽然较少,但难免会有未考虑和测试不到的bug,欢迎大家使用并反馈,另外对小工具有什么建议和想法也欢迎大家交流讨论。

~~~~~~~~~~~~~~~~~~~

签名代码生成学习器

特征码是在功能码不变的情况下,可以用来进行下一版本定位的数据。

我在Baymax小组里看到了关于功能代码相关话题的讨论。

我恰好对生成特征代码有一些想法。

于是我就利用星期天的时间实现了这个小工具。

注意:

1.请复制代码对应的完整的HEX值!

2.不建议从函数头中选择签名。

3. 移动某些功能后,某些寄存器可能也会发生变化。

阐明:

该工具是基于capstone开发的。

此工具主要用来帮助您理解汇编指令对应的HEX字节的含义,希望能够给您带来方便。

仅提供一些简单功能,如果您有好的建议,也欢迎反馈。

文件版本:1, 0, 0, 1003

大小:709408 字节

修改时间:2020 年 2 月 17 日,1:43:52

MD5:D4559F128FFB877EC4F1C378909AB2CC

SHA1:ECEBB77C5C5CB943DB63F0E25201D337ACCE6240

Nisy/PYG 2020.02.17

热点资讯