iOS逆向之旅(进阶篇) — 代码注入

延伸

作过游戏外挂的人都知道,代码注入一般是经过这工具去注入的进行测试的【固然还有劫持注入等等其余注入方式】git

image.png

一般这种测试注入的方式有两种github

  • 一种是直接注入汇编代码 【这种方式只能用在简单测试。在iPhone中,咱们能够经过LLDB、Cycript直接注入OC原生语言进行测试,这种方式更加简单粗暴。其实咱们平时调试多多少少都会用过LLDB,或许你已经会了很多】
  • 一种是注入一个.dll的动态库【这种是windows系统的动态库。在iphone中,动态库是Framework与dylib】

因此咱们iOS逆向开发的时候,就是经过注入动态库,来实现代码的注入的windows

动态库的注入【Framework】

第一步 【把以前重签名的项目整理,优化一下】

  • 建立一个新的项目【05_Framework_Inject】
  • 建立APP文件夹,把目标APP【wechat】放进去

image.png

  • 建立一个编译脚本

image.png

  • 把以前【iOS逆向之旅(进阶篇) — 重签名APP(二)】里面的脚本,写到文件AssignApp.sh,并放到项目中
  • 接着在运行脚本的指令中,把AssignApp.sh的路径写上,运行的时候Xcode就会自动帮咱们重签名

image.png

第二步 【建立一个Framework】

  • 新建一个Framework,名PFFramework

image.png

  • 把Framework添加到工程中

image.png
image.png
这样就把Framework注入到项目中了

  • 添加注入代码

image.png

  • 运行,查看结果

image.png
然而发现并没注入成功,缘由是因为微信中没有用到咱们的Framework,因此动态库不会被加载。

第三步 【修改Macho文件属性】

这时咱们须要去修改macho的文件属性,让微信会去加载咱们的Frameworkbash

  • 修改wechat可执行文件的macho文件属性

咱们会使用到一个新的工具:yololib 这个工具的使用十分简单 进入.app,查看咱们PFFrameWork的位置 微信

image.png
进入命令行模式,使用该工具,修改其Macho文件属性 yololib WeChat Frameworks/PFFrameWork.framework/PFFrameWork 而后再从新打包这个APP

  • 显然这么作太麻烦了,咱们能够利用跟简单的方式【利用脚本的方式去使用该工具】

在原先脚本的末尾添加上 yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/PFFramework.framework/PFFramework" 这样咱们的代码就能够成功注入进去了app

  • 看看结果

image.png

注:我发现项目中,有时会出现奔溃的现象。

缘由是: 项目有时候PFFramework.framework时有时无,致使了项目偶尔奔溃的现象iphone

image.png

神奇的是项目clean后build确定能成功,但我仍是花了很多时间把问题定位出来 原来第二次编译的时候,编译器有时候会先把PFFramework.framework放到.app中,而后咱们执行脚本rm -rf "$TARGET_APP_PATH",天然而然就把这个库给删了。 因此我把rm -rf "$TARGET_APP_PATH"替换成一下这个函数函数

function rmFilterFramework(){
    for element in `ls $1`
    do
        if  test "$element" == "Frameworks" || test "$element" == "*.framewrok"; then
            echo $element
            else
            rm -rf $1"/"$element
        fi
    done
}
复制代码

修改后,就不再会出现BUG了工具

动态库的注入【dylib】

第一步 【把原理重签名的项目整理,优化一下】

与动态库的注入【Framework】的第一步一致,这里我就不重复阐述了测试

第二步 【建立一个dylib】

  • 新建一个dylib,名PFLibrary

image.png

  • 修改他的平台信息,并把mac修改为iOS

image.png

  • 修改签名认证把mac developer修改为iOS developer

image.png

  • 把dylib添加到工程中

image.png
image.png

  • 添加注入代码

image.png

第三步 【修改Macho文件属性】

与动态库的注入【Framework】的第三步大体相同,惟一不一样的就是写入 脚本的yololib不同,只要改为如下指令便可 yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/libPFLibrary.dylib"

查看结果

image.png
成功了 嘿嘿~~~

代码晚点我会上传到百度云,嘿嘿~

相关文章
相关标签/搜索