【iOS逆向】命令行工具封装、使用和权限签名

【iOS逆向】命令行工具封装、使用和权限签名_第1张图片
image.png

int main(int argc, char * argv[]) {

@autoreleasepool {

    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

}

}

因为命令行工具不需要UI界面,所以main函数改成

int main(int argc, char * argv[]) {

@autoreleasepool {

    return 0;

}

}

App架构类型

int main(int argc, char * argv[]) {

@autoreleasepool {

    NSString *appPath = @"app路径";

    NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:appPath];

    int length = sizeof(uint32_t);

    //读取最前面的4个字节(Magic number, 魔数, 用来标识文件类型)

    NSData *magicData = [handle readDataOfLength:length];

    //魔数,用来标识文件类型

    uint32_t magicNumber;

    [magicData getBytes:&magicNumber length:length];

    if (magicNumber == FAT_CIGAM || magicNumber == FAT_MAGIC) {

        //大小端(高、低地址读取)

        printf("FAT文件\n");

    } else if (magicNumber == MH_CIGAM || magicNumber == MH_MAGIC) {

        printf("非64bit文件\n");

    } else if (magicNumber == FAT_CIGAM_64 || magicNumber == FAT_MAGIC_64) {

        printf("64bit架构文件\n");

    } else {

        printf("读取失败");

    }

    printf("magic number = 0x%x\n", magicNumber);

    [handle closeFile];

    return 0;

}

}

生成的可执行文件拖入iPad以下文件夹

【iOS逆向】命令行工具封装、使用和权限签名_第2张图片
image.png

使用

【iOS逆向】命令行工具封装、使用和权限签名_第3张图片
image.png
image.png

权限出问题

签名-给可执行文件签上一定的权限,让它可以访问其他App的可执行文件

通过ldid给可执行文件签名(仅权限)

image.png

代表追加到文件尾部,>代表覆盖。

cd到存放可执行文件的文件夹中导出权限文件

image.png

得到

【iOS逆向】命令行工具封装、使用和权限签名_第4张图片
image.png

双击打开可以看到权限很少

【iOS逆向】命令行工具封装、使用和权限签名_第5张图片
image.png

找一个包含所有权限的可执行文件(比如SpringBoard),导出权限文件

image.png
【iOS逆向】命令行工具封装、使用和权限签名_第6张图片
image.png

然后将这个包含所有权限的权限文件导入到我们需要增加权限的权限文件(将两个权限文件放在同一个文件夹中)

执行操作

image.png

删除原来的testCommand.entitlements文件,重新导出权限文件可以看到权限

【iOS逆向】命令行工具封装、使用和权限签名_第7张图片
image.png

重新签好的权限可执行文件重新拖入iPad

【iOS逆向】命令行工具封装、使用和权限签名_第8张图片
image.png

chmod +x /usr/bin/testCommand

添加脚本,使得生成的执行文件夹在工程目录下

【iOS逆向】命令行工具封装、使用和权限签名_第9张图片
image.png
【iOS逆向】命令行工具封装、使用和权限签名_第10张图片
image.png

你可能感兴趣的:(【iOS逆向】命令行工具封装、使用和权限签名)