[Frida]delete 된 파일 확인하기

.·2022년 4월 14일
0

모바일 해킹

목록 보기
2/10

ps -ef app-pid

cat /proc/[pid]/maps | grep delete

  • 앱을 실행한 후 피드 번호 알아낸 후에 메모리 확인

am start -D -S n [package-name] /[Activity]

  • 앱을 켜고 디버깅걸어서 stop 해놓고 가져오면 됨 꺼지기 전에 가져와야 하니깐은
  • 메모리 상에 (delete)라고써있는 것들이 삭제된 것들
  • 근데 목록만 볼 수 있음. 다음은 가져오는 스크립트. 중간에 껴넣는거라 파일 삭제를 막을 순 없고 읽어오는 것 뿐
//unlink.js//

/*delete 된 정보 가져오기*/
function unlinkHook_read(){ 
    Interceptor.attach(Module.findExportByName('libc.so','unlink'){
        // 잡아채서 연결한다는 뚯
        // 라이브러리 모르면 (null, unlink) 써도됨. 
        // 그러면 알아서 찾아서 넣어줌!
        // unlink 함수를 찾아서 그안에 아래 내용을 넣는다!
        onEnter(args){
            const fileName = Memory.readUtf8String(args[0]);
            console.log("delete:"+ fileName);
        }
    });
}

/*delete 하지 못하게 하기*/
function unlinkHook(){ // 파일 삭제를 수행하는 unlink 작동을 중지,  Interceptor.replace를 통해 함수를 기존 unlinkPtr이 내가 정의한 함수로 대체
    var unlinkPtr = Module.findExportByName(null, 'unlink');
    Interceptor.replace(unlinkPtr, new NativeCallback( function (a){
        console.log("[+] Unlink : " + Memory.readUtf8String(ptr(a)))
        }, 'int', ['pointer']));
}

/*delete 하지않고 덮어씌울때 이런시그로 사용 (week7_coinone 참조)*/
function closehook(log, args, state) {
    var x = Memory.readUtf8String(args[0]);
    var number = 0;
        if(x.indexOf("/data/user/0/coinone.co.kr.official/files/.tmp.") != -1){
            console.log(Thread.backtrace(this.context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join('\n') + '\n');
            Interceptor.attach(Module.findExportByName(null, "close"), {
                onEnter: function (args) {
                        //copy_code(x);
                        number += 1
                            if(number == 2){
                                Thread.sleep(1000)
                        }
                  }
            });      
        }
    }



Java.perform(function(){
    unlinkHook_read();
    unlinkHook_replace();
    closehook();

})



0개의 댓글