硕士生
 
- 金币
- 2780
- 好评
- 2
- 信誉
- 111
|
发表于
2026-5-19 18:36:15
来自手机
|
显示全部楼层
来自 四川
看不懂,ai一下console.log("[+] mCookie 抄底脱壳脚本启动");
Java.perform(function () {
console.log("[+] Java 环境注入完成");
function getCookie(dexFileObj) {
try {
if (dexFileObj.mCookie) return dexFileObj.mCookie.value;
if (dexFileObj.mInternalCookie) return dexFileObj.mInternalCookie.value;
return null;
} catch (e) {
return null;
}
}
function dumpDexByCookie(dexFileObj, dexName) {
const cookie = getCookie(dexFileObj);
if (!cookie) return;
try {
const Array = Java.use("java.lang.reflect.Array");
let ptr = 0;
if (cookie.$className && cookie.$className.includes("Long")) {
const len = Array.getLength(cookie);
if (len > 1) {
ptr = Array.getLong(cookie, 1);
}
} else {
ptr = cookie;
}
if (ptr === 0) return;
const dexFilePtr = new NativePointer(ptr);
const begin = dexFilePtr.readPointer();
const dexSize = dexFilePtr.add(0x8).readU32();
if (dexSize < 0x100 || dexSize > 0x10000000) return;
const dexData = begin.readByteArray(dexSize);
if (!dexData) return;
const fileName = `/sdcard/Dumped/\( {dexName || "classes"}_ \){Date.now()}.dex`;
const f = new File(fileName, "wb");
f.write(dexData);
f.flush();
f.close();
console.log(`[+] Dump成功: \( {fileName} ( \){dexSize} bytes)`);
} catch (e) {
console.log("[-] Dump失败: " + e);
}
}
function dumpAllDex() {
Java.choose("dalvik.system.BaseDexClassLoader", {
onMatch: function (loader) {
try {
const pathList = loader.pathList.value;
if (!pathList) return;
const dexElements = pathList.dexElements.value;
const len = Java.use("java.lang.reflect.Array").getLength(dexElements);
for (let i = 0; i < len; i++) {
const element = Java.use("java.lang.reflect.Array").get(dexElements, i);
const dexFileObj = element.dexFile.value;
if (dexFileObj) {
dumpDexByCookie(dexFileObj, `dex_${i}`);
}
}
} catch (e) {}
},
onComplete: function () {
console.log("[+] 本轮 ClassLoader 遍历完成");
}
});
}
// 延迟执行
setTimeout(() => {
console.log("[+] 开始执行 Dump...");
dumpAllDex();
}, 5000);
// 动态加载监听
const BaseDexClassLoader = Java.use("dalvik.system.BaseDexClassLoader");
BaseDexClassLoader.$init.overload('java.lang.String', 'java.io.File', 'java.lang.String', 'java.lang.ClassLoader').implementation = function (dexPath, optimizedDirectory, librarySearchPath, parent) {
const result = this.$init(dexPath, optimizedDirectory, librarySearchPath, parent);
setTimeout(dumpAllDex, 1500);
return result;
};
});
console.log("[+] 脚本注入完成,等待应用完全启动后自动Dump"); |
|