美文网首页
20.砸壳&Theos.md

20.砸壳&Theos.md

作者: _顺_1896 | 来源:发表于2018-06-13 17:14 被阅读572次

[TOC]

砸壳方法

一般命令行工具放于/usr/bin下在其他任何目录下都可以直接可以使用。

静态

clutch:此工具是命令行工具;在iOS11上clutch无法使用;

在微信6.5.3的版本现在用 clutch 是砸不了了,砸壳过程中报错:It's not possible to dump watchOS 2 apps with Clutch 2.0.4 at this moment.

  1. 在GitHub上下载clutch的release包;

  2. clutch拷贝到手机/usr/bin目录下;

  3. clutch-2.0.4重命名为clutch,不能使用-等符号;

  4. clutch赋予执行权限:chmod +x clutch+x是对所有用户都赋予可执行权限,而使用chmod xxx则是单独对各组用户进行赋予不同的权限

  5. 列举手机上哪些APP未进行过砸壳处理,不需要砸壳的或已砸壳的不列举:Clutch -i ;

  6. 对指定的APP进行砸壳:clutch -d <标号>clutch -d <APPID>

  7. 完成后将砸壳的应用默认放于DONE:/private/var/mobile/Documents/Dumped/xxx字段对应的路径下。/private/var/var是同一个目录

  8. 即可通过IFunBox将安装拷贝到Mac上或者通过指令;

动态

通过向宏DYLD_INSERT_LIBRARIES里写入动态库和进程的完整路径因为只有在沙盒内的文件,才会对沙盒中的文件有读写权限),就可以在执行文件加载时将该动态库插入。

iPhone的DYLD存放路径:/usr/lib/dyld

动态库的加载运行流程(通过DYLD):加载系统动态库 --> 加载app可执行文件 --> 读取load commands段 --> 加载依赖的动态库。

  • 动态库依附进程与动态库注入的区别:

    1. 英文单词:依附:insert注入:inject
    2. 运行内存:依附是在执行过程中对进程进行方法交换;而注入是通过的静态的可执行二进制文件进行修改load commands段数据从而将库与原文件进行关联;
    3. 实施手段:依附:DYLD_INSERT_LIBRARIES(系统);注入:yololib binary dylib fileyololib三方
  • 步骤

    1. 下来dumpdecrypted源码,通过make指令编译生成动态库;
    2. dumpdecrypted.dylib拷贝至手机;
    3. 通过指令:
    DYLD_INSERT_LIBRARIES=/usr/lib/dumpdecrypted.dylib /var/containers/Bundle/Application/41D1BA28-AAA6-47C0-833B-4EE843D08E5F/WeChat.app/WeChat
    
  • 注意

    • 拷贝APP安装包:scp -r -P 12345 root@localhost:/var/containers/Bundle/Application/41D1BA28-AAA6-47C0-833B-4EE843D08E5F/ ~/Desktop/
    • 将砸壳后的执行文件拷贝到Mac:scp -r -P 12345 root@localhost:/var/mobile/Documents/WeChat.decrypted ~/Desktop
    • 打包ipa文件,zip -ry 微信.ipa WeChat
    • 当遇到killed 9时,参考iOS 9.3.3中使用dumpdecrypted砸壳,killed:9

Theos

Theos

​ 历史:Theos开始由Dustin L. Howett编写后由于DHowett离开SURikIT由开源社区维护,引文Theos简介

​ 作用:为iPhone系统写插件,他可以创建Tweak等项目;

​ 官方wiki:wiki

配置

  • ldid

    • 作用:为插件deb包进行签名
    • 安装:$ brew install ldid
  • xz、Lzma

    安装xz、Lzma压缩工具,避免打包时提示压缩错误。

    $ # for macOS:
    $ brew install xz
    $ sudo cpan IO::Compress::Lzma
    
  • 安装Theos

    • clone的作用在于Theos项目包含有许多隐藏文件中的依赖引用,如果直接down下来不能进行正确配置,另外还需要使用--recursive字段。
    • 环境变量,建议配置在opt文件中方便管理。
    • 安装:$ git clone --recursive https://github.com/theos/theos.git $THEOS

应用

使用Theos创建Tweak插件,进行微信登录密码的窃取;

  • 安装Theos后使用其bin目录下的nic.py工具进行工程创建;

  • 创建工程时配置内容

    1. Project Name:工程名,驼峰;
    2. Package Name:包名,全部小写,反DNS;
    3. Author/Maintainer Name [xxx]:xxx为默认选项;
    4. [iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:依附的目标进程com.tencent.xin
    5. List of...[SpringBoard]:直接回车;
  • 工程文件架构分析

    • control:包含创建项目时配置的各种字段;
    • Makefile:编译配置,需要配置SSH连接的THEOS_DEVICE_IPTHEOS_DEVICE_PORT字段,匹配映射的脚本中的配置,此2个字段将用于make install时使用;
    • Tweak.xm:编写logos代码;
    • xxxxx.plist:包含依附进程的APPID;
  • 锁定微信密码输入框

    • 通过cycript连接微信进程:cycript -p WeChat,进入cycript环境;
    • 导入常用指令cmds.cy文件;
    • 通过JYCurrentVC()得到CurrentVC(WCAccountLoginLastUserViewController),将之前用class-dump导出的WeChatHeaders在sublime中打开,找到关键m_passwordView成员变量;
    • 通过对subviews打印hidden等调试步骤得到#0x13f439c00->m_passwordView.subviews()[0].subviews()[0].subviews()[0]即为密码输入框,#0x13f439c00->m_passwordLoginBtn为登录按钮;
  • 锁定按钮点击的事件响应

    1. 通过按钮的allTargets()方法得到所有响应者;
    2. 通过按钮的.allControlEvents()得到按钮的响应事件;
    3. 通过actionsForTarget:forControlEvent:得到目标响应事件"onNext"
  • 编写logos

    1. 在Tweak.x中对WCAccountLoginLastUserViewController -onNext方法进行hook;
    2. 取出对象的m_passwordView成员变量并通过view.subviews[0].subviews[0].subviews[0];找到最终的UITextField,打印即可;
  • 安装到手机

    • 编译 make,可以检查logos语法的错误信息;
    • 打包 make package,对中间产物进行打包,使用lzma压缩,每执行一次就会重新生成一个deb包;
    • 安装 make install,通过SSH进行安装,在Cydia中可以看到安装成功的插件;
    • 成功安装到手机后,使用微信登录即可获取到微信明文密码;
  • 插件中进行网络请求验证<u>18.06.14插入</u>

    • 在上文的onNext方法使用NSURLConnectionNSURLSession均可进行网络访问;
    • 如在方法内使用get方式进行天气查询@"http://www.weather.com.cn/adat/sk/101270101.html"可以成功获取到返回数据;
    • 即验证了可以在插件中进行网络请求;

常见可能遇到的坑

  • 打包时报压缩方式错误(IO::Compress::Lzma)的解决2种方式:

    1. 安装xz、lzma

    2. 修改dm.pldeb.m文件

      1. dm.pl:注释路径/opt/theos/vendor/dm.pl/dm.pl文件中第12、13行指定的压缩方式

        12 #use IO::Compress::Lzma;
        13 #use IO::Compress::Xz;
        
      2. deb.mk:修改路径/opt/theos/makefiles/package/deb.mk中的

        6 _THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= lzma
        

        6 _THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= gzip
        
  • 编译:

  • 工程名:可以驼峰原则;

  • 包命名:需要对所有字母都使用小写字母;

  • 工程路径:不能在中文目录中,否则打包不成功;

  • 清空缓存:使用make clean,如果清理缓存不成功则直接删除项目工程中的文件;

题外

砸壳工具史

关于砸壳工具史引用AloneMonkey在IOSRE上的一段关于一条命令完成砸壳的话:

背景

最早的砸壳工具是stefanesser写的dumpdecrypted 16,通过手动注入然后启动应用程序在内存进行dump解密后的内存实现砸壳,这种砸壳只能砸主App可执行文件。

对于应用程序里面存在framework的情况可以使用conradev的dumpdecrypted 15,通过_dyld_register_func_for_add_image注册回调对每个模块进行dump解密。

但是这种还是需要拷贝dumpdecrypted.dylib,然后找路径什么的,还是挺麻烦的。所以笔者干脆放到MonkeyDev 58模板变成一个tweak的形式dumpdecrypted 7,这样填写目标bundle id然后看日志把文件拷贝出来就可以了。

但是还是很麻烦,需要拷贝文件自己还原ipa,然后有了KJCracks的Clutch 12通过posix_spawnp创建进程然后dump直接生成ipa包在设备,可以说是很方便了。这个是工具在使用的时候大部分应用会出报错,此外生成的包还需要自己拷贝。

一键dump

人都是想偷懒的,于是便有了本文将要介绍的frida-ios-dump 96,该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件,通过以下方式配置完成之后真的就是一条命令砸壳。

对工具史的总结:stefanesserdumpdecrypted--> conradevdumpdecrypted --> KJCracksClutch --> AloneMonkeyfrida-ios-dump

DYLD花絮

  1. 文章1:通过DYLD_INSERT_LIBRARIES实现基于动态库的hook功能这篇文章中的重点:
    • 支持动态库插入(Interposing)功能,是苹果加载器dyld在传统加载器的一个不同的地方。通过向宏DYLD_INSERT_LIBRARIES里写入动态库完整路径。就可以在执行文件加载时将该动态库插入。
    • 其实Cydia的Substrate框架也是基于DYLD_INSERT_LIBRARIES来实现的。
  2. iOS逆向入门实践 — 逆向微信,伪装定位(一)文章中的重点:
    • 说当前版本的 clutch 不支持 dump watchOS2 的 APP;
    • DYLD_INSERT_LIBRARIES 是 Mac 中的环境变量(Linux 上对应的是 LD_PRELOAD)。在这个宏中写入动态库完整路径,就可以在执行文件加载时将该动态库插入。
  3. iOS逆向-砸壳工具dumpdecrypted文中重点:
    • 查找安装目录,在终端输入ps -e,查找微信的bundle id,使用Cycript连接进程,成功后,在进程内部调用APPPATCH指令找到微信的Documents路径;
    • 此时可能会出现kill 9,如果出现这个问题,可以使用“su mobile”命令切换用户权限,然后继续上面的命令,这样既可砸壳成功,最终在Document目录下得到砸壳后的WeChat.decrypted文件。

相关文章

  • 20.砸壳&Theos.md

    [TOC] 砸壳方法 一般命令行工具放于/usr/bin下在其他任何目录下都可以直接可以使用。 静态 clutch...

  • iOS砸壳&&Theos

    一、概述 从App Store下载的应用是加过壳的,加壳的应用是不能直接执行的,手机之所以能够使用下载的app,是...

  • 越狱调试

    从内存中dump出IPA包砸壳工具:Clutch砸壳工具:dumpdecrypted砸壳工具:frida-iOS-...

  • 砸壳简介

    为何砸壳 appstore 给应用加密了 砸壳:不知道解密的确切方法,调用苹果的解密程序 砸壳的方式 两种砸壳方式...

  • 应用砸壳

    砸壳 软件脱壳,顾明思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密) 砸壳原理 应用加壳(加密) 应用砸...

  • iOS12+砸壳(脱壳)

    iOS12+最佳的砸壳插件 推荐使用 静态砸壳工具4 最方便 1. 静态砸壳工具flexdecrypt[https...

  • 砸壳

    前言 其中用到的砸壳工具就是dumpdecrypted,其原理是让app预先加载一个解密的dumpdecrypte...

  • 砸壳

    【找到Bundle路径】 1.终端执行 ssh root@192.168.xxx.xxx 2.输入ssh密码 默认...

  • 砸壳

    0. 扫盲 0.1 加壳 利用特殊的算法,对可执行文件的编码进行改变(比如压缩、加密),以达到保护程序代码的目的。...

  • LLDB解密(砸壳)

    前言 前段时间学习过利用工具来对加密的应用ipa包砸壳,dumpdecrypted砸壳,Clutch砸壳,frid...

网友评论

      本文标题:20.砸壳&Theos.md

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