diff --git a/frida/blemon.js b/frida/blemon.js index af3a742..0be3b79 100644 --- a/frida/blemon.js +++ b/frida/blemon.js @@ -33,27 +33,27 @@ if (Java.available) { var data = new ObjC.Object(args[2]); var CBChar = new ObjC.Object(args[3]); var dataBytes = Memory.readByteArray(data.bytes(), data.length()); - var b = new Uint8Array(dataBytes); - var hexData = ""; - for (var i = 0; i < b.length; i++) { - hexData += pad(b[i].toString(16), 2); - } - console.log(Color.Green + "[BLE Write =>]" + Color.Light.Black + " UUID: " + CBChar.$ivars['_UUID'] + Color.Reset + " data: 0x" + hexData); + var buf = new Uint8Array(dataBytes); + var hexData = `length=${data.length()} bytes=0x${buf2hex(buf)}`; + console.log(Color.Green + "[BLE Write =>]" + Color.Light.Black + " UUID: " + CBChar.$ivars['_UUID'] + Color.Reset + " data: " + hexData); } }); //end Interceptor - Interceptor.attach(ObjC.classes.CBCharacteristic['- value'].implementation, { + Interceptor.attach(ObjC.classes.CBCharacteristic['- setValue:'].implementation, { onEnter: function (args) { - var CBChar = new ObjC.Object(args[0]); - // turns <12 34> into 1234 + this.CBChar = new ObjC.Object(args[0]); + }, + onLeave: function (retval) { + let CBChar = this.CBChar; var data = CBChar.$ivars['_value'] if (data != null) { - data = data.toString().replace(/ /g, '').slice(1, -1) + var buf = data.bytes().readByteArray(data.length()); + data = `length=${data.length()} bytes=0x${buf2hex(buf)}` } if (CBChar.$ivars['_isNotifying'] === true) { - console.log(Color.Cyan + "[BLE Notify <=]" + Color.Light.Black + " UUID: " + CBChar.$ivars['_UUID'] + Color.Reset + " data: 0x" + data); + console.log(Color.Cyan + "[BLE Notify <=]" + Color.Light.Black + " UUID: " + CBChar.$ivars['_UUID'] + Color.Reset + " data: " + data); } else { - console.log(Color.Blue + "[BLE Read <=]" + Color.Light.Black + " UUID: " + CBChar.$ivars['_UUID'] + Color.Reset + " data: 0x" + data); + console.log(Color.Blue + "[BLE Read <=]" + Color.Light.Black + " UUID: " + CBChar.$ivars['_UUID'] + Color.Reset + " data: " + data); } } }); //end Interceptor @@ -74,8 +74,13 @@ function bytes2hex(array) { result += ('0' + (array[i] & 0xFF).toString(16)).slice(-2); return result; }; +function buf2hex(buffer) { // buffer is an ArrayBuffer + return [...new Uint8Array(buffer)] + .map(x => x.toString(16).padStart(2, '0')) + .join(''); +} function pad(num, size) { var s = num + ""; while (s.length < size) s = "0" + s; return s; -} +} \ No newline at end of file