FRIDA CheatSheet

Frida v17 에서 레거시 방식의 API가 많이 사라졌기 때문에 v17에서 실행되는 코드 기준으로 작성

오버로드 함수들 찾기

[Pixel 6a::dev.dongkim.myapplication ]-> 
Java.use('javax.crypto.Cipher')['doFinal'].overloads.forEach(function(overload
) { console.log("=>", overload.methodName, "(", overload.argumentTypes.map(t=>t.className).join(", "), ")"); });
=> doFinal ( java.nio.ByteBuffer, java.nio.ByteBuffer )
=> doFinal ( [B, int )
=> doFinal ( [B, int, int, [B )
=> doFinal ( [B, int, int, [B, int )
=> doFinal (  )
=> doFinal ( [B )
=> doFinal ( [B, int, int )

백트레이스 찍기

보통 네이티브 콜은 트램폴린에서 시작되기 때문에 네이티브 콜 안에서 Java.perform 코드 자체를 넣어서 자바 백트레이스 찍으면 JNI 호출한 위치도 확인할 수 있다.

// 네이티브 백트레이스
Thread.backtrace(this.context, Backtracer.ACCURATE)
    .map(DebugSymbol.fromAddress)
    .join('\n\t');

// 자바 백트레이스
Java.perform(() => {
    const stack = Java.use('java.lang.Exception').$new().getStackTrace();
    for (let i = 0; i < stack.length; i++) {
        console.log('\t' + stack[i].toString());
    }
});

export 함수찾기 (JNIEXPORT 함수 찾기)

Java_ 형식으로 구현된 native 함수는 JNIEXPORT 를 달아두기 때문에 무조건 Exports에 들어가게 된다. 네이티브 코드 자체를 분석하고 싶은데, 라이브러리가 많거나 동적으로 압축해제되는 경우 원하는 함수가 있는 라이브러리를 찾기 어려우니 이 방법을 사용하면 좋다.

[Pixel 2 XL::com.android.chrome ]-> Process.enumerateModules().forEach(mod => {
    console.log("\n==== " + mod.path + " ====");
    mod.enumerateExports().forEach(s => { if (s.name.startsWith("Java_")) console.log(s.name); })
});

==== /data/app/~~Vc2L7h_mo0LmT6ZgeBveZw==/com.android.chrome-9xOd436ra_xVAYw5tXYqAg==/base.apk!/lib/arm64-v8a/libchromium_android_linker.so ====
Java_org_chromium_base_library_1loader_LinkerJni_nativeFindMemoryRegionAtRandomAddress
Java_org_chromium_base_library_1loader_LinkerJni_nativeReserveMemoryForLibrary
Java_org_chromium_base_library_1loader_LinkerJni_nativeFindRegionReservedByWebViewZygote
Java_org_chromium_base_library_1loader_LinkerJni_nativeLoadLibrary
Java_org_chromium_base_library_1loader_LinkerJni_nativeUseRelros
Java_org_chromium_base_library_1loader_LinkerJni_nativeGetRelroSharingResult

==== /data/app/~~qsGqTE3xSV2RlHV7Daw53g==/com.google.android.trichromelibrary_720416833-_f_YSDOs6XJqFGYv6T0Clw==/base.apk!/lib/arm64-v8a/libmonochrome_64.so ====
Java_J_N_VJ
Java_J_N_VFJOOZ
Java_J_N_VIIIIJ
Java_J_N_ZJOOOOOO
Java_J_N_VIOOOOOOOZ
Java_J_N_VFFIIIIJOOOOZZZ
Java_J_N_IJ
Java_J_N_OJOO
Java_J_N_OIIJJ
Java_J_N_OIJJJO

Comments

ESC
Type to search...