[목차]

 

 

1. 문제 확인

2. 소스 확인

3. 해결 방법 1

4. 해결 방법 2

 

 

 


 

 

1. 문제 확인

 

아무 데이터나 입력 후

VERIFY를 누르면

 

 

에러가 발생!

해당 검증을 우회해야 한다.

 

 


 

 

 

2. 소스 확인

 

 

 

# a 클래스 확

 

 

# 암호화 로직 a 확인

 

 

 

 

 

3. 해결 방법 1

 

a 메서드 로직을 후킹해

내부 로직을 모두 삭제 후

항상 return true가 반환 되도록 실행!

 

 

# 코드

setImmediate(function(){
	Java.perform(function(){
		var exitBypass = Java.use("java.lang.System");
		exitBypass.exit.implementation = function (arg) {
			console.log("[*] 루팅 탐지 후킹 성공!");
		}
		var always_true = Java.use("sg.vantagepoint.uncrackable1.a");
		always_true.a.implementation = function(arg){
			console.log("\n[+] true 반환!");
			return true;
		}
	})
})
 

 

 

해결 완료!

 

 

 

 

 

4. 해결 방법 2

 

a 메서드는 바이트 배열 값 출력

 

 

 

# 코드 작성

setImmediate(function(){
	Java.perform(function(){
		var exitBypass = Java.use("java.lang.System");
		exitBypass.exit.implementation = function (arg) {
			console.log("[*] 루팅 탐지 후킹 성공!");
		}
		/*var always_true = Java.use("sg.vantagepoint.uncrackable1.a");
		always_true.a.implementation = function(arg){
			console.log("\n[+] true 반환!");
			return true;
		}*/
		var decryptClass = Java.use("sg.vantagepoint.a.a");
		decryptClass.a.implementation = function(arg1, arg2){
			var secret_string = this.a(arg1, arg2);
			console.log("\n[+] Secret String ASCII 값 :"+ secret_string + "\n");
			for(var i=0; i<secret_string.length; i++){
				console.log("[+] Secret String 값 :"+ String.fromCharCode(secret_string[i]));
			}
			return secret_string;
		}
	})
})
 

해결 완료!

 

 

 

# 출력값을 한 줄로 출력 코드

setImmediate(function(){
	Java.perform(function(){
		var exitBypass = Java.use("java.lang.System");
		exitBypass.exit.implementation = function (arg) {
			console.log("\n[*] 루팅 탐지 후킹 성공!\n");
		}
		/*var always_true = Java.use("sg.vantagepoint.uncrackable1.a");
		always_true.a.implementation = function(arg){
			console.log("\n[+] true 반환!");
			return true;
		}*/
		/*var decryptClass = Java.use("sg.vantagepoint.a.a");
		decryptClass.a.implementation = function(arg1, arg2){
			var secret_string = this.a(arg1, arg2);
			console.log("\n[+] Secret String ASCII 값 :"+ secret_string + "\n");
			for(var i=0; i<secret_string.length; i++){
				console.log("[+] Secret String 값 :"+ String.fromCharCode(secret_string[i]));
			}
			return secret_string;
		}*/
		var decryptClass = Java.use("sg.vantagepoint.a.a");
		decryptClass.a.implementation = function(arg1, arg2){
			var secret_string = this.a(arg1, arg2);
			console.log("\n[+] Secret String ASCII 값 :"+ secret_string + "\n");
			var secret_S = ''     // 한줄 출력을 위해 추가해줌
			for(var i=0; i<secret_string.length; i++){
				secret_S += String.fromCharCode(secret_string[i])
			}
			console.log("[+] ASCII 복호화 값은 : " + secret_S);
			return secret_string;
		}
	})
})
 

 

 

728x90
반응형

+ Recent posts