Study/App

[App]InjuredAndroid FLAG SIX - LOGIN 3

seomj 2022. 9. 11. 18:35

문제

 

 

풀이

FlagSixLoginActivity 파일을 확인

67번째 줄을 보니 k.a"k3FElEG9lnoWbOateGhj5pX6QsXRNJKh///8Jxi8KXW7iDpk2xRxhQ==" 와 비교하여 동일해야 함

 

k클래스의 a 함수를 확인

이를 해결하기 위해 frida를 사용할 것이다.

Frida는 고유한 코드를 삽입하고 실행중인 프로세스를 프로그래밍 방식으로 대화식으로 검사하고 변경

 

우선 js 파일을 작성

(아래 링크를 통해 python 코드도 볼 수 있음)

console.log("Script loaded successfully");

#현재 스레드가 가상머신에 연결되어 있는지 확인하고 fn을 호출
Java.perform(function x() {   
    var my_class = Java.use("b3nac.injuredandroid.k");   #앱에서 사용하는 클래스와 연동되는 my_class 정의
    var string_class = Java.use("java.lang.String");

    my_class.a.overload("java.lang.String").implementation = function (args) {
        var my_string = string_class.$new("k3FElEG9lnoWbOateGhj5pX6QsXRNJKh///8Jxi8KXW7iDpk2xRxhQ==");
        var ret = this.a(my_string);   #클래스 내부에 있는 메소드에 접근해 인자값을 넘겨주고 해당 결과 값을 받음
        console.log("res: " + ret);
        return ret;
    }
})

복호화 루틴이 존재하는 "b3nac.injuredandroid.k"를 선언

복호화 루틴 함수를 오버로딩

암호화 문자열을 string_class를 사용하여 my_string에 저장

복호화 함수에 암호화된 문자열을 넘겨 복호화된 문자열을 받음

 

nox에서 friad server 실행

 

cmd에서 frida 실행

frida -U -f b3nac.injuredandroid -l injuredandriod_flagsix.js --no-pause

 

아무 값이나 입력

 

cmd 창을 확인해보면 flag 값이 출력

 

 

결과

 

 

 

출처

https://aboutsc.tistory.com/164

https://infosecwriteups.com/injuredandroid-ctf-writeup-41dd40165cfa (파이썬 코드 참고)