IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> objection 常用指令 -> 正文阅读

[移动开发]objection 常用指令

测试用例

测试用例结构比较简单。
请添加图片描述
主要代码都在 MainActivity 和 Car 中。SecondActivity、MainService、MyReceiver以及布局文件并无实效代码,就不予展示了。

package com.zyc.objectiondemo;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    public static int CAR_COUNT = 0;
    private Button btnShow;
    private Button btnShow_int;

    private Car car1;
    private Car car2;
    private Car car3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnShow = findViewById(R.id.btn_show);
        btnShow.setOnClickListener(this);
        btnShow_int = findViewById(R.id.btn_show_int);
        btnShow_int.setOnClickListener(this);

        car1 = new Car(1, "布加迪");
        car2 = new Car(2, "奔驰qqqaaa");
        car3 = new Car(3, "aaaqqq");
        CAR_COUNT = 3;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_show:
                Car tempCar1 = new Car(4);
                tempCar1.setName("Car4");
                String txt = tempCar1.show();
                Toast.makeText(this, txt, Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn_show_int:
                Car tempCar2 = new Car(5,"Car5");
                String txt2 = tempCar2.show(989);
                Toast.makeText(this, txt2, Toast.LENGTH_SHORT).show();
                break;
        }
    }

    public void toastSelf() {
        Toast.makeText(this, "I'm MainActivity", Toast.LENGTH_SHORT).show();
    }
}
package com.zyc.objectiondemo;

public class Car {
    private int id;
    private String name;

    public Car(int id) {
        this.id = id;
    }

    public Car(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String show() {
        return "id--> " + id + "\nname--> " + name;
    }

    public String show(int count) {
        return "id--> " + id + "\nname--> " + name + "\ncount--> " + count;
    }
}

运行 frida-server 后开启 objection 之旅:

objection -g com.zyc.objectiondemo explore

?

列出内存中加载的库

memory list modules
请添加图片描述
如果要把结果以json格式输出到本地可以在指令后添加参数,memory list modules --json /root/modules.json
请添加图片描述
?

列出某个库的导出函数

假设要列出 libssl.so 文件的导出函数,memory list exports libssl.so
请添加图片描述
该指令同样支持输出到json文件,memory list exports libssl.so --json /root/exports.json
请添加图片描述
?

搜索内存数据

在内存中通过字节串可以搜索数据,APP点击按钮创建带“aaaqqq”和“奔驰qqqaaa”字样的Car类后,想找到“aaaqqq”运行memory search "61 61 61 71 71 71",或者模糊搜索memory search "61 61 61 71"memory search "61 61 61 ?? ?? 71"
请添加图片描述
该指令貌似无法搜索出带中文的字符串
请添加图片描述
也可以增加参数通过字符串搜索,运行memory search "aaaqqq" --string,此方式不支持模糊搜索。
请添加图片描述
如果只展示搜索到的偏移地址,不需要展示附近内存,运行memory search "61 61 61 71 71 71" --offsets-only
请添加图片描述
?

写入内存数据

通过内存地址可以写入数据,比如搜索TextView的文字“Helloword”并通过memory write 0x12fc9c78 '61 61 61'修改其中一处结果,再把进程切换一下后台&前台,就刷新成修改的数据了。
请添加图片描述
?

提取内存数据

有了内存数据的偏移和长度,就可以通过memory dump from_base 0x12fc9c78 9 /root/memory.txt指令把刚才的内存dump到本地。
请添加图片描述
?

列出内存中所有的类

android hooking list classes,本次找到了5511个类。
请添加图片描述
?

列出指定类的所有方法

假设要查看APP MainActivity 类的方法,运行android hooking list class_methods com.zyc.objectiondemo.MainActivity,可以看到只打印了属于该类的方法,继承来的并不会打印。
请添加图片描述
?

在内存中所有的类里搜索类

从已加载的类里查找和“zyc”关键字,运行android hooking search classes zyc
请添加图片描述
?

在内存中所有的类里搜索方法

假设要搜索带“onCreate”的方法,运行android hooking search methods onCreate。该指令会遍历内存中所有已加载类的所有方法执行搜索,数据量非常大,过程相当耗时,甚至容易卡死和崩溃,所以会在运行前手动输入“y”同意。
请添加图片描述
?

列出所有Activity、Service、Receiver

查看APP的组件使用android hooking list activitiesandroid hooking list servicesandroid hooking list receivers命令。
请添加图片描述
?

启动Activity

使用android intent launch_activity com.zyc.objectiondemo.SecondActivity会以 Intent.FLAG_ACTIVITY_NEW_TASK 的方式直接启动Activity页面,通过此命令有时可以直接启动某些常规方式访问不到的页面。
请添加图片描述
?

内存堆上搜索实例

从用例代码可知,运行APP进入 MainActivity 后会创建3个Car对象,此时如果想查看内存中的Car实例,运行android heap search instances com.zyc.objectiondemo.Car
请添加图片描述
?

调用实例的方法

搜索到实例获取地址后可调用其方法。如果要调用实例1的 show() 方法,运行android heap execute 68389604 show
请添加图片描述
?

实时注入实例

拿到实例后可以直接在实例上书写js注入,运行android heap evaluate 23973990会进入js编辑器,可以实时编写、注入、调试,但没有代码提示。
请添加图片描述
?

导入Hook代码

objection支持导入Hook js文件使用,比如 /root/Desktop/objectionHook.js 有下面Hook代码:

function main() {
    Java.perform(function () {
        console.log("Hook start...");
        var Car = Java.use("com.zyc.objectiondemo.Car");
        Car.show.overload("int").implementation = function (arg1) {
            console.log("Hook show..." + arg1);
            return this.show(arg1);
        }
    });
}

setImmediate(main())

运行import /root/Desktop/objectionHook.js就可以在objection中直接使用了。
请添加图片描述
?

Hook类所有方法

运行android hooking watch class com.zyc.objectiondemo.Car可以Hook到Car类下所有方法(不包括构造方法)的调用。
请添加图片描述
?

Hook类单个方法

如果只需要Hook单个方法(包括其重载),比如上面没有Hook到的Car类构造函数,可以运行android hooking watch class_method com.zyc.objectiondemo.Car.$init
请添加图片描述
?
如果不需要Hook方法的重载,可以在方法名后面加上参数类型android hooking watch class_method com.zyc.objectiondemo.Car.$init "int,java.lang.String"
请添加图片描述
指令末尾加上对应选项可以展示参数、返回值和调用栈,运行android hooking watch class_method com.zyc.objectiondemo.Car.show --dump-args --dump-return --dump-backtrace
请添加图片描述
?

任务系统

objection可以同时运行多项任务,比如下图创建Hook任务时打印了任务id 629342,通过指令jobs list能查看当前运作的任务。
请添加图片描述
可以通过id结束某项任务,运行jobs kill 629342
请添加图片描述
?

参考资料

实用FRIDA进阶:内存漫游、hook anywhere、抓包

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 12:12:28  更:2021-07-26 12:13:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/19 19:26:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码