当前位置: 首页 > news >正文

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

1. 概述

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

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

2. 实战-donntyousee

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

2.1 程序测试

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

放到虚拟机中运行一下

plz input your flag
8888888888888
wrong

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

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

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

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

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

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

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

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

2.2 花指令对抗

看汇编

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

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

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

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

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

E8 00 00 00 00                call    $+5
C3                            retn

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

2.3 虚函数

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

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

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

F7进入

又发现了花,我们nop掉

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

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

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

.data.rel.ro

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

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

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

2.4 RC4解密

提取密文

25CD54AF511C58D3A84B4F56EC835DD4F6474A6FE073B0A5A8C317815E2BF4F671EA2FFFA8639957

提取密钥

921C2B1FBAFBA2FF07697D77188C

rc4_enc()函数还有个 ^23

得解。

http://www.lryc.cn/news/520105.html

相关文章:

  • HAMi + prometheus-k8s + grafana实现vgpu虚拟化监控
  • Java基于SSM框架的在线视频教育系统小程序【附源码、文档】
  • mysql本地安装和pycharm链接数据库操作
  • Unity编程与游戏开发-编程与游戏开发的关系
  • 2025年第三届“华数杯”国际赛A题解题思路与代码(Python版)
  • 针对服务器磁盘爆满,MySql数据库始终无法启动,怎么解决
  • [Android]service命令的使用
  • 【芯片封测学习专栏 -- Substrate | RDL Interposer | Si Interposer | 嵌入式硅桥(EMIB)详细介绍】
  • spring cloud注册nacos并从nacos上拉取配置文件,spring cloud不会自动读取bootstrap.yml文件
  • 【深度学习地学应用|滑坡制图、变化检测、多目标域适应、感知学习、深度学习】跨域大尺度遥感影像滑坡制图方法:基于原型引导的领域感知渐进表示学习(一)
  • Spring Boot 支持哪些日志框架
  • 【翻译】2025年华数杯国际赛数学建模题目+翻译pdf自取
  • qt 窗口(window/widget)绘制/渲染顺序 QPainter QPaintDevice Qpainter渲染 失效 无效 原因
  • TIOBE编程语言排行靠前的编程语言的吉祥物
  • 【前端动效】HTML + CSS 实现打字机效果
  • 大疆上云API连接遥控器和无人机
  • JS逆向-atob和btoa分析
  • primitive 编写着色器材质
  • 计算机视觉算法实战——车道线检测
  • 网络安全-安全散列函数,信息摘要SHA-1,MD5原理
  • 树莓派-5-GPIO的应用实验之GPIO的编码方式和SDK介绍
  • 《零基础Go语言算法实战》【题目 2-10】接口的实现
  • Win32汇编学习笔记10.OD插件
  • 在vscode中已经安装了插件Live Server,但是在命令面板确找不到
  • C# SQL ASP.NET Web
  • 联想java开发面试题及参考答案
  • Node.js中的fs模块:文件与目录操作(写入、读取、复制、移动、删除、重命名等)
  • 代码的形状:重构的方向
  • 2021 年 3 月青少年软编等考 C 语言五级真题解析
  • 华为C语言编程规范总结