LazyBlog

注意:這招只可以運行在越獄環境的手機中

該需求的產生是因為某個Swift的方法Hook很麻煩,所以硬幹出來的

這次的目標是「手機音樂電台」

  1. 首先我從Appdelegate中發現了很可疑的關鍵字
    disableAD

  2. 進去看了之後確定這個disableAD是一個由Swift類別封裝起來的方法

  3. 搜尋了一下該方法後看到他的記憶體位置

    1
    2
    3
    4
    這邊要特別說一下關於,這個記憶體位置
    由於我是使用ARM64設備砸殼出來,所以記憶體位置會如我們所看到的是0x1002cdbe8
    但如果今天砸殼的設備晶片是ARMv7或者其他型號,那該記憶體位置就會不同
    後面的程式碼就必須要針對其他型號做Hook,相當麻煩...
  4. 寫Code

  • import必要框架
1
2
3
#import <substrate.h>
#import <dlfcn.h>
#import <mach-o/dyld.h>
  • 寫一個獲取記憶體位置的方法
1
2
3
uint64_t getRealOffset(uint64_t offset) {
return _dyld_get_image_vmaddr_slide(0) + offset;
}
  • 拿出舊的方法返回值
1
BOOL (*orig_disableAd)();
  • 宣告新的值
1
2
3
BOOL new_disableAd() {
return YES;
}
  • 最後在ctor把新的值,利用我們已知道的記憶體位置(0x1002cdbe8)直接串改
1
2
3
%ctor {
MSHookFunction((void*)getRealOffset(0x1002cdbe8),(void*)new_disableAd,(void**)&orig_disableAd);
}
結論:這個方法很硬派,自用倒是無所謂若是要開放到Cydia上面要三思

 評論