FridaLab 문제 풀이 #5

wisdom·2024년 12월 27일
0

준비

  1. Android Studio + AVD (Pixel 5, API 31, x86_64)
    1. Download Android Studio
  2. frida, frida-server (16.2.1)
    1. https://github.com/frida/frida
  3. Jadx-gui
    1. https://github.com/skylot/jadx
  4. adb
    1. https://developer.android.com/tools/releases/platform-tools?hl=ko
  5. Fridalab.apk
    1. https://rossmarks.uk/blog/fridalab/

문제

❓ Always send ‘frida’ to chall05()

분석

chall05() 함수는 chall04()와 비슷하게 인자로 들어온 문자열이 ‘frida’인지 검사하고 플래그 값을 세팅함

MainActivity의 onCreate에서 바로 호출되므로 Java.use도 사용 가능할 것으로 보임

후킹 코드

간단하게 Java.use 를 통해 chall05 구현부에서 인자 값을 frida로 호출하게끔 수정하여 해결

Java.perform(function () {
    // 1
    var challenge_01 = Java.use('uk.rossmarks.fridalab.challenge_01');
    challenge_01.getChall01Int.implementation = function () {
        send('challenge_01::getChall01Int called');
        var result = this.getChall01Int();
        send('getChall01Int returned: ' + result);
        send('modified result: 1\n');
        return 1; // Or challenge_01.chall01.value = 1
    };

    // 2, 3, 4
    Java.choose('uk.rossmarks.fridalab.MainActivity', {
        onMatch: function (instance) {
            send('Found instance: ' + instance);

            // 2
            send('call MainActivity::chall02');
            instance.chall02();

            // 3
            // instance.chall03.implementation = function () {
            //     send('call MainActivity::chall03');
            //     var result = instance.chall03();
            //     send('chall03 returned: ' + result);
            //     send('modified result: true\n');
            //     return true;
            // }

            // 4
            send('call MainActivity:chall04("frida")\n')
            instance.chall04('frida');
        },
        onComplete: function () { }
    });

    // 3
    var MainActivity = Java.use('uk.rossmarks.fridalab.MainActivity');
    MainActivity.chall03.implementation = function () {
        send('call MainActivity::chall03');
        var result = this.chall03();
        send('chall03 returned: ' + result);
        send('modified result: true\n');
        return true;
    };

    **// 5
    MainActivity.chall05.implementation = function (str) {
        send('call MainActivity::chall05 with str: ' + str);
        send('call MainActivity::chall05 with str: frida\n');
        this.chall05('frida');
    };**
});

실행 결과

profile
보안, 개발, 일상을 기록합니다

0개의 댓글