美文网首页
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

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