DLL 동적 IL 덤프

홈 > 안드로이드 > 안드로이드
안드로이드

DLL 동적 IL 덤프

1 siand 8 12940 3

var js_rids_literal_code = {};

var dumped = [];

var display_dump_size = 32;

var find_target_function = false;



var count = 10;

var target_dll_addr = 0;

var target_dll_size = 0;

var target_file_name = NaN;

var load_dll_flag = false;


var in_jit_compile = false;

var code_size = NaN;

 // void *dlsym(void *restrict handle, const char *restrict name); 

Interceptor.attach(Module.findExportByName("libc.so", "dlsym"), {

    onEnter: function(args) {

        var message = {};


        if (find_target_function) {

            return;

        }


        message["function"] = "dlsym";

        message["handle"] = args[0];

        message["name"] = Memory.readUtf8String(args[1]);


        var flag = true;

        // https://github.com/mono/mono/blob/1da9c0f9e75c18c66df0e6fd395762f01ed7a477/mono/mini/mini-runtime.c#L2524

        if (message["name"].indexOf("mono_image_open_from_data_with_name") == 0) {

            find_target_function = true; 

            

            const dlsym = new NativeFunction(Module.findExportByName(null, 'dlsym'), 'pointer', ['pointer', 'pointer'])

            var mono_jit_compile_method = dlsym(message["handle"], Memory.allocUtf8String("mono_jit_compile_method_inner"));

            var mono_method_get_header = dlsym(message["handle"], Memory.allocUtf8String("mono_method_get_header_checked"));



            console.log("mono_jit_compile_method - " + mono_jit_compile_method);


            rid = NaN;

            funcname = NaN;

            Interceptor.attach(mono_jit_compile_method, {

                onEnter: function(args) {

                    if (!load_dll_flag) {

                        return;

                    }

                    if (!flag) {

                        return;

                    }

                    

                    // MonoMethodHeader* mono_jit_compile_method (MonoMethod *method, MonoError *error)

                    // mono_jit_compile_method_inner (MonoMethod *method, MonoDomain *target_domain, int opt, MonoError *error)

                    var method = args[0];

                    

                    var token = Memory.readPointer(method.add(4), 4);

                    rid = token & 0x00ffffff;

                    if (js_rids_literal_code.hasOwnProperty(rid) != -1) {

                        var funcname_ptr = ptr(Memory.readPointer(method.add(16), 4));

                        funcname = Memory.readCString(funcname_ptr); 

                        if(funcname == js_rids_literal_code[rid]) {

                            in_jit_compile = true;

                        }

                    }

                    return;

                },

                onLeave: function(vvvv) {

                    if (in_jit_compile) {

                        in_jit_compile = false;

                    }

                },

            });


            Interceptor.attach(mono_method_get_header, {

                onEnter: function(args) {


                },

                onLeave: function(vvv) {

                    if(in_jit_compile) {

                        return;

                        var code_size = Memory.readPointer(vvv.add(4), 4).toInt32();

                        var code = ptr(Memory.readPointer(vvv, 4));

                        

                        console.log("RID : " + rid);

                        console.log("Function name : " + funcname);

                        console.log("Code size : " + code_size);

                    

                        var code = ptr(Memory.readPointer(vvv, 4));

                        // dump here

                   

                        in_jit_compile = false;

                    }

                }

            });

            

            // send(message);

        }

    },

    onLeave: function(vv) {

       

    }

});

8 Comments
8 아수라발발이 2019.10.17 21:40  
사실 뭔말인지 모르겠지만 감사합니다
6 하늘사자 2019.10.18 23:51  
오... mono에서 "mono_image_open_from_data_with_name" 이벤트 후킹해서.. 이벤트 발생시 함수 끝난후 덤프 뜨는 frida 소스 네요..
실력이 멋지십니다.
2 unclebob 2019.10.20 14:35  
js? py?
6 arahan 2019.11.04 17:50  
var 인거 보니 js
7 래바리 2020.04.03 18:40  
감사합니다.
3 Linjjang 2020.05.11 16:42  
감사합니다
1 Akii 2020.07.17 22:47  
감사합니다
1 dGVzdA 2021.03.21 19:52  
감사합니다. 공부해보겠습니다.