프리다에서 Module.getBaseAddress로 lib가 안잡히는 경우?

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

프리다에서 Module.getBaseAddress로 lib가 안잡히는 경우?

1 륜사 10 6868
안녕하세요.

이거저것 찾아가면서 오프라인 게임 변조를 시도해보고 있습니다.

IL2CPP 유니티 기반 게임에서, Il2CppDumper-v6.2.1를 사용해 Assembly-CSharp.dll를 얻었고, 바꾸고 싶은 함수의 rva도 얻었습니다.

frida server를 사용해서 윈도우 파이썬과 앱플레이어를 연결한 후, frida.get_usb_device(timeout=10).attach(package) 를 통해 패키지도 잘 잡았습니다.

in  :  print("ATTACH CLEAR - {}".format(device))
out:  ATTACH CLEAR - Session(pid=5305) #5305 = 바꾸고 싶은 앱

그런데 바로 다음 jscode를 실행할 때 var il2cpp = Module.getBaseAddress("libil2cpp.so"); 이 부분이 안됩니다...

{'type': 'error', 'description': "Error: unable to find module 'libil2cpp.so'", 'stack': "Error: unable to find module 'libil2cpp.so'\n    at frida/runtime/core.js:221\n    at /script1.js:4", 'fileName': 'frida/runtime/core.js', 'lineNumber': 221, 'columnNumber': 1}

이후로 어떻게 나아가야 할지 조언좀 부탁드립니다.
.so 파일을 잡는 방법에 대해 잘못된 점이 있었나요?
10 Comments
M LIN 2020.05.11 14:18  
setTimeout 줘보세용
1 륜사 2020.05.12 11:03  
http://linforum.kr/bbs/board.php?bo_table=qa&wr_id=233
이 문제였네요.. 허탈 ㅜㅜ
도움주셔서 감사합니다.
M LIN 2020.05.12 14:00  
이참에 3만원짜리 중고폰 사시면 되겠네요ㅋㅋ
4 하루앞에서는 2020.05.11 16:31  
setTimeout(function(){
var il2cpp = Module.getBaseAddress("libil2cpp.so");

console.log("[+] lib2cpp loaded");
var offset = 0x9F4D84
var get_HP = il2cpp.add(offset); 

Interceptor.attach(get_HP,
{
    onEnter: function(args)
    {
        console.log("[+] get_HP Hook In");
    },
    onLeave: function(retVal)
    {
        var HPMAX = retVal.toInt32();
        var New_HP = 99999;
        retVal.replace(New_HP);
        console.log("[*] HPMAX Hooked "+HPMAX+" ->"+New_HP);
        console.log("");

    }
});
},1000)

setTimeout함수 이렇게 작성해도 똑같나요?
1 륜사 2020.05.11 16:48  
네.. 똑같은 에러가 뜨네요. 제 생각에는 라이브러리가 libil2cpp.so 이라는 이름으로 메모리상에 올라간게 아닌것 같습니다.
Assembly-CSharp-firstpass.dll를 살펴보니 LibraryNameVariation 이라는 클래스가 있었습니다.
혹시... 동적 라이브러리를 추적하는 하는 방법등이나 어디서부터 시작해야 할지 알려주실수 있을까요?
4 하루앞에서는 2020.05.11 16:52  
저도 아직 배우는 단계의 초보자라 ㅠㅠ
혹시 apk파일 디컴파일 했을때 lib폴더내에 so파일 뭐뭐있나요?
1 륜사 2020.05.11 16:56  
libBugly.so
libgpg.so
libil2cpp.so
libmain.so
libsqlite3.so
libunity.so
가 있습니다. 감사합니다.
M LIN 2020.05.11 18:46  
cat /proc/(pid)/maps | grep il2cpp
명령어로 로드되었는지 확인해보세요
1 륜사 2020.05.11 19:20  
오... 알려주신 명령어를 쳐보니 libil2cpp가 나오네요.
하지만 왜 파이썬 코드에서는 로딩이 안되는지 모르겠네요...
녹스 android 7버전, frida-server-12.8.20-android-arm, Frida 12.8.20 사용중입니다.
root      2820  1806  83548  47736            b5d7ccc0 S /data/local/tmp/frida-server
프리다 서버도 루트로 잘 돌아가고 있습니다.

아래 해당 명령어를 쳤을 시 결과를 첨부합니다.
08000000-0a100000 r--p 00000000 08:13 819207    /data/app/com.habby.archero-1/lib/arm/libil2cpp.so
0a101000-0a22f000 r--p 02100000 08:13 819207    /data/app/com.habby.archero-1/lib/arm/libil2cpp.so
0a22f000-0a309000 rw-p 0222e000 08:13 819207    /data/app/com.habby.archero-1/lib/arm/libil2cpp.so
7ca99000-7cb36000 r--s 00000000 00:16 262        /storage/emulated/0/Android/data/com.habby.archero/files/il2cpp/Resources/I18N.CJK.dll-resources.dat
7cb36000-7cb89000 r--s 00000000 00:16 263        /storage/emulated/0/Android/data/com.habby.archero/files/il2cpp/Resources/mscorlib.dll-resources.dat
86375000-86e00000 r--s 00000000 00:16 259        /storage/emulated/0/Android/data/com.habby.archero/files/il2cpp/Metadata/global-metadata.dat
M LIN 2020.05.11 20:21  
dlopen 후킹한다음에 il2cpp.so 로드할 때 후킹하게끔 짜시면 될거에요.