啥都想会一点系列。
又要搞啥?
学校在有体育课的学期都会有线上理论考试,可以选择在网页或者一个辣鸡手机 app 上作答。因为有的题搜都搜不到,所以就考虑能不能直接搞事情。抓包发现每次获取题目的时候是会连答案一起返回的(这外包系统真的烂),这样的话就能直接发送请求一键瞬间完成。
但是有个问题,app 发送的请求里需要有签名 sign
参数,这个参数是通过对其他参数经过某一方法计算得到的,因此就需要知道相应算法,而要得到算法,就得反编译 app。
PPS:这系统总算升级了,开始验证签名参数并且登录时对密码进行 RSA 加密了,但是识别用户身份依旧只靠登录之后所有请求中带的 userId
之类的参数。
PS:实际上经过测试发现,这个系统存在着各种重大漏洞。其中之一就是所有请求都不会带有 Cookies,同样这个签名参数也不会验证,甚至不提供都可以。不过为了保险起见还是按正经的来比较好。
反编译的话本身很简单,用 ApkDB 之类的工具箱就好。甚至可以直接把 classes.dex
解压出来,然后用 dex2jar 转换,就能用 Java Decomplier 查看源代码。
但是,实际操作发现学校的这个 app 经过 360 加固,也就是俗称的“加壳”,如下图所示:
在网上找了很多教程都失败了。最后好在在 GitHub 上看到了 dumpDex 这个一直在更新的项目,决定试试。
最开始用项目本身提供的编译好的 release 脱壳失败了,抱着死马当活马医的心态,clone 了一下最新的代码决定自己编译,结果成了~
怎么搞?
那么,下面就说一下这个东西怎么用(其实 repo 里都有写不过还是在这里记录一下)。
首先下载源代码并使用 Android Studio 编译。默认情况下不需要改动任何源代码。
然后需要有一个能运行 Xposed 框架的环境,建议使用 rova89 的原版而非太极或 EdXposed 等。这里以系统版本为 Andrioid 5.1.1 的雷电模拟器为例,安装编译号的模块,然后勾选启用。
完成之后,正常运行要脱壳的软件即可。接下来访问 /data/data/<packageName>
文件夹,一切无误的话,应该会看到一个 dump 文件夹,里面就是正常的 dex 文件,复制出来,就能看到正常的源代码了。如下图:
这里的 buildkeyValue
就是我需要的构建 sign
参数的过程。抄成 C#,完美~
还有啥?
根据 repo 所述,如果不能正常脱壳的话,可以尝试在 PackerInfo.java
文件的 packages
字段里添加应用的包名之后再次脱壳。不过我现在还没遇到过这种 app。