最近闲来无事搞了一哈tiktok单纯是因为小姐姐好看。
给大家分析一下tiktok的设备注册的逆向思路
xg的话可以hook也可以改so有机会在一起分享。
话不多学直接开干
开发环境:
- python
- frida
- idea
- fiddler
第一步打开app然后抓包,如果你不是第一部打开需要清楚缓存再打开,第一次打开的时候会发个注册包。
我们会看见这个请求devices_regiter这个请求,我们看见返回值就是我们需要的设备id,但是我们看见他post的data是二进制。不太好搞我们直接打开idea开始搜索大法。
这么多参数我们随便搜搜,真好当我们搜索这个值的时候application/octet-stream;tt-data=a。
我们发现下面一段代码:
我们直接hook它。
然后清楚缓存,重新打开程序
我们可以看到已经打印出来参数了,
{"magic_tag":"ss_app_log","header":{"display_name":"TikTok","update_version_code":160604,"manifest_version_code":160604,"aid":1180,"channel":"googleplay","appkey":"5902b0ed75ca3508bd002616","package":"com.ss.android.ugc.trill","app_version":"16.6.4","version_code":160604,"sdk_version":"2.5.5.8","os":"Android","os_version":"6.0.1","os_api":23,"device_model":"Nexus 5","device_brand":"google","cpu_abi":"armeabi-v7a","release_build":"619f7fa_20200621","density_dpi":480,"display_density":"mdpi","resolution":"1776x1080","language":"en","mc":"02:00:00:00:00:00","timezone":8,"access":"wifi","not_request_sender":0,"carrier":"KDDI","rom":"3437181","rom_version":"M4B30Z","sig_hash":"aea615ab910015038f73c47e45d21466","google_aid":"a25cfa22-29c9-4d4e-b2fb-7126c5528a46","openudid":"5f7d372afbd09096","clientudid":"0a616507-a3e4-428a-8cfc-943e82a880d8","sim_serial_number":[],"region":"CN","tz_name":"Asia\/Shanghai","tz_offset":28800,"sim_region":"JP","custom":{"filter_warn":0,"web_ua":"Mozilla\/5.0 (Linux; Android 6.0.1; Nexus 5 Build\/M4B30Z; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/44.0.2403.117 Mobile Safari\/537.36","user_period":-1,"user_mode":-1}},"_gen_time":1600052585328}
这个就是抖音的设备指纹了
我们看它java层逻辑就是讲这个二进制进行gzip压缩后在传入so里进行加密
这个方法可以改写so或者hook都可以。
然后其实抖音传入明文就行了不需要这个加密,但是tiktok感觉比抖音难一点,还必须进行加密。但是其实都不需要xg算法。
xg算法也简单讲讲吧不然感觉字数太少了:
1.java层加密
它的加密逻辑还是挺简单的,
第一步用?分割url,在md5加密一下然后判断请求头里的一个参数,好像只有登录需要这个,其他情况直接填充32位0,然后讲cookie进行md5,cookie可以为空,然后在填充32位0,抖音是url切割md5,md5(cookie),md(sesssid),32位0,其实抖音系都差不多,然后就是传入so进行加密可以hook,也可以改so。
我是改写的so直接调用
这个就是设备注册,将里面的参数改成随机数就行。然后我们测试一下可以用嘛
稳的一批。其实抖音系都差不都。
以后有机会在分享其他的app吧。