본문 바로가기

Technical Docs/Android

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 String 인지 확인한다.

이후에 문자열 크기에 따라 읽을 크기를 잡아주고 Utf8String으로 읽어주면 Frida에서 확인 가능하다