本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!
抓包
TT的设备需要先注册,注册成功后在激活。
注册:https://log-boot.tiktokv.com/service/2/device_register
激活:https://log-boot.tiktokv.com/service/2/app_alert_check
注册
先看看网上的大佬们是怎么解决的。某音系tiktok设备注册-阿里云开发者社区。还真找的到。
根据文章知道他是在java层使用GZIP进行压缩,然后调用so层的ttEncrypt进行加密的,新版本你很难使用文章的方式找到加密位置,既然我们提前知道了他是GZIP压缩的那就hook下GZIP的wirte方法,同时打印下调用堆栈就行。
代码
function main() {
Java.perform(function () {
var DeflaterOutputStream = Java.use('java.util.zip.DeflaterOutputStream');
var writeMethod = DeflaterOutputStream.write.overload('[B', 'int', 'int');
var originalWrite = writeMethod.implementation;
var java_str = Java.use('java.lang.String');
writeMethod.implementation = function (bArr, offset, length) {
console.log("\n[+] GZIPOutputStream.write called");
let data = java_str.$new(bArr)
if (data.indexOf("ss_app_log") !== -1) {
console.log("[+] Data: " + data);
console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
}
};
console.log("[*] DeflaterOutputStream.write hooked successfully!");
});
}
setImmediate(main);

LIZIZ就是调用的地方了

LIZ就是so层加密方法了,和文章里写的一样

总结:参数模拟下,搞出X-Khronos,X-Gorgon,X-SS-STUB,请求data就好
激活
注册完之后就是激活了,激活比注册简单多了,参数模拟下即可。
激活请求里有个tt_info的参数,在java层搜索

hook下知道参数
function main() {
Java.perform(function () {
let C136552k4h = Java.use("X.k4h");
C136552k4h["LIZLLL"].implementation = function (str) {
console.log(`C136552k4h.111111111111 is called: str=${str}`);
let result = this["LIZLLL"](str);
console.log(`C136552k4h.111111111111 result=${result}`);
return result;
};
var java_str = Java.use('java.lang.String');
C136552k4h["LIZIZ"].implementation = function (context, bArr) {
let data = java_str.$new(bArr)
console.log(`C136552k4h.2222222222222 is called: data=${data}`);
let result = this["LIZIZ"](context, bArr);
console.log(`C136552k4h.2222222222222 result=${result}`);
return result;
};
});
}
setImmediate(main);
看得出来是先url里的参数取出后进行GZIP压缩,再进行ttEncrypt加密,最后进行base64加密。
验证


