iOS11/iOS12上通过LSApplicationWorkspace获取应用列表(只能获取带有 plugin 的app)

NSMethodSignature *methodSignature = [NSClassFromString(@"LSApplicationWorkspace") methodSignatureForSelector:NSSelectorFromString(@"defaultWorkspace")];
NSInvocation *invoke = [NSInvocation invocationWithMethodSignature:methodSignature];
[invoke setSelector:NSSelectorFromString(@"defaultWorkspace")];
[invoke setTarget:NSClassFromString(@"LSApplicationWorkspace")];

[invoke invoke];
NSObject * objc;
[invoke getReturnValue:&objc];


NSMethodSignature *installedPluginsmethodSignature = [NSClassFromString(@"LSApplicationWorkspace") instanceMethodSignatureForSelector:NSSelectorFromString(@"installedPlugins")];
NSInvocation *installed = [NSInvocation invocationWithMethodSignature:installedPluginsmethodSignature];
[installed setSelector:NSSelectorFromString(@"installedPlugins")];
[installed setTarget:objc];

[installed invoke];
NSObject * arr;
[installed getReturnValue:&arr];


for (NSObject *objc in arr) {

	NSMethodSignature *installedPluginsmethodSignature = [NSClassFromString(@"LSPlugInKitProxy") instanceMethodSignatureForSelector:NSSelectorFromString(@"containingBundle")];
	NSInvocation *installed = [NSInvocation invocationWithMethodSignature:installedPluginsmethodSignature];
	[installed setSelector:NSSelectorFromString(@"containingBundle")];
	[installed setTarget:objc];

	[installed invoke];
	NSObject * app;
	[installed getReturnValue:&app];
	NSLog(@"%@",app);
}

以上来自 NGE 商业化实验室 对某助手的逆向

8 个赞

感谢分享。
我唯一的意见是这一堆并不需要的NSInvocation极大的降低了代码的可读性,这段代码看起来像是字节跳动员工写的。

除此之外,10/10

经过测试,只有用NSInvocation 才能调用成功啊张总

这是哥们我自己写的:joy:

还有这种事情?

这是哥们我自己写的:joy:

我知道,我只是顺带完成一下黑字节跳动的日常任务

这么屌? 他还检查 caller 不成

还有这种操作,张总能把我加进混淆器的那个 QQ群里吗,我现在也在研究 编译器

估计是的,这个是 某 P 助手 的写法,原封不动

那群我早就解散了。加我微信好了

那么微信是什么呢


请问前辈我哪边弄错了呢!?

image
内存泄露

哥们,模拟器会崩溃,真机测试没问题,结论:不要用模拟器


我是使用真机操作的 …

###我的也有这个问题,求大神解答

大神也没回应我 QQ

将 @“installedPlugins” 替换成 @“allApplications” 会有惊喜:sunglasses:

一年以前,我在iOS11 上用allApplications没有惊喜,只有空数组

1 个赞

抱歉!我的测试失误,的确是空数组!

不能获取所有应用的列表吗?