转载自:http://www.520monkey.com/archives/1062
此处仅作为学习记录一用。至于评论问答环节,请去上面地址翻阅四哥的原文。上面已附上地址。
一、情景分析
程序猿一般都很孤独,特别是总是和代码相伴,比如像我这种穷屌丝,一到周末就闲着没事刷各种应用,看看想看的,无意中发现一款封面看着挺诱人的约友神器,下来来看看,迫不及待的点开:
我尼玛我只是想视频通话,竟然还要让老子冲钻石,我这暴脾气可不答应,可是谁叫我们那么穷呢?只能靠着自己的左手和右手开始搞了?不多解释,直接上手破解这个app。
二、逆向脱壳分析
这种app找入口就太简单了。直接使用Jadx打开app,或者使用apktools反编译apk,不过可惜的是,这种花钱的app内部都做了很强的防护,反编译是失败的:
当然这个错误是可以修复的,但是不是本文重点。我们接着用Jadx打开app查看:
很可惜,用了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文件了。比如这里我们简单看一下这个程序运行之后的内存信息:
找到包名之后,直接查看其对应的maps文件即可:
因为之前也说过,不管之前怎么加固,最终都是需要自动脱壳加载dex到内存中,那么这里就是直接在内存中找到已经脱壳的程序开始进行操作了。下面来简单分析他的源码:
脱壳原理是基于root设备的进程附加操作,只有附加到目标进程才能操作他的内存段信息:
当然这里工具用法非常简单,直接输入想要脱壳的应用包名,内部会通过这个包名找到对应的进程id值,然后在克隆出一个id进行附加操作:
在内存中查找dex文件的特殊格式:
这里通过magic值进行查找即可:
查找比较简单,通过读取maps文件获取内存段开始和结束地址,然后开始操作这段内存地址:
找到了对应的dex头部信息,就开始dump出内存数据了。我们去github上可以下载已经编译好的工具,直接拷贝到设备的/data/local/tmp目录下,记得修改一下运行权限chmod 777 drizzbleDumper。然后直接运行即可:
工具两个参数:一个是需要脱壳的程序包名,一个是等到超时时间。看到脱壳成功,脱壳之后的dex文件保存到了该目录下。我们使用adb pull命令在弄到本地即可。
这里就简单使用了drizzleDumper工具进行了脱壳,这里操作的是360的加固,感兴趣的同学可以用这个工具去尝试其他加固厂商的保护壳,不过最好的方式还是手动脱壳,那样才能更加的提升技术,但是那样脑细胞也会损失很多。不过有现成的工具能用就用吧。不能用在考虑手动脱。我们这时候在用Jadx打开上面已经脱壳成功的dex文件,之前说到了,使用apktools反编译apk失败的。那么这里入口想通过字符串来查找:
这里想通过查找”钻石余额”来进行突破,所以这时候会发现Jadx厉害之处,直接打开原始apk,查看他的编译之后的资源文件resource.arsc:
看到了吧,也是可以直接找到的,直接用id值进行全局搜索,这里一定要去脱壳的dex文件中搜,需要在用一个Jadx打开脱壳的dex文件即可:
这时候会发现在R.string中定义了,而且会发现这个字段名是没有被混淆的。然后在全局搜这个字段名:
这样就找到入口了,直接点击进入即可:
这里就很清晰的发现,获取钻石的方法了。继续点击进入查看:
那么这时候就需要hook大法了,直接使用Xposed进行hook这个获取钻石的方法:
直接运行模块,看打印日志信息:
在看看能否视频通话了:
看到了,我们充值了1个亿的钻石,可以视频到对方妹子到老:
严重声明:本文的目的只有一个,利用样本案例分析讲解更多的逆向技术和知识,如果有人以非法目的利用本文技术谋取利益,带来一切法律责任都将由操作者承担,与本文作者无关。由衷的希望读者以学习逆向知识阅读此文。介于安全问题,本文涉及到的样本和代码都放在编码美丽技术圈中,需要进圈获取即可。
三、总结
怕文章被和谐,后面的视频内容不能在展现了,少儿不宜。大家懂得,而且我们的目的不是真的视频,而是破解。虽然我们穷但是我们一定要有道德素质,没事别刷这些app没什么意思,多出去走走,会发现还是这些app刷着有意思。本文主要借助了一个脱壳工具drizzleDumper来进行脱掉360壳。然后继续后面的破解操作。感兴趣的同学可以使用这个工具去尝试其他加固厂商的操作。