Frida hook oc NSData打印全部数据

let bytes = ObjC.Object(args[0]).bytes();

let length = parseInt(ObjC.Object(args[0]).length());

for (let i = 0; i < length; i += 16) {

let bytesPerLine = Math.min(16, length - i);

let hexStr = "";

let asciiStr = "";

for (let j = 0; j < bytesPerLine; j++) {

let byteVal = Memory.readU8(bytes.add(i + j));

hexStr += byteVal.toString(16).padStart(2, "0") + " ";

if (byteVal >= 32 && byteVal <= 126) {

asciiStr += String.fromCharCode(byteVal);

} else {

asciiStr += ".";

}

}

log(` --Input ${hexStr.padEnd(48)} ${asciiStr}`);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Frida hook Java层全部AES加密函数的JavaScript代码示例: ```javascript Java.perform(function() { // 找到所有的AES加密函数 var cipherClasses = [ "javax.crypto.Cipher", "javax.crypto.CipherInputStream", "javax.crypto.CipherOutputStream", "javax.crypto.NullCipher" ]; var aesFunctions = [ "AES/CBC/NoPadding", "AES/CBC/PKCS5Padding", "AES/CFB/NoPadding", "AES/CFB/PKCS5Padding", "AES/ECB/NoPadding", "AES/ECB/PKCS5Padding", "AES/OFB/NoPadding", "AES/OFB/PKCS5Padding" ]; // hook所有的AES加密函数 for (var i = 0; i < cipherClasses.length; i++) { var cipherClass = Java.use(cipherClasses[i]); for (var j = 0; j < aesFunctions.length; j++) { var aesFunction = aesFunctions[j]; var cipherFunc = aesFunction.split("/")[0]; var paddingFunc = aesFunction.split("/")[1]; try { // hook encrypt函数 cipherClass['getInstance'].overload('java.lang.String').implementation = function(mode) { var instance = this.getInstance(mode); if (mode.indexOf(cipherFunc) != -1 && mode.indexOf(paddingFunc) != -1) { instance.encryptImpl = instance.doFinal.overload().implementation; instance.doFinal.overload('[B').implementation = function(data) { // 打印参数 console.log("[*] Cipher Mode: " + mode); console.log("[*] Cipher Function: " + cipherFunc); console.log("[*] Padding Function: " + paddingFunc); console.log("[*] Data: " + data); // 调用原始函数 var result = this.encryptImpl(); // 打印返回值 console.log("[*] Encrypted Data: " + result); // 返回真正的返回值 return result; }; } return instance; }; // hook decrypt函数 cipherClass['getInstance'].overload('java.lang.String').implementation = function(mode) { var instance = this.getInstance(mode); if (mode.indexOf(cipherFunc) != -1 && mode.indexOf(paddingFunc) != -1) { instance.decryptImpl = instance.doFinal.overload().implementation; instance.doFinal.overload('[B').implementation = function(data) { // 打印参数 console.log("[*] Cipher Mode: " + mode); console.log("[*] Cipher Function: " + cipherFunc); console.log("[*] Padding Function: " + paddingFunc); console.log("[*] Data: " + data); // 调用原始函数 var result = this.decryptImpl(); // 打印返回值 console.log("[*] Decrypted Data: " + result); // 返回真正的返回值 return result; }; } return instance; }; } catch (e) { console.log(e); } } } }); ``` 以上代码示例是使用Frida hook Java层全部AES加密函数,并在函数执行前后打印函数参数和返回值。如果需要修改加密算法,可以在hook函数中修改参数或者返回值。注意,这个示例代码可能会hook到一些不需要的函数,需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值