Mobile Pentesting

[FRIDALAB] 1~8번 Frida 후킹코드

후추멍멍이 2022. 5. 3. 11:01

Java.perform(function(){
    var MainActivity = Java.use('uk.rossmarks.fridalab.MainActivity');
    var Challenge01 = Java.use('uk.rossmarks.fridalab.challenge_01');
    var Challenge06 = Java.use('uk.rossmarks.fridalab.challenge_06');
    var Challenge07 = Java.use('uk.rossmarks.fridalab.challenge_07');

    // 1. Change class challenge_01's variable 'chall01' to: 1
    Challenge01.chall01.value = 1;
    console.log("[+] Challenge 1 completed: 'chall01' variable set to 1");

    // 2. Run chall02()
    // 4. Send "frida" to chall04()
    Java.choose('uk.rossmarks.fridalab.MainActivity', {
        onMatch: function(instance){
            instance.chall02();
            console.log("[+] Challenge 2 completed: chall02 called successfully");
            instance.chall04("frida");
            console.log("[+] Challenge 4 completed: chall04 calling with 'frida'");

        },
        onComplete: function(){  }
    });
    // 3. Make chall03() return true
    MainActivity.chall03.implementation = function(){
        console.log("[+] Challenge 3 completed: chall03 now returns true");
        return true;
    };

    // 5. Always send "frida" to chall05()
    MainActivity.chall05.overload('java.lang.String').implementation = function(input){
        console.log("[+] Challenge 5 completed: chall05 now always receives 'frida'");
        return this.chall05("frida");
    };

    // 6. Run chall06() after 10 seconds with correct value
    console.log("[*] Waiting 10 seconds before calling chall06...");
    setTimeout(function(){
        Java.choose('uk.rossmarks.fridalab.MainActivity', {
            onMatch: function(instance){
                var correctValue = Challenge06.chall06.value;
                instance.chall06(correctValue);
                console.log("[+] Challenge 6 completed: chall06 called with correct value: " + correctValue);
            },
            onComplete: function(){}
        });
    }, 10000);

    // 7. Bruteforce check07Pin() then confirm with chall07()
    for(var i=0;i<10000;i++){
        var pin = i.toString().padStart(4, '0');
        if(Challenge07.check07Pin(pin)){
            console.log("[*] Challenge 7: Correct PIN found: " + pin);
            Java.choose('uk.rossmarks.fridalab.MainActivity', {
                onMatch: function(instance){
                    instance.chall07(pin);
                    console.log("[+] Challenge 7 completed: chall07 called with correct pin");
                },
                onComplete: function(){}
            });
            break;
        }
    }

    // 8. Change 'check' button's text value to 'Confirm'
    setImmediate(function(){
        Java.perform(function(){
            var klass = Java.use('android.widget.Button');
            Java.choose('uk.rossmarks.fridalab.MainActivity', {
                onMatch: function(instance){
                    Java.scheduleOnMainThread(function(){
                        var checkid = instance.findViewById(0x7f07002f);
                        var check = Java.cast(checkid, klass);
                        var string = Java.use('java.lang.String');
                        check.setText(string.$new("Confirm"));
                        console.log("[+] Chellenge 8 Completed: Button text changed to 'Confirm'");
                    });
                },
                onComplete: function(){}
            });
        });
    });
});