美文网首页iOS
iOS 解密.ipa文件

iOS 解密.ipa文件

作者: Hanfank | 来源:发表于2019-02-06 11:46 被阅读83次

    对iOS的.ipa文件进行解密,我们称为砸壳,砸壳有两种方式,一种是破解其加密算法,一种是读取内存中正在运行的元数据。

    手动砸壳概念

    当软件运行在内存中后,实际上内存中软件已经被解密为二进制数据,我们只需要将内存中的数据取出来,再把MachO文件的加密部分替换掉即可完成砸壳操作。

    操作步骤

    1. 在越狱手机中安装正版软件。
    2. 通过ps -A | grep 软件名称 打印出运行中的正版软件路径
    # ps命令最常用的还是用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以如果需要检测其情况,便可以使用ps命令了。
    $ps -A | grep AliPay
    
    
    1. 通过scp -P 12345 root@ip地址:软件路径 ./把手机进程中的软件machO文件拷贝到电脑来。
    # scp 是secure copy的简写,用于在Linux下进行远程拷贝文件的命令
    # -P 是端口号的意思
    # 12345 是USB映射端口号,通过Wi-Fi链接的话默认端口号是22
    # root 是最高级用户
    # ./ 表示电脑跟目录
    $scp -P 12345 root@192.168.1.23 ./.../.../AliPay ./
    
    
    1. 通过otool -l machO文件 | grep cry 查看已加密的数据 cryptoff偏移量,和已加密过的 数据cryptsize大小 ,otool介绍
    # otool(object file displaying tool) : 针对目标文件的展示工具,用来发现应用中使用到了哪些系统库,调用了其中哪些方法,使用了库中哪些对象及属性,它是Xcode自带的常用工具。
    # -l 读取load commands信息,此信息在每个machO文件中都有。用于描述数据段的基本信息
    # | shell的管道符
    # grep cry 匹配包含cry字段的数据
    $otool -l AliPay | grep cry
    
    

    打印出如下信息

         cryptoff 16384 #是MachO文件已加密数据段的偏移量,而偏移量前面的都是未加密的数据段。
        cryptsize 15613952 # 是MachO文件中已加密的真实数据段大小
          cryptid 0 #已加密是用1表示,未加密用0表示,当然如果要修改成其他数也是可以的。一般这个参数用0&1表示就足够
    
    
    1. 使用lldb的image list指令读取软件在内存中的首地址,也就是我们读取的这个软件在内存中的位置。
    # 查看库列表
    $image list
    
    1. 重点:使用lldb的memory指令memory read --force --outfile ./decypted.bin -- binary --count 数据大小(cryptsize) 内存中软件的首地址+便宜量(cryptoff)读取内存中已被解密的二进制数据。
    # memory 内存操作命令
    # read 读取
    # --force 表示按字节读取
    # --outfile 导出文件 后面跟随文件位置和文件名及格式 bin是二进制文件
    # --binary 表示是二进制文件
    # --count 表示数据大小,后面跟随数据量,再跟随拷贝数据的开始位置
    $memory read --force --outfile ./decypted.bin --binary --count 15613952 0x0000000104c54000+16384
    
    
    1. 重点:通过dd seek=偏移量 bs=1 conv=notrunc if=./decrypted.bin of=./Mach-O文件把已解密的数据放回原始的machO文件中。
    # dd 用指定大小的文件写入另外一个文件当中去
    # seek=目标文件开始写入的位置
    # bs=1 表示按1个字节写
    # conv=notrunc 写入后保留输出文件的原始部分
    # if=./Mach-O文件 表示输入文件
    # of=./Mach-O文件 表示输出的目标文件
    $dd seek=16384 bs=1 conv=notrunc if=./decrypted.bin of=./AliPay
    

    输出结果:

    62914560+0 records in
    62914560+0 records out
    62914560+0 bytes transferred in 202.585956 secs (310557 bytes/sec)
    
    1. 查看machO文件是否砸壳成功otool -l machO文件 | grep cry
         cryptoff 16384 
        cryptsize 15613952 
          cryptid 1 仍然是1,但实际上已经砸壳成功。可以修改
    
    

    通过 MachOView工具打开MachO文件,找到LC_ENCRYPTION_INFO_64,再找到Crypt ID。将其的Data值修改为0,然后保存。

    加密值
    1. 通过class-dump导出头文件、成功表示砸壳成功
    $class-dump -H Alipay -o ./AlipayHeaders
    

    结束

    新年快乐!

    相关文章

      网友评论

        本文标题:iOS 解密.ipa文件

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