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

打印 上一主题 下一主题

主题 793|帖子 793|积分 2379

1. 概述

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

  • 花指令对抗
  • 虚函数表
  • RC4
2. 实战-donntyousee

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

首先拿到这道题目,查壳看架构,elf64
[img=720,381.33700000000005]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552764.webp[/img]

放到假造机中运行一下
  1. plz input your flag
  2. 8888888888888
  3. wrong
复制代码
ida64反编译,发现软件进行了去符号处理,最直白就是没有main()函数。
但是ida自动帮我们定位到了系统入口函数start()。
[img=720,420.1875]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552040.png[/img]

然后我们查字符串 plz、wrong,均无法查到相关字符串
[img=720,416.6576527852894]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552674.png[/img]

可见程序对静态分析做了很大的操纵,防止一眼顶真。
然后我们回到系统入口函数start,F5反编译。
【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】
 ① 网安学习成长路径头脑导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
程序无法完全反编译,并且发现init和fini均无法正常辨认。
[img=720,231.09278350515464]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552683.png[/img]

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

2.2 花指令对抗

看汇编
[img=720,411.18176364727054]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552851.png[/img]

[img=720,392.76427360090446]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552150.png[/img]

很显着,程序做的混淆对抗是加了花指令。
花指令实质就是一串垃圾指令,它与程序本身的功能无关,并不影响程序本身的逻辑。在软件掩护中,花指令被作为一种手段来增加静态分析的难度。
花指令关键在于对堆栈变化以及函数调用的操纵。强硬的动态调试本事也可以无视花,直接en看。
对于此花指令,我们只需要将call $+5、 retn nop 即可
(该软件的每个有效的function都加入了此花指令)
  1. E8 00 00 00 00                call    $+5
  2. C3                            retn
复制代码
[img=720,415.65405405405403]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552274.png[/img]

[img=720,492.7659574468085]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552305.png[/img]

此时F5反编译,程序显着可读了
[img=720,388.7027027027027]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552286.png[/img]

[img=720,307.6651982378855]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552163.png[/img]

2.3 虚函数

我们重定名一下,方便理解
[img=720,315.3658536585366]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552297.png[/img]

可见程序还使用了虚函数重定位的技术。
下面我们进举措态调试,详细跟进函数。
[img=720,289.6969696969697]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552771.png[/img]

F7进入
[img=720,219.71530249110322]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552737.png[/img]

又发现了花,我们nop掉
[img=720,246.05890603085555]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552778.png[/img]

[img=720,276.17858857417184]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552056.png[/img]

然后进入下一个函数进行重复的操纵
[img=720,232.29781771501925]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552211.png[/img]

再往下程序结束,但是我们并没有看到密文比较的地方。
我们对rc4的两个函数进行交叉引用,看那里调用了他们呢
[img=720,335.32710280373834]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552469.png[/img]

[img=720,318.87521968365553]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552738.png[/img]

.data.rel.ro
这个节段是只读数据段的重定位段,在链接时重定位,内里放的就是我们的虚函数表。
看到下面还有一个sub_405CAA(),我们点击跟进。
[img=720,270.3132769766285]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552734.png[/img]

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

提取密文
25CD54AF511C58D3A84B4F56EC835DD4F6474A6FE073B0A5A8C317815E2BF4F671EA2FFFA8639957
[img=720,420.1875]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552275.png[/img]

提取密钥
921C2B1FBAFBA2FF07697D77188C
[img=720,69.37286202964653]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552939.png[/img]

rc4_enc()函数还有个 ^23
[img=720,303.2931726907631]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202501081552234.png[/img]

得解。
更多网安技能的在线实操练习,请点击这里>>
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表