“外挂”——逆向软件的分析与破解

news2024/9/20 16:42:04
本文来源无问社区,更多实战内容,渗透思路可前往查看icon-default.png?t=N7T8http://www.wwlib.cn/index.php/artread/artid/11458.html#maodian1
前言:

“外挂”的制作离不开软件的分析破解,这平时做ctf中的逆向题是有⼀定的差别的。最直观的区别体现在两者的⼤⼩。⼀个逆向题⼀般只有⼀两兆⼤⼩,⽽⼀般的软件动辄就是⼗⼏或⼏⼗兆⼤⼩。这⽆疑增⼤了分析的困难度,这篇⽂章将就我最近做过的⼀些软件的破解进⾏总结。

⼀、软件分析思路:

这⾥以爱思助⼿为例,假设我们需要定位它的新建⾳乐播放列表功能。

1. 观察程序文件夹:

要对⼀个软件进⾏分析⾸先,需要⼤概了解⼀下整个程序的框架,可以查看⼀下它的⽂件夹

图片

通过程序的⽂件夹可以⼤致了解到程序的整体框架以及在运⾏时可能会调⽤到的动态链接库,这⼀点是⽐较重要的,因为程序很多时候并不是把所有的功能都放在主程序中⽽是将特定的功能集成在特定动态链接库⾥⾯,在观察⽂件夹内容时注意⼀下哪些是系统库,哪些可能是软件开发者⾃⼰编写的库。⽐如上图中的 avcodec-57.dll 就是FFmpeg的开源跨 平台⾳视频处理库的其中⼀个。

图片

通过观察这些库⽂件还可以了解到程序的⼀些图形化界⾯是⽤什么开发的⽐如这个程序就是⽤的QT来进⾏图形化界⾯的开发。

2. 运行程序:

⼤致了解了程序的框架之后,尝试运⾏⼀下该程序,了解⼀下需要分析的新建⾳乐播放列表模块:

图片

点击新建播放列表按钮,输⼊需要新建的⾳乐⽂件夹名,之后会弹出⼀个对话框,显⽰正在新建播放列表:

图片

从这⾥我们可以获得到的信息是在确认播放列表的名称后,程序就会弹出窗⼝,⽽弹出窗⼝就会调⽤Windows的API,之后在分析的时候可以考虑在函数CreateWindExW()上下断点。

3. 查壳:

⼤致了解了程序的运⾏流程之后基本的信息就收集的差不多了,最后再看⼀下程序是否有加壳,这⾥使⽤查壳⼯具查看程序的加壳情况和了解程序是32位还是64位:

图片

可以看到⽬标程序没有加壳,是32位程序。

4. 程序分析:

对程序的分析使⽤的⼯具主要是OD还有IDA这两把利剑,tips:分析程序之前最好把程序的地址随机化关了,⽅便OD和IDA对⽐分析。

⼤致理⼀下思路,⾸先⽬前还⽆法确定这个功能是在主程序中实现还是调⽤的dll来实现的,可以考虑先给新建窗⼝的API下断点,然后观察堆栈看是否能回溯到⽤户代码:

先将程序跑起来,把x32dbg附加上取,Ctrl+G在CreateWindExW()上⾯下断点

图片

然后按下新建⾳乐播放列表。查看x32dbg可以发现程序断下来了,观察它的堆栈

图片

发现程序的上层并没有主程序的代码,⼀直在QT⾥⾯绕。显然使⽤API下断点的办法不太⾏得通,这⾥可能时调⽤的dll来实现的程序功能,为了验证这个猜想使⽤ida以查找字符串的⽅式去定位与music或者media有关的函数:

图片

观察这些函数都有⼀个特点就是会有不少的QString的函数,这些函数的作⽤是绘制窗⼝,所以到这⾥基本可以判定主函数中并没有我们要找的新建⾳乐播放列表功能,到了这⼀步就要考虑对程序所引⽤的DLL进⾏分析,具体操作为打开x32dbg的内存布局窗⼝

图片

这⾥可以看到程序加载的动态链接库,排除掉⼀些系统库,可以尝试对⼀些可疑的DLL下内存访问断点:

图片

这⾥需要注意的是不要下错地⽅,是在代码段下断点。可以⼀次多下⼏个,看断在了那个dll中,这个实例程序最终断在了idm_media.dll中,查看该dll引⽤的函数:

图片

可以看到其中⼀个函数就是新建⾳乐播放列表模块。

⼆、软件破解示例:

以国外的⼀个变声器软件MagicMic进⾏为例,该程序的vip功能提供了很多类型的声线,这⾥尝试获得其vip权限:

1.前期信息收集:

还是⼀样,在开始分析程序之前做三个步骤:观察程序⽂件夹结构、运⾏了解情况、查壳。

1.程序文件夹结构:

图片

这⾥⽂件夹较多,不太好截图,⼤概总结⼀下,⽬录内包含qt库,和⼀些⾳频处理的dll。tips:分析时每个⽂件夹都可以查看⼀下⼤致了解程序框架。

2. 运⾏情况:

图片

上图是运⾏后程序的样⼦,每个图标右上⾓的钻⽯标识就是vip才能⽤的声⾳特效,尝试点击会弹出如下的窗⼝:

图片

3. 查壳:

64位,⽆壳

图片

2. 软件分析:

在运⾏时可以看到弹出的对话框中有⼀些“解锁VIP”等字符,使⽤x64dbg打开MagicMic,先进⼊MagicMic.exe模块,然后在反汇编窗⼝区域右击搜索当前模块的字符串

图片

接着等待字符串搜索完毕后,得到下图结果:

图片

发现搜索出来的结果不算太多,可以尝试先对上⾯⼀半的结果下断点,然后F9运⾏程 序,回到程序触发vip注册窗⼝看程序是否有断下来,通过这样的⼆分法不断缩⼩范围可以发现最后断在了字符串“Save(Non-vip)”处:

图片

分析这个部分的汇编代码,可以发现是否执⾏Save(Non-vip)的代码是根据地址:7FF7CEA07403 处的je判断

图片

这个je判断的下⾯就是Save(vip)的代码,这⾥直接将je改成jne:

图片

再试着运⾏⼀下程序,发现程序依然会弹出vip注册窗⼝,说明还得往上更,

图片

jne上⾯有⼀条call指令,双击更过去看⼀下:

图片

这部分的逻辑就很容易懂了,关键在选中的GetLisecseState函数,程序就是通过它来获取许可状态,函数返回值如果不为⼀则表⽰不是vip,动调之后可以看到当前没有vip时 eax的值为0:

图片

这⾥可以将cmp eax,1改为cmp eax,0,或者把下⾯的jne改成je,两个修改⽅式任选其⼀即可。将这个部分修改后再次运⾏观察是否成功破解:

图片

可以发现现在所有的⾳效就都可以下载使⽤了。最后Ctrl+P⽣成补丁:

图片

选择修补⽂件,保存打完补丁的程序到程序⽂件夹就可以正常使⽤了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode 438. 找到字符串中所有字母异位词(java实现)

解题思路&#xff1a;滑动窗口。 异位词的典型解题方法就是用数组来统计出现的个数。本题也不例外。 直接上代码来进行讲解&#xff1a; public List<Integer> findAnagrams(String s, String p) {//初始化返回数组List<Integer> res new ArrayList<>();if …

百问网全志T113-PRO LVGL环境配置

运行LVGL示例 启动开发板 ​ 按要求接入电源或Type-c数据线&#xff0c;拨动拨码开关&#xff0c;将开发板上电 运行LVGL示例 ​ 打开串口终端软件&#xff0c;这里我使用MobaXterm软件演示&#xff0c;选择开发板的串口终端号&#xff0c;可以在设备管理中查看 这里我的串…

喜加一!望繁信科技再摘「2023年度新锐技术品牌奖」

1月31日&#xff0c;望繁信科技再次获颁由全球知名科技社区InfoQ评选的「2023年度新锐技术品牌奖」。这是InfoQ连续第二年将该奖项授予望繁信科技&#xff0c;用以肯定过去一年中&#xff0c;望繁信科技在流程挖掘与智能领域的技术创新与业务价值创造。 InfoQ在颁奖词中写到&…

【STM32】GPIO口以及EXTI外部中断

个人主页~ 有关结构体的知识在这~ 有关枚举的知识在这~ GPIO口以及EXTI外部中断 GPIO一、简介二、基本结构三、输入输出模式1、输入模式&#xff08;1&#xff09;上拉输入&#xff08;2&#xff09;下拉输入&#xff08;3&#xff09;浮空输入&#xff08;4&#xff09;模拟输…

【Python】面向对象的程序设计

一、面向对象的介绍 1.对象 对象是一种抽象概念&#xff0c;表示客观世界存在的实物&#xff0c;现实世界中能够看到的、触碰到的都可以成为对象&#xff0c;如&#xff1a;人、大象、小猫等。 对象通常分为两个部分&#xff0c;即静态部分和动态部分。静态部分为“属性”&a…

UE4 SLUA IOS打包报错解决办法

IOS打包报错&#xff1a;Fatal error "lua.h" file not found &#xff1a; SLua Unreal 在IOS远程打包编译的时候 Exteral没有copy过去&#xff0c;导致lua.h文件报错找不到&#xff0c;看了网上也没有写解决办法 错误信息截图&#xff1a; github上也有很多遇到改…

【每日一题】【动态规划(DP) 】【分治 迭代】“葡萄城杯”牛客周赛 Round 53 D题 小红组比赛 C++

“葡萄城杯”牛客周赛 Round 53 D题 小红组比赛 题目背景 “葡萄城杯”牛客周赛 Round 53 题目描述 小红希望出一场题目&#xff0c;但是他的实力又不够&#xff0c;所以他想到可以从以前的比赛中各抽一题&#xff0c;来组成一场比赛。不过一场比赛的难度应该是有限制的&a…

【nginx】nginx日志出现on文件

问题描述 生产发现容器里多出了一个on文件&#xff0c;非常大。 去看nginx配置已经这样保持16个月了&#xff08;已经去掉其他无关内容&#xff09; 原因解释 这个问题是因为nginx配置了access_log on; 有两个知识点&#xff1a; 1.access_log只有off的特殊值&#xff0c…

三菱电火花设备采集

三菱电火花机器一般情况下应该很少能见到,但在模具行业应该说是一种常见的加工设备。 一、通过官方手册采集数据 1.资料使用 连接方式: 这里重点关注下端口是1112 这里主要讲NC的状态转换 我们重点关注的是状态相关命令,手册中还支持NC程序上传和下载,感兴趣的话可以研究…

排序算法:堆排序,golang实现

目录 前言 堆排序 代码示例 1. 算法包 2. 堆排序代码 3. 模拟程序 4. 运行程序 5. 从大到小排序 堆排序的思想 堆排序的实现逻辑 1. 构建最大堆 2. 排序 循环次数测试 假如 10 条数据进行排序 假如 20 条数据进行排序 假如 30 条数据进行排序 假设 5000 条数据…

数据库——战德臣

1. 数据存储体系 1.1 计算机系统的存储体系 1.将不同性价比的存储组织在一起&#xff0c;满足高速的、大容量、低价格需求 2.CPU与内存直接交换信息&#xff0c;按存储单元&#xff08;存储字&#xff09;进行访问 3.外存按存储块进行访问&#xff0c;其信息先装入内存&…

NSSCTF-GDOUCTF 2023新生赛

[GDOUCTF 2023]hate eat snake 考察&#xff1a;js代码审计 打开题目&#xff0c;发现需要坚持60秒&#xff0c;那么简单的一个思路就是修改得分的变量>60即可 办法1&#xff1a;修改变量 右键查看源代码&#xff0c;之后发现有一个snake.js的文件&#xff0c;ctrlf搜索i…

健康小贴士丨中考考生怎么吃得好?

文章目录 引言三餐最佳的进食时间引言 中考正值初夏,气温急剧升高,食物易滋生细菌,发生食物中毒的风险也随之增加,医生建议 选择新鲜的食材,煮熟煮透,现吃现做,尽量不食用剩饭剩菜;不在路边露天摊点、不到无证和食品安全状况差的餐馆用餐;尽量减少在外就餐和点外卖的…

客服中心:高效知识库管理,6步提高70%用户体验

在当今快节奏的商业环境中&#xff0c;客服中心作为企业与客户沟通的重要桥梁&#xff0c;其运作的顺畅与否直接影响着客户的满意度和忠诚度。而知识库作为客服中心的核心资源之一&#xff0c;其管理水平的高低更是直接影响着客服的工作效率和问题解决能力。本文将深入探讨一系…

Django之JsonResponse对象

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 在Django框…

“LangChain实战:探索回调函数的应用

前言 毫无疑问&#xff0c;2024将是人工智能丰收年&#xff0c;开始寒假的我&#xff0c;准备先把LangChain捋一遍。 这篇文章来学习下callback机制&#xff0c; 之前聊过AutoGen的callback机制&#xff0c;我们来对比下。 回调和异步 作为js开发者&#xff0c;对于回调函数…

springboot智能健康管理平台-计算机毕业设计源码57256

摘要 在当今社会&#xff0c;人们越来越重视健康饮食和健康管理。借助SpringBoot框架和MySQL数据库的支持&#xff0c;开发智能健康管理平台成为可能。该平台结合了小程序技术的便利性和SpringBoot框架的快速开发能力&#xff0c;为用户提供了便捷的健康管理解决方案。 通过智能…

无线磁吸充电宝哪个牌子值得入手?什么牌子磁吸充电宝性价比高?

在当下科技日新月异的时期&#xff0c;无线磁吸充电宝成为了众多电子设备用户的得力助手。然而&#xff0c;面对市场上众多品牌和型号的无线磁吸充电宝&#xff0c;消费者常常陷入选择的困境&#xff1a;到底哪个牌子值得入手&#xff1f;什么牌子的磁吸充电宝性价比高&#xf…

【JavaScript】详解默认导出和命名导出的区别

文章目录 一、默认导出二、命名导出三、默认导出和命名导出的区别四、实际应用案例五、总结 在JavaScript模块化开发中&#xff0c;导入和导出模块是核心操作。ES6引入的模块化语法提供了两种主要的导出方式&#xff1a;默认导出&#xff08;default export&#xff09;和命名导…

【2024蓝桥杯/C++/B组/宝石组合】

代码来源2024第十五届蓝桥杯 C/CB组真题题解_蓝桥杯2024b组c语言答案-CSDN博客 证明s的简化式子