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

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

 找回密码
 立即注册
搜索
热搜: iOS12 越狱
12
返回列表 发新帖

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

[复制链接]

74

主题

194

帖子

769

积分

管理员

Rank: 9Rank: 9Rank: 9

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

  1. #import <dlfcn.h>
  2. typedef int (*my_system) (const char *str);
  3. int call_system(const char *str){
  4.    
  5.     //动态库路径
  6.     char *dylib_path = "/usr/lib/libSystem.dylib";
  7.     //打开动态库
  8.     void *handle = dlopen(dylib_path, RTLD_GLOBAL | RTLD_NOW);
  9.     if (handle == NULL) {
  10.         //打开动态库出错
  11.         fprintf(stderr, "%s\n", dlerror());
  12.     } else {
  13.         //获取 system 地址
  14.         my_system system = dlsym(handle, "system");
  15.         
  16.         //地址获取成功则调用
  17.         if (system) {
  18.             
  19.             int ret = system(str);
  20.             return ret;
  21.         }
  22.         dlclose(handle); //关闭句柄
  23.     }
  24.    
  25.     return -1;
  26. }

  27. call_system("ipainstaller /var/mobile/Downloads/xxxx.ipa");
复制代码
回复

使用道具 举报

5

主题

15

帖子

91

积分

注册会员

Rank: 2

积分
91
 楼主| 发表于 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. }
复制代码


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

使用道具 举报

74

主题

194

帖子

769

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

5

主题

15

帖子

91

积分

注册会员

Rank: 2

积分
91
 楼主| 发表于 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,请问这是为什么?
回复

使用道具 举报

74

主题

194

帖子

769

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

5

主题

15

帖子

91

积分

注册会员

Rank: 2

积分
91
 楼主| 发表于 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并没有用
回复

使用道具 举报

74

主题

194

帖子

769

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

5

主题

15

帖子

91

积分

注册会员

Rank: 2

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

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

使用道具 举报

74

主题

194

帖子

769

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|iOSHacker

GMT+8, 2019-9-18 19:11 , Processed in 0.054367 second(s), 18 queries .

iOS安全论坛

© 2017-2019 iOS Hacker Inc.

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