-
-
未解决 [求助] 在做FB抓包时,经过N次的HOOK,定位到native层的网络方法,不知道怎么把SO文件逆向了 10雪币
-
发表于: 2025-4-19 18:13 655
-
hook的代码
Java.perform(function() { // 1. 增强版Tigon请求捕获 const TigonService = Java.use('com.facebook.tigon.TigonXplatService'); TigonService.sendRequestIntegerBuffer.implementation = function( request, byteArray, i, byteBuffers, i2, callbacks, executor ) { console.log("\n=== 捕获Tigon请求 ==="); // 解析原始字节数据 if (byteArray && byteArray.length > 0) { try { // 将Java byte数组转换为JS格式 const bytes = []; for (let k = 0; k < byteArray.length; k++) { bytes.push(byteArray[k] & 0xff); } // 自动检测并解析Facebook二进制协议 console.log("\n[解析结果]"); // 1. 解析请求方法 (从输出看位于偏移量4) const methodLength = bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24); let offset = 4; const method = String.fromCharCode.apply(null, bytes.slice(offset, offset + methodLength)); offset += methodLength; console.log(`[方法] ${method}`); // 2. 解析URL (紧接着方法) const urlLength = bytes[offset] | (bytes[offset+1] << 8) | (bytes[offset+2] << 16) | (bytes[offset+3] << 24); offset += 4; const url = String.fromCharCode.apply(null, bytes.slice(offset, offset + urlLength)); offset += urlLength; console.log(`[URL] ${url}`); // 3. 解析请求头 (键值对格式) console.log("\n[请求头]"); while (offset < bytes.length) { // 键长度 const keyLength = bytes[offset] | (bytes[offset+1] << 8) | (bytes[offset+2] << 16) | (bytes[offset+3] << 24); offset += 4; if (keyLength === 0) break; // 结束标记 // 键内容 const key = String.fromCharCode.apply(null, bytes.slice(offset, offset + keyLength)); offset += keyLength; // 值长度 const valueLength = bytes[offset] | (bytes[offset+1] << 8) | (bytes[offset+2] << 16) | (bytes[offset+3] << 24); offset += 4; // 值内容 const value = String.fromCharCode.apply(null, bytes.slice(offset, offset + valueLength)); offset += valueLength; console.log(`${key}: ${value}`); } // 4. 如果有剩余数据,可能是请求体 if (offset < bytes.length) { console.log("\n[请求体] 长度:", bytes.length - offset); const body = bytes.slice(offset); // 尝试解析为JSON try { const bodyText = String.fromCharCode.apply(null, body.filter(b => b >= 32 && b <= 126)); if (bodyText.includes("{") && bodyText.includes("}")) { console.log("JSON内容:", bodyText.substring(0, 300)); } else { console.log("原始数据:", body.slice(0, 64)); } } catch (e) { console.log("二进制数据:", body.slice(0, 64)); } } // 保存完整数据 const filePath = `/sdcard/Download/fb_req_${Date.now()}.bin`; const fos = Java.use('java.io.FileOutputStream').$new(filePath); fos.write(byteArray); fos.close(); console.log(`\n原始数据已保存到: ${filePath}`); } catch (e) { console.log("解析失败:", e); } } return this.sendRequestIntegerBuffer.apply(this, arguments); }; console.log("=== Facebook请求解析Hook已安装 ==="); });
xx.bin的内容
boundary=35A02D10F5864A2BBD9203365A4A3F7B
已知对应的native方法
Java类名:com.facebook.tigon.TigonXplatService
Java方法名:sendRequestIntegerBuffer
Java方法签名:(Lcom/facebook/tigon/iface/TigonRequest;[BI[Ljava/nio/ByteBuffer;ILcom/facebook/tigon/TigonCallbacks;Ljava/util/concurrent/Executor;)Lcom/facebook/tigon/TigonXplatRequestToken;
来自:<libcoldstart.so>
C++函数绝对地址:0x6d0dea2e58
C++函数偏移地址:0x761e58
IDA处理后是红色的,应该是有错误, 但是我不会弄了啊..... 气死了。。。
有没有大佬可以指导下, 我应该学习哪些东西来解决这个问题啊...
当前无法debug,一直使用hook加java代码看的,native层不会啊,C/C++会看。汇编看不太懂,如果一边DEBUG的话就可以慢慢看,
但是我没办法过反DEBUG
赞赏
他的文章
赞赏
雪币:
留言: