软件系统安全逆向分析-混淆对抗

admin 2026-04-02 04:56:56 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文通过一个名为’donntyousee’的软件实战案例,详细讲解了逆向分析中如何应对花指令和虚函数表等混淆技术。作者首先利用IDAPro发现程序入口被花指令干扰,通过nop掉call$+5和retn指令使其逻辑清晰化。随后,在动态调试中跟进函数,定位到.data.rel.ro节段中的虚函数表,并最终找到RC4加密算法的密钥和密文,成功还原程序逻辑。 综合评分: 85 文章分类: 逆向分析,二进制安全,实战经验,WEB安全,渗透测试


cover_image

软件系统安全逆向分析-混淆对抗

IX221 IX221

蚁景网络安全

2026年3月30日 17:40 湖南

1. 概述

在一般的软件中,我们逆向分析时候通常都不能直接看到软件的明文源代码,或多或少存在着混淆对抗的操作。下面,我会实践操作一个例子从无从下手到攻破目标。

  1. 花指令对抗
  2. 虚函数表
  3. RC4

2. 实战-donntyousee

题目载体为具有漏洞的小型软件,部分题目提供源代码,要求攻击者发现并攻击软件中存在的漏洞。

2.1 程序测试

首先拿到这道题目,查壳看架构,elf64

放到虚拟机中运行一下

plz input your flag8888888888888wrong

ida64反编译,发现软件进行了去符号处理,最直白就是没有main()函数。

但是ida自动帮我们定位到了系统入口函数start()。

然后我们查字符串 plz、wrong,均无法查到相关字符串

可见程序对静态分析做了很大的操作,防止一眼顶真。

然后我们回到系统入口函数start,F5反编译。

程序无法完全反编译,并且发现init和fini均无法正常识别。

进入main函数,即sub_405559(),无可用信息。

2.2 花指令对抗

看汇编

很明显,程序做的混淆对抗是加了花指令。

花指令实质就是一串垃圾指令,它与程序本身的功能无关,并不影响程序本身的逻辑。在软件保护中,花指令被作为一种手段来增加静态分析的难度。

花指令关键在于对堆栈变化以及函数调用的操作。强硬的动态调试能力也可以无视花,直接en看。

对于此花指令,我们只需要将call $+5、 retn nop 即可

(该软件的每个有用的function都加入了此花指令)

E8 00 00 00 00                call    $+5C3                            retn

此时F5反编译,程序明显可读了

2.3 虚函数

我们重命名一下,方便理解

可见程序还使用了虚函数重定位的技术。

下面我们进行动态调试,具体跟进函数。

F7进入

又发现了花,我们nop掉

然后进入下一个函数进行重复的操作

再往下程序结束,但是我们并没有看到密文比较的地方。

我们对rc4的两个函数进行交叉引用,看哪里调用了他们呢

.data.rel.ro

这个节段是只读数据段的重定位段,在链接时重定位,里面放的就是我们的虚函数表。

看到下面还有一个sub_405CAA(),我们点击跟进。

至此,我们找到了程序的所有逻辑。

2.4 RC4解密

提取密文

25CD54AF511C58D3A84B4F56EC835DD4F6474A6FE073B0A5A8C317815E2BF4F671EA2FFFA8639957

提取密钥

921C2B1FBAFBA2FF07697D77188C

rc4_enc()函数还有个 ^23

得解。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:蚁景网络安全 IX221 IX221《软件系统安全逆向分析-混淆对抗》

评论:0   参与:  0