frida-trace -UF -a "libfqffmpeg.so!*decry*" frida-trace -UF -a "libfqffmpeg.so!*EVP*" frida-trace -UF -a "libfqffmpeg.so!*aes*" frida-trace -UF -a "libfqffmpeg.so!*AES*" frida-trace -UF -a "libfqffmpeg.so!*DES*" frida-trace -UF -a "libfqffmpeg.so!*hmac*" frida-trace -UF -a "libfqffmpeg.so!*RSA*"
毫无结果。
还在 Demuxer 中吗?
接下来看看解复用过程中是否存在解密,通过静态和动态分析,发现 Demuxer 时传入的 pb 已经是解密好的 tag data 了。
// get the caller of a native function functionCaller(baseAddr, funAddr, context, fun) { console.log( fun + " Base address: " + baseAddr + " funAddr: " + funAddr + " ==> " + Thread.backtrace(context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join("\n") ); }
// get tag data from AVFormatContext functionread_pb_from_AVFC(ptr) { // start is NativePointer of tag data let start = ptr.add(0x10).readPointer().add(0x04).readPointer(); let datasize = (start.add(1).readU8() << 16) + (start.add(2).readU8() << 8) + start.add(3).readU8(); console.log( hexdump(start, {length: datasize + 11, header: false}) ); }
functionhookfqff() { let baseAddr = Module.findBaseAddress("libfqffmpeg.so");