生之为萌,乐享创造

简单 Android app 的脱壳

啥都想会一点系列。

又要搞啥?

学校在有体育课的学期都会有线上理论考试,可以选择在网页或者一个辣鸡手机 app 上作答。因为有的题搜都搜不到,所以就考虑能不能直接搞事情。抓包发现每次获取题目的时候是会连答案一起返回的(这外包系统真的烂),这样的话就能直接发送请求一键瞬间完成。

但是有个问题,app 发送的请求里需要有签名 sign 参数,这个参数是通过对其他参数经过某一方法计算得到的,因此就需要知道相应算法,而要得到算法,就得反编译 app。

PS:实际上经过测试发现,这个系统存在着各种重大漏洞。其中之一就是所有请求都不会验证 Cookies,同样这个签名参数也不会验证,甚至不提供都可以。不过为了保险起见还是按正经的来比较好。

反编译的话本身很简单,用 ApkDB 之类的工具箱就好。甚至可以直接把 classes.dex 解压出来,然后用 dex2jar 转换,就能用 Java Decomplier 查看源代码。

但是,实际操作发现学校的这个 app 经过 360 加固,也就是俗称的“加壳”,如下图所示:

《简单 Android app 的脱壳》

在网上找了很多教程都失败了。最后好在在 GitHub 上看到了 dumpDex 这个一直在更新的项目,决定试试。

最开始用项目本身提供的编译好的 release 脱壳失败了,抱着死马当活马医的心态,clone 了一下最新的代码决定自己编译,结果成了~

怎么搞?

那么,下面就说一下这个东西怎么用(其实 repo 里都有写不过还是在这里记录一下)。

首先下载源代码并使用 Android Studio 编译。默认情况下不需要改动任何源代码。

然后需要有一个能运行 Xposed 框架的环境,建议使用 rova89 的原版而非太极或 EdXposed 等。这里以系统版本为 Andrioid 5.1.1 的雷电模拟器为例,安装编译号的模块,然后勾选启用。

完成之后,正常运行要脱壳的软件即可。接下来访问 /data/data/<packageName> 文件夹,一切无误的话,应该会看到一个 dump 文件夹,里面就是正常的 dex 文件,复制出来,就能看到正常的源代码了。如下图:

《简单 Android app 的脱壳》

这里的 buildkeyValue 就是我需要的构建 sign 参数的过程。抄成 C#,完美~

还有啥?

根据 repo 所述,如果不能正常脱壳的话,可以尝试在 PackerInfo.java 文件的 packages 字段里添加应用的包名之后再次脱壳。不过我现在还没遇到过这种 app,嘻嘻 x

发表评论

电子邮件地址不会被公开。 必填项已用*标注