美文网首页逆向工程
iOS逆向:命令行工具

iOS逆向:命令行工具

作者: 码小菜 | 来源:发表于2020-08-05 06:43 被阅读0次

    目录
    一,环境搭建
    二,文件架构类型
    三,生成和使用工具
    四,命令参数
    五,授予权限

    一,环境搭建

    • Xcode新建一个iOS项目
    • 删除无用文件
    • 修改main函数
    • Run改为release模式
    • 配置签名证书(签名后才能运行在iPhone上)

    二,文件架构类型

    • 通用二进制
    • arm64
    • arm64

    三,生成和使用工具

    • 编写代码
    #import <UIKit/UIKit.h>
    #import <mach-o/fat.h>
    #import <mach-o/loader.h>
    
    int main(int argc, char * argv[]) {
        NSString *appPath = @"/var/mobile/Containers/Bundle/Application/DEB96002-C0DD-405A-9178-8A14A09DC37F/ting.app/ting";
        NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:appPath];
        
        // 获取header中magic存储的数据(文件架构类型)
        NSUInteger length = sizeof(uint32_t);
        NSData *magicData = [handle readDataOfLength:length];
        uint32_t magicNumber;
        [magicData getBytes:&magicNumber length:length];
        
        if (magicNumber == FAT_MAGIC || magicNumber == FAT_CIGAM) {
            printf("通用二进制文件: 0x%x\n", magicNumber);
        } else if (magicNumber == MH_MAGIC_64 || magicNumber == MH_CIGAM_64) {
            printf("arm64架构文件: 0x%x\n", magicNumber);
        } else if (magicNumber == MH_MAGIC || magicNumber == MH_CIGAM) {
            printf("非arm64架构文件: 0x%x\n", magicNumber);
        } else {
            printf("读取失败: 0x%x\n", magicNumber);
        }
        
        [handle closeFile];
        return 0;
    }
    
    • 生成工具(可执行文件):连接iPhone,然后build一下
    • 将工具添加到iPhone的/usr/bin目录下
    • 使用工具

    四,命令参数

    • 代码
    /**
     argc: 参数个数(默认为1)
     argv: 参数数组(第一个位置存储的是可执行文件的路径)
     */
    int main(int argc, char * argv[]) {
        if (argc == 1) { // 无参数
            printf("-l 读取文件架构类型\n");
            return 0;
        }
        
        if (strcmp(argv[1], "-l")) { // 参数不是'-l'
            printf("-l 读取文件架构类型\n");
            printf("可执行文件的路径: %s\n", argv[0]);
            return 0;
        }
        
        ...
    }
    
    • 使用

    五,授予权限

    • 说明

    1>必须给工具授予权限,才能访问其他APP的可执行文件,否则可能会读取失败
    2>将SpringBoard的权限授予给它即可,因为SpringBoard拥有访问其他APP的权限

    • 从iPhone中导出SpringBoard的可执行文件
    • SpringBoard的可执行文件中导出权限文件(plist文件)
    • 将权限文件添加到工具中(注意:箭头指向的位置没有空格)
    本文章仅供学习交流,如有侵权,请联系删除,谢谢!

    相关文章

      网友评论

        本文标题:iOS逆向:命令行工具

        本文链接:https://www.haomeiwen.com/subject/vfgprktx.html