unidbg非反射调用demo(一)

这篇具有很好参考价值的文章主要介绍了unidbg非反射调用demo(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

记录学习笔记~

package com.dta.lesson2;

import com.github.unidbg.AndroidEmulator;
import com.github.unidbg.Module;
import com.github.unidbg.arm.backend.DynarmicFactory;
import com.github.unidbg.linux.android.AndroidEmulatorBuilder;
import com.github.unidbg.linux.android.AndroidResolver;
import com.github.unidbg.linux.android.dvm.DalvikModule;
import com.github.unidbg.linux.android.dvm.DvmObject;
import com.github.unidbg.linux.android.dvm.StringObject;
import com.github.unidbg.linux.android.dvm.VM;
import com.github.unidbg.linux.android.dvm.jni.ProxyDvmObject;
import com.github.unidbg.memory.Memory;
import com.sun.jna.Pointer;
import net.dongliu.apk.parser.Main;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class MainActivity {
    private final AndroidEmulator emulator;
    private final VM vm;
    private final Memory memory;
    private final Module module;

    public MainActivity(){
        emulator = AndroidEmulatorBuilder
                .for32Bit()
                //.setRootDir(new File("target/rootfs/default"))
                //.addBackendFactory(new DynarmicFactory(true))
                .build();

        memory = emulator.getMemory();
        memory.setLibraryResolver(new AndroidResolver(23));

        vm = emulator.createDalvikVM(new File("unidbg-android/src/test/java/com/dta/lesson2/app-debug.apk"));

        DalvikModule dalvikModule = vm.loadLibrary(new File("unidbg-android/src/test/java/com/dta/lesson2/libnative-lib.so"), true);
        module = dalvikModule.getModule();

        vm.callJNI_OnLoad(emulator,module);
    }

    public void callMd5(){
        DvmObject obj = ProxyDvmObject.createObject(vm,this);
        String data = "dta";
        DvmObject dvmObject = obj.callJniMethodObject(emulator, "md5(Ljava/lang/String;)Ljava/lang/String;", data);
        String result = (String) dvmObject.getValue();
        System.out.println("[symble] Call the so md5 function result is ==> "+ result);
    }

    private void call_address() {
        Pointer jniEnv = vm.getJNIEnv();
        DvmObject obj = ProxyDvmObject.createObject(vm,this);
        StringObject data = new StringObject(vm,"dta");

        List<Object> args = new ArrayList<>();
        args.add(jniEnv);
        args.add(vm.addLocalObject(obj));
        args.add(vm.addLocalObject(data));

        Number[] numbers = module.callFunction(emulator, 0x8E81, args.toArray());
        DvmObject<?> object = vm.getObject(numbers[0].intValue());
        String value = (String) object.getValue();
        System.out.println("[addr] Call the so md5 function result is ==> "+ value);
    }

    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        MainActivity mainActivity = new MainActivity();
        System.out.println("load the vm "+( System.currentTimeMillis() - start )+ "ms");
        mainActivity.callMd5();
        mainActivity.call_address();
    }

}

other文章来源地址https://www.toymoban.com/news/detail-509277.html


package com.r0ysue;

import com.github.unidbg.AndroidEmulator;
import com.github.unidbg.Module;
import com.github.unidbg.linux.android.AndroidEmulatorBuilder;
import com.github.unidbg.linux.android.AndroidResolver;
import com.github.unidbg.linux.android.dvm.*;
import com.github.unidbg.linux.android.dvm.jni.ProxyDvmObject;
import com.github.unidbg.memory.Memory;
import com.sun.jna.Pointer;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class demo1 extends AbstractJni {
    private final AndroidEmulator emulator;
    private final VM vm;
    private final Memory memory;
    private final Module module;


    public demo1() {
        emulator = AndroidEmulatorBuilder
                .for32Bit()
                //.setRootDir(new File("target/rootfs/default"))
                //.addBackendFactory(new DynarmicFactory(true))
                .build();

        memory = emulator.getMemory();
        memory.setLibraryResolver(new AndroidResolver(23));

//        vm = emulator.createDalvikVM(new File("unidbg-android/src/test/java/com/dta/lesson2/app-debug.apk"));
        vm = emulator.createDalvikVM(new File("unidbg-android/src/test/resources/ro/uuu.apk"));
//        vm.setVerbose(true);
        vm.setJni(this);

        DalvikModule dalvikModule = vm.loadLibrary("native-lib", true);

        module = dalvikModule.getModule();

        vm.callJNI_OnLoad(emulator, module);
    }

    public demo1(AndroidEmulator emulator, VM vm, Memory memory, Module module) {
        this.emulator = emulator;
        this.vm = vm;
        this.memory = memory;
        this.module = module;
    }

    public void callMd5() {
//        DvmObject obj = ProxyDvmObject.createObject(vm, "com/dta/lesson2/MainActivity");
        DvmObject obj = vm.resolveClass("com/dta/lesson2/MainActivity").newObject(null);
        String data = "dta";
        DvmObject dvmObject = obj.callJniMethodObject(emulator, "md5(Ljava/lang/String;)Ljava/lang/String;", data);
        String result = (String) dvmObject.getValue();
        System.out.println("[symble] Call the so md5 function result is ==> " + result);
    }

    private void call_address() {
        Pointer jniEnv = vm.getJNIEnv();
        DvmObject obj = ProxyDvmObject.createObject(vm, this);
        StringObject data = new StringObject(vm, "dta");

        List<Object> args = new ArrayList<>();
        args.add(jniEnv);
        args.add(vm.addLocalObject(obj));
        args.add(vm.addLocalObject(data));

        Number numbers = module.callFunction(emulator, 0x8E81, args.toArray());
        DvmObject<?> object = vm.getObject(numbers.intValue());
        String value = (String) object.getValue();
        System.out.println("[addr] Call the so md5 function result is ==> " + value);
    }

    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        demo1 demo1 = new demo1();
        System.out.println("load the vm " + (System.currentTimeMillis() - start) + "ms");
        demo1.callMd5();
        demo1.call_address();
    }

}

到了这里,关于unidbg非反射调用demo(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • xhs最新7.68.1版本unidbg调用方式

    若计算的结果和你抓包的不一样,需要自己手动修改 main_hmac 详细可以看着一篇:https://codeooo.blog.csdn.net/article/details/122988709 eg:

    2024年02月16日
    浏览(30)
  • [重走长征路]反射学习笔记

    2024年02月10日
    浏览(57)
  • 反射机制-体会反射的动态性案例(尚硅谷Java学习笔记)

    // 举例01 public class Reflect{ } 案例:榨汁机榨水果汁,水果分别有果(com.reflect.Apple)、香蕉(Banana)、桔子(Orange)等。 效果如图。 提示: 1、声明(Fruit)水果接口,包含榨汁抽象方法: void squeeze(); /skwi:z/ 2、声明榨汁机(Juicer),包含运行方法: public void run(Fruit f),方法体中,调用f的榨汁方

    2024年02月11日
    浏览(47)
  • unidbg-boot-server使用并打包jar调用

    其实线上使用可以多种方式,比如pom引入spring boot自己去写一个接口实现; 但如果并发不是很高,可以使用synchronized进行,若对并发有要求,建议直接使用 unidbg-boot-server开源项目; 从github下拉,https://github.com/anjia0532/unidbg-boot-server 常见问题:https://github.com/anjia0532/un

    2024年02月11日
    浏览(36)
  • Java基础_反射机制(尚硅谷-学习笔记)

    反射的概述(熟悉) ● Java给我们提供了一套API,使用这套API我们可以在运行时动态的获取指定对象所属的类,创建运行时类的对象,调用指定的结构(属性、方法)等。 ● API: ○ java.lang.Class:代表一个类 ○ java.lang.reflect.Method:代表类的方法 ○ java.lang.reflect.Field:代表类

    2024年02月11日
    浏览(37)
  • Java SE 学习笔记(十七)—— 单元测试、反射

    开发好的系统中存在很多方法,如何对这些方法进行测试? 以前我们都是将代码全部写完再进行测试。其实这样并不是很好。在以后工作的时候,都是写完一部分代码,就测试一部分。这样,代码中的问题可以得到及时修复。也避免了由于代码过多,从而无法准确定位到错误

    2024年02月06日
    浏览(54)
  • QT笔记——QT类反射机制简单学习

    学习 QT的 类反射机制 使用Qt 反射机制的条件 1.需要继承自QObject 类 或者 它的 派生类 ,并需要在类中加入Q_OBJECT 宏 2.注册成员函数:若希望普通成员函数能够被反射,需要在函数声明之前加入Q_INVOKABLE 宏。 3.注册成员变量:若希望成员变量能被反射,需要使用Q_PROPERTY 宏。

    2024年02月09日
    浏览(122)
  • unidbg或者java层解密方法IDEA中打包成jar包供python调用方法

    (1)配置jar包参数 (2)创建生成jar包 成功生成!

    2024年02月16日
    浏览(43)
  • C# Assembly 反射动态加载程序集(动态加载Dll)Demo

    No1、本Demo 定义了一个接口IserviceToolFrame,接口中有一个方法Run。 No2、在另外两个工程中,分别定义两个类serviceToolCatComplete、serviceToolDogComplete实现接口IserviceToolFrame。 No3、控制台程序通过动态加载Dll的方式去调用IserviceToolFrame的实例,输出不同的内容。代码如下: 动态加载

    2024年02月15日
    浏览(56)
  • PyTorch学习笔记(十七)——完整的模型验证(测试,demo)套路

    完整代码:  采用GPU训练的模型,两种方法 (1)在CPU上加载,要从GPU映射到CPU,即把model = torch.load(\\\"mynn_9.pth\\\")改为: (2)将image转到GPU中,即把output = model(image)改为:    预测错误的原因可能是训练次数不够多  改成:        

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包