开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 13674|回复: 10
收起左侧

[技术文章] 安卓脱壳学习

[复制链接]
结帖率:50% (1/2)
发表于 2018-5-19 14:12:13 | 显示全部楼层 |阅读模式   陕西省西安市
原理篇

dvmDexFileOpenPartial这是函数是关键,据说在这下 断点就可以了,看名字就是虚拟机去打开Dexfile的意思,应该那时已经解壳完成了吧


函数原型:
int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex);
第一个参数就是dex内存起始地址,第二个参数就是dex大小。所以在这个函数下断点可以直接dump出明文dex.


为了深入学习我们去看看安卓源码,这个参考底部有个大神的

http://androidxref.com/4.4_r1/xref/dalvik/dexopt/OptMain.cpp

这个应该是优化dex的,odex相关的东西,小白我不懂的

这里分别对三种不同类型的文件做不同的处理,传进去的参数是--dex就走中间那一步了,我们跟进去

根据log信息,我们知道,显示初始化VM虚拟机(应该是dalvik虚拟机吧)

跟着就执行优化,我们看看那个优化

可以看到上面的英文注释:重写文件,字节重排,结构重排,类验证,字节优化都在那个rewriteDex函数中,优化成功下面才去调用我们的dvmDexFileOpenPartial

可以看到第三个参数为NULL

既然这样,我们继续跟进


可以看到里面调用了dexFileParse,就是解析dex文件的了,既然都开始解析dex文件了,那么壳肯定已经对dex解密完成了,不然也无法解析啊


顺手简单看看是如何解析的,不懂啊 ,只看这两个看着有点眼熟的,因为学过PE文件的格式

可以看到这里也有一些可选头,通过可选头可以读取一些信息,什么长度啊,偏移什么的, 中间有个解析Data的函数,这里是学习脱壳啊,不是看安卓源码,都跑哪去了

接下来还会作一些校验和的检测


好了,我们开始学习脱壳吧


开始我们的脱壳之路

一开始来个apk,你不能说一来就脱壳啊,没壳的你脱毛啊


用压缩软件打开我们的学习用的apk,跟着将那个dex拖出来,其实不拖出来也是可以的,因为下面用的软件支持直接拖apk进去

转化成jar(这个软件还是比较好用的,支持文件拖拽)

跟着自动就帮你打开JD-GUI了

全部函数都放到so文件中了,load了一个库mobisec

看到这,就是要脱壳了,就像我们平时win逆向的时候,打开ida,发现只有一个函数


那我们接下来就开始吧


ida的动态调试可以百度哦 ,或者很多安卓安全的书都有了,想得起的话我去写个记录


首先安装,看看,熟悉一下整个应用,应该是输入正确的url,跟着出flag,key啊什么的


对了,还没知道包名,上apktool,解包


看看包名


在手机上运行server


作一下端口转发(应该是本地的端口,转发到adb那边的23946端口吧),当然如果利用局域网调试就不用这一步了


跟着一条是调试模式打开应用的首页


那接着就上ida咯


ok后可以看到我们那个进程了,附加上去


跟着看看模块吧



跟着查找libdvm,这个看名字就知道跟Dalvik虚拟机有个,dvm嘛,优化dex的应该也在里面,我对自己是这么想的


双击点过去,继续查找dvmDexFileOpenPartial

再点过去


F9运行!!!!!


接下来jdb命令动态调试Apk


先打开ddms,可以看到调试端口,还有哪个红虫


JDB是基于文本和命令行的调试工具(例如Sun JDB);虽然现在有一些很好的调试工具,然而 Java 调试器 (JDB) 提供了一些优点。最重要的是 JDB 可以免费获取并且是平台独立的。其缺点是它只有命令行格式,一些开发人员认为这很原始,而且难以使用。一些 IDE 已经将 GUI 界面构建到 JDB 调试 API(如 Jikes)。JDB 是 JDK 安装的一部分。它在 Java 2 平台中得到了增强。


使用jdb命令进行调试时,一般选择8700端口,因为8700是默认的调试端口 都一样的了,没什么特殊,我们可以看到使用的包中有个jdi,这也满足我们的预想



跟着ida就出现这个,取消就好


继续


跟着程序就断下来了


R0是传过来的第一个参数,R1是第二个参数,根据这个函数的原型,所以如下


跟着就用脚本把它dump出来吧


一开始应该就是相当于我们C语言的声明变量,看来那些寄存器我们直接写名字就可以访问了


算了,直接给代码吧


[size=1em][size=1em]?
[size=1em]1
[size=1em]2
[size=1em]3
[size=1em]4
[size=1em]5
[size=1em][size=1em]auto fp, dex_addr, end_addr;
[size=1em]    fp = fopen("C:\\dump.dex", "wb");
[size=1em]    end_addr = r0 + r1;
[size=1em]    for(dex_addr = r0; dex_addr < end_addr; dex_addr++)
[size=1em]        fputc(Byte(dex_addr), fp);




点击run


稍等片刻,马上就好


结果发现只有安卓的库(不要急,我就入坑了,这个dex2jar不能用于dump出来的应该,我把上面的步骤至少重复了5遍)


再看看那个地址,确实是个dex文件啊


直接上JEB神器,终于看到了

点评

弄个视频比较有价值   北京市北京市  发表于 2018-5-19 16:46

本帖被以下淘专辑推荐:

结帖率:50% (1/2)
 楼主| 发表于 2018-7-3 18:11:24 | 显示全部楼层   陕西省西安市
想要交流的  欢迎滴滴我q:   1275024271
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
 楼主| 发表于 2018-7-3 18:10:37 | 显示全部楼层   陕西省西安市
╭疼惜╮╮ 发表于 2018-5-19 15:45
大佬,留个q交流交流?

1275024271
回复 支持 反对

使用道具 举报

结帖率:42% (5/12)

签到天数: 16 天

发表于 2018-6-13 20:33:36 | 显示全部楼层   湖南省永州市
学这个要多久才能学会
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
 楼主| 发表于 2018-5-19 15:59:46 | 显示全部楼层   陕西省西安市

各个版本的有脱壳的办法
回复 支持 反对

使用道具 举报

结帖率:33% (1/3)
发表于 2018-5-19 15:57:08 | 显示全部楼层   湖北省恩施土家族苗族自治州
爱加密呢?
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
 楼主| 发表于 2018-5-19 15:55:16 | 显示全部楼层   陕西省西安市
╭疼惜╮╮ 发表于 2018-5-19 15:45
大佬,留个q交流交流?

可以私信发你  一起学习交流
回复 支持 反对

使用道具 举报

结帖率:85% (22/26)
发表于 2018-5-19 15:45:03 | 显示全部楼层   广东省广州市
大佬,留个q交流交流?
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
 楼主| 发表于 2018-5-19 14:33:59 | 显示全部楼层   陕西省西安市
很详细的安卓脱壳步骤  ,,借鉴网上的资料
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
 楼主| 发表于 2018-5-19 14:16:47 | 显示全部楼层   陕西省西安市
原文链接 https://www.2cto.com/kf/201609/547621.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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