iOS逆向之代码注入(framework)

题外话:此教程是一篇严肃的学术探讨类文章,仅仅用于学习研究,也请读者不要用于商业或其他非法途径上,笔者一概不负责哟~~

准备工作

  • 非越狱的iPhone手机
  • 用PP助手下载: 微信6.6.5(越狱应用)
  • MachOView
    MachOView下载地址: http://sourceforge.net/projects/machoview/
    MachOView源码地址: https://github.com/gdbinit/MachOView
  • yololib
    yololib下载地址https://github.com/KJCracks/yololib?spm=a2c4e.11153940.blogcont63256.9.5126420eAJpqBD

代码注入思路:

DYLD会动态加载Frameworks中所有的动态库,那么在Frameworks中加一个自己的动态库,然后在自己动态库中hook和注入代码

动态库存放的位置:Frameworks

![image.png](https://upload-images.jianshu.io/upload_images/1013424-161997866a52aec0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

找到可执行文件WeChat

![image.png](https://upload-images.jianshu.io/upload_images/1013424-e4f12b6c6aa5fb93.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 用MachOView打开可执行文件WeChat,在Load Commands里可以查看到动态库 ![image.png](https://upload-images.jianshu.io/upload_images/1013424-2f0d040fe1dfc01e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](https://upload-images.jianshu.io/upload_images/1013424-35f07623f288ed4c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](https://upload-images.jianshu.io/upload_images/1013424-3a45631e72661e10.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤:

1、根据iOS逆向之自动化重签名先编译运行微信,然后新建Framework

TARGETS添加: ![image.png](https://upload-images.jianshu.io/upload_images/1013424-5b58e339a4d28335.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](https://upload-images.jianshu.io/upload_images/1013424-0403308f4dd9fada.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2、新建一个WJHook类

![image.png](https://upload-images.jianshu.io/upload_images/1013424-073389c9959af107.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

3、想实现刚加载就要运行,代码就要写在load方法里

![image.png](https://upload-images.jianshu.io/upload_images/1013424-9cefc0037c32ff73.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4、为工程添加依赖关系

  • 在代码注入targets的Build Phases中添加Copy Files
    iOS逆向之代码注入(framework)_第1张图片
  • 在Copy Files中选择Frameworks
    iOS逆向之代码注入(framework)_第2张图片
  • 添加WJHookFrameWork
    iOS逆向之代码注入(framework)_第3张图片

5、编译一下,在app包的位置查看

iOS逆向之代码注入(framework)_第4张图片
显示包内容,在Frameworks中查看
iOS逆向之代码注入(framework)_第5张图片
由上可知,WJHookFrameWork已经加入成功

6、运行,并没有成功,没有执行load里的代码

原因:用MachOView打开可执行文件WeChat,在Load Commands找不到WJHookFrameWork

7、将WJHookFrameWork写入MachO文件

需要用到工具:yololib
因为经常会用到这个工具,建议将它放到 /usr/local/bin
iOS逆向之代码注入(framework)_第6张图片

  1. 显示隐藏文件,可以使用
    defaultswritecom.apple.finderAppleShowAllFilesbooltrue d e f a u l t s w r i t e c o m . a p p l e . f i n d e r A p p l e S h o w A l l F i l e s − b o o l t r u e KillAll Finder
    这条命令来显示。同时,将 true 改成 false, 就可恢复隐藏状态。
  2. 或者使用快捷键 ⌘ + ⬆️ + . 来实现
    • 解压微信越狱包
      iOS逆向之代码注入(framework)_第7张图片
    • 将WeChat.app显示包内容,找到WeChat可执行文件
      增加执行权限:chmod +x WeChat


  • 写入WeChat可执行文件:
    yololib WeChat Frameworks/WJHookFrameWork.framework/WJHookFrameWork

“Frameworks/WJHookFrameWork.framework/WJHookFrameWork”路径是指WJHookFrameWork可执行文件的路径
iOS逆向之代码注入(framework)_第8张图片
  • 检查MachO文件的Load Commands里是否有WJHookFrameWork
    iOS逆向之代码注入(framework)_第9张图片
    如图,加入成功。
  • 删除原来的微信-6.6.5(越狱应用).ipa,打包Payload
    zip -ry WeChat.ipa Payload
    将WeChat.ipa放入APP目录,删除其他文件夹
    iOS逆向之代码注入(framework)_第10张图片
  • 8、运行,成功!

    iOS逆向之代码注入(framework)_第11张图片

    代码和工具已上传:https://gitee.com/winjayq/ios_reverse_code_injection

    你可能感兴趣的:(iOS笔记,iOS开发笔记)