끄적끄적

[Frida] 기본 문법 본문

Security/Mobile

[Frida] 기본 문법

Go0G 2021. 10. 18. 22:13

Java.perform(fn)

  • 현재 스레드가 가상머신에 연결되어 있는지 확인하고 fn을 호출
Java.perform(function(){
/*
	do sth
*/
})

Java.use(className)

  • 변수와 메소드에 엑세스할 수 있는 클래스 객체를 반환
  • 메소드 구현을 변경하려면 새로운 메소드를 덮어 씌워야 함
  • *인스턴스를 반환하는 것이 아닌 클래스 객체를 반환
  • 앱에서 사용하는 클래스와 연동되는 myClass를 정의
  • .implementation: 앱에서 정의된 메소드의 구현 내용을 재작성
Java.perform(function(){
	var myClass = Java.use(com.mypackage.name.class)
    myClass.MyMethod.implementation = function(param)
    {
    	//do sth
    }
})

Java.choose(className, callbacks)

  • 힙에서 인스턴스화 된 객체 찾기 가능: className에서 인스턴스화된 객체를 callbacks으로 넘김
  • callbacks: onMatch, onComplete
  • onMatch: 실시간으로 인스턴스에 대해 호출
  • onComplete: function()의 모든 인스턴스가 열거 된 뒤 호출
Java.perfrom(funtion(){
	Java.choose(com.mypackage.name.class,
    {
    	"onMatch":function(instance)
        {
        //do sth
        console.log(instance.toString())
        },
        "onComplete":function()
        {
        }
    })
})

Java.enumerateLoadedClasses(callbakcs)

  • 로드된 모든 클래스를 열거
var className= "[패키지.클래스명]"
Java.performNow(function(){
  Java.enumerateLoadedClasses(
  {
    onMatch: function(className)
    {
      send(className);
    },
    onComplete:function(){}
  });

});

setImmediate(function)

  • 애뮬레이션이 지연될 경우, 시간 초과로 연결을 자동 종료시키는걸 방지하기 위해 사용
setImmediate(function() { // prevent timeout
  console.log("[*] starting script");
  
  Java.perform(function() {
    myClass = Java.use("com.package.name.class.name");
    myClass.implementation = function(v) {
      // do something
    }
  })
})

Overloading

  • 하나의 클래스 내에 동일한 이름의 메소드가 매개변수 정보를 달리하여 존재하는 경우를 위해 사용
  • CLI에 경고창이 띄워질 경우 해당 내용을 이용하여 오버로딩 매개변수 작성 
myClass.myMethod.overload().implementation = function() {
  // 입력받는 인수가 없는 메소드
  // do something
})

myClass.myMethod.overload("[B", "[B").implementation = function(param1, param2) {
  // 두 개의 바이트 배열을 인수로 입력 받는 메소드
  // do something
})

myClass.myMethod.overload("android.context.Context", "boolean").implementation = function(param1, param2) {
  // 앱의 context와 Boolean 값을 인수로 입력받는 메소드
  // do something
})

Reference

 

'Security > Mobile' 카테고리의 다른 글

[ERROR] Read-only file system  (0) 2021.10.25
[Frida] Useful Code  (0) 2021.10.20
[Frida] FridaLab  (0) 2021.10.17
[Frida] Hooking Code Sample(Python)  (0) 2021.10.17
[Android analysis] Android Dalvik Opcode(Smali Code)  (0) 2021.09.12
Comments