《九阴真经: iOS黑客攻防秘籍》新书发布,干货满满,快来看看吧!

iOS 安全论坛 - 专注于研究 iOS 安全

 找回密码
 立即注册
查看: 21190|回复: 19

APP内如何调用命令安装下载的ipa包

[复制链接]

8

主题

30

帖子

216

积分

中级会员

Rank: 3Rank: 3

积分
216
发表于 2019-7-15 20:15:37 | 显示全部楼层 |阅读模式
APP代码如何调用命令行安装APP内下载的ipa、我现在是APP内下载一个ipa包,下载完了后自动安装和启动应用,请问您有什么好的方法
现在需要实现这样一个功能:一个APP内从服务端下载完ipa后自动安装和打开该ipa应用,越狱机上已安装相关ipa插件,需要APP内代码实现调用命令行自动进行ipa安装、卸载等操作。Mac开发中有NStask,但是iOS开发中如何实现?跪求解答!急!
回复

使用道具 举报

1

主题

3

帖子

39

积分

新手上路

Rank: 1

积分
39
发表于 2020-7-11 03:23:21 | 显示全部楼层
首先感谢版主的回答,还有楼主的提问,出现的闪退打不开的问题,解决方案是在安装之前卸载一次。
回复

使用道具 举报

119

主题

582

帖子

2626

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2626
发表于 2019-7-20 22:41:21 | 显示全部楼层
安装 AppSync 这个插件可以绕过签名安装应用了。
回复

使用道具 举报

8

主题

30

帖子

216

积分

中级会员

Rank: 3Rank: 3

积分
216
 楼主| 发表于 2019-7-20 11:19:04 | 显示全部楼层
exchen 发表于 2019-7-19 21:38
你的应用包是从哪里得到的?如果是 App Store 的话,要脱壳之后才能运行。一般从 App Store 下载的会有 iTu ...

我的应用包是用户上传进行安全审计的,一般是客户他们公司iOS开发打的ipa包,按理来说一般不会是App Store下载的。我在想会不会是安装了ipa还要进行重签名啥的,求解!
回复

使用道具 举报

119

主题

582

帖子

2626

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2626
发表于 2019-7-19 21:38:35 | 显示全部楼层
你的应用包是从哪里得到的?如果是 App Store 的话,要脱壳之后才能运行。一般从 App Store 下载的会有 iTunesMetadata.plist。
回复

使用道具 举报

8

主题

30

帖子

216

积分

中级会员

Rank: 3Rank: 3

积分
216
 楼主| 发表于 2019-7-19 18:01:00 | 显示全部楼层
exchen 发表于 2019-7-17 22:01
确认一下,手机上真的有这个文件吗?/private/var/mobile/Downloads/ggfwpt.ipa,如果有,那可能是权限问题 ...

您好,按照您的指示吧ipa放到沙盒了,然后执行ipainstaller命令安装要第二次才安装的上,而且安装上去的APP打不开,点击APP应用图标就闪退了,是不是还需要remove iTunesMetadata.plist呢?
还有一个问题:我执行ipainstaller -u 卸载某APP后手机桌面上图标还在,请问如何更新移除残留图标,system()调用uicache并没有用
回复

使用道具 举报

119

主题

582

帖子

2626

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2626
发表于 2019-7-17 22:01:01 | 显示全部楼层
确认一下,手机上真的有这个文件吗?/private/var/mobile/Downloads/ggfwpt.ipa,如果有,那可能是权限问题,访问不了。你尝试将 ipa 文件换一个目录,比如放到 /var/mobile/Library/Preferences 目录看看行不行,或者你能不能把文件放到应用的沙盒目录,这样可以确定肯定是有读写权限的。
回复

使用道具 举报

8

主题

30

帖子

216

积分

中级会员

Rank: 3Rank: 3

积分
216
 楼主| 发表于 2019-7-17 16:19:54 | 显示全部楼层
exchen 发表于 2019-7-17 10:50
你直接在 Xcode 上真机调试运行的程序是没有 root 权限的,有可能 mobile 用户的权限不能操作 ipainstaller ...

您好,我进行call_system("echo 'alpine'|sudo -S ipainstaller -l");遍历bundle id操作或者ipainstaller -u卸载操作是成功的,但是使用call_system("echo 'alpine'|sudo -S ipainstaller /var/mobile/Downloads/ggfwpt.ipa");进行ipa安装就报File not found at path: /private/var/mobile/Downloads/ggfwpt.ipa. Please specify any IPA file(s) to install. 的错误了,root密码是默认的alpine,请问这是为什么?
回复

使用道具 举报

119

主题

582

帖子

2626

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2626
发表于 2019-7-17 10:50:50 | 显示全部楼层
你直接在 Xcode 上真机调试运行的程序是没有 root 权限的,有可能 mobile 用户的权限不能操作 ipainstaller,SSH 上运行命令是 root 用户。这些就需要你自己自行测试了,了解一下基本知识吧。我给你发的那段代码,命令按正常来说是执行了。
回复

使用道具 举报

8

主题

30

帖子

216

积分

中级会员

Rank: 3Rank: 3

积分
216
 楼主| 发表于 2019-7-17 09:53:11 | 显示全部楼层
exchen 发表于 2019-7-17 02:32
我想到一个可能是比较适合你用的办法,动态调用 system 函数,这个应该不用关心环境变量和绝对路径的问题了 ...

我使用您提供的动态调用 system 函数后越狱真机调试,并没有任何反应,不知道是什么原因,我在想 电脑敲命令驱动手机安装IPA是要连ssh的,那这个是否需要?另外我IDA反编译某助手代码是这样的:
  1. else
  2.   {
  3.     objc_msgSend(CFSTR("echo 'szpt2014'|sudo -S ipainstaller "), "stringByAppendingString:", v4);
  4.     objc_release(v4);
  5.     objc_retainAutoreleasedReturnValue();
  6.     v11 = (void *)objc_retainAutorelease();
  7.     v6 = v11;
  8.     v12 = (const char *)objc_msgSend(v11, "cStringUsingEncoding:", 1LL);
  9.     v13 = system(v12);
  10.     NSLog(CFSTR("%s[Line %d] ->i===========%d,"));
  11.     if ( v13 == 256 )
  12.     {
  13.       v23 = _NSConcreteStackBlock;
  14.       v24 = -1040187392;
  15.       v25 = 0;
  16.       v26 = __41__HomeViewController_installdebWithPath___block_invoke;
  17.       v27 = &__block_descriptor_tmp_237_0;
  18.       v28 = objc_retain(v3, v14);
  19.       dispatch_async(&_dispatch_main_q, &v23);
  20.       v15 = v28;
  21.     }
  22.     else
  23.     {
  24.       NSLog(CFSTR("%s[Line %d] ->安装失败"));
  25.       v17 = _NSConcreteStackBlock;
  26.       v18 = -1040187392;
  27.       v19 = 0;
  28.       v20 = __41__HomeViewController_installdebWithPath___block_invoke_240;
  29.       v21 = &__block_descriptor_tmp_249_0;
  30.       v22 = objc_retain(v3, v16);
  31.       dispatch_async(&_dispatch_main_q, &v17);
  32.       v15 = v22;
  33.     }
  34.     objc_release(v15);
  35.   }
  36.   objc_release(v6);
  37. }
复制代码


小白表示看不太懂反编译的代码,还求您再次指导该如何做
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|iOSHacker

GMT+8, 2024-9-20 14:24 , Processed in 0.022279 second(s), 20 queries .

iOS安全论坛

© 2017-2020 iOS Hacker Inc. 京ICP备17074153号-2

快速回复 返回顶部 返回列表