吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2004|回复: 16
收起左侧

[Android 分享] 安卓逆向学习1-hook脚本学习

  [复制链接]
Juana111 发表于 2024-7-31 10:56
本帖最后由 Juana111 于 2024-8-1 16:57 编辑

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

main1

main1

[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

main2

main2

加入了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层主动调用

main3

main3

[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 <classname>

android heap search instances <classname>

android heap execute <Handle> <methodname>

android heap execute 0x3606 setExecutable True

android heap evaluate <Handle>


参考资料: 陈佳林《安卓逆向与抓包实战》

免费评分

参与人数 6吾爱币 +12 热心值 +5 收起 理由
janken + 1 + 1 热心回复!
huijiahuanxie + 1 + 1 &amp;amp;#128077;&amp;amp;#127995;&amp;amp;#128077;&amp;amp;#127995;学习了!
BestLove52 + 1 + 1 谢谢@Thanks!
qxf99 + 1 厉害
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
杨辣子 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

37893202812 发表于 2024-7-31 14:36
感谢分享
binghe01 发表于 2024-8-1 00:06
gegegefei 发表于 2024-8-1 08:41
感谢楼主分享,对于hook技术,我是完全看不懂,还好代码后面有注释,所以还是学习一下。
caoyunlong1118 发表于 2024-8-1 12:20
感谢分享师傅
yuanshang000 发表于 2024-8-1 14:25
感谢分享
bzever 发表于 2024-8-2 08:32
学习了,感谢分享
头像被屏蔽
DAYS77 发表于 2024-8-2 09:02
提示: 作者被禁止或删除 内容自动屏蔽
weyou 发表于 2024-8-2 09:04
学习了,感谢分享!
lws0318 发表于 2024-8-2 10:49
感谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表