简单 Android app 的脱壳

啥都想会一点系列。

又要搞啥?

学校在有体育课的学期都会有线上理论考试,可以选择在网页或者一个辣鸡手机 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。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇