美文网首页逆向工程
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