모바일해킹2
Uncrackable -level1
개발환경 : android, JEB2
Uncrackable1 (2)
이번엔 uncrackable1의 secretkey 입력을 우회해 보도록 하자
다음과 같이 secret string을 입력하라고 한다.
캡처가 자꾸 안되고 팝업창이 사라져서 다음과 같이 폰 자체를 사진찍었다.
입력 값이 틀리면 That’s not it. Try again. 이라는 문구가 나온다.
그럼 이제 JEB로 소스코드를 보도록 하자.
If(a.a(v4)) 로직을 통해 success 혹은 nope…로 나뉜다.
자 그럼 a.a(v4)를 보도록 하자
sg.vantagepoint.a.a.a(a.b(v0), v1); 이라는 함수의 결과 문자열을 v0_2에 저장하고 문자열 비교 equals 를 사용하여 true / false 값을 리턴한다
이번엔 sg.vantagepoint.a.a.a(a.b(v0), v1);를 찾아보도록 하자
음
a.b()에 8d127684cbc37c17616d806cf50473cc 문자열을 넣고
바이트 쉬프트도 하고 덧셈도 하고
AES 암호화 알고리즘을 적용하는 듯 보인다.
그럼 어떻게 하면 우회가 가능할까
위 암호화 알고리즘을 전부 따라서 역으로 복호화하고 계산해보는 것도 도움이 되겠지만 쉬운 방법은 아마도
앞서 exit함수를 우회하듯이 string.equals() 함수의 리턴 값을 무조건 true로 hooking하면 될 것이다. 한 번 시도해 보도록 하자
Java.perform(function () {
send("hooking start");
var sysexit = Java.use("java.lang.System");
sysexit.exit.overload("int").implementation = function(var_0) {
send("java.langSystem.exit (I) V");
};
var aa = Java.use("sg.vantagepoint.uncrackable1.a");
aa.a.implementation = function(arg1){
return true;
}
});
이 부분에서 지난번 바로 종료되는 팝업창 우회 말고 var aa 부분을 자세히 보면
Sg.vantagepoint.uncrackable1.a 에서
a.implementation a 함수가 작동하면~ hooking해서 function(arg1) 함수를 대신 작동시켜 리턴 값을 true로 변조한다.
성공하였다!