NDK (3) 썸네일형 리스트형 네임 맹글링 (Name Mangling or Name Decoration) 기본적으로 자바에서 call 하는 함수의 경우에는 Java_com_xxx 이와 같은 형식으로 함수 네이밍이 되어있다. 그런데 C, C++ 내부에서 사용하려고 클래스를 만들거나 그 안의 함수를 후킹할 때 IDA에서 function List로 볼 때는 그냥 개발자가 선언한 함수 이름으로 보이지만 실제 frida 등을 통해서 후킹할 때는 맹글링된 이름을 가져와야한다. 뭐 사실 나도 frida에 대해서 많은 함수를 써본것도 아니니 다른 방법을 통해 후킹이 가능하다면 댓글 부탁드림미다.... ## Name Mangling ?? 우선 Name Mangling이 뭔지 알아보자. 위키에 따르면 컴파일러에서 프로그래밍 entity에 대한 고유한 이름을 해결해야 하는 필요성으로 인해 발생하는 다양한 기술 문제를 해결하기 .. 뚜봄뚜봄 2021. 12. 30. 13:47 Android Native C++ string Frida로 출력 Frida 를 사용하다 보면 심심치 않게 Native Method를 후킹해야할 때가 많다. 그러다 보면 각 argu에 따라서 캐스팅을 해줘야 정상적으로 출력이 가능하다. 그 중에 한가지 C++ 에서 사용하는 Std::String 자료형을 Frida에서 문자열로 출력하고 싶을 때 아래의 방법을 사용한다. function readStdString (str) { const isTiny = (str.readU8() & 1) === 0; if (isTiny) { return str.add(1).readUtf8String(); } return str.add(2 * Process.pointerSize).readPointer().readUtf8String(); } readU8 &1 을 통해 해당 문자열이 long St.. 뚜봄뚜봄 2021. 12. 17. 10:17 NDK Jstring to string (char *) 문자열 변경 JString to C++ string NDK 를 사용할 때 Java에서 Argu를 통해 String 형식을 보내줘야 할 때가 있음 그러면 해당 string을 받는쪽에서 다른 변수(int ...) 같은 경우에는 jint 형으로 받아서 처리가 가능함 그런데 String 같은 경우에는 C++ 에서 재사용하는 경우 Jstring 에서 C++ String 형으로 변환을 해줘야 정상적으로 사용이 가능함 Java에서 사용하는 String은 16비트의 Unicode 문자세트를 사용하고, C, C++ 에서는 일반적으로 8bit 의 문자열을 표현하기 때문에 이것을 변환시키기 위해서 UTF-8 포맷으로 변경을 해주는 작업이 필요 위와같이 함수의 선언에서 받을 때는 JString으로 정상적으로 받지만, 실제로 C++에서 사.. 뚜봄뚜봄 2021. 12. 8. 20:38 이전 1 다음