iOS逆向之fishhookDemo

題外話:此教程是一篇嚴(yán)肅的學(xué)術(shù)探討類文章,僅僅用于學(xué)習(xí)研究,也請讀者不要用于商業(yè)或其他非法途徑上,筆者一概不負(fù)責(zé)喲~~

準(zhǔn)備工作

  • 非越獄的iPhone手機(jī)
  • fishhook

Demo 1:

1、新建工程,將fishhook文件拖入工程

image.png

2、我們的目的是hook系統(tǒng)的NSLog函數(shù),編寫代碼

//函數(shù)指針,用來保存原始的函數(shù)的地址
static void(*old_nslog)(NSString *format, ...);

//新的NSLog
void myNSLog(NSString *format, ...){
   format = @"~~勾上了!\n??????????";
    //再調(diào)用原來的nslog
    old_nslog(format);
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSLog(@"點(diǎn)擊了屏幕!");
}

3、了解fishhook中的struct rebinding結(jié)構(gòu)體

struct rebinding {
        const char *name; //需要HOOK的函數(shù)名稱,字符串
        void *replacement;//替換到哪個新的函數(shù)上(函數(shù)指針,也就是函數(shù)的名稱)
        void **replaced;//保存原始函數(shù)指針變量的指針(它是一個二級指針)
    };

定義結(jié)構(gòu)體:

 //定義rebinding結(jié)構(gòu)體
    struct rebinding nslogBind;
    //函數(shù)名稱
    nslogBind.name = "NSLog";
    //新的函數(shù)地址
    nslogBind.replacement = myNSLog;
    //保存原始函數(shù)地址的變量的指針
    nslogBind.replaced = (void *)&old_nslog;

重新綁定:

//數(shù)組
    struct rebinding rebs[]={nslogBind};
    
    /*
     arg1:存放rebinding結(jié)構(gòu)體的數(shù)組
     arg2:數(shù)組的長度
     */
    rebind_symbols(rebs, 1);

4、運(yùn)行,點(diǎn)擊屏幕,打印的是我們自己的myNSLog

image.png

是不是很爽,是不是很簡單?好,看點(diǎn)不一樣的

Demo2

1、自己寫了兩個函數(shù)func和newFunc:

void func(const char *str){
    NSLog(@"%s",str);
}
void newFunc(const char *str){
    NSLog(@"勾上了!");
    funcP(str);
}

2、現(xiàn)在的目的是想交換func和newFunc,當(dāng)調(diào)用func時,我們調(diào)用newFunc,跟Demo1一樣的編寫代碼

image.png

3、運(yùn)行點(diǎn)擊屏幕,發(fā)現(xiàn)打印的是func中的文字,并不是newFunc的文字

image.png

代碼沒有任何問題,但就是勾不??;自己寫的函數(shù)是勾不住的,具體原因見下回分解 ??

代碼已上傳:https://github.com/WinJayQ/fishhookDemo

Hook不成功原因:iOS逆向之fishHook原理探究

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一直自認(rèn)為很努力努力,實(shí)則毫無努力可言。 覺得自己努力學(xué)習(xí),最終的...
    靜待十年閱讀 339評論 0 0
  • 鄰居家的伯伯買了一把理發(fā)的推子,專門給家里的孩子們理發(fā),那個時候沒有頭型之說,只知道頭發(fā)長了,就剪掉。作為鄰居的沉...
    如釋筆記閱讀 269評論 0 0
  • 這兩本書讀完,總覺得需要再一次的深入,要不就自己覺得有些囫圇吞棗,但里面有些案例還是給我留下了深刻印象。其中蓄杯和...
    嫃誠的我閱讀 359評論 0 0
  • 我來了這個培訓(xùn)機(jī)構(gòu)已經(jīng)有一個月多了。 煩躁不安的感覺越來越強(qiáng)烈。 事實(shí)上我最近經(jīng)歷的事情實(shí)在太多,可以慶幸的是,未...
    林北櫻閱讀 235評論 0 0

友情鏈接更多精彩內(nèi)容