iOS中怎么注入目标函数

发布时间:2021-07-14 13:56:54 作者:Leah
来源:亿速云 阅读:183

这篇文章给大家介绍iOS中怎么注入目标函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。


(一)动态绑定的一个示例
 
(1)锁定注入点

随便找一个APP,classdump拿到所有类的结构信息。

比如,“微信”有一个类是这样声明的:

iOS中怎么注入目标函数  
viewcontroller的继承

这个类继承于UIViewController,也就是有viewDidLoad这个消息处理函数。这里演示把MMUIViewController::viewDidLoad函数给替换掉,让它执行到新的函数中。

 
(2)写注入代码

先找一个熟悉的编辑器,创建一个文件,命名为hookwx.m,然后在里面添加这样的代码:

iOS中怎么注入目标函数  
hookwx的代码

然后是编译的事。可以直接使用xcode来编译出来.o文件,也可以用clang来编译出来.o文件。比如,小程演示时使用的是iphone4手机,也就是armv7指令集,所以可以这样编译出obj文件:

clang -c hookwx.m -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk

再使用ld来链接成动态库(dylib):

ld -dylib -lsystem -lobjc  -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/ -o hookwx.dylib hookwx.o -framework Foundation -framework UIKit -ios_version_min 6.0

以上编译链接命令的参数跟小程使用的sdk版本有关,你如果尝试的话应该选择对应的参数。

 
(3)拷贝dylib到DynamicLibraries

scp hookwx.dylib root@192.168.1.100:/Library/MobileSubstrate/DynamicLibraries/

这时,还要创建一个plist,来指定让哪个APP来加载这个dylib(对于ios8.0以后的系统需要指定哪个APP),具体操作参照上一篇文章--介绍reveal的使用时创建了plist,就是这个操作了。“微信”的bundleID是“com.tencent.xin”或“com.tencent.xin1”,指定让它加载这个dylib(可指定若干个bundleID)。

记得把plist文件也拷贝到DynamicLibraries目录中。

 
(4)验证效果

启动“微信”,使用socat观察log输出,可以看到:

Dec  2 11:22:05 810 MicroMessenger[974] <Warning>: =======in initialize=================
...
Dec  2 11:24:48 810 MicroMessenger[974] <Warning>: -------------in new_viewDidLoad----------
 

也就是,“微信”加载了小程写的dylib,而且也执行到新的函数中。


以上的例子,只是“感性地”知道注入的办法,而在实际使用场景,更应该借助一些成熟的可以做到注入的框架。

小程较常见的两个框架,一个叫fishhook,一个叫MobileSubstrate。

fishhook,是facebook的一个开源工具,可以在运行时修改目标函数的地址,让控制点执行到自己的代码。因为需要知道目标函数的名字,这对于c运行时库的函数来说是适用的,或者对于能定位到函数名的情况也是适用的,但对于连名字都拿不到的情况(比如只能定位到代码地址)就不适用。如果只能拿到函数的地址,那可以考虑用MobileSubstrate的MSHookFunction来做到注入。

MobileSubstrate(也叫CydiaSubstrate,以下简称为MS),最大的一个作用,是可以动态绑定新的执行函数,这个功能已经能满足我们大部分的需求。比如,MS提供的函数MSHookMessageEx,可以用来对oc代码进行hook,原理上利用了oc的runtime特性(运行时替换执行函数)。

MS提供的函数MSHookFunction,可以用来对c代码进行hook,比如很多APP在写文件时都会用到write或fwrite函数,那通过对这两个函数进行hook,就能看到写入文件的数据,可以这样写代码:

iOS中怎么注入目标函数  
MSHookFunction示例

但直接使用MS的函数,并不是本文介绍的重点。从“实用”的角度,小程要介绍的是iOSOpenDev的使用。

关于iOS中怎么注入目标函数就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. php命令注入函数及dvwa命令注入实践
  2. ArcEngine中闪烁目标

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ios

上一篇:JSP如何实现JDOM处理数据库到XML转换的应用

下一篇:linux下普通文件和目录文件区别有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》