iOS WhatsApp 企业证书重签名后闪退

需求: 使用restore-symbol恢复符号表,通过iOS App Signer重签名WhatsApp应用, 安装后闪退,签名证书为企业证书.

日志: crash日志,已上传WhatsApp.crash (59.0 KB)

操作步骤:

  1. app store 下载WhatsApp,脱壳处理
  2. 使用restore-symbol恢复符号表
  3. 使用iOS App Signer 重签名
  4. 安装成功后,启动应用闪退

环境: iOS 9.3.3 越狱

补充一下,后面又测试了一下, app store下载的包通过frida-ios-dump工具直接脱壳,脱壳后的app包不做任何修改,直接通过mobiledevice安装,也是闪退.

这有个Assert
4 Core 0x101b7d054 0x101900000 + 2609236

0 CoreFoundation 0x18280adb0 __exceptionPreprocess + 124
1 libobjc.A.dylib 0x181e6ff80 objc_exception_throw + 55
2 CoreFoundation 0x18280ac80 +[NSException raise:format:arguments:] + 107
3 Foundation 0x1831901c0 -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 87
4 Core 0x101b7d054 0x101900000 + 2609236
5 libdispatch.dylib 0x18225547c _dispatch_client_callout + 15
6 libdispatch.dylib 0x1822562c0 dispatch_once_f + 79
7 Core 0x101b7cf40 0x101900000 + 2608960
8 Core 0x101d11000 0x101900000 + 4263936
9 Core 0x101d10250 0x101900000 + 4260432
10 WhatsApp 0x10094d874 0x100018000 + 9656436
11 Core 0x101d11cfc 0x101900000 + 4267260
12 WhatsApp 0x100b60398 0x100018000 + 11830168

检查到异常 assert 了

app包里确实有一个Assert.car文件,但是是自带的没做过处理,一般这种情况怎样处理,小白不太了解,
第二个疑问就是,请教一下前辈是如何定位到问题所在的…

是的,包里有一个Assert.car文件.但是是自带的没处理也有问题吗,同楼上的问题,请教前辈什么思路定位到问题所在的,还有就是如何解决一下,望回复,十分感谢

神仙跨服聊天

一个是断言
一个是图片素材包

app文件下载到AppGroupp路径,重签app,自然找不到文件了。

原来是这个意思,知识储备薄弱,理解错了,十分感谢回复

你好,刚接触逆向没多久,所以一些隐含的意思get不到,请问您说的路径的问题是指的什么问题,

App Groups网上查询下就知道了;

NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.simon.app.test"];
 NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.company.appGroupName"];

App Groups 的相关内容我查资料了解过,我的疑问是,App Groups 不应该会导致直接crash, 我是按照AloneMonkey @AloneMonkey 大佬的<iOS应用逆向与安全>的操作搞的,

whatsApp 会将一部分文件保存在app Group中,重签后app无法找到原来的App Group路径;
无法保存文件也无法获取文件。
// hook AppGroup 重定向
%hook NSUserDefaults
-(id)initWithSuiteName:(NSString *)suitename
{
DLog (@"======>>>>>> SuiteName orig -> %@",suitename);

if([suitename isEqualToString:@"group.net.whatsapp.WhatsAppSMB.shared"])
{
    suitename =@"group.com.x1";
}
if([suitename isEqualToString:@"group.net.whatsapp.WhatsApp.shared"])
{
    suitename =@"group.com.x2";
}
if([suitename isEqualToString:@"group.net.whatsapp.WhatsApp.private"])
{
    suitename =@"group.com.x3";
}
if([suitename isEqualToString:@"group.com.facebook.family"])
{
    suitename =@"group.com.x4";
}
DLog (@"======>>>>>> SuiteName new -> %@",suitename);
id r = %orig;
return r;

}

-(id)_initWithSuiteName:(NSString *)suitename container:(id)path
{

DLog (@"======>>>>>> _initWithSuiteName orig -> %@,path -> %@",suitename,path);
id r = %orig;
return r;

}
%end

%hook NSFileManager
-(NSURL *)containerURLForSecurityApplicationGroupIdentifier:(NSString *)groupIdentifier
{
NSLog (@"======>>>>>> groupIdentifier -> %@",groupIdentifier);
if([groupIdentifier isEqualToString:@“group.net.whatsapp.WhatsAppSMB.shared”])
{
groupIdentifier =@“group.com.x1”;
}
if([groupIdentifier isEqualToString:@“group.net.whatsapp.WhatsApp.shared”])
{
groupIdentifier =@“group.com.x2”;
}
if([groupIdentifier isEqualToString:@“group.net.whatsapp.WhatsApp.private”])
{
groupIdentifier =@“group.com.x3”;
}
if([groupIdentifier isEqualToString:@“group.com.facebook.family”])
{
groupIdentifier =@“group.com.x4”;
}
NSURL * path = %orig;
NSLog (@"======>>>>>> groupIdentifier path-> %@",path);
return path;
}
%end

太强了字数补丁