1. Requirement

chall02 메소드를 실행할 것

* 강제로 사용하지 않는 메소드(chall02)를 실행

 

2. Write UP

강제로 실행해야 하는 메소드는 MainActivity 안에 있으며,

해당 메소드는 Static 메소드가 아니라, Instance 메소드이다.

이와 같이 인스턴스화된 객체를 다루기 위해선 Java.use 함수가 아니라 Java.choose 함수가 사용되어야 한다.   


import frida

jscode = """

setImmediate(function(){    
    Java.perform(function(){
        console.log("Starting Script!");
        var main;
        Java.choose('uk.rossmarks.fridalab.MainActivity', {
        onMatch : function(instance){
            main = instance;
            console.log("Instance Matched!!");
            }, 
        onComplete : function(){
            console.log('Solved Challenge!!!!');
            }        
        });
        main.chall02();
    });
});
"""

process = frida.get_usb_device(1).attach('uk.rossmarks.fridalab')
script = process.create_script(jscode)
script.load()

 

'Android' 카테고리의 다른 글

FridaLab_frida challenge 3 풀이  (0) 2020.10.27
Frida 문법  (0) 2020.10.24
APK 서명(인증서 생성 및 서명)  (0) 2020.10.03
Toast 팝업 Smali 코드  (0) 2020.10.03
Ubuntu에 APMSetup 설치  (0) 2015.03.04
Posted by 워니후니빠
,

Frida 문법

Android 2020. 10. 24. 07:14

# 목차

 

1. Java.perform 

    현재 스레드가 가상머신에 연결되었는지 확인하고 function을 호출한다.

Java.perform(function(){
});

2. Java.use(ClassName) 

    메소드 후킹 시 사용한다.

var myClass = Java.use(com.mypackage.name.class)
//앱에서 사용하는 클래스와 연동되는 myclass를 정의한다.

var myClassInstance = myclass.$new();
//myClass를 통해 객체 인스턴스 생성 및 정의를 한다.

var result = myClassInstance.myMethod("param")
//클래스 내부에 있는 매소드에 접근해 인자 값을 넘겨주고 해당 값을 result에 받는다.

myClass.myMethod.implementation = function(param){
//.implementation : 앱에서 정의된 매소드의 구현 내용을 재작성한다.
}

3. Java.choose(className, callbacks)

    힙에서 인스턴스화 된 객체 찾기 가능

    Callbacks : onMatch, onComplete

    - onMatch : 실시간으로 인스턴스에 대해 호출

    - onComplete : function()의 모든 인스턴스가 열거될 때 호출

Java.perform(function(){
    console.log("Starting Script!");
    var main;
    Java.choose(com.mypackage.name.class, {
    onMatch : function(instance){
        main = instance;
        console.log("Instance Matched!!");
        }, 
    onComplete : function(){
        console.log('Solved Challenge!!!!');
        }        
    });
    main.[method name()];
});

 

4. Java.setImmediate(fn)

    Frida는 단말기가 느려질 때 자동으로 프로세스를 종료하는 특성이 있다.

    이러한 경우를 방지하기 위해 setImmediate()를 사용한다.

    백그라운드로 자동으로 스크립트가 재실행되어 종료되지 않는다.

setImmediate(function(){
    console.log("[+] Starting script");

    Java.perform(function(){
        myClass = Java.use("com.package.name.class.name");
        myClass.implementation = function(v){
    })
})

 

5. overload

    오버로딩(Overloading)을 구현하기 위하여 overload()를 제공한다.

    오버로딩은 하나의 클래스 내에 동일한 이름의 메소드가 매개변수 정보를 달리하여

    여러 개 존재하는 것을 말한다.

   

myClass.myMethod.overload().implementation = function(){
//입력받는 인수가 없는 메소드
}

 

참고 사이트 

cha3m.tistory.com/90

 

'Android' 카테고리의 다른 글

FridaLab_frida challenge 3 풀이  (0) 2020.10.27
FridaLab_frida challenge 2 풀이  (0) 2020.10.25
APK 서명(인증서 생성 및 서명)  (0) 2020.10.03
Toast 팝업 Smali 코드  (0) 2020.10.03
Ubuntu에 APMSetup 설치  (0) 2015.03.04
Posted by 워니후니빠
,

1. 인증서 생성

 

1
keytool -genkey -alias changkr -keyalg RSA -validity 20000 -keystore changkr.keystore
cs

2. 서명

1
jarsigner -verbose -keystore [keystore 경로] [apk 경로]
cs

 

'Android' 카테고리의 다른 글

FridaLab_frida challenge 2 풀이  (0) 2020.10.25
Frida 문법  (0) 2020.10.24
Toast 팝업 Smali 코드  (0) 2020.10.03
Ubuntu에 APMSetup 설치  (0) 2015.03.04
각 제조사별 휴대폰 테스트 코드  (0) 2014.09.07
Posted by 워니후니빠
,