栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

app hook

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

app hook

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

一、使用jadx查看代码

app界面(猜拳小游戏):

打开 androidmanifest.xml

查找activity,此为实例与组件的对应。因为案例只有一个界面,所以目前只有一个activity。
根据android:name 找到对应类

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

二、apktool

下载apktool后,打开cmd,进入此下载目录。
输入命令apktool.bat d F:Desktopbooks爬虫lesson2-rps-frida-test.apk

此时,会在当前目录下生成和apk名字相同的文件夹,进入lesson2-rps-frida-testsmalicomexampleseccon2015rock_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()  # 防止程序退出

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/683576.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号