wxyzyou 发表于 2020-3-25 15:27

APP逆向分析分享,参数加密,第3饭

本帖最后由 wxyzyou 于 2020-3-25 15:29 编辑

吃饭不香,无法下饭的朋友们,第3次下饭操作来了.

本次是APP的POST参数加密,逆向分析,还原
同样的,有图,有代码,不发APP

Fiddler抓到的包文

发现一个奇怪的问题,PSOT的参数呢?这个是登录接口,正常会有账号密码参数的, POST数据长度 Content-Length:0 并且确实没有POST任何数据,是否很奇怪?

仔细看协议头部分,发现有个token字段,它的值比较长,那基本可以确认了,这里面的数据就是POST数据,
正常token字段,不都是用来校验,验证的吗?这里,程序员另辟蹊径,不按套路出牌,把数据放到协议头的token中,并且加密了.
首先我们仔细看这个token的结构,像是一个数组,更加确认了它不是一个正常token.

结构: [内容,内容]

从token的数组内容上看,像是BASE64编码,我尝试了解码,解出来是乱码,果然没那么简单(这不废话吗,如果解码成功了,还分享个XX)

2话不说,开始APP反编译,文件结构分析,一系列操作
掏出ApkToolAid查壳,居然是360壳,这可有点难受了
不管它,直接反编译,看看成功否


成功了,看来运气不错
首先到反编译出来的目录下查看文件结构,喜闻乐见的 assets目录内有 index.android.bundle 文件,这个再第1饭里讲过了,ReactNative+NodeJS开发的APP标准特征
首先分析这个文件,看看有没有我们要的东西,没有时,再去查看反编译的安卓代码
把index.android.bundle改后缀名为 index.android.js,到自己习惯的JS代码编辑器里查看该文件,我用的vscode
搜索 token字样,搜索到300多个结果,一个个的看下去,定位到了名为 do_request的函数,看起来没错了
从函数的代码上分析 token来自参数 t ,
t 又从JSON对象转为字符串赋值给 0 ,
然后 this.fenduan(o)函数对 0 做了处理后返回给 c,
c 再次对象转字符串,赋值给了最终的 token
从上面的结果来看,t 和 c 就是关键了,首先要确定 t 传进来时,是什么样的内容,其次,分析this.fenduan 这个函数在干什么


搜索 do_request 函数名,看看有哪些地方在调用,定位到 hhtc_request 函数,看到第2个参数s 是一个标准的JSON对象赋值,并且是明文,那我们的重心就要放到 this.fenduan上去了


fenduan函数,分析一下这个函数在干什么
把参数 n 的内容做了个分割,
每80位长度,分割1次,赋值给了 s ,
然后把 s 加密,加密后的内容 push给了数组 0 ,最后返回0
那看来关键点就是this.encrypt的加密方案了, this字段的意思是,当前JS文件,当前页面内,也就是说加密方案,就在当前的代码附近了



代码附近上下找找,果然找到了 encrypt加密函数,和 decrypt解密函数
下面还有关键的RSA加密公钥,私钥,看来没跑了,这个加密到这里,就完事了
BEGIN PUBLIC KEY公钥
BEGIN PRIVATE KEY 私钥



正常来说,本地没有解密操作时,是不需要存放 私钥 的,只需要公钥加密即可
既然它有私钥,我们尝试对token解密一波,看看参数内容
自写解密工具,解密出来参数明文.


易语言改的加密函数



涛之雨 发表于 2020-3-26 08:38

虽然成功了,但是楼主直接带壳反编译是错误的。。。。
如果不是boundjs打包的。。。楼主肯定这波就无缘了。。。。
和pc的一样,脱壳是第一位的。。。。
特别是数字壳楼主如果不是想分析分析的post而是想改代码。肯定都是不行的。。。
(一般数字壳都是hook签名过校验的,能直接脱的大佬很少。。。{:301_996:})

wtujoxk 发表于 2020-3-25 15:48

我看到token的第一眼就想可能是RSA,后面公私钥在一起,捡到宝了!{:1_921:},谢谢分享!

柒汐 发表于 2020-3-25 15:53

我有排学这些咯~

w456789 发表于 2020-3-25 16:20

感谢楼主 学到了不少

Dream_Peng 发表于 2020-3-25 16:25

楼主 如果没有私钥 你怎么玩呢?

zncliving 发表于 2020-3-25 16:28

学习了非常感谢

thysut 发表于 2020-3-25 16:29

学习了非常感谢

hackgsl 发表于 2020-3-25 16:31

厉害了。

wxyzyou 发表于 2020-3-25 16:32

Dream_Peng 发表于 2020-3-25 16:25
楼主 如果没有私钥 你怎么玩呢?

本身就不需要私钥,只需要公钥加密提交参数就行了,
它提供了私钥,我们也只是解密一下看看参数内容而已,没实际用途

Dream_Peng 发表于 2020-3-25 16:37

wxyzyou 发表于 2020-3-25 16:32
本身就不需要私钥,只需要公钥加密提交参数就行了,
它提供了私钥,我们也只是解密一下看看参数内容而已,没 ...

哦,也对。
页: [1] 2 3
查看完整版本: APP逆向分析分享,参数加密,第3饭