Information*/알면도움됨

IDA JNI Function 적용하기

ch4rli3kop 2020. 5. 25. 16:20
반응형

IDA JNI Function 적용하기

JNI은 Java Native Interface로 JAVA 환경이 아닌 다른 프로그래밍 언어 환경의 코드를 사용하기 위해 사용된다.

이에 대한 설명은 뭐 다른 좋은 자료들을 찾아보길 바란다.


Wikipedia의 Sample 코드를 보면 JNI Native Function은 다음과 같이 구성된다. 함수의 타입은 매핑 타입으로 몇 가지 정의되며, 이름은 클래스, 메소드 네임으로 구성된다.

extern "C"
JNIEXPORT void JNICALL Java_ClassName_MethodName
(JNIEnv *env, jobject obj, jstring javaString)
{
   const char *nativeString = env->GetStringUTFChars(javaString, 0);

   //Do something with the nativeString

   env->ReleaseStringUTFChars(javaString, nativeString);
}

여기서 중요한 것은 함수의 인자다.

첫 번째 인자는 JVM및 Java object와 다양한 상호작용을 할 수 있는 함수들의 구조체를 나타내는 포인터 env가 오며, 두 번째 인자로는 해당 Native Function이 선언된 Java 객체가 온다.

위의 예시에서는 첫 번째 인자인 env 포인터를 이용하여 GetStringUTFChars() JNI Function을 사용하고 있다.

그 뒤는 해당 Native Funciton에서 사용하기 위한 인자들로 사용된다.


여기서 이 포스팅의 목적을 잠깐 짚고 넘어가자면, IDA에서 Native Library를 살펴보았을 때, JNI Function을 살펴보기 위함이다.

기본적으로 JNI 메소드를 IDA로 살펴보면 다음과 같이 보여진다. JNI Function이 (*env + offset)꼴로 나타내지는 것을 확인할 수 있다.


처음에는 https://docs.google.com/spreadsheets/d/1yqjFaY7mqyVIDs5jNjGLT-G8pUaRATzHWGFUgpdJRq8/edit#gid=0 이 스프레드 시트를 참조하면서 분석을 했었는데, IDA에 이미 해당 구조체 타입이 정의되어 있었다.

첫 번째 인자 타입을 JNIEnv* 형으로 변경하면 다음과 같이 JNI Function을 확인할 수 있다.


반응형

'Information* > 알면도움됨' 카테고리의 다른 글

gif 편집할 때  (0) 2020.06.24
nasm을 이용한 asm 코딩  (0) 2020.05.26
[Visual Studio 2017] CL Casting Error  (0) 2020.05.10
vmware bridge  (0) 2020.05.06
구조체 와 관련된 무언가  (0) 2020.04.28