吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2395|回复: 2
收起左侧

[会员申请] 申请会员ID:weakptr【申请通过】

[复制链接]
吾爱游客  发表于 2021-9-9 23:06
申请ID:weakptr
个人邮箱:weak_ptr@outlook.com
原创技术文章:

逆向解密一个Android应用。

需要准备的工具包括

mumu 模拟器(或者别的什么有 root 权限、能装 xposed 的模拟器)
FDex2 脱壳
jadx 反编译 dex 源码
apktools 拆解 apk
mitmproxy 中间人拦截网络请求

0x01 目标和方向选择

首要的目标是破解这个软件的 api 加密。

使用 mitmproxy 抓到 https 流量,发现请求体全部是 base64 ,解码发现乱码。基本断定是加密了。



mitmproxy 怎么抓 https 流量不多说了,基本流程就是装证书,然后配置代{过}{滤}理。能看到有流量进 mitmproxy 就算成功了。直接参考 mitmproxy 的文档快一点。

搜了一圈没有什么现成的对这个 App 的破解的文章,于是决定自己动手。

0x02 解包和脱壳

先确认下电脑上装了 JDK 或者 JRE ,没有的话就装好。

推荐一个 vscode 的插件,apklab。会帮你装好 jadx 和 apktools  signer 这些工具。

接下来直接用 apklab 打开需要破解的 apk 文件。





apklab 会自动用 apktools 和 jadx 完成拆包和反编译。

然后简单观察...



应该是被 360 加固了。

apk 加固的基本原理就是把易被反编译的 java 字节码转译或者加密后保存,运行的时候再释放出来。用过 upx 一类的软件应该会联想到,就是加壳、反调试什么的这一套。

xposed 提供了一个在安卓包加载时设置钩子的机会,将 ClassLoader Hook 掉,以此获得真正的应用字节码。

代码看参考资料。

安装 xposed 框架和 FDex2 之后启动目标应用,即可获得对应的字节码 dex 文件。




接着把这些 dex 文件复制出来,即可使用 jadx 反编译到 java 了。

jadx -d out *.dex

将反编译的结果用 vscode 打开,可以看到目标已经被我们脱干净了。



0x03 寻找加解密代码

目标是解密 Api 请求的内容,所以下一步就是找到哪里保存了加密代码。

幸运的是这个 App 没有做过混淆,完成脱壳后就已经是全身赤裸的站在我们面前了。

直接在代码里搜索之前我们观察到的 index_des.php,仅有一个结果。



相关函数非常短,这个 HTTP 框架我没有使用过,不过从函数名看应该是一个中间件模式,对所有 Web 请求进行加密处理。



getOverPost2 源码如下



g 的含义是 Get 请求的参数,应该就是 QueryString。函数名getOverPost2 字面意义就是把 GET 请求以 POST 方式发送出去。

p 的含义大概就是 Post 的参数了。

加密代码在 encryptByte。如此看来已经接近终点了,再点开 encryptByte 的定义。



密钥保存在 DesLib.sharedInstance().getAuthKey() 中。

接着点开 getAuthKey 的定义:



native 关键字一出,得,白高兴了。差点劝退成功。

还是先看下怎么加密的。



再往回翻一下响应解密的代码,免得拆除密钥来又白高兴一场。




很好,也是 DES 。

其实到这一步已经基本完成解密了,唯一欠缺的就是密钥。

抱着试一试的心情,还是找到了 libencry.so ,用 IDA 打开分析了一下。



按下 F5,看看伪代码。



还是看不懂。这都调的什么函数... a1 + 668 这个蜜汁偏移也不知道是在算什么。

网上搜索了一圈,说道可以手动改一下函数签名,IDA 就能提示出函数了。试试看。

先把函数签名纠正




再关掉类型转换



最终关键代码清晰了很多,看起来就是个直接返回字符串常量的函数。



比较具有迷惑性的是上面的 v5-v9,可以看到 v5-v9 地址是连续的,只有 v5 和 v6 有值。v7/v8/v9 都是 0 。而 v5 的地址被用作 NewStringUTF 函数的参数。查阅 JNI 接口也可以看到这个参数应该是 const char* 类型。

所以 ...

把数值转换成 16 进制再做观察。



发现很有规律,每个字节的值都在 ASCII 范围内。于是右键转换成字符串,再翻转一下,即可得到密钥。

到此,解密方法的探索已经完成。

0x04 mitmproxy 解密

mitmproxy 支持使用 python 脚本扩展,用法很简单就是 mitmweb.exe -s decrypt.py

可以参考 mitmproxy 的例子,最终效果应该是这样。



核心的解密代码就一句,利用 mitmproxy 的扩展即可对每个请求进行统一的处理。

from pyDes import des, PAD_PKCS5

def decrypt(data):
    return des(key).decrypt(data, padmode=PAD_PKCS5)

参考资料


分析Android APK-砸壳-Fdex2


https://api.xposed.info/reference/de/robv/android/xposed/IXposedHookLoadPackage.html

mitmproxy
https://github.com/mitmproxy/mitmproxy/

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2021-9-10 18:15
I D:weakptr
邮箱:weak_ptr@outlook.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。

ps:登陆后把文章整理一下发到移动安全区吧。
weakptr 发表于 2021-9-10 23:01
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 07:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表