insert_dylib工具动态注入dylib库有错?

本人从cydia上下载安装了一个软件,然后用MachOView分析了其可执行文件,发现有__RESTRICT/__restrict这个标志,然后参考这个帖子用insert_dylib工具修改让其可执行文件加入load我自己编写的tweak插件ww.dylib 并且把其签名也给干掉了,最后再用dpkg重新打包安装到手机上,发现总是闪退,我的tweak编写如下:

%hook NSArray

- (id)objectAtIndex:(NSUInteger)index {
    NSLog((@"--------------%s [Line %d] "), __PRETTY_FUNCTION__, __LINE__);
    %orig;
}

%end

%hook AppDelegate

- (BOOL)application:(id)arg1 didFinishLaunchingWithOptions:(id)arg2 {
    NSLog(@"0000000000000000------");
        %orig;
}

%end

然后错误日志如下:

Oct 28 14:38:46 iPod-touch locationd[197] <Notice>: Gesture EnabledForTopCLient: 0, EnabledInDaemonSettings: 0
Oct 28 14:38:46 iPod-touch WXAssistant[1925] <Error>: assertion failed: 12F69: libxpc.dylib + 51923 [89A85F22-6D73-33D8-9D7A-FCF58D58C58E]: 0x7d
Oct 28 14:38:46 iPod-touch Unknown[1925] <Error>: 
Oct 28 14:38:46 iPod-touch WXAssistant[1925] <Warning>: 0000000000000000------
Oct 28 14:38:46 iPod-touch WXAssistant[1925] <Warning>: (
    )
Oct 28 14:38:46 iPod-touch WXAssistant[1925] <Error>: *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds for empty array'
    *** First throw call stack:
    (0x2bcf9137 0x39c55c77 0x2bc0afc7 0x622e9 0x61a61 0x3a1bfc6f 0x3a1ce08f 0x6192b 0x5d167 0x2f39eed5 0x2f59548b 0x2f597b2f 0x2f5a2809 0x2f5962e7 0x32792ec1 0x2bcbf255 0x2bcbe519 0x2bcbd073 0x2bc089a1 0x2bc087b3 0x2f398ab7 0x2f393695 0x7dfbb 0x3a1fdaaf)
Oct 28 14:38:46 iPod-touch ReportCrash[1927] <Notice>: MS:Notice: Injecting: (null) [ReportCrash] (1144.17)
Oct 28 14:38:46 iPod-touch ReportCrash[1927] <Notice>: MS:Notice: Loading: /Library/MobileSubstrate/DynamicLibraries/ww.dylib
Oct 28 14:38:46 iPod-touch ReportCrash[1927] <Warning>: MS:Warning: nil class argument for selector application:didFinishLaunchingWithOptions:
Oct 28 14:38:47 iPod-touch ReportCrash[1927] <Notice>: MS:Notice: Loading: /Library/MobileSubstrate/DynamicLibraries/wxhelperyunlswitch.dylib
Oct 28 14:38:47 iPod-touch ReportCrash[1927] <Warning>: MS:Warning: nil class argument for selector applicationDidBecomeActive:
Oct 28 14:38:47 iPod-touch ReportCrash[1927] <Warning>: MS:Warning: nil class argument for selector viewDidAppear:
Oct 28 14:38:47 iPod-touch ReportCrash[1927] <Warning>: MS:Warning: nil class argument for selector viewDidAppear:
Oct 28 14:38:47 iPod-touch ReportCrash[1927] <Warning>: MS:Warning: nil class argument for selector viewDidAppear:
Oct 28 14:38:47 iPod-touch ReportCrash[1927] <Warning>: MS:Warning: nil class argument for selector viewDidAppear:
Oct 28 14:38:47 iPod-touch ReportCrash[1927] <Warning>: MS:Warning: nil class argument for selector viewDidAppear:

didFinishLaunchingWithOptions中的那条log都打印出来了,但针对于NSArray的objectAtIndex却始终没有被执行到,因为这里日志总报数组超界,很莫名其妙

作用的plist文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Filter</key>
    <dict>
        <key>Mode</key>
        <string>Any</string>
        <key>Bundles</key>
        <array>
            <string>com.whe.vsharesinecis11</string>
            <string>com.yunlian.wxassistant</string>
        </array>
        <key>Classes</key>
        <array>
            <string>NSArray</string>
        </array>
    </dict>
</dict>
</plist>

望大神指教!!!!!!!!!

崩溃信息在这里,我估计是你在patch掉了微信助手之后,把原来起码有3个元素的一个数组给清空了,导致了崩溃

是不是用insert_dylib工具操作之后 改变了可执行文件里的各个命令的内存地址,导致那种挪位的后果(姑且让我这么称呼哈) 但这有什么办法解决呢?? 插入lc_command(具体忘了这个)的操作是insert_dylib工具完成的啊 难道是这个工具有问题????

我刚用这个软件的另外一个版本同样这样操作后 log提示:
Oct 28 16:54:54 iPod-touch WXAssistant[3154] : +[AuthViewController 同步]: unrecognized selector sent to class 0x37062c

这也太坑爹了,我class-dump出来头文件,AuthViewController里完全就没有“同步”这个方法,而是出现了另外一个类AuthVerifyCenter里,但在AuthVerifyCenter里其不是一个工厂方法而是一个实例方法哦 让我再次不得不怀疑是挪位导致的后果啊!!!

碰到这种情况的话,建议你动态调试一下,找找原因

碰到这种情况的话,以你的经验你感觉应该是什么问题呢?应该不是insert_dylib工具的问题吧(我用这个工具注入我自己写得一个app是能成功运行的) 但是我着实只用这个工具操作了WXAssistant,其他没改什么东西,如果对WXAssistant不注入就仅仅重新打包下安装这又是没问题的

想问一下楼主是怎么干掉的签名验证这块?是在iOS较老版本上使用的APPSync 么,还是自己想办法绕过的签名验证?

insert_dylib工具会提示你是否干掉签名的

我的意思是如果修改了Mach-O 文件,苹果的签名验证的时候不就出现问题了?是怎么绕过系统的签名校验的工作?使用的什么工具?还是说只是通过inser_dylib工具修改了Mach-O中的头部的某些域,就不会启动系统的校验工作了?

APPSync 狗神不是说了么 在越狱机上装了这个工具就不会检测签名了

ok,那我知道了,新版本的APPSync 现在还没出来~感谢。