某某己直播app数据AES解密
本帖最后由 奇奇小霸王龙 于 2021-5-14 14:57 编辑该APP的大部分数据是明文的,只有部分数据是AES加密的;由于用户是信息是在服务端验证的,收费的直播拿不到播放源。。。;
所以分析这个APP主要是个过程;因为分析过多次这样的加密,都没记录过,这次记录一下;小白写的偏小白向教程
其实过程很简单,但是想写的详细一点,就写了那么一长溜
工具:
Charles;
模拟器
jadx-gui
Charles抓包的配置就不说了,apk拖进jadx,打开chales,模拟器上打开app开搞
1.随便点开一个直播间,charles抓到下面一个请求,返回了加密数据 注意下返回头 等下用到
2.用jadx文本搜索字符串“private/getPrivateLimit”,结果如下,并且知道了这个方法名loadPrivateLimit,继续文本搜索“loadPrivateLimit”
3.结果有很多,但大都是相互引用或者函数里面的嵌套的同名变量/方法,发现有一个 “base.BaseActivity” 因为我们是点击直播间后触发请求的 事件的监听应该就是在Activity中
4.打开“base.BaseActivity”文件 ctrl+点击函数名跳转到“base.BasePresenter”
5.打开“base.BasePresenter” ;会java的应该看出来了,这个是RxJava库的使用格式,我也是现学现卖,我们主要观查最后的subscribe方法,点击方法里面的类“BasePresenter$requestGameCenterPoints$1” 去里面找onNext方法,为什么找onNext方法呢,rxjava就是这样的流程(不知道我的理解对不对)
6打开“BasePresenter$requestGameCenterPoints$1” 并没有onNext方法,看到她有个父类“base.observer.BaseObserver” 我们点进去之后发现了onNext方法;该方法主要根据返回头x-content-puzzle的值 确定进行怎么样的解密;确定解密方法在“base.observer.RootObserver”里
7.打开“base.observer.RootObserver” 分析见图,最终解密是在“util.AES”类的aesdecrypt方法中
8.打开“util.AES”,我们确定了aes的填充方式为AES/CBC/PKCS7Padding 密钥为jwt md5后的前16个字符;向量为后16个字符;我们回到“base.observer.RootObserver”来确定jwttoken的值
9.打开“base.observer.RootObserver” 类,获取jwtToken是用的“domain.LocalDataManager”类的getJwtToken,他又调用了“data.sharedpreference.PrefsHelper”类里的“getJwtToken”方法;来到这里我们确定了存储的文件名和存储的字段值;这个getSharedPreferences是android的一个类库,将数据存储到/data/data/应用包名/shared_prefs;
10.我们在shared_prefs下找到BeautyLivePrefs文件,打来文件再找到jwtToken存储的值即可,我们对其进行md5加密再分割成两段后进行解密
11.使用工具AES解密
帖子4.26发布了,但是5.13被屏蔽了,原因是图片中暴漏了app的包名,15张图我又重新一一对包名打了马赛克 ( 无意中搜帖子才知道我只是被殃及的池鱼;现在讨厌死那个人了,害我重新打马赛克)
其实这片帖子主要是介绍aes解密的,我接触过好几款视频都是用这种rxjava类库进行网络请求的,所以记录一下,方便今后自己或其他人遇到rxjava封装的网络请求知道如何下手
Aleshaaaa 发表于 2021-4-26 16:29
希望楼主把解谜前的样本发出来让我们钻研钻研
a1nk其实我是个标点符号xyz 现在android网络请求,主流就是 RxJava+Retrofit+okhttp3 三个库的组合使用;本小白不会android开发,就百度看了看这套流程,一知半解的 哈哈 厉害 谢谢分享 主要是分享下遇到这种aes加密数据进行解密的一个思路流程 希望楼主把解谜前的样本发出来让我们钻研钻研{:301_997:} 395552895 发表于 2021-4-26 16:18
谢谢分享
你回复的好快;www chenballack 发表于 2021-4-26 16:23
哈哈 厉害
没有了小白一个 漂亮啊啊