[워게임] uncrackable 3 문제 풀이

기억이 잘안나는데 그냥 메모했던거 그대로 메모한다...
미래의 내가 언젠가 정리하겠지

uncrackable 3

/*frida 탐지하는 부분 우회!*/
function strstrhook(){
var frida = false;
Interceptor.attach(Module.findExportByName("libc.so","strstr"), {
    onEnter: function (args) {
        //this.haystack = Memory.readUtf8String(args[0]);
        //this.frida= false;
        var haystack = Memory.readUtf8String(args[0]);
        if(haystack.indexOf("frida") != -1 || haystack.indexOf("xposed") != -1){
            frida = true;
        }
    },onLeave: function(retval){
        
        //console.warn("[*] success");
        //console.warn("[*] retval : " + retval);
        if(frida == true){
        retval.replace(0x0);
        }
        }
    });
}

/*루팅 탐지 우회*/
function level3_hooking(){
    //sg.vantagepoint.util.RootDetection.checkRoot1() : boolean
    var RootDetection = Java.use("sg.vantagepoint.util.RootDetection");
    
    RootDetection.checkRoot1.implementation = function(){
       console.log("checkRoot1 test");
    //  console.warn(retval);
       return false;
    }
    
    RootDetection.checkRoot2.implementation = function(){
       console.log("checkRoot2 test");
       return false;
    }
    
    RootDetection.checkRoot3.implementation = function(){
       console.log("checkRoot3 test");
       return false;
    }
 }
 

/**/
function load_library(){
	const System = Java.use('java.lang.System');
    const Runtime = Java.use('java.lang.Runtime');
    const VMStack = Java.use('dalvik.system.VMStack');
    
    System.loadLibrary.implementation = function(library) {
        try {
            console.warn('System.loadLibrary("' + library + '")');
            Runtime.getRuntime().loadLibrary0(VMStack.getCallingClassLoader(), library);

            if(library.indexOf("foo") != -1){
            Interceptor.attach(Module.findExportByName("libfoo.so","Java_sg_vantagepoint_uncrackable3_CodeCheck_bar"), {
                onEnter: function (args) {
                    console.log("[*] open " + Memory.readUtf8String(args[0]));
                    },onLeave: function(retval){
                        //console.log("[*] Secret retval: " + retval);
                        console.log("[*] retval : "+retval );
                        retval.replace(0x1);

                    }
                    });
            }
        } catch(ex) {
            console.log("");
        }
    };
        }


Java.perform(function(){
    strstrhook();
    level3_hooking();
    load_library();

})
  • 근데 실행시킬때 frida -U -f [패키지명] -l [js파일].js 하면 안되고 frida -U -f [패키지명] 해서 실행시킨 후에 js 를 그대로 박아넣어야 됨.
  • libfoo.so 에서 strstr을 직접 사용할 수 없음. 그래서 ptr_strstr을 만들어서 그안에 libc.so 파일안에있는 strstr 주소값을 넣어두고,

좋은 웹페이지 즐겨찾기