NepCTF2024

re

0zandroid

unidbg模拟跑一下

package re;

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.memory.Memory;

import java.io.File;

public class appdebug extends AbstractJni {
    public static AndroidEmulator emulator;
    public static Memory memory;
    public static VM vm;
    public static DalvikModule dm;
    public static Module module;


    public appdebug() {
        emulator = AndroidEmulatorBuilder.for64Bit().setProcessName("com.example.clickmemore").build();

        memory = emulator.getMemory();

        memory.setLibraryResolver(new AndroidResolver(23));

        vm = emulator.createDalvikVM(new File("apks/CTF_re/a.apk"));
        vm.setJni(this);


        dm = vm.loadLibrary(new File("apks/CTF_re/libplay.so"), false);
        dm.callJNI_OnLoad(emulator);

        module = dm.getModule();
    }

    public void getBytes() {
        /*
         public native byte[] encrypt(int i, String str);
        */
        DvmClass MainClass = vm.resolveClass("com.example.clickmemore.MainActivity");
        String method = "encrypt(ILjava/lang/String;)[B";

        for (int i = 0; i < 0xffff; i++) {
            DvmObject<byte[]> result = MainClass.callStaticJniMethodObject(emulator, method, i, "bangboo!Knows!!!");
            byte[] array = result.getValue();
            System.out.println(i);

            if (array[2] == 37 && array[3] == 80 && array[4] == 68 && array[5] == 70 && array[6] == 45 && array[7] == 49 && array[8] == 46 && array[9] == 52) {
                System.out.println(i);
                System.out.println("Yes"); // 10714
                return;
            }
        }
    }


    public static void main(String[] args) {
        appdebug appdebug = new appdebug();
        appdebug.getBytes();
    }
}

friida过调试。然后改成17013 点一下修改。再点确认。得到flag


// frida -U -f com.example.clickmemore -l a1.js
Java.perform(function () {
    // hookisDebuggerConnected()

    var c = Java.use('android.os.Debug')

    c.isDebuggerConnected.implementation = function () {
        return false
    }
    c.waitForDebugger.implementation = function () {
        console.log(this.waitForDebugger());
        return false
    }

    let AntiCheater = Java.use("com.example.clickmemore.AntiCheater");
    AntiCheater["isDebug"].implementation = function () {
        return false;
    };

    MainActivity["lambda$onCreate$0$com-example-clickmemore-MainActivity"].implementation = function (calendar, random, layout, v) {
        console.log(`cilck1点点我的11`);
        this.clickCount.value = 10713;
        this["lambda$onCreate$0$com-example-clickmemore-MainActivity"](calendar, random, layout, v);
        console.log('end')
    };
});

flag{enenneenneneen,neneenenen!neen!}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值