app hook

案例:
案例apk:下载地址,提取码4274

一、使用jadx查看代码

app界面(猜拳小游戏):
在这里插入图片描述
打开 androidmanifest.xml
在这里插入图片描述
查找activity,此为实例与组件的对应。因为案例只有一个界面,所以目前只有一个activity。
根据android:name 找到对应类
在这里插入图片描述
在这里插入图片描述

在代码中可以看到showMessageTask 为一个类的实例,因此想要hook此类,需要使用apktool反编译

二、apktool

下载apktool后,打开cmd,进入此下载目录。
输入命令apktool.bat d F:\Desktop\books爬虫\lesson2-rps-frida-test.apk
在这里插入图片描述
此时,会在当前目录下生成和apk名字相同的文件夹,进入lesson2-rps-frida-test\smali\com\example\seccon2015\rock_paper_scissors
可以看到smail文件
在这里插入图片描述
MainActivity.smali文件为我们之前找到的类
MainActivity$1.smali就是我们需要hook的属性为类类型的类了。
hook时,使用包名+类名即可hook

代码

import codecs
import frida
import sys

hook_code = '''
Java.perform(
    function () {
        console.log('[*] Running CTF')
        var MainActivity = Java.use('com.example.seccon2015.rock_paper_scissors.MainActivity')
        MainActivity.onClick.implementation = function(v){
            // m 是默认值
            //console.log('m is :'+this.m.value)
            //console.log('n is :'+this.n.value)
            this.onClick(v)
            console.log('m is :'+this.m.value)
            console.log('n is :'+this.n.value)
        }
        var TT = Java.use('com.example.seccon2015.rock_paper_scissors.MainActivity$1') // 从 Smali 文件找
        TT.run.implementation = function(){
            // 内部类访问外部类的成员变量
            // this.this$0.value.外部类属性名.value 
            // this.m.value = 1    // TypeError: cannot write property 'value' of undefined
            // this.n.value = 2
            this.this$0.value.m.value = 1
            this.this$0.value.n.value = 2
            this.run()
        }  
    }
)
'''


def on_message(message, data):
    if message['type'] == 'send':
        print(message['payload'])
    elif message['type'] == 'error':
        print(message['stack'])


# hook 已经启动的app
process = frida.get_usb_device(timeout=1000).attach('com.example.seccon2015.rock_paper_scissors')
script = process.create_script(hook_code)
script.on('message', on_message)
script.load()
sys.stdin.read()  # 防止程序退出

# spawn 重启app 可以hook app的启动阶段 (可能会使app闪崩)
# device = frida.get_usb_device(timeout=1000)
# pid = device.spawn(['com.example.seccon2015.rock_paper_scissors'])
# process = device.attach(pid)
# script = process.create_script(hook_code)
# script.on('message', on_message)
# script.load()
# sys.stdin.read()  # 防止程序退出

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值