FRIDA CheatSheet

FRIDA CheatSheet

2025년 6월 16일

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


오버로드 함수들 찾기 #

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

백트레이스 찍기 #

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

 1// 네이티브 백트레이스
 2Thread.backtrace(this.context, Backtracer.ACCURATE)
 3    .map(DebugSymbol.fromAddress)
 4    .join('\n\t');
 5
 6// 자바 백트레이스
 7Java.perform(() => {
 8    const stack = Java.use('java.lang.Exception').$new().getStackTrace();
 9    for (let i = 0; i < stack.length; i++) {
10        console.log('\t' + stack[i].toString());
11    }
12});

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

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

 1[Pixel 2 XL::com.android.chrome ]-> Process.enumerateModules().forEach(mod => {
 2    console.log("\n==== " + mod.path + " ====");
 3    mod.enumerateExports().forEach(s => { if (s.name.startsWith("Java_")) console.log(s.name); })
 4});
 5
 6==== /data/app/~~Vc2L7h_mo0LmT6ZgeBveZw==/com.android.chrome-9xOd436ra_xVAYw5tXYqAg==/base.apk!/lib/arm64-v8a/libchromium_android_linker.so ====
 7Java_org_chromium_base_library_1loader_LinkerJni_nativeFindMemoryRegionAtRandomAddress
 8Java_org_chromium_base_library_1loader_LinkerJni_nativeReserveMemoryForLibrary
 9Java_org_chromium_base_library_1loader_LinkerJni_nativeFindRegionReservedByWebViewZygote
10Java_org_chromium_base_library_1loader_LinkerJni_nativeLoadLibrary
11Java_org_chromium_base_library_1loader_LinkerJni_nativeUseRelros
12Java_org_chromium_base_library_1loader_LinkerJni_nativeGetRelroSharingResult
13
14==== /data/app/~~qsGqTE3xSV2RlHV7Daw53g==/com.google.android.trichromelibrary_720416833-_f_YSDOs6XJqFGYv6T0Clw==/base.apk!/lib/arm64-v8a/libmonochrome_64.so ====
15Java_J_N_VJ
16Java_J_N_VFJOOZ
17Java_J_N_VIIIIJ
18Java_J_N_ZJOOOOOO
19Java_J_N_VIOOOOOOOZ
20Java_J_N_VFFIIIIJOOOOZZZ
21Java_J_N_IJ
22Java_J_N_OJOO
23Java_J_N_OIIJJ
24Java_J_N_OIJJJO
comments powered by Disqus