iOS安全—阻止tweak注入hook api
2016-06-09 00:42
519 查看
在网上看到一种方法可以通过在Other Linker Flags中添加:
的方法来阻止dylib注入。
便动手试了一下,编写一个测试Demo不添加任何linker flags,然后使用theos对其进行hook。
启动后使用image list –o –f 来查看加载的动态库:
[145] 0x0025f000 /Library/MobileSubstrate/MobileSubstrate.dylib(0x000000000025f000)
[152] 0x003c0000 /Library/MobileSubstrate/DynamicLibraries/TestLog.dylib(0x00000000003c0000)
发现我们用来hook编写的dylib已经被加载,自然能看到hook成功的log。
2015-11-10 15:21:50.824 myTest[21906:273137] viewDidLoad — 你已经被我Hook了。。。。。。
然后使用linker flags:
重新编译生成。
运行后在所有加载的动态库中已找不到hook的dylib,hook失败了,说明这是有效的。
再来看看生成的macho文件多了一个__RESTRICT/__restrict section。
为什么加了这样的一个section就能阻止dylib注入了呢?
在这里找到了答案:http://www.opensource.apple.com/source/dyld/dyld-210.2.3/src/dyld.cpp
也就是说下面三种情况,可以让环境变量:DYLD_INSERT_LIBRARIES被无视
1.Set restricted status by entitlements
This option is only available to applications on OS X with special entitlements.
2.setuid and setgid
Any application that makes these two calls are going to be marked as restricted by the linker as a security measure.
3.Restricted Segment of Header
The final way to mark a binary as restricted is by telling the linker to add new section to the binary header that is named “__RESTRICT” and has a section named “__restrict” when you compile it.
所以编译生成的含有__RESTRICT/__restrict section的app会忽略DYLD_INSERT_LIBRARIES。
当然解决办法也是有的,把section的名字修改一下即可。
用010 editor打开可执行文件,找到section的名字:
手动修改其为另外的一个字符串,结果如下:
再用MachOView打开,确认没有改错:
然后重新签名,安装app.
又可以成功注入了!
参考链接:
http://bbs.iosre.com/t/tweak-app-app-tweak/438
http://www.opensource.apple.com/source/dyld/dyld-210.2.3/src/dyld.cpp
http://www.samdmarshall.com/blog/blocking_code_injection_on_ios_and_os_x.html
1 | -Wl,-sectcreate,__RESTRICT,__restrict,/dev/null |
便动手试了一下,编写一个测试Demo不添加任何linker flags,然后使用theos对其进行hook。
启动后使用image list –o –f 来查看加载的动态库:
[145] 0x0025f000 /Library/MobileSubstrate/MobileSubstrate.dylib(0x000000000025f000)
[152] 0x003c0000 /Library/MobileSubstrate/DynamicLibraries/TestLog.dylib(0x00000000003c0000)
发现我们用来hook编写的dylib已经被加载,自然能看到hook成功的log。
2015-11-10 15:21:50.824 myTest[21906:273137] viewDidLoad — 你已经被我Hook了。。。。。。
然后使用linker flags:
1 | -Wl,-sectcreate,__RESTRICT,__restrict,/dev/null |
运行后在所有加载的动态库中已找不到hook的dylib,hook失败了,说明这是有效的。
再来看看生成的macho文件多了一个__RESTRICT/__restrict section。
为什么加了这样的一个section就能阻止dylib注入了呢?
在这里找到了答案:http://www.opensource.apple.com/source/dyld/dyld-210.2.3/src/dyld.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | if ( removedCount != 0 ) { dyld::log("dyld: DYLD_ environment variables being ignored because "); 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_INSERT_LIBRARIES被无视
1.Set restricted status by entitlements
This option is only available to applications on OS X with special entitlements.
2.setuid and setgid
Any application that makes these two calls are going to be marked as restricted by the linker as a security measure.
3.Restricted Segment of Header
The final way to mark a binary as restricted is by telling the linker to add new section to the binary header that is named “__RESTRICT” and has a section named “__restrict” when you compile it.
所以编译生成的含有__RESTRICT/__restrict section的app会忽略DYLD_INSERT_LIBRARIES。
当然解决办法也是有的,把section的名字修改一下即可。
用010 editor打开可执行文件,找到section的名字:
手动修改其为另外的一个字符串,结果如下:
再用MachOView打开,确认没有改错:
然后重新签名,安装app.
又可以成功注入了!
参考链接:
http://bbs.iosre.com/t/tweak-app-app-tweak/438
http://www.opensource.apple.com/source/dyld/dyld-210.2.3/src/dyld.cpp
http://www.samdmarshall.com/blog/blocking_code_injection_on_ios_and_os_x.html
相关文章推荐
- iOS_极光推送
- Theos:iOS越狱程序开发框架
- iOS安全–使用Theos开发Tweak过验证
- 在IOS设备上调试(真机调试)
- iOS Developer:真机测试
- iOS手动加载Main.storyboard
- iOS_远程推送
- iOS中类和对象以及nil/Nil/NULL的区别
- iOS多图片下载
- Block
- 【转】解决XCode安装插件后插件不能使用的问题
- 【原】iOS学习之Socket
- CCS新建BIOS工程的设置问题
- #pragma mark
- IOS 公共类-数字处理
- iOS计算字体宽和高
- Macaca-iOS入门那些事
- ios开发网址总结
- ios 定位线上bug
- iOS已上线应用的推送证书过期的处理