frida hook各种加密算法
Java.perform(function() { //Base64 var base64=Java.use('android.util.Base64'); var string=Java.use('java.lang.String'); /*base64.encode.overload('[B', 'int', 'int', 'int').implementation = function(){ send("=================base64 encode===================="); send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new())); send(arguments[0]); send(arguments[1]); send(arguments[2]); send(arguments[3]); var data=this.encode(arguments[0],arguments[1],arguments[2],arguments[3]) send("base64:"+string.$new(data)); return data; }*/ /*base64.decode.overload('[B', 'int', 'int', 'int').implementation = function(){ send("=================base64 decode===================="); send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new())); send(arguments[0]); send(arguments[1]); send(arguments[2]); send(arguments[3]); var data=this.decode(arguments[0],arguments[1],arguments[2],arguments[3]) send("base64:"+string.$new(data)); return data; }*/ // MD SHA var messageDigest=Java.use('java.security.MessageDigest'); // update for(var i = 0; i < messageDigest.update.overloads.length; i++){ messageDigest.update.overloads[i].implementation = function(){ var name=this.getAlgorithm() send("================="+name+"===================="); send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new())); if(arguments.length == 1){ send(arguments[0]); this.update(arguments[0]); }else if(arguments.length == 3){ send(arguments[0]); send(arguments[1]); send(arguments[2]); this.update(arguments[0],arguments[1],arguments[2]); } } } // digest for(var i = 0; i < messageDigest.digest.overloads.length; i++){ messageDigest.digest.overloads[i].implementation = function(){ var name=this.getAlgorithm() send("================="+name+"===================="); send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new())); if(arguments.length == 0){ var data=this.digest(); send(data); return data; }else if(arguments.length == 1){ send(arguments[0]); var data=this.digest(arguments[0]); send(data); return data; }else if(arguments.length == 3){ send(arguments[0]); send(arguments[1]); send(arguments[2]); var data=this.digest(arguments[0],arguments[1],arguments[2]); send(data); return data; } } } //MAC var mac=Java.use('javax.crypto.Mac'); for(var i = 0; i < mac.doFinal.overloads.length; i++){ mac.doFinal.overloads[i].implementation = function(){ var name=this.getAlgorithm() send("================="+name+"===================="); send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new())); if(arguments.length == 0){ var data=this.doFinal(); send(data); return data; }else if(arguments.length == 1){ send(arguments[0]); var data=this.doFinal(arguments[0]); send(data); return data; }else if(arguments.length == 2){ send(arguments[0]); send(arguments[1]); var data=this.doFinal(arguments[0],arguments[1]); send(data); return data; } } } // DES DESede AES PBE RSA var cipher=Java.use('javax.crypto.Cipher'); for(var i = 0; i < cipher.doFinal.overloads.length; i++){ cipher.doFinal.overloads[i].implementation = function(){ var name=this.getAlgorithm() send("================="+name+"===================="); send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new())); if(arguments.length == 0){ var data=this.doFinal(); send(data); return data; }else if(arguments.length == 1){ send(arguments[0]); var data=this.doFinal(arguments[0]); send(data); return data; }else if(arguments.length == 2){ send(arguments[0]); send(arguments[1]); var data=this.doFinal(arguments[0],arguments[1]); send(data); return data; }else if(arguments.length == 3){ send(arguments[0]); send(arguments[1]); send(arguments[2]); var data=this.doFinal(arguments[0],arguments[1],arguments[2]); send(data); return data; }else if(arguments.length == 5){ send(arguments[0]); send(arguments[1]); send(arguments[2]); send(arguments[3]); send(arguments[4]); var data=this.doFinal(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4]); send(data); return data; }else{ send(arguments[0]); send(arguments[1]); send(arguments[2]); send(arguments[3]); var data=this.doFinal(arguments[0],arguments[1],arguments[2],arguments[3]); send(data); return data; } } } //KEY var secretKey=Java.use('javax.crypto.spec.SecretKeySpec'); for(var i = 0; i < secretKey.$init.overloads.length; i++){ secretKey.$init.overloads[i].implementation = function(){ var name=this.getAlgorithm() send("=================KEY===================="); //send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new())); if(arguments.length == 2){ send(arguments[0]); send(arguments[1]); this.$init(arguments[0],arguments[1]); }else if(arguments.length == 4){ send(arguments[0]); send(arguments[1]); send(arguments[2]); send(arguments[3]); this.$init(arguments[0],arguments[1],arguments[2],arguments[3]); } } } //IV //DES KEY //DESede KEY //PBE KEY salt });
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
2020-12-05 chardet模块的使用