ps -ef app-pid
cat /proc/[pid]/maps | grep delete
am start -D -S n [package-name] /[Activity]
//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();
})