安卓逆向学习1-hook脚本学习

查看 64|回复 8
作者:Juana111   
1.1helloworld.js
基本的FrIDA的api函数,Frida版本的helloworld
[JavaScript] 纯文本查看 复制代码setTimeout(
        //将function这个匿名函数作为参数传递给setTimeout()函数   
        //注册到js的运行库     
        function(){
        //匿名函数function
                Java.perform(function(){
                //Java.perform()方法将函数注册到APPJava运行库中 执行函数打印log
                        console.log("hello world!")
                })
        }
)
1.2MainActivity.java


image.png (148.85 KB, 下载次数: 1)
下载附件
main1
2024-7-31 10:51 上传

[JavaScript] 纯文本查看 复制代码//1.js
function main(){
        //存放hook脚本
        console.log("Script loaded successfully")
              
        Java.perform(function(){
        //Java.perform()API函数,注入脚本内容
        //参数是匿名函数
                console.log("Inside java perform function")
                var MainActivity = Java.use('com.roysue.demo02.MainActivity')
                //调用API函数的Java.use()函数
                //参数是hook函数所在的类的全名
                console.log("Java.Use.Successfully!")//类定位成功
               
                MainActivity.fun.implementation=function(x,y){
                //implementation实现MainActivity对象中的fun函数
                //定义到function这个匿名函数 来作为Java.perform()的参数
                        console.log("x=>",x,"y=>",y)
                        var ret_value=this.fun(x,y)
                        
                        return ret_value
                }
        })
}
setImmediate(main)
//被执行函数 main参数传递  类似setTimeout()函数--延时注入
//针对于MainActivity对象的fun函数
//Frida注入app之后立即执行main函数
[JavaScript] 纯文本查看 复制代码//修改参数的change_args()函数
function change_args(){
        console.log("Scripts loaded successfully")
        
        Java.perform(function(){
        
        
                console.log("Inside java perform function")
               
                var MainActivity = Java.use('com.roysue.demo02.MainActivity')
               
               
                console.log("Java.Use.Successfully!")
                                
                MainActivity.fun.implementation=function(x,y){
                                
                        console.log("orignal args:x=>",x,",y=>",y)
                        var ret_value=this.fun(2,5);
                        //函数参数修改为(2,5)
                        return ret_value
                }
        })
}
使用attach模式注入App
[Shell] 纯文本查看 复制代码frida -U -l 1.js com.roysue.demo02
# -U USB设备
# -l 指定注入脚本所在的路径 后面是要注入的脚本
Tips:
  • hook函数不修改被hook函数的返回值
  • 调用原函数返回原函数的返回值

    1.3MainActivity2.java


    image.png (180.81 KB, 下载次数: 1)
    下载附件
    main2
    2024-7-31 10:53 上传

    加入了fun()函数的重载
    [JavaScript] 纯文本查看 复制代码//void fun(int x,int y)
    function main(){
            console.log("Script loaded successfully")
            Java.perform(function(){
                    console.log("Inside java perform function")
                    var MainActivity=Java.use("com.roysue.demo02.MainActivity")
                    console.log("Java.Use.Successfully")//定位类成功
                   
                    //hook重载函数
                    MainActivity.fun.overload('int','int').implementation=
                    function(x,y){
                            console.log("x=>",x,"y=>",y)
                            var ret_value=this.fun(2,5);
                            return ret_value
                    }
            })
    }
    setImmediate(main)
    [JavaScript] 纯文本查看 复制代码//String fun(String x)
    function main(){
            console.log("Script loaded successfully")
            Java.perform(function(){
                    console.log("Inside java perform function")
                    var MainActivity=Java.use("com.roysue.demo02.MainActivity")
                    console.log("Java.Use.Successfully")
                    MainActivity.fun.overload('java.lang.String').implementation=function(x){
                            console.log("x=>",x)
                            var ret_value=this.fun("I")
                            return ret_value
                    }
            })
    }
    setImmediate(main)
    1.4Java层主动调用


    image.png (211.93 KB, 下载次数: 1)
    下载附件
    main3
    2024-7-31 10:54 上传

    [JavaScript] 纯文本查看 复制代码//3.2.3 Java层主动调用
    function main(){
            console.log("script loaded successfully")
            Java.perform(function(){
                    console.log("inside java perform function")
                    //静态函数
                    //API Java.use()获取类
                    var MainActivity = Java.use('com.roysue.demo02.MainActivity')
                    MainActivity.staticSecret()
                    //动态函数
                    //API Java.choose()从内存中获取类的实例对象
                    Java.choose('com.roysue.demo02.MainActivity',{
                            //?API回调onMatch
                            onMatch:function(instance){
                                    console.log('instance found',instance)
                                    instance.secret()
                            },
                            onComplete:function(){
                                    console.log('search complete')
                            }
                    })
            })
    }
    setImmediate(main)
    使用Java.choose()函数
  • onMatch:function(instance){…}和 onComplete(){}  -> 事件处理或回调函数
  • onMatch:function(instance){…} -> 某模式匹配成功时执行的操作。
  • onComplete(){} -> 某个操作或任务完成时执行的操作。【异步编程】

    做区分:Objection是基于Frida的注入工具 开个坑!
    Objection命令
    [Shell] 纯文本查看 复制代码objection
    pip install -U objection
    android hooking list classes
    android hooking search classes XXX
    android hooking search methods XXX
    android hooking list class_methods
    android hooking list activities
    android hooking list services
    android hooking watch class_method XXX
    android hooking watch class_method XXX.File.$init --dump-args --dump-backtrace --dump-return
    jobs list
    jobs kill job_ID
    android hooking watch class
    android heap search instances
    android heap execute  
    android heap execute 0x3606 setExecutable True
    android heap evaluate
    参考资料: 陈佳林《安卓逆向与抓包实战》

    函数, 文本

  • 37893202812   

    感谢分享
    binghe01   

    感谢分享师傅
    gegegefei   

    感谢楼主分享,对于hook技术,我是完全看不懂,还好代码后面有注释,所以还是学习一下。
    caoyunlong1118   

    感谢分享师傅
    yuanshang000   

    感谢分享
    bzever   

    学习了,感谢分享
    DAYS77   

    学习了,感谢分享!
    weyou   

    感谢楼主分享
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部