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을 살펴보기 위함이다.
처음에는 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 |