Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)

一、情景分析

程序猿一般都很孤独,特别是总是和代码相伴,比如像我这种穷屌丝,一到周末就闲着没事刷各种应用,看看想看的,无意中发现一款封面看着挺诱人的约友神器,下来来看看,迫不及待的点开:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第1张图片

我尼玛我只是想视频通话,竟然还要让老子冲钻石,我这暴脾气可不答应,可是谁叫我们那么穷呢?只能靠着自己的左手和右手开始搞了?不多解释,直接上手破解这个app。


二、逆向脱壳分析

这种app找入口就太简单了。直接使用Jadx打开app,或者使用apktools反编译apk,不过可惜的是,这种花钱的app内部都做了很强的防护,反编译是失败的:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第2张图片

当然这个错误是可以修复的,但是不是本文重点。我们接着用Jadx打开app查看:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第3张图片

很可惜,用了360加固了,所以如果想一探究竟只能先脱壳了。那么问题来了?这里会手动去脱壳吗?说句实话我没这个精力了,动态调试脱壳很费脑的。所以就另辟捷径。发现了脱壳神器drizzleDumper工具,这个工具是开源的,大家想看源码可以去下载:https://github.com/DrizzleRisk/drizzleDumper;当然这个工具网上有人已经分析了原理,这里就大致在说一下,他的原理就是一点:root设备之后,通过ptrace附加需要脱壳的apk进程,然后在脱壳的apk进程的内存中进行dex文件的特征搜索,当搜索到dex文件时,进行dex文件的内存dump

其实这个思路和之前介绍的ZjDroid,DexExtractor等工具原理还不太一样,之前的脱壳工具都是基于hook拦截系统的加载dex函数进行dump出dex的。但是这个工具是基于附加目标程序,寻找内存段具备dex文件头部信息进行dump的操作。这个思路也是非常好的。我们也知道dex的长度是保存在头部信息中的,所以只要在内存段中找到dex的头部信息,然后解析长度,有了起始地址和长度,那么就可以获取内存中的完整dex文件了。比如这里我们简单看一下这个程序运行之后的内存信息:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第4张图片

找到包名之后,直接查看其对应的maps文件即可:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第5张图片

因为之前也说过,不管之前怎么加固,最终都是需要自动脱壳加载dex到内存中,那么这里就是直接在内存中找到已经脱壳的程序开始进行操作了。下面来简单分析他的源码:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第6张图片

脱壳原理是基于root设备的进程附加操作,只有附加到目标进程才能操作他的内存段信息:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第7张图片

当然这里工具用法非常简单,直接输入想要脱壳的应用包名,内部会通过这个包名找到对应的进程id值,然后在克隆出一个id进行附加操作:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第8张图片

在内存中查找dex文件的特殊格式:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第9张图片

这里通过magic值进行查找即可:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第10张图片

查找比较简单,通过读取maps文件获取内存段开始和结束地址,然后开始操作这段内存地址:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第11张图片

找到了对应的dex头部信息,就开始dump出内存数据了。我们去github上可以下载已经编译好的工具,直接拷贝到设备的/data/local/tmp目录下,记得修改一下运行权限chmod 777 drizzbleDumper。然后直接运行即可:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第12张图片

工具两个参数:一个是需要脱壳的程序包名,一个是等到超时时间。看到脱壳成功,脱壳之后的dex文件保存到了该目录下。我们使用adb pull命令在弄到本地即可。


这里就简单使用了drizzleDumper工具进行了脱壳,这里操作的是360的加固,感兴趣的同学可以用这个工具去尝试其他加固厂商的保护壳,不过最好的方式还是手动脱壳,那样才能更加的提升技术,但是那样脑细胞也会损失很多。不过有现成的工具能用就用吧。不能用在考虑手动脱。我们这时候在用Jadx打开上面已经脱壳成功的dex文件,之前说到了,使用apktools反编译apk失败的。那么这里入口想通过字符串来查找:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第13张图片

这里想通过查找"钻石余额"来进行突破,所以这时候会发现Jadx厉害之处,直接打开原始apk,查看他的编译之后的资源文件resource.arsc:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第14张图片

看到了吧,也是可以直接找到的,直接用id值进行全局搜索,这里一定要去脱壳的dex文件中搜,需要在用一个Jadx打开脱壳的dex文件即可

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第15张图片

这时候会发现在R.string中定义了,而且会发现这个字段名是没有被混淆的。然后在全局搜这个字段名:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第16张图片

这样就找到入口了,直接点击进入即可:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第17张图片

这里就很清晰的发现,获取钻石的方法了。继续点击进入查看:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第18张图片

那么这时候就需要hook大法了,直接使用Xposed进行hook这个获取钻石的方法:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第19张图片

直接运行模块,看打印日志信息:


在看看能否视频通话了:

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第20张图片

看到了,我们充值了1个亿的钻石,可以视频到对方妹子到老:



严重声明:本文的目的只有一个,利用样本案例分析讲解更多的逆向技术和知识,如果有人以非法目的利用本文技术谋取利益,带来一切法律责任都将由操作者承担,与本文作者无关。由衷的希望读者以学习逆向知识阅读此文。介于安全问题,本文涉及到的样本和代码都放在编码美丽技术圈中,需要进圈获取即可。


三、总结

怕文章被和谐,后面的视频内容不能在展现了,少儿不宜。大家懂得,而且我们的目的不是真的视频,而是破解。虽然我们穷但是我们一定要有道德素质,没事别刷这些app没什么意思,多出去走走,会发现还是这些app刷着有意思。本文主要借助了一个脱壳工具drizzleDumper来进行脱掉360壳。然后继续后面的破解操作。感兴趣的同学可以使用这个工具去尝试其他加固厂商的操作。

《Android应用安全防护和逆向分析》

点击立即购买:京东  天猫

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第21张图片

更多内容:点击这里

关注微信公众号,最新技术干货实时推送

Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第22张图片
编码美丽技术圈
微信扫一扫进入我的"技术圈"世界
Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第23张图片

扫一扫加小编微信
添加时请注明:“编码美丽”非常感谢!
Android脱壳圣战之---脱掉360加固壳(破解约友神器的钻石充值功能)_第24张图片

你可能感兴趣的:(Android,逆向之旅)