so文件反编译_安卓攻防so模块自动化修复实战
前言
Android加固方案经过这么长时间的发展,从开始的整体dex加密压缩方案逐步开始往native层发展,市面上知名的几款商业级加固方案中很容易发现这种方案的身影。这样看来,在今后相当长的一段时间内,Android逆向中不可避免的会频繁接触到与So加固的对抗了。
❖工具的初衷
搜集常见So加固方案(主要是日常分析中遇到的)
自动化对抗加固方案,解放双手
开源工具源码
1.把切实可行的解决方案想法落地到代码
2.方便需要的同学查看解决方案原理
3.希望有更多的人参与进来,慢慢打造一个好用上手的工具
目前状态工具目前还处于娃娃阶段,平时上班没有太多时间来撸^..^,目前包含了如下的功能:
1.So文件信息读取显示
1.1 显示Elf头
1.2 显示Program头
1.3 显示Section头
2.So文件节表修复重建功能(适合面目全非型)
2.1 根据.dynamic 节重建其他节信息
工具简介
- 开源地址:https://http://github.com/freakishfox/xAnSo。
- 目录结构如下:
Core
- 主要存放一些基础组件类
fix
- 主要存放一些修复方案逻辑
- 持续增加...
util
- 逻辑无关的工具类
viewer
- 界面显示相关逻辑
Windows
- 工具在Windows平台下编译需要的工程配置及相关文件
工具编译
- 目前Windows平台的编译可以在Visual Studio2013环境下完成,Android目录下的编译配置文件还没配置上去
实战一波(阿里安全加固方案测试版)
环境准备
- 要测试工具效果,我们自己写一个很简单的Android App, , 使用Android Studio创建一个工程,主要代码如下:
开始分析
- 把下载回来的加固包丢入 AndroidKiller (请自行更新包里的工具ApkTool到最新版本,省的再踩老坑反编译报错...)
- 图中我框出了经过加固之后的变化部分
- MainActivity->OnCreate函数变成了Native, 里面原先的代码看不到了
- 增加了一个类fixHelper
- 增加了几个附带的So文件
- 为了更加直观,我们把AndroidKiller反编译出来的classes-dex2jar.jar 拖入jd-gui查看,代码很直观,如下:
- 很自然,我们要跟着 fixHelper.fixfunc 进一步分析,继续观察代码,发现悲剧了,进入native层了,直接看图:
- 逃不掉了,必须要看So的代码了, 从这里的代码我们知道,肯定有那么一个So库,有那么一个导出函数fixfunc可以供Java层调用,看上面的这个代码结构的架势,估计是在运行时动态修复MainActivity.OnCreate函数的,
- 带着这样的疑问,我们在这个fixHelper类中找到了一个static{}代码块中找到了经典的 System.load("libdemolish.so"),那清楚了,二话不说在反编译后的目录里面找到这个So文件,直接拖入IDA静候佳音!
陷入杯具
- IDA反编译的结果是这样的:
- IDA分析完成之后,函数列表是空的, 导出函数也是空的,代码区域啥的都是 1% ~~~~,显然是这个So文件经过了处理,并成功干扰到了IDA的分析
开始思考
- 内心的想法
- 到这里,一开始是懵逼的,到底这个So文件被搞了什么鬼导致IDA跟着懵逼呢?但是我知道一个前提,如果我们自己编译一个So文件,不经过处理,那IDA分析起来是比较溜的,于是我们这个时候考虑启用 对比大法
- 开始对比
- 要对比,那我们就找一个没有经过(加固)处理的So模块来,我随便找了一个模块,为了描述方便,我称为A模块吧, 于是开始使用 readelf 这个工具分别查看模块的状态,得如下结果:
- 这是节表显示结果,通过对比,结果很直观,被处理过的So模块,节表大部分信息已乱,除了elf执行必须的.DYNAMIC节之外,于是我们首先怀疑可能就是这里的问题导致了IDA的紊乱,找到了一处怀疑点,那就开始干,把不一样的变的一样(西医就是这么个思路~~), 那具体要怎么修复呢, 了解ELF格式的同学应该比较快速的知道,利用 .DYNAMIC信息来进行修复(修复原理可以参考:https://bbs.pediy.com/thread-192874.htm=>
6
[原创]ELF section修复的一些思考, 感谢 @ThomasKing),部分修复操作在 @ThomasKing的基础上做了修改调整
- 这是节表显示结果,通过对比,结果很直观,被处理过的So模块,节表大部分信息已乱,除了elf执行必须的.DYNAMIC节之外,于是我们首先怀疑可能就是这里的问题导致了IDA的紊乱,找到了一处怀疑点,那就开始干,把不一样的变的一样(西医就是这么个思路~~), 那具体要怎么修复呢, 了解ELF格式的同学应该比较快速的知道,利用 .DYNAMIC信息来进行修复(修复原理可以参考:https://bbs.pediy.com/thread-192874.htm=>
- 解决问题
- 问题初步定位了大致方向, 原理也了解了, 于是落地到代码, 启动写好的工具对节表信息进行修复:
- 等待一会儿会修复完毕,于是我们得到修复后的文件:、
再次尝试
- 刚才跟节表磕了一会儿,现在再回过神来继续想想 fixHelper.fixfunc 搞定了没有,把我们修复之后的文件拖入IDA, 经过一小会儿的分析, 效果出来了, 基本有了我们希望的结果(直接有图有真相):
就到这里了
- 到这里之后,估计很多人都能继续着手分析了, 也达到了本文的目的。最后提醒一点是,大家在自己动手修复节表这种东西的时候,不要忘记修复 符号表,对IDA来说还是比较重要的,不然分析出来的效果会降低,具体情况大家可以尝试一遍,印象会更深刻。
- 另外建议新手有空可以读一下 apkTool 的代码,确实没几行代码,但是在熟悉这块代码之后,对后续的一些初级坑的帮助还是挺大的 ^..^
so文件反编译_安卓攻防so模块自动化修复实战相关推荐
- ipa文件反编译_手把手教你反编译别人的app
虽然iOS系统相比于其他手机操作系统相对安全,但是这个安全并不是绝对的,我一直相信,道高一尺魔高一丈.此文想以实际例子出发,告诉大家,如何去反编译一个app,并且从某个角度来说,iOS没有传说中的&q ...
- ipa文件反编译_手把手教你反编译别人的iOS App
下载智可网手机app可以学习更多哦! 虽然iOS系统相比于其他手机操作系统相对安全,但是这个安全并不是绝对的,我一直相信,道高一尺魔高一丈.此文想以实际例子出发,告诉大家,如何去反编译一个app,并且 ...
- 【反编译】安卓APK反编译为java文件
[反编译]安卓APK反编译为java文件 准备工具 要反编译的apk文件, 以微信8.0.apk为例子 dex2jar 下载地址 dex2jar-2.0反编译.zip-Android文档类资源-C ...
- android apk 反编译工具,安卓apk反编译神器
APK反编译神器安卓修改大师是一个解编APK文件的工具,使用它可以轻松地解编所有APK安装包,替换应用程序界面中的所有文本和图片,代码级别的修改可以增强中文.裂缝.功能等等. 软件说明 可以向所有界面 ...
- Android APK+Dex文件反编译及回编译工具
本帖最后由 zhu891108 于 2012-8-3 11:00 编辑 大家好! 相信很多人玩智能手机,无论是塞班,安卓等等,不只是看重各种软件的功能,而更多的是看重系统的可定制性,可以自己动手DIY ...
- 干货教程:APK反编译神器 安卓修改大师,一步步教你如何美化和修改安卓应用
引言:本次给大家带来的是 APK反编译神器 安卓修改大师 ,安卓修改大师可以轻松地解编所有APK安装包,替换应用程序界面中的所有文本和图片,代码级别的修改可以增强中文.裂缝.功能,以及向所有界面添加自 ...
- pyc文件反编译为py文件
近期时不时需要把工程里的 pyc 文件反编译出来,查看接口函数的逻辑.此前有师兄安利了uncompyle6工具,我使用了几次,发现反编译出来的代码逻辑很清晰,此处我也不能打包票 uncompyle6 ...
- exe反编译_反编译Python生成exe软件(Py3-polySML)
反编译对象为一篇文献上的软件,反编译只是为了了解一些源代码的逻辑. 过程参考文章:python3.7.4反编译生成的.exe 反编译对象:polySML 此对象为python打包,且未进行加密加壳软件 ...
- 请教大家:如何把.DCU文件反编译回源代码?谢谢。
请教大家:如何把.DCU文件反编译回源代码?谢谢. Delphi / Windows SDK/API http://www.delphi2007.net/DelphiAPI/html/delphi_2 ...
最新文章
- Scrum团队选择scrum看板工具的7点特征
- python下的orm基本操作(1)--Mysql下的CRUD简单操作(含源码DEMO)
- 文献学习(part49)--机器学习面临的挑战
- 使用TestNG的弹簧测试支持
- VS2008下最新X264(svn 2009.9)编译不过的解决办法
- 如何用google ads赚钱
- [URAL1962]并查集
- 华为云FusionInsight助力宇宙行打造金融数据湖新标杆
- 软件设计师16-数据结构02(排序/查找)
- asp.net core 系列 17 通用主机 IHostBuilder
- 实训汇编语言设计——内存多字节10进制数相加
- 图:活动现场双屏管理系统V3-多线程抽奖版软件,完美升级收工!历时3个月,艰辛坎坷...
- Facebook怎样开发软件:工程师驱动的文化
- 吴恩达机器学习视频学习笔记(4)
- 真正UltraISO 9.5.5.2960中文完美注册版
- 小萝贝控机大师工具推荐(一款在PC就能控制手机界面的工具)
- 自动控制原理(1)- 介绍与数学模型
- 融云超级群的「同城社交平台」应用实践
- c语言数据类型及命名规则
- confirm的意思中文翻译_confirm是什么意思_confirm的翻译_音标_读音_用法_例句_爱词霸在线词典...
热门文章
- 用神经网络迭代次数曲线模拟原子光谱
- DFTug - Getting Started(下篇)
- IC-工具篇--VCS使用教程-卷二(202004013)
- 【PC工具】建议收藏!一个有N多日常生活学习办公小工具的神奇网站,推荐在线工具网站...
- STM32F103+UCOS-II 实现临界区不关闭重要中断
- C++利用构造函数限制对象的创建
- 折腾Java设计模式之建造者模式
- CodeChefSeries Sum (伯努利数+生成函数+FFT)
- 微软称电脑系统识别能力已经超越了人类
- Arcgis API for JavaScript在地图上实现手机定位信息的追踪显示