I found InputStream hook code here! but I add below code in android, then try to hook it with the frida script, it's not been triggered:
Java code (SocketDemo.apk):
InputStream ios = sock.getInputStream();
int len = ios.read(dataBuf);
frida script.js:
function buf2hex(array, readLimit) {
var result = [];
var ascii = ""
readLimit = readLimit || array.length;
for (var i=0; i<readLimit;++i) {
var elem = array[i] & 0xFF
var str = (0x100 + elem).toString(16).substr(1)
result.push(str);
if (elem < 127 && elem >= 32) {
ascii += String.fromCharCode(elem)
} else {
ascii += "."
}
}
return result.join(' ') + " | " + ascii
}
function hookInputStream() {
Java.use('java.net.Socket')['connect'].overload('java.net.SocketAddress').implementation = function(sockaddr) {
console.log("connect")
var retval = this.connect(sockaddr)
return retval
}
Java.use('java.io.InputStream')['read'].overload('[B').implementation = function(data) {
var retval = this.read(data)
console.log("----" + data.length)
var hexstr = buf2hex(data)
console.log(hexstr)
return retval
}
}
Java.perform(hookInputStream);
command:
frida -Uf com.example.socketdemo -l script.js --no-pause