yololib实现了使用终端将dylib注入到ipa,当我们编写Mac端工具的时候也可以调用NSTask执行终端,然而为了简单化,这里使用了纯代码的方式.
MachOView打开xxx.app/exec文件的时候可以看到所有库的加载路径,注入dylib文件其实也就是在exec文件中添加一条dylib加载路径
otool命令行同样可以查看到xxx.app/exec文件库的加载路径
otool -L xxx.app/exec
+(void)injectMachoPath:(NSString *)machoPath dylibPath:(NSString *)dylibPath;
#include
#include
.m
+(void)injectMachoPath:(NSString *)machoPath dylibPath:(NSString *)dylibPath{
int fd = open(machoPath.UTF8String, O_RDWR, 0777);
if (fd < 0)
{
NSLog(@"Inject failed: failed to open %@",machoPath);
return;
}
else
{
uint32_t magic;
read(fd, &magic, sizeof(magic));
if (magic == MH_MAGIC || magic == MH_MAGIC_64)
{
lseek(fd, 0, SEEK_SET);
[self injectArchitecture:fd dylibPath:dylibPath exePath:machoPath];
}
else if (magic == FAT_MAGIC || magic == FAT_CIGAM)
{
struct fat_header header;
lseek(fd, 0, SEEK_SET);
read(fd, &header, sizeof(fat_header));
int nArch = header.nfat_arch;
if (magic &#