unidbg1

 

分析sign

查壳

frida -U --no-pause -f com.sina.oasis -l frida_fart_hook.js
fart脱壳

dex拖入gda,搜索sign

可疑处

objection -g com.sina.oasis explore
android hooking watch class_method g.a.c.g.c.a --dump-args --dump-return --dump-backtrace
 

hook后确定

查看b.c方法

unidbg分析s

得到s地址

Java.perform(function(){

    console.log('dddd')
    // frida有个类加载器,遍历
    Java.enumerateClassLoaders({
        onMatch: function(loader){
            // 每次匹配到,都要把匹配到的赋值给java默认的loader
            Java.classFactory.loader = loader;
            var TestClass;
            // 没报错就hook到了,报错了就hook下一个,如果全都报错了,没打印东西,那可能就是hook错了。
            try{
var ByteString=Java.use("com.android.okhttp.okio.ByteString");

                TestClass = Java.use("com.weibo.xvideo.NativeApi");
                TestClass.s.implementation = function(p1,p2){
                    console.log('decrypt p1:'+ByteString.of(p1).utf8())
                    //console.log('decrypt p1:'+ByteString.of(p1).hex())
var ret = this.s(p1, p2);
    console.log(' ret value is ' + ret);
    return ret;
                    
                }
            }catch(error){
                if(error.message.includes("ClassNotFoundException")){
                    console.log(" You are trying to load encrypted class, trying next loader");
                }
                else{
                    console.log(error.message);
                }
            }
        },
        onComplete: function(){

        }
    })
})

hook得到s方法的参数

package com.lession1;

// 导入通用且标准的类库
import com.github.unidbg.linux.android.dvm.AbstractJni;
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.array.ByteArray;
import com.github.unidbg.memory.Memory;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

// 继承AbstractJni类
public class oasis extends AbstractJni{
    private final AndroidEmulator emulator;
    private final VM vm;
    private final Module module;

    oasis() {
        // 创建模拟器实例,进程名建议依照实际进程名填写,可以规避针对进程名的校验
        emulator = AndroidEmulatorBuilder.for32Bit().setProcessName("com.sina.oasis").build();
        // 获取模拟器的内存操作接口
        final Memory memory = emulator.getMemory();
        // 设置系统类库解析
        memory.setLibraryResolver(new AndroidResolver(23));
        // 创建Android虚拟机,传入APK,Unidbg可以替我们做部分签名校验的工作
        vm = emulator.createDalvikVM(new File("unidbg-android\\src\\test\\java\\com\\lession1\\lvzhou.apk"));
        //
//        vm = emulator.createDalvikVM(null);

        // 加载目标SO
        DalvikModule dm = vm.loadLibrary(new File("unidbg-android\\src\\test\\java\\com\\lession1\\liboasiscore.so"), true); // 加载so到虚拟内存
        //获取本SO模块的句柄,后续需要用它
        module = dm.getModule();
        vm.setJni(this); // 设置JNI
        vm.setVerbose(true); // 打印日志

        dm.callJNI_OnLoad(emulator); // 调用JNI OnLoad
    };

    public static void main(String[] args) {
        oasis test = new oasis();
        System.out.println(test.getS());
    }

    public String getS(){
        // args list
        List<Object> list = new ArrayList<>(10);
        // arg1 env
        list.add(vm.getJNIEnv());
        // arg2 jobject/jclazz 一般用不到,直接填0
        list.add(0);
        // arg3 bytes
        String input = "aid=01A473pZlavYi9CJI6IMLY4L-xUQYEu73CSOa3IRh9wMRCLN8.&cfrom=28B5295010&cuid=0&noncestr=95pe1F1Ut3BAbZ4yDf34v997NMb14d&phone=17826073456&platform=ANDROID&timestamp=1695886023318&ua=vivo-V1916A__oasis__3.5.8__Android__Android9&version=3.5.8&vid=1021604472715&wm=20004_90024";
        byte[] inputByte = input.getBytes(StandardCharsets.UTF_8);
        ByteArray inputByteArray = new ByteArray(vm,inputByte);
        list.add(vm.addLocalObject(inputByteArray));
        // arg4 ,boolean false 填入0
        list.add(0);
        // 参数准备完成
        // call function
        Number number = module.callFunction(emulator, 0xC365, list.toArray());
        String result = vm.getObject(number.intValue()).getValue().toString();
        return result;
    }
}

运行unidbg,与hook得到结果一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值