리버싱

카카오톡 Loco frida 후킹

0xff 2024. 8. 6. 07:03

오랜만에 카카오톡 분석과 함께 loco 통신을 후킹으로 가져와서 출력해보았다.

 

마지막으로 카톡을 분석한게 9.8버전때였나.. 기억도 가물가물한데,

벌써 10.9.0이다.

 

다른건 별 관심이 없었지만 Loco 구현체 관련해서 변경사항이 있나 찾아보았다.

 

기존의 LocoClient는 request와 response 함수가 LocoClient 내부에 분리되어있던 거로 기억한다.

 

지금은 좀 바꼈더라.

 

LocoClient의 한 함수에서 간편하게 req/res를 받아올수 있게 되었다.

 

덕분에 후킹도 더 깔끔해졌다.

 

프로토콜이 특별히 바뀐건.. 없어보인다.

 

간단한 frida 후킹 예제 스크립트를 첨부한다.

Java.perform(function () {
  try {
    var locoClient = Java.use("com.kakao.talk.loco.net.server.LocoClient");
    console.log("[+] Found LocoClient Class!");

    hookSession(locoClient);

    console.log("[+] Hooked LocoClient Class!");
  } catch (error) {
    console.log(error);
  }
});

function printPacket(packet) {
  console.log("[+] - Method: ", packet._a.value.c.value.toString());
  console.log(
    "[+] - Body:",
    packet.c.value.toString()
  );
}

function hookSession(locoClient) {
  locoClient.o.implementation = function (locoReq) {
    console.log("[+] Request!");
    printPacket(locoReq);

    const time = Date.now();

    const locoRes = this.o(locoReq);

    console.log("[+] Response! (" + (Date.now() - time) + "ms)");
    printPacket(locoRes);

    return locoRes;
  };
}