iOS砸壳应用多开数据共通解决方案

评论85,659
摘要很多人在用微信2, 微信3的话,会造成多个多开APP使用了同一个APP的数据...

现象:  很多人在用微信2, 微信3的话,会造成多个多开APP使用了同一个APP的数据
也就是你微信正版软件登陆的是123账号,那么你分身的微信2、微信3…打开后都是123的账号直接登录了,注销登录其中一个,其他多开程序全部也是注销登录状态。
很多人尝试改过info,但是还是不行,部分APP还是出现了多开后数据相同

数据共通原因: 得知需要签名不同才能设置不同,但是多开和主体的缓存是独立的
解决方法

 不要使用CrackerXI+(砸壳工具)进行砸壳的ipa进行多开 电脑使用frida一键砸壳生成的ipa  (frida-ios-dump)

安装

iOS端配置:

打开cydia添加源:https://build.frida.re

打开刚刚添加的源,安装frida

安装完成!检查是否工作可以在手机终端运行frida-ps -U查看

mac端配置:

安装Homebrew

安装python:brew install python

安装wget:brew install wget

安装pip:

wget https://bootstrap.pypa.io/get-pip.py

sudo python get-pip.py

安装usbmuxd:brew install usbmuxd

清理残留:rm ~/get-pip.py

注意:使用brew install xxx如果一直卡在Updating Homebrew…可以control + z结束当前进程,再新开一个终端安装,此时可以跳过更新。

安装frida for mac:

终端执行:

sudo pip install frida

假如报一下错误:

Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.

使用以下命令安装:

sudo pip install frida –upgrade –ignore-installed six

配置frida-ios-dump环境

从Github下载工程:

sudo mkdir /opt/dump && cd /opt/dump && sudo git clone https://github.com/AloneMonkey/frida-ios-dump

安装依赖:

sudo pip install -r /opt/dump/frida-ios-dump/requirements.txt --upgrade

修改dump.py参数

vim /opt/dump/frida-ios-dump/dump.py

找到如下几行

User = 'root'

Password = 'alpine'

Host = 'localhost'

Port = 2222

按需修改 如把`Password` 改成自己的

ps:如果不习惯vim 用访达打开/opt/dump/frida-ios-dump/dump.py手动编辑。

设置别名,方便调用

`vim ~/.bash_profile`

在末尾新增下面一段:

`alias dump.py="/opt/dump/frida-ios-dump/dump.py"`

使别名生效:

`source ~/.bash_profile`

砸壳ipa使用

打开终端,设置端口转发

`iproxy 2222 22`

command + n新建一个终端,在新的终端cd到你要存放砸壳后ipa的文件夹中,然后一键砸壳,直接dump.py 应用名称。如下

`dump.py QQ`

执行完毕后你就会发现,在文件夹中多了一个.ipa文件,即为砸壳后得到的ipa的文件。

理论这个套路任何APP都可以多开估计肯定有人问,抖音可不可以啊,SOUL可不可以啊之类的问题还得多问我一句封不封号之类的我估计

解答

iOS砸壳应用多开数据共通解决方案-图片1

1、可以,无视规则(除了联网验证应用权限的这种不敢保证)
2、大概率被封号(被封禁至少7天以上,保守估计概率7成以上) 3、永封概率1~2成
那么怎么办呢?被封号了怎么办呢?
可以使用+内核禁用+不安装使用包管理工具(Cydia/Sileo)+命令行dpkg安装deb+多开微信防封插件,
反编译一些屏蔽越狱检测的App后发现一些原理如下

抖音系列检测很严格 包括ker fish 等类型的hook 还有签名, 非法模块, 以及非官方dylib检测都有做,想要过汇编语言学一点了……

1、iOS App运行的步骤为:

用户点击App启动

-> load(各种framework和dylib, 包含MobileLoader加载dylib) ->main()-> UIApplicationMain -> AppDelegate -> UIWindow -> ViewControllers -> View...

2、占得先机hook检测函数

对于App厂商而言,App越狱检测可能出现在main或以后的任何环节,

为了掌控一切,占得先机很有必要。

经过实测,发现+[NSObject load]中进行hook居然比dylib的入口函数还快!

static __attribute__((constructor)) void _logosLocalInit() {    // TODO:   printf("DYLIB START RUNNING.");}

那么,猜想+[NSObject load] hook 可以占得先机

3、测试

部分代码如下:

+ (void)load{    staticdispatch_once_t once;    dispatch_once(&once, ^{        rebind_symbols((structrebinding[9]){            {"fork", replaced_fork, (void*)&original_fork},            {"stat", replaced_stat, (void*)&original_stat},            {"access", replaced_access, (void*)&original_access},            {"fopen", replaced_fopen, (void*)&original_fopen},            {"dlopen", replaced_dlopen, (void*)&original_dlopen},            {"dladdr", replaced_dladdr, (void*)&original_dladdr},            {"dlsym", replaced_dlsym, (void*)&original_dlsym},            {"dlopen_preflight", replaced_dlopen_preflight, (void*)&original_dlopen_preflight},            {"dyld_get_image_name", replaced_dyld_get_image_name, (void*)&original_dyld_get_image_name}        },9);    printf("NSObject load RUNNING.");    });}

 

 

判断手机越狱的几种方式:

    1. 通过手机越狱后增加的越狱文件判断

 // 通过越狱后增加的越狱文件判断   class func isContainJailBreakFiles() -> Bool {       let files = [     "/Applications/Cydia.app",     "/Applications/limera1n.app",     "/Applications/greenpois0n.app",     "/Applications/blackra1n.app",     "/Applications/blacksn0w.app",     "/Applications/redsn0w.app",     "/Applications/Absinthe.app",     "/Library/MobileSubstrate/MobileSubstrate.dylib",     "/bin/bash",     "/usr/sbin/sshd",     "/etc/apt",     "/private/var/lib/apt/" ]
 for file in files {     if FileManager.default.fileExists(atPath: file) {         return true     } } return false

    1. 根据是否能打开cydia判断

class func canOpenCydia() -> Bool { if let url = URL(string: "cydia://") {     return UIApplication.shared.canOpenURL(url) } else {     return false  }}

3.根据是否能获取所有应用的名称判断,没有越狱的设备是没有读取所有应用名称的权限的

/// 读取应用列表

class func canGetApplicationList() -> Bool {
    guard FileManager.default.fileExists(atPath: "/User/Applications/") else {        return false    }
    do {
        let appList = try FileManager.default.contentsOfDirectory(atPath: "/User/Applications/")        return !appList.isEmpty    } catch {        print("get app list error (error)")        return false    }}

4.根据使用stat方法来判断cydia是否存在来判断

攻击者可能会 hook NSFileManager 的方法,那么,你可以回避 NSFileManager,使用 stat 系列函数检测 Cydia 等工具.

bool checkCydia() {  struct stat stat_info;  return 0 == stat("/Applications/Cydia.app", &stat_info);}

攻击者可能会利用 Fishhook 原理 hook 了 stat。
那么,你可以看看 stat 是不是出自系统库,有没有被攻击者换掉

bool checkInject() {int ret ;Dl_info dylib_info;char *dylib_name = "/usr/lib/system/libsystem_kernel.dylib";int (*func_stat)(const char *, struct stat *) = stat;if ((ret = dladdr(func_stat, &dylib_info))) {    printf("lib :%s", dylib_info.dli_fname);    return strcmp(dylib_info.dli_fname, dylib_name) != 0;  }return false;}
    1. 检索一下应用程序是否被链接了异常动态库
      通常情况下,会包含越狱机的输出结果会包含字符串:

Library/MobileSubstrate/MobileSubstrate.dylib
bool checkDylibs() {uint32_t count = _dyld_image_count();for (uint32_t i = 0 ; i < count; ++i) { if (strcmp(_dyld_get_image_name(i), "Library/MobileSubstrate/MobileSubstrate.dylib") == 0) {     return true;  }}return false;}
  1. 通过检测当前程序运行的环境变量
    攻击者可能会给 MobileSubstrate 改名,但是原理都是通过 DYLD_INSERT_LIBRARIES注入动态库。

  bool checkEnv() {  char *env = getenv("DYLD_INSERT_LIBRARIES");  return env != nil; }

iOS砸壳应用多开数据共通解决方案-图片2

 

 

 

 

发表评论