frida hook java层aes代码
时间: 2023-07-09 20:35:21 浏览: 193
以下是使用Frida hook Java层AES加密函数的JavaScript代码示例:
```javascript
Java.perform(function() {
// 找到目标类
var targetClass = Java.use("com.example.MyClass");
// hook目标函数
targetClass.encrypt.overload('[B', '[B').implementation = function(data, key) {
// 打印参数
console.log("[*] Data: " + data);
console.log("[*] Key: " + key);
// 调用原始函数
var result = this.encrypt(data, key);
// 打印返回值
console.log("[*] Encrypted Data: " + result);
// 返回真正的返回值
return result;
};
});
```
以上代码示例是使用Frida hook Java层AES加密函数,并在函数执行前后打印函数参数和返回值。如果需要修改加密算法,可以在hook函数中修改参数或者返回值。需要注意的是,因为Java代码是运行在虚拟机中的,所以hook Java层函数需要使用Java.use()方法来获取目标类。
相关问题
frida hook java层全部aes代码
以下是使用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到一些不需要的函数,需要根据具体情况进行修改。
frida hook aes代码
以下是使用Frida hook AES加密函数的JavaScript代码示例:
```javascript
Java.perform(function() {
// 找到目标函数
var aesEncryptFunc = Module.findExportByName("libcrypto.so", "AES_encrypt");
// hook目标函数
Interceptor.attach(aesEncryptFunc, {
onEnter: function(args) {
// 获取函数参数
var key = Memory.readByteArray(args[1], 16);
var data = Memory.readByteArray(args[0], 16);
// 打印参数
console.log("[*] Key: " + key);
console.log("[*] Data: " + data);
},
onLeave: function(retval) {
// 获取函数返回值
var encryptedData = Memory.readByteArray(retval, 16);
// 打印返回值
console.log("[*] Encrypted Data: " + encryptedData);
}
});
});
```
以上代码示例是使用Frida hook AES加密函数,并在函数进入和离开时打印函数参数和返回值。如果需要修改加密算法,可以在onEnter函数中修改参数,或者在onLeave函数中修改返回值。
阅读全文