首页
社区
课程
招聘
[原创]某加密到牙齿的APP数据加密分析
发表于: 2020-7-1 13:46 19021

[原创]某加密到牙齿的APP数据加密分析

obaby 活跃值
20
2020-7-1 13:46
19021

在某特上关注了一点乱七八糟的东西,然后就看到了这么一款app。无聊业余时间的时候爬取了一些福利app的数据,于是就想顺便看下这个东西的数据是否也可以爬取。

习惯性的打开HttpCanary抓包,目前一切正常。
httpcanary
数据都能获取到,既然要爬数据,肯定是要能够看到图片,这个是最起码的。 图片链接如下: https://ssimg.bdxxo.cn/tv_adult/avid5c33013611e90.jpg?k=0bf5566b1e365d4f0cf78f566269e769&t=1593571053
看到后面的k和t,忽然觉得这个东西可能没这么简单,应该是服务器进行访问校验了,先不管这个,直接访问下看看。
encrypt_image
这个,尼玛,厉害了。带着key和token访问直接返回了个黑窗口(如果时间超过了链接中的t参数表示的时间,那么直接就403了)。
把图片下载下来,拉入010,果然是加密处理了。
010en
没有找到图片文件的文件头,所以浏览器或者图片查看器也就没有办法解析这个图片。
如何解析图片,那就要从apk入手进行分析了。最终在package net.idik.lib.cipher.so;下面找到了可疑的key和iv:

通过交叉引用,可以定位到图片解密代码位于com.ilulutv.fulao2.other.g.b:

配置jeb调试器,如果不修改ro.debuggable 直接附加进程,会出现下面的错误信息:
notice
确定之后就直接失败了:
error
修改安卓的ro.debuggable属性可以通过magisk 或者mprop([https://bbs.pediy.com/thread-215311.htm]),当然也有其他的办法,修改boot.img等等。不幸的是,我在夜神模拟器上安装magisk之后,卡在了检查更新上,没有办法继续安装。知道原因的还望不吝赐教。
magisk
另外一个办法,就是通过mprop修改,下载之后,直接运行对应的bat文件即可。
mprop
需要注意的是,运行完脚本之后需要重新打开apk,否则依旧无法进行附加。
附加之后,向下滚动页面加载内容。此时断点就断下来了。
brakpoint
单步执行到00000014 invoke-direct SecretKeySpec-><init>([B, String)V, v1, p0, v2 这一行就可以看到具体的key和iv的值了。
默认的jeb的局部变量类型全部为int,可以根据代码来修改变量类型,这里两个参数的类型都是B[,修改之后就可以看到具体的数值了, 如下:
image_key_iv
比较蛋疼的一点是,jeb直接复制的变量的值是下面的格式:

鉴于net.idik.lib.cipher.so的目录下的key比较多,并且key包含不可打印字符,直接复制数值也比较蛋疼。
此时frida hook就派上用场了:

由于该函数的key和为是一个byte数据,所以直接通过send函数发送。接收到的数据是个Image_iv:[object Object] 无法正常显示,所以上面的代码对数据进行了base64编码之后发送。
实际接收到的数据为:

有了这两个数据就可以去解密图片内容了:

解密之后的图片内容:
decrypt image
鉴于图片内容比较暴力,这里就不展示了,感兴趣的自己去解析即可。到这里图片的内容算是处理完成了。

图片可以查看之后,主要的目标是要爬取数据,那么数据来源就很关键。通过接口格式猜测,请求视频列表的接口应该是https://api-al.vipmxmx.cn/v1/videos/menu/0?payload=D%2FPrh8wy4ODFaRYJGqhokg%3D%3D.9VP71aDIZgmZFc6X3l%2BfPoETfpXd4Jt%2BTN49ks4edK8vgtl1XHAvEPzA9EC7mTBjU59pMvWwASxSl9nUQA%2BpzTqjNk0hzAO%2FTMZ6fBkTwtJ4S11%2F4RABwCQVs%2Flk5VuDxcF6DUYuV7XnKO%2FI25woZXbONYp47i%2F1h5OGcW3I91LfJ4G8c0HZI7kli5RLbgn2Rvqt6Jk897dHkmnj4n2tbhoS3nC%2Bp3hxauGMGH2%2Byl1kah6ZGKL%2FarjRwBKR8%2Bbv7XCApO%2BWMrjwxMdJBZjxnV6obnCF5KqYGtauUC5ZN31AjG%2F7ilKr7PGYqu2b%2FrSqpvPXWBizmuw9JF1e%2BnC41vj6bOBXx4swAHsBFFK64C46byIxosDNHN4i5dofoaQH
请求接口比较简洁,应该是把所有的参数都放到了payload下面
list_request
返回的数据比较复杂,头部包含了大量的信息:
list_response_header
并且返回的数据进行了加密:
list_response_text
要想通过接口访问数据,那么就要解析请求数据,解密返回的数据。
通过参数的payload最终可以定位到以下代码:

通过frida hook 对b.c函数进行hook:

所以如果要进行接口加密,那么只需要知道加密的key即可,以为通过上面的代码分析可以知道,iv是一个随机函数生成的长度为16的数组。如果要想模拟的真实一点可以自己写一个随机函数,当然也可以直接使用jeb解析出来的数组去请求也是ok的。 捕获到的数据如下;

将euZN1Gg3JIwWOEWhmE7C4l5dSSRU34fyuPMXjtuoqVs= base64 decode之后即可获得加密用的key。
有了这些数据,那么就可以发送请求了, 测试代码如下:

此时虽然已经能够发送请求了,但是返回的数据是加密的,如果要想获取直接可用的数据,那么就需要对返回的数据进行解密。
通过层层分析,可以定位到响应数据的解密函数为:

同样对对该函数进行hook:

获取数据:

多次请求就会发现,key是固定的。但是iv却是变的。跟踪iv的数据来源,最终可以定位到

为了简便期间,把上面的函数全部hook掉:

最终捕获到的数据如下:

通过关联可以找到,iv的数据来源为X-VTag字段。所以请求之后从response header中取出X-VTag就可以解密数据了。
解密代码:

到这里接口的解密基本就完成了,可以获取app的视频基础信息了。

虽然现在视频列表数据已经有了,但是在视频信息中并没有播放地址。所以最后的工作就是获取视频的播放地址。继续抓包可以看到视频地址信息为:https://api.bdxxo.cn/v1/video/info/67432?payload=hAnCu1kQHy0hCrdZo4swYQ%3D%3D.BrHBQxJsA%2BevWaHMbZYNjOj6B7kDZk98IbSJ94j2EhhuMqcY9Rkv37MRgcYIzprPpxX0VJKcAc4sGAIG%2FtgQ3ZW%2FsnDAC%2FdUtA7Y2AfafmRsjxAhzazlbpOo6AXlh0WD91CaE7D%2FymW129p%2Fx5xMJc8NWvaRBGmQSQLIsle0hdipXQKeOKXN3RBbVLv143p7wOLcabVOhYK22AMBucZl0dCYo7Nz1%2Bv2UH8AlaiMIkwwa6JPnZW8CQayhJrrEXU91phsb%2Bam8zNr9CIvSfTxgUaI%2BOXryyt%2BEsmyBMm2CMBUUD52Q95HBrw0rSgRQSxFurjKQtgckxQqVyshwDnK%2F884URbCKU9WouvTjpEnHdc%3D
使用上面分析的数据,对于请求进行解密, 并且模拟请求:

返回数据信息:

到这里全部的数据接本就都有了,不过还有最后一点需要处理那就是返回的m3u8文件也是加密的,需要进行解密。解密方式与其他请求的解密方式一致。
不仅如此,返回的播放列表的地址也是带有效期参数。
对于播放地址,请求之后进行解密就可以看到m3u8文件的全部内容了:

解密后的m3u8文件就可以扔给ffmpeg下载了:
ffmepg

apk文件下载地址: ZnUyLmxpdmUv

 
 
 
public static final String dbImgKey() {
        return CipherCore.get("29993fb387b37c932b56fd54b130e0c6");
    }

    public static final String decodeImgIv() {
        return CipherCore.get("f3d9434408e52778164db2214e3a0a22");
    }

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-7-1 13:53 被obaby编辑 ,原因:
收藏
免费 11
支持
分享
最新回复 (28)
雪    币: 26398
活跃值: (63257)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
mark,感谢分享~
2020-7-1 13:50
1
雪    币: 216
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
magisk需要翻墙的
2020-7-1 14:16
0
雪    币: 14983
活跃值: (5285)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
4
liwg magisk需要翻墙的
原来如此~~
2020-7-1 14:23
0
雪    币: 163
活跃值: (1623)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
能破这个会员不
2020-7-1 16:38
0
雪    币: 14983
活跃值: (5285)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
6
学编程 能破这个会员不[em_48]
这个不在尝试范围内,你可以试试。哈哈,不过数据有了自己用个web播放器,一样可以播。我只是为了爬数据~~
2020-7-1 16:51
0
雪    币: 2107
活跃值: (1429)
能力值: ( LV8,RANK:126 )
在线值:
发帖
回帖
粉丝
7
奇怪的知识又增加了
2020-7-1 23:56
0
雪    币: 211
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
奇怪的知识又增加了
2020-7-2 10:03
0
雪    币: 3176
活跃值: (1786)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
知识有奇怪的增加了
2020-7-2 11:11
0
雪    币: 19
活跃值: (331)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
奇奇怪怪的标题,我还以为是某牙科的APP??
2020-7-2 12:22
0
雪    币: 14983
活跃值: (5285)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
11
尕可 奇奇怪怪的标题,我还以为是某牙科的APP??[em_19]
2020-7-2 12:39
0
雪    币: 1461
活跃值: (1452)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
这个下载地址怎么用呀
2020-7-2 15:24
0
雪    币: 1461
活跃值: (1452)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
hackdaliu 这个下载地址怎么用呀[em_7]
知道了。。
2020-7-2 16:23
0
雪    币: 27
活跃值: (1628)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
https://lanzous.com/ZnUyLmxpdmUv
可惜了,楼主取消分享了
2020-7-3 01:22
0
雪    币: 14983
活跃值: (5285)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
15
bluegatar https://lanzous.com/ZnUyLmxpdmUv 可惜了,楼主取消分享了
给点提示, base64.decode()
2020-7-3 10:22
0
雪    币: 27
活跃值: (1628)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
https://wwa.lanzous.com/i1FMue9cstc
2020-7-3 10:44
0
雪    币: 27
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
mark,感谢分享~
2020-7-3 14:10
0
雪    币: 453
活跃值: (166)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢分享
2020-7-3 17:46
0
雪    币: 5158
活跃值: (3392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
请问如何解析JSON这个字段 "video_title":"秀人网嫩模龙泽美曦宾馆与土豪援交!被玩到尖叫 汁液狂流"
我好怕
2020-7-3 20:38
0
雪    币: 453
活跃值: (166)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
大佬,请教一下 JSON 文件 AES 解密以后,unpad 长度应该怎么确定啊?只能直接搜最后一个字符 == "}" 吗?
2020-7-4 09:49
0
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
tv_adult告诉我你爬的东西不简单
2020-7-4 10:40
1
雪    币: 30
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
感觉到是一个高度,让人鼓舞
2020-7-5 20:43
0
雪    币: 2141
活跃值: (4522)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
magisk 检查更新需要翻墙 包括仓库插件
2020-7-7 11:07
0
雪    币: 14983
活跃值: (5285)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
24
代码地址:
https://github.com/obaby/porn-app-reverse
2020-7-20 20:27
0
雪    币: 1243
活跃值: (347)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
25
姑娘胯下含三次,胯界妹妹的中出日记 
2021-3-22 17:22
0
游客
登录 | 注册 方可回帖
返回
//