-
-
Save riskers/19c6a9352d17c001cae596780709a92b to your computer and use it in GitHub Desktop.
Bytes to hex, string to bytes, bytes to string
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* Author: __rodx00__ | |
* | |
* Usefull functions while reversing frida scripts. | |
*/ | |
function bin2ascii(array) { | |
var result = []; | |
for (var i = 0; i < array.length; ++i) { | |
result.push( | |
String.fromCharCode( | |
// hex2ascii part | |
parseInt( | |
("0" + (array[i] & 0xff).toString(16)).slice(-2), // binary2hex part | |
16 | |
) | |
) | |
); | |
} | |
return result.join(""); | |
} | |
// bytes2HEX | |
function bytes2Hex(arrBytes){ | |
var str = ""; | |
for (var i = 0; i < arrBytes.length; i++) { | |
var tmp; | |
var num = arrBytes[i]; | |
if (num < 0) { | |
tmp = (255 + num + 1).toString(16); | |
} else { | |
tmp = num.toString(16); | |
} | |
if (tmp.length == 1) { | |
tmp = "0" + tmp; | |
} | |
if(i>0){ | |
str += " "+tmp; | |
}else{ | |
str += tmp; | |
} | |
} | |
return str; | |
} | |
// string2Bytes | |
function string2Bytes(str) { | |
var bytes = new Array(); | |
var len, c; | |
len = str.length; | |
for(var i = 0; i < len; i++) { | |
c = str.charCodeAt(i); | |
if(c >= 0x010000 && c <= 0x10FFFF) { | |
bytes.push(((c >> 18) & 0x07) | 0xF0); | |
bytes.push(((c >> 12) & 0x3F) | 0x80); | |
bytes.push(((c >> 6) & 0x3F) | 0x80); | |
bytes.push((c & 0x3F) | 0x80); | |
} else if(c >= 0x000800 && c <= 0x00FFFF) { | |
bytes.push(((c >> 12) & 0x0F) | 0xE0); | |
bytes.push(((c >> 6) & 0x3F) | 0x80); | |
bytes.push((c & 0x3F) | 0x80); | |
} else if(c >= 0x000080 && c <= 0x0007FF) { | |
bytes.push(((c >> 6) & 0x1F) | 0xC0); | |
bytes.push((c & 0x3F) | 0x80); | |
} else { | |
bytes.push(c & 0xFF); | |
} | |
} | |
return bytes; | |
} | |
//Bytes2String | |
function bytes2String(arr) { | |
if(typeof arr === 'string') { | |
return arr; | |
} | |
var str = '', | |
_arr = arr; | |
for(var i = 0; i < _arr.length; i++) { | |
var one = _arr[i].toString(2), | |
v = one.match(/^1+?(?=0)/); | |
if(v && one.length == 8) { | |
var bytesLength = v[0].length; | |
var store = _arr[i].toString(2).slice(7 - bytesLength); | |
for(var st = 1; st < bytesLength; st++) { | |
store += _arr[st + i].toString(2).slice(2); | |
} | |
try { | |
str += String.fromCharCode(parseInt(store, 2)); | |
} catch (error) { | |
str += parseInt(store, 2).toString(); | |
console.log(error); | |
} | |
i += bytesLength - 1; | |
} else { | |
try { | |
str += String.fromCharCode(_arr[i]); | |
} catch (error) { | |
str += parseInt(store, 2).toString(); | |
console.log(error); | |
} | |
} | |
} | |
return str; | |
} | |
//BytesToString | |
function bytesToString(value) { | |
var buffer = Java.array('byte', value); | |
var StringClass = Java.use('java.lang.String'); | |
return StringClass.$new(buffer); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment