Frida il2cpp hook 질문

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

Frida il2cpp hook 질문

3 똥덩어리 9 5193
Frida 를 이용해서 il2cpp.so hooking을 진행하고 있는데요..
분명 몇주전에 다른 타이틀의 게임에서는 hooking이 걸려서 진행이 되었었는데... 갑자기 hook 이 되지 않습니다..
아시다 시피 코드 내에 패키지명은 공개 해드리지 못하며 일단은 코드 전체를 업로드 해 봅니다. 혹시 도움 주실 수 있으신 분들은 조언은 부탁 드립니다
참고로 il2cpp dummy dll에서 추출한 rva 주소 입니다.
감사합니다.


-----------------------------------------------------------------
# coding=utf-8
import sys
import frida

def get_message_from_js(message, data):
    if message['type'] == 'send':
        print("[Hooking]{0}".format(message['payload']))
    else:
        print(message)
PACKAGE_NAME = "패키지명"

jscode="""
var library_name = "libil2cpp.so"
var library_loaded = 0
Interceptor.attach(Module.findExportByName(null, 'android_dlopen_ext'),{
    onEnter: function(args){
        var library_path = Memory.readCString(args[0])

        if( library_path.includes(library_name)){
            console.log("[...] Loading library : " + library_path)
            library_loaded = 1
        }
    },
    onLeave: function(retVal){
        if(library_loaded ==  1){
            console.log("[+] Loaded")
            var skill= il2.add(0x694228);
            var fun = new NativeFunction(skill,"void",["long","int"]);
            Interceptor.replace(skill,new NativeCallback(function(target, maxSkillRange, minSkillRange){
            maxSkillRange = 999.9;
            fun(maxSkillRange, minSkillRange);
            console.log("Hooking End")
        },
        "void",["long","int"]))
        library_loaded = 0
        }
    }
})
"""
try:
    device = frida.get_usb_device(timeout=10)
    pid = device.spawn([PACKAGE_NAME])
    print("App is starting ... pid : {}".format(pid))
    process = device.attach(pid)
    device.resume(pid)
    script = process.create_script(jscode)
    script.on('message',get_message_from_js)
    print('[*] Running Frida')
    script.load()
    sys.stdin.read()
except Exception as e:
    print(e)
9 Comments
3 똥덩어리 2020.06.16 10:52  
il2cpp lib 로드가 되지 않는 것 같습니다..
M LIN 2020.06.16 10:53  
안드로이드 몇 버전 이신지요? 하위버전이면 dlopen 후킹해보세요
3 똥덩어리 2020.06.16 11:06  
안드로이드 7.1.1 입니다. 조언주신대로 dlopen만 후킹 해보겠습니다^^
3 똥덩어리 2020.06.16 11:17  
음.. dlopen만 후킹 했을 때 앱이 바로 죽어버려서 Thread.sleep(10); 을 걸어 보았는데 그래도 delay 가 걸리지 않고 앱이 바로 죽는 현상이 벌어집니다...ㅜ
android_dlopen_ext 를 후킹하면 앱은 잘 실행이 됩니다...
M LIN 2020.06.16 17:27  
7이면 android_dlopen_ext  이게 맞는데 il2cpp.so 로드 안되나요?
3 똥덩어리 2020.06.16 23:22  
넵.. il2cpp.so 로드가 되지 않네요... 앱에 대한 별도의 탐지로직이 걸려서 kill 이 되거나 하지는 않는데...
더 이상한건... 지난주에 다른 게임에 적용했을때는 적용이되고 il2cpp.so load도 됐었습니다;;;
그 사이에 바뀐건 파이썬 버전.. 프리다 버전.. 인데... 프리다는 최신버전으로 바꾸었고 파이썬은 3.8, 3.7 두가지로 해봤는데도 되지 않네요;;;
3 똥덩어리 2020.07.02 10:05  
일단 대략의 원인은 찾은 것 같습니다..
개발 빌드 중에 가끔 패키지명이 4자리로 매칭되는 앱들이 있는데 (com.xxx.xxx.xx) 이러한 애들만 특정적으로 Hooking이 이루어지지 않더라구요...
com.xxx.xxx 일반적인 세 자리의 패키지명을 가진 앱들에 있어서는 문제없이 잘 실행이 되었습니다~
무튼 답변 감사합니다!
p.s: 아... 다만... 네 자리 패키지명을 어떻게 해결할 수 있을지는 아직... 미지수이네요...
9 koooo 2020.06.17 00:11  
frida cli 에서 Module.findBaseAddress('libil2cpp.so') 해보셨나요? 저도 비슷한 현상을 겪은 적이 있는데, dlopen 후킹했을 때 로드 안되었는데 cli에서 해당 명령어 쳐보니까 로드되어있더라구요. spawn 말고 attach 통해서 붙어보세요~
3 똥덩어리 2020.07.02 10:05  
일단 대략의 원인은 찾은 것 같습니다..
개발 빌드 중에 가끔 패키지명이 4자리로 매칭되는 앱들이 있는데 (com.xxx.xxx.xx) 이러한 애들만 특정적으로 Hooking이 이루어지지 않더라구요...
com.xxx.xxx 일반적인 세 자리의 패키지명을 가진 앱들에 있어서는 문제없이 잘 실행이 되었습니다~
무튼 답변 감사합니다!