Study/App

[App]Uncrackable1 루팅 탐지 - 반환 값, exit()

seomj 2022. 9. 29. 18:43

Uncrackable1을 실행하면 다음과 같은 화면이 뜨며 앱이 종료된다.


반환 값 수정

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

 

if문을 사용하는 것을 확인할 수 있다.

c.a() 혹은 c.b() 혹은 c.c()의 값이 True라면 "Root detected!"라는 구문이 출력되게 된다.

 

c를 확인해보니

각 return 값들을 false로 설정해주는 방식으로 해결할 수 있다.

 

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

console.log("Script loaded successfully")
Java.perform(function x() {
    console.log("Inside java perform function");
    var my_class = Java.use("sg.vantagepoint.a.c");

    my_class.a.implementation = function (args) {
        console.log("a is false");
        return false;
    };
    my_class.b.implementation = function (args) {
        console.log("b is false");
        return false;
    };
    my_class.c.implementation = function (args) {
        console.log("c is false");
        return false;
    };
});

a, b, c의 return 값들을 false로 설정해 주었다.

 

지정한 구문들이 출력되며 앱이 실행된다.


exit() 후킹

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

텍스트를 출력시키고 ok버튼을 누르면 system.exit()가 수행된다.

 

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

console.log("Script loaded successfully");
Java.perform(function {
    console.log("java perform function");
    var sys = Java.use('java.lang.System');
    sys.exit.implementation = function () {
        console.log("success!!");
    }
});

exit() 함수를 후킹하는 스크립트를 작성했다.

 

ok버튼을 눌러도 앱이 종료되지 않았고 "success!!"가 출력되었다.