Study/App

[App]Uncrackable1 - 암호화 키 가져오기

seomj 2022. 9. 29. 21:29

https://seomj74.tistory.com/261

 

[App]Uncrackable1 루팅 탐지

Uncrackable1을 실행하면 다음과 같은 화면이 뜨며 앱이 종료된다. 반환 값 수정 jadx를 사용하여 MainActivity를 확인해보자. if문을 사용하는 것을 확인할 수 있다. c.a() 혹은 c.b() 혹은 c.c()의 값이 True..

seomj74.tistory.com


값을 입력하니 다음과 같은 경고창이 나온다.

 

jadx를 사용하여 MainActivity를 확인해 보자.

45번째 줄 if문을 발견할 수 있다.

a.a(obj)로 전달되며, 입력한 값이 obj에 지정이 되는 것을 확인할 수 있다.

 

a를 확인해보자.

a클래스의 a메서드이다.

12번째 줄을 보니 "8d127684cbc37c17616d806cf50473cc"를 b에 넣은 값과 "5UJiFctbmgbDoLXmpL12mkno8HT4Lv8dlat8FxR2GOc="를 base64로 디코딩한 값을 a.a.a를 호출하여 bArr의 값으로 지정한다.

17번째 줄에서 str(obj)과 비교해 리턴을 해준다.

 

a.a.a를 확인해보자.

AES로 암호화를 해주고 있다.

 

포스팅 제목처럼 암호화 키를 가져오는 방법을 사용할 것이다.

다음과 같이 코드를 작성하고 실행시킨다.

var a = Java.use("sg.vantagepoint.a.a");
    a.a.implementation = function(a, b){
        console.log("[*] Hooking in a.Class");
        var retVal = this.a(a, b);
        var passcode = "";

        for(var i=0; i<retVal.length; i++){
            passcode += String.fromCharCode(retVal[i]);
        }

        console.log("secret key: " + passcode);
        return retVal;
    }

후킹한 값들을 retVal에 저장하고 이를 합쳐서 출력시키게 된다.