APP 진단/iOS

8. Jailbreak Detection 2 - 프리다 기초 문법

takudaddy 2022. 11. 15. 23:08

 

 

 

 

 

1. FRIDA 기초 문법

 

 

– ObjC.available

      • 현재 프로세스에 Objective-C 런타임이 로드되었는지 여부를 지정하는 Boolean(True, False)

            : swift 앱 또한 동일

 

– ObjC.classes

      • 현재 등록된 클래스에 대한 ObjC.object 자바스크립트 바인딩에 대한 오브젝트 맵핑 클래스 이름

 

– Interceptor.attach(target, callbacks[, data])

      • target(앱)에서 함수에 대한 호출을 가로챔 (호출을 가로채고자 하는 함수의 주소를 지정하는 NativePointer)

            : 후킹이 이 부분에 해당!

      • callbacks 인수는 하나 이상을 포함하는 오브젝트(객체)

            - onEnter: function(args)

                 : NativePointer 객체의 배열로 인수를 읽거나 쓰는 데 사용할 수 있는 하나의 인수 args가

                   제공된 callback 함수 (args[0 = self], [1 = select], [2 = 후킹 함수의 매개변수])

            - onLeave: function(retval) - return 값을 변조 시 사용

                 : 원래 return 값을 포함하는 NativePointer에서 파생 객체인 인수 retval이 제공된 callback 함수

                 : retval.replace(1337)를 호출하여 return 값을 정수 1337로 바꾸거나,

                 : retval.replace(ptr(0x1234))를 포인터로 변경 가능

 

 

– Module.findBaseAddress(name)

– Module.getBaseAddress(name)

      • name 모듈의 base 주소를 반환

      • 모듈을 찾을 수 없는 경우,

- find-prefixed 함수는 null을 반환하고

- get-prefixed 함수는 예외를 발생함

 

– NativePointer (new NativePointer(s))

      • 메모리 주소를 "10진수" 또는 "접두사가 0x인 16진수"로 포함하는 문자열 s에서 새로운 NativePointer를

         생성

      • 간결하게 ptr(s)로 사용 가능

 

 

 

# 객체 속성

– $methods

      • 주어진 객체의 클래스와 부모 클래스에 의해 노출된 기본 메소드 이름을 포함하는 배열

– $ownMethods

      • 부모 클래스를 포함하지 않고, 주어진 객체의 클래스에 의해 노출된 기본 메소드 이름을 포함하는 배열

– context

      • ia32/x64/arm에 대해 각각 EIP/RIP/PC 및 ESP/RSP/SP를 지정하는 NativePointer 객체인 pc 및 sp 키가 있는 객체

      • 다른 프로세스별 키(예, eax, rax, r0, x0 등)도 사용 가능

      • 이 키에 할당하여 레지스터 값을 업데이트 가능

 

 

 

# 이 외 종류가 훨씬 많고 FRIDA 공홈에서 확인 가능!

https://frida.re/docs/javascript-api/#objc

 

 

 

 

728x90