防止Tweak

什么是tweak?

英文意思为捏, 拧,扭,稍稍调整(机器、系统等)。

依据维基百科的定义,tweak指的是对电子系统进行轻微调整来增强其功能的工具;在ios中tweak特指那些能够增强其它可执行程序功能的动态链接库。

在cydia中99%的tweak都是基于mobile substract编写的

北京时间9月30日更新的美团iOS客户端4.8.1版 93,就能够强力阻止各种dylib的注入,使得一切tweak均为狗比,小弟就带大家看看美团是怎么做到的,而我们又可以通过什么方式,破解这种防护。

anti-DYLD_INSERT_LIBRARIES :

反DYLD_INSERT_LIBRARIES

dylib的注入一般是通过DYLD_INSERT_LIBRARIES这个环境变量来实现的,现在dylib连注入都失败,即其constructor根本未得到执行,说明此行为不是由美团的代码完成的,而应该发生在代码执行前。既然这样的话,此行为多半是因MachO头部的某个标注,导致dyld 107有意为之的。那么……
我们直接去看看dyld的源代码 238好了啊!源代码总共也没几行,我们着重看看pruneEnvironmentVariables这个函数,它的注释写道:
同时注意到这个switch case:

switch (sRestrictedReason) {

case restrictedNot: break;

case restrictedBySetGUid:

dyld::log("main executable (%s) is setuid or setgid\n", sExecPath);

break;

case restrictedBySegment:

dyld::log("main executable (%s) has __RESTRICT/__restrict section\n", sExecPath);

break;

case restrictedByEntitlements:

dyld::log("main executable (%s) is code signed with entitlements\n", sExecPath);

break;

}

三种情况下,DYLD_环境变量会被dyld无视,分别是:

  1. 可执行文件被setuid或setgid了;
  2. 可执行文件含有__RESTRICT/__restrict这个section;
  3. 可执行文件被签了某个entitlements。
    其中,因为Apple的审核机制,1和3不能由用户指定,因此不大可能出现在AppStore App中。为了确保万无一失,我们简单验证一下就好了:

ldid -e /var/mobile/Applications/DCDC3F9D-227A-414F-B796-54AA9DB0F39A/imeituan.app/imeituan

可以看到,imeituan这个可执行文件既没有setuid/setgid位,也没有特殊的entitlements,那么它含有__RESTRICT/__restrict这个section的可能性激增。至于如何验证我们的想法,用OSX逆向顶级大牛fG! 177的改造版MachOView 384看看就好了嘛~

5ad178ef378bbf2f3ea2997f3471011d090.jpg

好了,这应该就是美团4.8.1所采用的大杀器了,这种anti-DYLD_INSERT_LIBRARIES的方法,其实早在iOS 7完美越狱时,已经由GeoHot提到过了 256膜拜!!!

anti-anti-DYLD_INSERT_LIBRARIES

既然anti-DYLD_INSERT_LIBRARIES是由__RESTRICT/__restrict实现的,那么anti-anti-DYLD_INSERT_LIBRARIES自然就等同于anti-__RESTRICT/__restrict咯!而要anti-__RESTRICT/__restrict也很简单,把imeituan这个可执行文件用macvim等二进制编辑器打开,把所有的__RESTRICT/__restrict字符串给重命名一下就好了,比如:

1a8a4c61f9d8e32afe3430c90bc1759fcf2.jpg

这样dyld就找不到__RESTRICT/__restrict,也就不会忽略DYLD_INSERT_LIBRARIES了嘛!
把改过以后的imeituan拷贝回iOS,

snakeninnys-MacBook:~ snakeninny$ scp /Users/snakeninny/imeituan root@192.168.3.3:/var/mobile/Applications/DCDC3F9D-227A-414F-B796-54AA9DB0F39A/imeituan.app/imeituan

因为我们对App的可执行文件进行了静态patch,其md5值已经改变,所以Apple签名失效,正常情况下美团App无法启动。要解决这个问题,很方便,也很惭愧,因为要用到盗版App的利器——AppSync……
在Cydia中搜索AppSync,安装并respring后即可禁用iOS的签名校验。一切就绪后,打开美团,用Cycript重新测测看:

FunMaker-5s:~ root# cycript -p imeituan

cy# [UIApp displayIdentifier] @"com.meituan.imeituan"

打完收工~

四、总结
根据我们的分析结果,来一个马后炮,我们可搜到Sam 140的一篇新博文 877(关键词“DYLD_INSERT_LIBRARIES __RESTRICT”),讲到的正是这个帖子所提到的内容。除了更专业更详细外,他还给出了怎么用这种机制给自己的App加上防护的方法,完爆我们这种只破坏不保护的猥琐行径:huffy:,值得崇拜~!

http://www.samdmarshall.com/blog/blocking_code_injection_on_ios_and_os_x.html 877
http://geohot.com/e7writeup.html 256
http://www.opensource.apple.com/source/dyld/dyld-210.2.3/src/dyld.cpp 238
https://theiphonewiki.com/wiki/Launchd.conf_untether 80
 

转载于:https://my.oschina.net/HeroOneHY/blog/2877565

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值