에뮬레이터 환경에서 arm 라이브러리에 Frida attach (?)

홈 > 커뮤니티 > 질문 게시판
질문 게시판

에뮬레이터 환경에서 arm 라이브러리에 Frida attach (?)

3 hunjison 8 8214
안녕하세요 ㅎㅎ
frida 후킹에 대해 이제 막 공부를 시작한 뉴비입니다!

에뮬레이터 환경(x86)에서 frida를 사용해서 arm 라이브러리에 attach가 안되는 문제가 있어 질문드립니다.
질문에 앞서 저는 LD Player 3.60 버전과 frida 12.7.11 버전을 사용 중입니다.

우선, 에뮬레이터에서 x86 라이브러리는 아래와 같이 접근이 잘 됩니다.. (사진 첨부가 안되어 텍스트로)
마찬가지로 후킹도 잘 되구요..

[Android Emulator 5554::com.manababa.BeggarKing]-> Module.findBaseAddress("libil2cpp.so")
"0x9e00e000"
[Android Emulator 5554::com.manababa.BeggarKing]-> Module.findBaseAddress("libunity.so")
"0xa4387000"
[Android Emulator 5554::com.manababa.BeggarKing]-> Module.findBaseAddress("libandroid.so")
"0xabd02000"

그런데, arm 라이브러리에 대해서는 frida가 동작이 안되는 것 같습니다.

프로세스 메모리를 조사해보면, 아래와 같이 libil2cpp.so가 실행되고 있으나


Frida로 모듈을 검색해보면, libil2cpp.so 가 검색되지 않습니다.


libil2cpp.so(x86) 이랑 libil2cpp.so(arm)이랑 로드되는 위치가 다른 점이 중요해 보이는데.... 저는 잘 모르겠네요ㅠㅠ
고수 분들의 조언 바랍니다

8 Comments
M LIN 2019.10.24 09:28  
프리다 실행파일이 x86이라 ARM 에뮬레이팅으로 로드되는 라이브러리(libhoudini.so 에뮬레이팅)후킹을 지원못할거에요
안드로이드 5~6 버전대의 중고 단말기 구입을 추천드립니다.
저는 갤럭시S7으로 루팅해서 쓰고 있네요ㅎㅎ
3 hunjison 2019.10.24 09:36  
감사합니다!!
M LIN 2019.10.24 09:40  
따로 arm용 후킹 라이브러리를 만들어 보세요.
라이브러리 만들고 해당 프로세스에 Injection 하게끔
3 hunjison 2019.10.24 14:54  
헉.. 그건 생각 못했었네요 그렇게 해보겠습니다 ㅎㅎ
6 하늘사자 2019.10.24 16:03  
저도 프리다 처음 접할때 저 문제때문에 한참 헤매었네요.

frida 를 이용해서 메모리 reading point를 찾았는데

분명 arm영역의 so파일 에서 접근해야 하는 메모리 값인데.

libhoudini.so <= 요녀석 code만 잡혀서

왜 그런지.. 잘못 찾았는지 한참 을 고민했었습니다.

momo같은 x86 안드로이드 에뮬레이터는 arm으로 만들어진 코드를 libhoudini.so 요것을 이용해서 해석한다고 보시면 됩니다.

조금만 사이트 일찍 나왔음.. lin님한테 물어보면 쉽게갈수 있었을텐데..ㅋㅋ
3 hunjison 2019.10.24 23:48  
앗... 그러게요 좋은 답변 감사드립니다 *^^*
M LIN 2019.10.24 16:31  
좀 더 첨언하자면, APK 파일 내부에 x86 라이브러리가 없는 경우 libhoudini.so 를 이용하여 ARM 라이브러리를 로드시킬 수 있습니다.
ARM 에뮬레이터 역할을 한다고 보시면 되고, 대부분의 pc 에뮬레이터(LD, 녹스, 블루스택 등) 또는 x86 태블릿이 해당 라이브러리를 사용하고 있습니다.
동작 방식이 궁금하시면 libnb.so의 NativeBridgeItf(isSupported, loadLibrary) 쪽 따라가 보시면 됩니다.
3 hunjison 2019.10.24 23:49  
말씀하신대로 좀 공부해봐야겠어요... 답변 감사합니다!!