[목차]
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
'APP 진단 > Android 2' 카테고리의 다른 글
13. 프리다 실무 활용 - SSL Pinning 우회 (0) | 2022.12.16 |
---|---|
12. 프리다 실무 활용 - 로그인 우회 (Sieve.apk) (1) | 2022.12.15 |
10. 프리다 실무 활용 - 루팅 탐지 우회 (UnCrackable-Level1.apk) (0) | 2022.12.13 |
9. 프리다 연습 - FridaLab (2) 문제 풀이 (6-8번) (0) | 2022.12.13 |
8. 프리다 연습 - FridaLab (2) 문제 풀이 (1-5번) (0) | 2022.12.11 |