iOS Hacker 反注入和反反注入

一、反注入

有一天,你会发现 cycript 不好使,提示这个

iPhone:~ root# cycript -p app
dlopen(/usr/bin/Cycript.lib/libcycript.dylib, 5): Library not loaded: /System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore
Referenced from: /usr/bin/Cycript.lib/libcycript.dylib
Reason: image not found
* _assert(status == 0):../Inject.cpp(143):InjectLibrary

然后你还发现 Tweak 生成的 dylib 注入不了目标进程。这时可以判断,这个应用是做了反注入的保护了。通过搜索到国外的一篇文章
https://pewpewthespells.com/blog/blocking_code_injection_on_ios_and_os_x.html
了解到在可执行文件添加一个名为 __RESTRICT,__restrict 的节,可以反注入,实际的原理是在 dyld 源码里 pruneEnvironmentVariables 函数里有判断如果有这个节就会无视 DYLD_INSERT_LIBRARIES

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;
        }

通过 Xcode 里的 Other Linker Flags 设置参数,则可以添加节。

-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null

iOS Hacker 反注入和反反注入_第1张图片

使用 MachOView 看一下效果

iOS Hacker 反注入和反反注入_第2张图片

这时果然发现 cycript 注入不行了。

二、反反注入

我们了解了反注入的原理之后,如何反反注入呢?很简单,只需要把这个节名给改名不就行了吗?使用十六进制编辑工具打开文件,然后查找字符串改掉,再上传文件替换掉之前的应用文件就可以了。

你可能感兴趣的:(iOS/MacOSX/移动安全)