Macho檔案注入shellcode原理與實現

2021-10-16 09:20:56 字數 2536 閱讀 4875

macho檔案與其它檔案格式設計的不太一樣,然而這種設計相對其它檔案格式從我的角度來看的話是最容易擴充套件也容易理解的一種設計,大家如果早期用過蘋果都知道他從powerpc架構轉到intel架構,現在在pc端又出來arm架構的,不能不說蘋果在這方面還是很成熟的,然而macho起到了很大的作用。

我們這裡講不一樣的地方,屬先macho檔案它有倆個頭,乙個叫作fat_header,結構體如下所示。

struct fat_header ;struct fat_arch ;
因為macho檔案它可以支援多種架構,fat_header後面就是某個特定架構的檔案頭(這裡只說intel),結構體如下所示。

struct mach_header_64 ;
還有乙個不同點是macho檔案頭後面是一堆load_commands,所謂的"指令」,學過c語言的應該知道一種swhich case語句,然後發現這正好是這種思想,我們只要按自己需求加case就行也就是定義自己的"指令」,然而這些"指令」對應哪些段,載入器很容易的找到這些段載入,後面就和其它檔案格式差不多。

const char *file_path="/volumes/haidragon-e/haidragon_study/study_executable_file_formats/macho/page1/inject/test";const char *shellcode_path="/volumes/haidragon-e/haidragon_study/study_executable_file_formats/macho/page1/inject/shell";const char *out_file="/volumes/haidragon-e/haidragon_study/study_executable_file_formats/macho/page1/inject/new_test";
其中乙個編譯好的shellcode(是執行乙個shell)和乙個測試程式,如下圖所示。

然後我們把這個新增到乙個新節中,修改入口(這裡就沒跳回原來入口執行。)重新生成乙個新的macho檔案,如下**所示。

const segmentcommand* __text=binary.get_segment("__text");section new_section;new_section.alignment(2);std::vectordata;new_section.content(std::move(data));section* section=binary.add_section(new_section);uint64_t entrypoint=section->virtual_address()-__text->virtual_address();printf("section %d\n",section->virtual_address());printf("__text %d\n",__text->virtual_address());printf("old entrypoint %d\n",binary.main_command().entrypoint());binary.main_command().entrypoint(entrypoint);new_section.content(std::move(data));binary.write(out_file);
執行效果如下圖所示。

我們用machoview工具對比下倆個程式的入口,如下圖所示。

對比二進位制檔案如下圖所示。

iOS逆向之五 MACH O檔案解析

macho檔案是蘋果可執行二進位制檔案的格式 lc segment 64 將可執行檔案 64位 對映到程序位址空間 32位系統的是lc segment 是載入的主要命令,負責指導核心來設定程序的記憶體空間 lc dyld info only 動態鏈結相關資訊 lc symtab 符號表位址 lc d...

08 安全攻防之Mach O檔案

mach o是一種檔案格式,是mac上可執行檔案的格式,類似於windows上的pe格式 portable executable linux上的elf格式 executable and linking format 我們編寫的c c swift oc,最終編譯鏈結生成mach o可執行檔案 總共有1...

sql檔案頭注入

1.常見的http請求頭有 1 host host請求報頭域主要用於指定被請求資源的internet主機和埠號。如 host localhost 8088 2 user agent user agent請求報頭域允許客戶端將它的作業系統 瀏覽器和其他屬性告訴伺服器。登入一些 時,很多時候都可以見到顯...