frida-js注入文件

本文介绍了如何使用 Frida 进行 JS 文件注入,包括启动服务器、端口转发、查询包名以及具体注入的命令行操作。通过 adb 命令和 Frida 的参数,实现了对指定应用的动态代码注入。
摘要由CSDN通过智能技术生成

frida 注入命令行使用

启动server

adb shell “.//data/local/tmp/xxoo12.8.11”

端口转发

adb forward tcp:27043 tcp:27043

查询包名

adb shell pm list packages -3

注入

frida -U -l js文件 包名

setImmediate(main);
function main(){
   
    Java.perform(function(){
   
        //tongsha();
        zhixie(); 


     });
}
//获取包名类名
//定义方法
//构造方法类名和方法一样$inti	
//重载方法.overload("java.lang.String")
//构造.$init
//setImmediate防止注入超时
// 获取参数两种方式 一种给形参 第二种arguments[0]获取





//

function zhixie(){
   
 var nuo = Java.use("com.leyida.cloud.utils.RSAUtil");
    nuo.encryptByPublicKey.implementation=function(a){
   
       console.log("      ");
       console.log("      ");
       console.log("a:"+a);
       console.log("=================***自设hook开始***=================");
       var data=this.encryptByPublicKey(a);//切记修改函数名
       console.log("结果:"+data);
       console.log("=================***自设hook结束***=================");
       showStacks();
       console.log("=================***调用堆栈打印***=================");
       return data;   
       }

}


function 读取类变量(){
   
    
    Java.perform(function(){
   
        //获取java类  类.变量名.value  方法读取
        //要修改的话直接赋值l.E.value='诺诺'
        var l = Java.use("com.xiaojianbang.app.RSAHex");
        console.log(l.E.value);
        console.log(l.N.value);
    });



}

function 静态方法的主动调用(){
   
    
    Java.perform(function(){
   
        //静态方法的主动调用
        var AES = Java.use("com.xiaojianbang.app.MD5");
        var str = Java.use("java.lang.String");
        var base64 = Java.use("android.util.Base64");
        var bytes = str.$new("nuonuo").getBytes();
        console.log(str.$new(bytes))
        console.log(JSON.stringify(bytes));
        console.log(base64.encodeToString(str.$new("nuonuo").getBytes(),0))
        var rea=AES.md5_1("活活");
        console.log(rea);
    });
}


function 静态方法的主动调用例子(){
   
    Java.perform(function(){
   
        //静态方法的主动调用
        var rsa = Java.use("com.xiaojianbang.app.RSA");
        var str = Java.use("java.lang.String");
        var base64 = Java.use("android.util.Base64");
        var bytes = str.$new("xiaojianbang").getBytes();
        console.log(JSON.stringify(bytes));
        var retval = rsa.encrypt(bytes);
        var result = base64.encodeToString(retval, 0);
        console.log(result);
        //非静态方法的主动调用1 (新建一个对象去调用)
        var res = Java.use("com.xiaojianbang.app.Money").$new("日元", 300000).getInfo();
        console.log(res);
        var utils = Java.use("com.xiaojianbang.app.Utils");
        res = utils.$new().myPrint(["xiaojianbang","is very good"," ","zygx8","is very good"]);
        console.log(res);
        //非静态方法的主动调用2 (获取已有的对象调用)
        Java.choose("com.xiaojianbang.app.Money",{
   
            onMatch: function(obj){
   
                if(obj._name.value == "美元"){
   
                    res = obj.getInfo();
                    console.log(res);
                }
            },
            onComplete: function(){
   

            }
        });

    });
}



function 获取所有已加载的类(){
   
    //frida互交主动调用不用提前注入
    Java.perform(function(){
   
        //要过滤app的包名
        var baoming="com.mg.ec"
         Java.enumerateLoadedClasses({
   
             onMatch: function(name, handle){
   
                 if(name.indexOf(baoming) != -1){
   
                     console.log(name);
                 } 
             },
            onComplete: function(){
   
            }
        });
    });
}

function 获取所有已加载的类的所有方法(){
   
    Java.perform(function(){
   
        // Java.enumerateLoadedClasses({
   
        //     onMatch: function(name, handle){
   
        //         if(name.indexOf("com.xiaojianbang.app") != -1){
   
        //             console.log(name);
        //             var clazz = Java.use(name);
        //             console.log(clazz);
        //             var methods = clazz.class.getDeclaredMethods();
                    
        //             for(var i = 0; i < methods.length; i++){
   
        //                 console.log(methods[i]);
        //             }

        //         }
                
        //     },
        //     onComplete: function(){
   

        //     }
        // });


        //过滤apk包名
        var baoming="com.xiaojianbang.app"

        var classes = Java.enumerateLoadedClassesSync();
        for(var i = 0; i < classes.length; i++){
   
            if(classes[i].indexOf(baoming) != -1){
   
                console.log('');
                console.log('类名*************'+classes[i]);
                var clazz = Java.use(classes[i]);
                var methods = clazz.class.getDeclaredMethods();
                for(var j = 0; j < methods.length; j++){
   
                    console.log('方法:'+methods[j]);
                }
                console.log('');
            }
        }


    });
}


function Hook类的所有方法(){
   
    Java.perform(function(){
   
        //给一个类名
        var md5 = Java.use("com.xiaojianbang.app.MD5");
        var methods = md5.class.getDeclaredMethods();
        for(var j = 0; j < methods.length; j++){
   
            var methodName = methods[j].getName();
            console.log(methodName);

            for(var k = 0; k < md5[methodName].overloads.length; k++){
   

                md5[methodName].overloads[k].implementation = function(){
   
                    for(var i = 0; i < arguments.length; i++){
   
                        console.log(arguments[i]);
                    }
                    return this[methodName].apply(this, arguments);
                }
            }

        }

    });
}





function tuoke(){
   
    //参数2的OpenMemory参数自己把手机的libart.so pull出来.然后看看自己手机OpenMemory的对应签名函数名.
    Interceptor.attach(Module.findExportByName("libart.so", "_ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_7OatFileEPS9_"), {
   
    onEnter: function (args) {
   
      
        //dex起始位置
        var begin = args[1]
        //打印magic
        console.log("magic : " + Memory.readUtf8String(begin))
        //dex fileSize 地址
        var address = parseInt(begin,16) + 0x20
        //dex 大小
        var dex_size = Memory.readInt(ptr(address))

        console.log("dex_size :" + dex_size)
        //dump dex 到/data/data/pkg/目录下
        var packageName = "com.androidapp.mibo" // 此处修改为要hook的包名
        var file = new File("/data/data/"+packageName+"/" + dex_size + ".dex", &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值