(바이너리의 코드 섹션 오프셋) + (수정하고자 하는 명령의 절대 주소 – 코드섹션의 시작 주소)
절대주소 = ida 주소
나머지 2개는 otool 이용 : otool -l ./Multi
Section
sectname __text
segname __TEXT
addr 0x00009680 #text segment start
size 0x00574664
offset 22144 #offset
align 2^4 (16)
reloff 0
nreloc 0
flags 0x80000400
5904(Decimal) + (0x100001B7E(HEX) – 0x100001710(HEX)) = 0x1B7E
// 사용자 함수 hooking 코드
//Example usage:
//# frida -U -f 패키지명 -l user_func_change.js
function print_buf( arg, size ){
var buf = Memory.readByteArray( arg, size );
console.log("\n"+hexdump( buf, {offset : 0 , length: size, header: true, ansi: false }) );
}
if (ObjC.available) {
try {
var module_base = Module.findBaseAddress('breadwallet'); // get base addr // addr 0x00009680 #text segment start
/*
console.log(hexdump(module_base, {
offset: 0,
length: 64,
header: true,
ansi: true
}));
*/
var custom3_5fdfd4 = module_base.add(0x3CE84); // add function offset 22144 // 5680
Interceptor.attach(custom3_5fdfd4, { // set hook
onEnter: function (args) {
send("[S] !!!!!!!!!!!!!! custom3() called"); // before call
send( args[0] + ", " +args[1] + ", " +args[2] + ", " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] )
print_buf( args[0], 300)
print_buf( args[1], 300)
print_buf( args[3], 300)
print_buf( args[4], 300)
},
onLeave: function (retval) {
send("[W] custom1 ret: " + retval.toString() ); // after call
send("\n")
}
});
}
catch(err) { console.log("[!] Exception2: " + err.message); } }
else { console.log("Objective-C Runtime is not available!"); }
참고 링크 : http://bitxflow.synology.me/wordpress/?p=368
안드로이드 후킹 자료 : https://gflow-security.tistory.com/entry/Android-App-Hooking-with-Frida3
반응형
'보안 및 개발 > MOBILE' 카테고리의 다른 글
[iOS] objection 툴 사용 (0) | 2019.10.07 |
---|---|
[iOS] 파일시스템 구조 (0) | 2019.10.07 |
[iOS] Frida server 설치 에러 (0) | 2019.10.07 |
[iOS] Objective-C (0) | 2019.10.07 |
[iOS] frida hooking (0) | 2019.10.07 |