uns*_*ble 8 reverse mach-o dylib ios
我有2个MH_EXECUTE iOS二进制文件(已编译,没有源代码).
让我们来命名binary1和binary2.
在UIApplicationMain调用之前我尝试在它们之间切换!
我成功地做了这个binary1和一个dylib.所以我尝试将MH_EXECUTE转换为MH_DYLIB.
第1步
创建iOS应用程序binary1
#import <dlfcn.h>
int main(int argc, char * argv[])
{
NSLog(@"binary1 -> Hello, World!");
void *handle = dlopen([[[NSBundle mainBundle] pathForResource:@"binary2" ofType:nil] cStringUsingEncoding:NSUTF8StringEncoding], RTLD_NOW);
if (handle)
{
NSLog(@"DLOPEN is OK!");
}
else
{
NSLog(@"!OK ... --> %s", dlerror());
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
创建iOS应用程序 binary2
int main(int argc, char * argv[])
{
NSLog(@"binary2 -> Hello, World!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我跑步时,binary1我得到:

让我们看看差异MH_EXECUTE与MH_DYLIB
让我们改变它们并binary1再次运行.
改变后的结果是out of address space
让我们看一下全屏加载命令

*在dylib没有__PAGEZERO段
*dylib __TEXT段VM address== 0但在binary2== 0000000100000000
所以我们也要修补它们...(修补:__TEXT,___DATA和__LINKEDIT)
运行后binary1我得到malformed mach-o image: segment __PAGEZERO overlaps load commands
我成功地__PAGEZERO从加载命令中删除了二进制看起来像dylib:
fullscreen
但是一开始binary1我就得到了BAD_ACCESS
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Subtype: KERN_PROTECTION_FAILURE at 0x00000001019e0010
Triggered by Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 dyld 0x0000000120016d78 ImageLoaderMachOCompressed::rebase(ImageLoader::LinkContext const&) + 892
1 dyld 0x0000000120016c24 ImageLoaderMachOCompressed::rebase(ImageLoader::LinkContext const&) + 552
2 dyld 0x0000000120010c8c ImageLoader::recursiveRebase(ImageLoader::LinkContext const&) + 132
3 dyld 0x000000012001039c ImageLoader::link(ImageLoader::LinkContext const&, bool, bool, bool, ImageLoader::RPathChain const&) + 176
4 dyld 0x00000001200088e0 dyld::link(ImageLoader*, bool, bool, ImageLoader::RPathChain const&) + 180
5 dyld 0x000000012000df68 dlopen + 684
6 libdyld.dylib 0x0000000194e65b94 dlopen + 68
7 binary1 0x00000001000b7e18 main (main.m:16)
8 libdyld.dylib 0x0000000194e66a04 start + 0
Run Code Online (Sandbox Code Playgroud)
小智 6
你得到的BAD_ACCESS是因为你删除__PAGEZERO并因此使rebased操作码无效.保持__PAGEZERO但使其无效.我类似地将一个可执行文件转换为一个共享库,它在iOS和macOS上正常加载.
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |