读书频道 > 网站 > 网页设计 > iOS应用逆向工程(第2版)
3.2.4 Theos开发tweak示例
15-06-17    下载编辑
收藏    我要投稿   

本文所属图书 > iOS应用逆向工程(第2版)

仔细阅读了本书从字里行间可以感受到作者的认真,在当今这个浮躁的大环境中,这是非常难得的,单从认真这点来看,这本书绝不是一本水货,强烈推荐大家阅读,尤其是初学者。本书的前六章侧重于理论的介绍,但又不立即去当当网订购
前几节完整地介绍了Theos的安装和使用方法,虽然还没有涵盖Theos的所有功能,但对于逆向工程初学者来说已经完全够用了。讲了这么多内容却还没有涉及一行真实的代码,是不是有些意犹未尽啊? 
 
接下来将以一个最简单的tweak为例来进行讲解。安装了该程序之后,每次重启SpringBoard都将会弹出一个UIAlertView。
 
1. 用Theos新建tweak工程“iOSREGreetings”
新建iOSREGreetings工程的命令如下:
snakeninnysiMac:Code snakeninny$ /opt/theos/bin/nic.pl
NIC 2.0 - New Instance Creator
------------------------------
  [1.] iphone/application
  [2.] iphone/cydget
  [3.] iphone/framework
  [4.] iphone/library
  [5.] iphone/notification_center_widget
  [6.] iphone/preference_bundle
  [7.] iphone/sbsettingstoggle
  [8.] iphone/tool
  [9.] iphone/tweak
  [10.] iphone/xpc_service
Choose a Template (required): 9
Project Name (required): iOSREGreetings
Package Name [com.yourcompany.iosregreetings]: com.iosre.iosregreetings
Author/Maintainer Name [snakeninny]: snakeninny
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.apple.springboard
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: 
Instantiating iphone/tweak in iosregreetings/...
Done.

 

2. 编辑Tweak.xm
 
编辑后的Tweak.xm内容如下:
 
%hook SpringBoard

- (void)applicationDidFinishLaunching:(id)application
{
    %orig;

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Come to http://bbs.iosre.com for more fun!" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    [alert release];
}

%end

 

 
3. 编辑Makefile及control
 
编辑后的Makefile内容如下:
 
THEOS_DEVICE_IP = iOSIP
ARCHS = armv7 arm64
TARGET = iphone:latest:8.0

include theos/makefiles/common.mk

TWEAK_NAME = iOSREGreetings
iOSREGreetings_FILES = Tweak.xm
iOSREGreetings_FRAMEWORKS = UIKit

include $(THEOS_MAKE_PATH)/tweak.mk

after-install::
      install.exec "killall -9 SpringBoard"
编辑后的control内容如下:
Package: com.iosre.iosregreetings
Name: iOSREGreetings
Depends: mobilesubstrate, firmware (>= 8.0)
Version: 1.0
Architecture: iphoneos-arm
Description: Greetings from iOSRE!
Maintainer: snakeninny
Author: snakeninny
Section: Tweaks
Homepage: http://bbs.iosre.com

以上代码非常简单,当SpringBoard的applicationDidFinishLaunching:函数得到调用时,代表SpringBoard的启动过程已经结束。钩住(hook)这个函数,调用%orig完成它的原始操作,然后弹出一个自定义的UIAlertView;这样一来,每次重启SpringBoard都会弹出一个对话框。你看懂了吗?

 
准备就绪,在Terminal中敲入“make package install”,待SpringBoard重启之后会看到如图3-14所示的结果,简单粗暴。
 
 
是的,仅仅是这样一些小小的改动,就已经可以改变App的行为了。此时,封闭的iOS已经向我们打开了大门……
 
因为有Theos这样的开发工具存在,修改闭源的iOS程序变得前所未有的方便。不过在前面也提到了,现在的App工程量越来越大,class-dump头文件也越来越多,要从浩如烟海的函数名中筛选出我们感兴趣的目标,比确定目标后编写代码还要难得多。面对成千上万行代码,如果没有其他工具辅助分析,逆向工程简直是一场噩梦,让人一筹莫展。那么接下来,就轮到这些辅助分析工具隆重登场了。
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站