iOS

iOS 解密.ipa文件

2019-02-06  本文已影响83人  Hanfank

对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

结束

新年快乐!

上一篇下一篇

猜你喜欢

热点阅读