프리다(Frida) 문법 및 후킹에 사용되는 함수 설명

2023. 10. 3. 19:56·Mobile App 취약점 진단 · 모의해킹/iOS App 취약점 진단 · 모의해킹
728x90
반응형

가. 기초 문법

1. ObjC.available 

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

- 해당 앱에서 FIRDA가 실행가능한 환경인지 체크


2. ObjC.classes 

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

- 프로세스에 로드된 클래스들의 이름을 보여줌


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

-  target에서 함수에 대한 호출을 가로챔 (호출을 가로채고자 하는 함수의 주소를 지정하는 NativePointer)
- callbacks 인수는 하나 이상을 포함하는 오브젝트(객체)

 

3-1. onEnter: function(args) 

- NativePointer 객체의 배열로 인수를 읽거나 쓰는 데 사용할 수 있는 하나의 인수 args가 제공된 callback 함수(args[0 = self], [1 = select], [2 = 후킹 함수의 매개변수])

 

3-2. onLeave: function(retval) - retunr 값 변조 시 사용

- 원래 return 값을 포함하는 NativePointer에서 파생 객체인 인수 retval이 제공된 callback 함수
- retval.replace(1337)를 호출하여 return 값을 정수 1337로 바꾸거나,
- retval.replace(ptr(0x1234))를 포인터로 변경 가능


4. Module.findBaseAddress(name), Module.getBaseAddress(name)

- name 모듈의 base 주소를 반환
- 모듈을 찾을 수 없는 경우, find-prefixed 함수는 null을 반환하고 get-prefixed 함수는 예외를 발생함


5. NativePointer (new NativePointer(s)) 

- 메모리 주소를 "10진수" 또는 "접두사가 0x인 16진수"로 포함하는 문자열 s에서 새로운 NativePointer를 생성
- 간결하게 ptr(s)로 사용 가능

 

나. 객체 속성

6. $methods

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


7. $ownMethods

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


8. context

- ia32/x64/arm에 대해 각각 EIP/RIP/PC 및 ESP/RSP/SP를 지정하는 NativePointer 객체인 pc 및 sp 키가 있는 객체
- 다른 프로세스별 키(예, eax, rax, r0, x0 등)도 사용 가능
- 이 키에 할당하여 레지스터 값을 업데이트 가능

 

다. 안드로이드 후킹 관련

1. java.perform()

현재 스레드가 VM에 연결되어 있는지 확인하고 function을 호출한다. 앱의 클래스 로더를 아직 사용할 수 없으면 호출을 연기한다. Java.performNow() 클래스에 대한 액세스가 필요하지 않은 경우 사용한다.

//소스코드 예시
Java.perform(() => {
    const Activity = Java.use('android.app.Activity');
    Activity.onResume.implementation = function () {
        send('onResume() got called! Let\'s call the original implementation');
        this.onResume();
    };
});

 

2. Java.performNow()

현재 스레드가 VM에 연결되어 있는지 확인하고 function을 호출한다.

frida로 spawn시킬때는 Java.perform()보다 Java.performNow()를 사용한다.

 

3. Java.setImmediate()

Frida는 단말기가 느려질 때 자동으로 프로세스를 종료하는 특성이 있다. setImmediate()를 사용하면 백그라운드로 자동으로 스크립트가 재실행되어 종료되지 않는다.

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

 

4. Java.choose

힙을 스캔하여 클래스에서 실행 중인 인스턴스화 된 객체를 찾을 수 있다.

- onMatch : 일치하는 인스턴스를 찾을 경우 호출한다.
- onComplete : 일치하는 것을 모두 찾고난 후에 호출한다.

//소스코드 예시
Java.perform(function() {
    Java.choose(com.mypackage.name.class, {
        "onMatch" : function(instance) {
            ...
        },
        "onComplete" : function() {
            ...
        }
    })
})

 

5. Java.enumerateLoadedClasses(className, callbacks)

로드된 모든 클래스를 열거하고 모든 일치 항목을 출력한다.
- onMatch : 일치하는 인스턴스를 찾을 경우 호출한다.
- onComplete : 일치하는 것을 모두 찾고난 후에 호출한다.

Java.perform(function() {
  Java.enumerateLoadedClasses(
  {
    "onMatch" : function(className) {
      console.log(className)
    },
    "onComplete":function() {}
  })
})

 

6. Java.use(ClassName)

변수와 메소드에 접근할 수 있는 클래스 객체를 반환한다.
- implementation : 클래스에 정의된 메소드를 재작성한다.

Java.perform(function() {
    var myClass = Java.use(com.mypackage.name.class)
    myClass.myMethod.implementaion = function(param) {
        ...
    }
})

 

7. overload

오버로딩은 하나의 클래스 내에 동일한 이름의 메서드가 매개변수 정보를 달리하여 여러 개 존재하는 것을 말한다.

후킹하려는 메서드가 다양한 인자에 대해 정의되어 있다면, overload를 통하여 후킹하려는 메서드를 명시해줘야한다.

//입력받는 인수가 없을때의 예시
myClass.takudaddy_method.overload().implementation = function() {
    ...
}

//두개의 바이트 배열을 인수로 입력 받을때의 예시
myClass.takudaddy_method.overload("[B", "[B").implementation = function(param1, param2) {
    ...
}

//앱의 context와 Boolean 값을 인수로 입력 받을때의 예시
myClass.takudaddy_method.overload("android.context.Context", "boolean).implementation = 
function(param1, param2) {
    ...
}

//그외 예시
var System = Java.use("java.lang.System");
System.exit.overload('int').implementation = function(args){
    console.log("System.exit called");
};


8. Java.enumerateLoadedClasses(callbacks)

로드된 모든 클래스를 열거한다.

Java.perform(function() {
  Java.enumerateLoadedClasses({
    "onMatch" : function(className) {
      console.log(className)
    },
    "onComplete" : function() {}
  })
})

 

라. 참고 사이트

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

 

JavaScript API

Observe and reprogram running programs on Windows, macOS, GNU/Linux, iOS, watchOS, tvOS, Android, FreeBSD, and QNX

frida.re

 

https://velog.io/@yjok/%ED%94%84%EB%A6%AC%EB%8B%A4-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95

 

프리다 기본 문법

현재 스레드가 가상머신에 연결되어 있는지 확인하고 function을 호출한다.변수와 메소드에 접근할 수 있는 클래스 객체를 반환한다. (인스턴스가 아닌 클래스 객체를 반환함에 주의한다.).implement

velog.io

 

https://changkr28.tistory.com/entry/Frida-%EB%AC%B8%EB%B2%95

 

Frida 문법

# 목차 1. Java.perform 현재 스레드가 가상머신에 연결되었는지 확인하고 function을 호출한다. Java.perform(function(){ }); 2. Java.use(ClassName) 메소드 후킹 시 사용한다. var myClass = Java.use(com.mypackage.name.class) /

changkr28.tistory.com

 

https://cha3m.tistory.com/90

 

Frida 기본 설명

- Java.perform 현재 스레드가 가상머신에 연결되었는지 확인하고 function을 호출한다. Java.perform(function() { }); - Java.performNow() java단의 소스를 로드하기 전에 먼저 실행되는 script로 보인다. hooking 시점

cha3m.tistory.com

 

https://takudaddy.tistory.com/617

 

3. 프리다 기본 문법 (이론)

[목표] 프리다에서 제공하는 JavaScript API 중 자주 사용하는 JavaScript API 5 종류를 소개하며 사용법을 확인한다. 연습 예제 및 실전 활용에서 꾸준히 사용되는 각각의 API가 어떤 역할을 하는지 개념

takudaddy.tistory.com

 

https://chp747.tistory.com/333

 

Frida 및 nodejs 사용할 때 TMI

Frida 및 nodejs 사용할 때 TMI1. Memory.readByteArray()로 읽어온 데이터에 접근할 때Memory.readByteArray의 리턴 형은 ArrayBuffer인데, 얘로 가져온 결과는 index로 접근할 수가 없다.다음과 같이 Uint8Array로 변화하

chp747.tistory.com

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Mobile App 취약점 진단 · 모의해킹 > iOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글

iOS 애플리케이션 무결성 점검 및 대응 방법(앱 위변조 대응)  (0) 2023.10.07
[iOS App 진단] 12강 - 탈옥 탐지 우회(이론 및 대응방법)  (0) 2023.10.03
바이너리 ASLR 적용유무 확인방법 - otool  (0) 2023.10.03
[iOS App 진단] 11강 - 애플리케이션 패칭(앱 위·변조) 실습 4  (0) 2023.09.10
[iOS App 진단] 11강 - 애플리케이션 패칭(앱 위·변조) 실습 3  (0) 2023.09.10
'Mobile App 취약점 진단 · 모의해킹/iOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글
  • iOS 애플리케이션 무결성 점검 및 대응 방법(앱 위변조 대응)
  • [iOS App 진단] 12강 - 탈옥 탐지 우회(이론 및 대응방법)
  • 바이너리 ASLR 적용유무 확인방법 - otool
  • [iOS App 진단] 11강 - 애플리케이션 패칭(앱 위·변조) 실습 4
학식(hagsig)
학식(hagsig)
정보보안을 배우고자 하는 모든 이들의 식당입니다. 모의해킹, 취약점 진단, 서버, 네트워크, 프로그래밍 등등 다양한 분야를 배우실 수 있습니다.
  • 학식(hagsig)
    학식 - 정보보안 전문 블로그
    학식(hagsig)
  • 전체
    오늘
    어제
  • 공지사항

    • 게시된 정보를 악용하여 발생하는 모든 책임은 사용자에게 있⋯
    • 무단 전재 및 재배포를 금지합니다.
    • 분류 전체보기 (299)
      • 교육정보 (15)
        • IT국비지원 (12)
        • 기업면접코칭 (3)
      • 인프라 취약점 진단 · 모의해킹 (24)
        • 윈도우 서버 진단 · 모의해킹 (22)
        • 리눅스 서버 진단 · 모의해킹 (2)
      • Mobile App 취약점 진단 · 모의해킹 (98)
        • AOS App 취약점 진단 · 모의해킹 (40)
        • iOS App 취약점 진단 · 모의해킹 (58)
      • 웹 취약점 진단 · 모의해킹 (2)
      • 클라우드 취약점 진단 · 모의해킹 (4)
        • AWS 취약점 진단 · 모의해킹 (0)
        • 컨테이너 보안 (4)
      • CS App 취약점 진단 · 모의해킹 (8)
      • AI 취약점진단 · 모의해킹 (8)
      • 산업 제어 시스템 진단 · 모의해킹 (0)
      • 침해 사고 대응 (15)
      • 디지털 포렌식 (2)
      • 자체개발 프로그램 (1)
        • TLS Security Checker (1)
      • IT 자격증 (26)
        • AWS 자격증 (11)
      • 프로그램 사용방법 (14)
      • 리눅스 (1)
      • 파이썬 (12)
      • 오류 해결 (2)
      • 잡학 지식 (41)
      • 코로나19 (12)
      • 학식 일상 (11)
        • 사진 (1)
        • 음악 (6)
        • 가게 정보 (3)
      • 제품 리뷰 (2)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
학식(hagsig)
프리다(Frida) 문법 및 후킹에 사용되는 함수 설명
상단으로

티스토리툴바