ipa改变BundleId产生AppexBundleIdNotPrefixed错误是怎么回事呢?ipa改变BundleId相信大家都很熟悉,但是ipa改变BundleId产生AppexBundleIdNotPrefixed错误是怎么回事呢,下面就让小编带大家一起了解吧。

ipa改变BundleId产生AppexBundleIdNotPrefixed错误,其实就是ipa改过之后没法正常安装了,大家可能会很惊讶ipa改变BundleId怎么会产生AppexBundleIdNotPrefixed错误呢?但事实就是这样,小编也感到非常惊讶。

这就是关于ipa改变BundleId产生AppexBundleIdNotPrefixed错误的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!

禁止营销号

正文

要实现越狱后应用的双开、多开,重点就在于修改CFBundleIdentifierBundleId,让iOS将同一个应用识别为不同的两个包。一般情况下,只要修改.app文件夹下的Info.plist中的对应键值。这是一个xml文件,用文本编辑器就可以直接修改。但是,对于某些应用,这种直接修改的方式显得不那么好使,用爱思等工具导入之后会报AppexBundleIdNotPrefixed,没法安装。说明有别的地方需要一起改动。

没接触过iOS开发,没什么思路,搜了一圈也没搜到解决方案。回头错误名。Appex,猜测是Extension之类的东西,翻翻.app,正好有个PlugIns文件夹,进去一看是.appex后缀的文件夹。大概就是这。里边有个Info.plist文件。打开之后是乱码,推测编译过。

看到了熟悉的字段,但是没法编辑

之前搜报错的时候无意间翻找到一个plist编辑工具,拿来试试。下载链接

用工具打开Info.plist,解析出了xml。找到CFBundleIdentifier字段,他长这样:

解析后的plist

结合错误名里边的NotPrefixed提醒,这里把前边的部分改成和应用的BundleId相同。例如,应用的BundleId改成moe.low.arc1,这里就改成moe.low.arc1.NotificationExtension。改完保存,打包ipa,成功导入安装。一个共存app就改好了!

但是发现只改BundleId的话,如果修改了其中一个包的可执行文件,似乎会影响到另一个包的运行。之前直接暴力改过可执行文件的名,Appcake导一半直接崩了)先留个坑好了

2020.6.1 补充

首先祝各位儿童节快乐

在我fork了仓库和读了代码之后,发现frida-ios-dumpFileNotFoundError的原因在于,使用了chmodzip这两个Windows平台下不预置的命令,权限的设置在Windows下没什么必要。zip也暂时注释掉了,理论上我改过的版本在Windows平台下不会有比在macOS下更多的报错大概。如果有兴趣的话,链接放在文末了,也可以直接进我Github仓库测试。

问题出现在后面。我现在对frida-ios-dump与iOS 13.5的兼容性存疑。dump出来的.fid替换进ipa无法正常运行。文件我都用IDA分析完,拿010Editor改好了!就是跑不起来!最后发现砸壳这步就翻车,我气死了 我又尝试了Clutch砸壳,结果是直接报Segmentation Fault: 11,在Github上也有相关issue。目前来看,这两种方式都没法在iOS 13.5环境下正常运作。dumpdecrypted我没试,不确定效果如何。cycript我还没装,这两天捣鼓ipa搞的我头都大,还快到期末,懒了

以下是原文章。


上传到App Store的ipa包都经过了苹果的加密处理,必须要先砸壳才能使用IDA等工具进行分析。有不少教程用的都是Clutch,但这个在Windows平台下好像没法用(更正:我会用了,但是他崩了),所以就用frida来做了。

环境的搭建

使用frida砸壳,需要在Windows和已越狱iOS设备上搭建frida。PC机上还需要有Python环境。Python环境也就一个安装包的事这里就直接掠过了。

Windows端

整个搭建过程还是挺无脑的,也就一行代码的事:

pip install frida-tools

等一会环境就装好了!因为frida官网是这么指导的啊

实际直接执行上面那行的话,可能会报缺wheel这个包:

pip install wheel

同时,由于国内众所周知的网络环境, 有一个包可能无法正常下载,导致Building wheel for frida (setup.py)这里直接无提示卡死。在等了半个小时后, 出现了报错信息:

报错

后边还有一句更直接的:

[WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

https://pypi.org/project/frida/ 用下载工具下载对应文件,注意frida版本,Python版本,OS和指令集完全对应。之后把下好的.egg文件放到用户目录,重新运行安装命令,frida环境就装好了。

iOS端

iOS端的配置主要用的是Cydia。我的设备为iOS 13.5,unc0ver越狱。

要装的插件只有Frida for A12+ devices(我是A12X,按需要装对应版本)。fridahttps://build.frida.re这个源。

砸壳

砸壳过程中,PC与iOS设备通过USB连接。网上查到的多篇教程用了USB接口到网卡localhost的映射,而且都是macOS专属,对于为什么要这么做本Windows用户暂且蒙在太鼓里

砸壳用的工具是frida-ios-dump,直接clone

git clone https://github.com/AloneMonkey/frida-ios-dump.git

cd进目录。装依赖,然后看可砸壳App。

pip install -r requirements.txt --upgrade
python .\dump.py -l

砸壳则是

python .\dump.py <App名|BundleID>

在砸壳过程中被砸壳的App要保持运行状态。不然放多久进度也不会动,如果进度卡住了就kill掉python进程重新砸壳,别问我怎么知道的

按理说这样就会自己生成砸壳后的.ipa文件了,但我操作过程中途会报FileNotFoundError,而且无法生成文件。不仅如此,运行的最后会报拒绝访问,如果直接重新运行,会一上来就拒绝访问。试了几次也不行。我怀疑是在哪里出了问题,操起我的半吊子Python,直接看源码。

在阅读源码后得知,砸壳得到的文件位于%temp%\Payload文件夹,在程序的开始会尝试删除这个文件夹再建个新的,在程序结束时会删掉这个文件夹作为清理。然而,Windows是不允许对%temp%中的文件夹进行删除的,这就导致了拒绝访问的情况发生。由于某些原因,Python 3.8库中缺失subprocess.py,导致无法创建子进程去生成ipa包。最后ipa没生成出来,dump出来的资源还被干了。砸了个寂寞

虽然说解密的可执行文件已经通过.fid形式被dump出来了而且也没被删 我还是决定小改一下这个程序。subprocess暂时不去改了其实是因为不会,把几个shutil.rmtree()先改成pass,让他别删临时文件,差不多脚本就能用了。

几个.fid文件就是解密的可执行文件,删掉后缀扔到对应的地方。和BundleName一样的那个.fid扔到app根目录,剩下的丢到对应的Frameworks里面。之后对Payload文件夹整体打个zip包,脱壳的ipa就到手了。

后记

打算针对Windows优化一下这个.py (挖坑不填小能手

那我先fork一下丢在这里好了ヾ(•ω•`)o https://github.com/feightwywx/frida-ios-dump

声明:

本文所提及内容已经实际违反了Rayark的用户协议,解包软件资源所带来的后果自负。

解包得到的资源只应用作个人学习、研究或者欣赏。严禁传播,更禁止用作商业用途。本文仅分享方法,不包含解包得到的资源文件。

22.11.16追加

对于大多数问题来说,年代过于久远早就忘记了()无法回复评论抱歉()


别问为什么要拆,问就是听歌舔封面\NEKO//\NEKO//

前言

本文介绍两种方法,一种是使用UABE,一种是使用uTinyRipper。都是Windows 10 1909环境。

那么话不多说,干就完了奥力给

一些准备工作

和很多游戏一样,Cytus II国际版的资源文件不在apk包内,而是在一个.obb文件内。我下载的包为Google Play 3.0.1版本,文件为/sdcard/Android/obb/com.rayark.cytus2/main.29113500.com.rayark.cytus2.obb。Rayark没有对obb进行加密处理,直接把这个文件拷到PC上,解压。

在解压的时候还有一个地方需要注意。我平常使用的压缩软件是7-Zip 19.00,在解压完提取资源的过程中出现了问题,UABE直接报错,uTinyRipper解出来文件但同样报错,检查输出文件也没有发现想要的资源。最后发现问题出在7z上面,他解出来的资源文件体积非常小,仅有几百MB (后续测的时候发现7z其实报有额外数据没解出来了,但我当时没有看见) 解决方案是把obb后缀改成zip,然后用Windows自带的文件资源管理器进行解压。我使用的3.0.1最后解包得到了2.2GB左右数据,这个大小就正常多了。

META-INF文件夹直接删掉,我们想找的资源都在Assets里面。直接打开已经可以看见不少好东西了,背景、标题、剧情中用到的动画都直接以mp4文件的形式出现在了这里,还有Nora包的动态曲封gif和几个音效。但歌曲的音频、曲封等资源都在/bin/Data目录,里面是一堆看不懂名字是啥的文件(我估摸着是hash值)要让资源现出原形,就需要我们的主角登场啦!

方法1:使用UABE

全称Unity Assets Bundle Extractor下载链接(Github)

使用起来也非常简单:

  1. 打开AssetBundleExtractor.exe。他的主界面长这样:UABE主界面
  2. 点击左上角的File - Open,找到Data目录里面一堆文件,直接Ctrl+A全选,打开选择文件
  3. 等他加载完成之后来到了这么一个界面,在左边选择读取到的资源文件。Texture2D为图片,AudioClip为音频。文件命名方面,以Neko为例,Neko001为大Neko包,Neko002为小Neko包。文件选择
    为什么会出现同名同类型的2个资源呢?是因为cy2的预览音频和完整音频、IM内解锁弹出封面和选歌界面封面使用的是不同的文件,而UABE不显示他们之间的区别,就出现了这种情况。
  4. 在左边点选之后,点右边Plugin,按OK。弹出选择路径的窗口,确认之后文件就会导出到选择的路径了!Plugin
    如果导出的是Texture2D类型,在点完Plugin之后还有导出为tga、导出为png和编辑三种选项可以选择(好像还能用来替换图片资源,没试)

关于音频文件我多说几句,导出格式不可选,默认为wav,但用Audition打开看频谱明显是压缩品质()还是批量转换成mp3格式吧,这样比较节省空间要不是硬盘快满了我会这样

自购自抓的Arcaea专辑

拆包得到的wav,有明显的高频缺失

方法2:使用uTinyRipper(推荐)

通过上面的流程可以发现UABE还是有些弊端的。我是在检查上面提到的报错的时候阴差阳错地认识了uTinyRipper,感觉还挺好用就用上了(?)

uTinyRipper使用起来比UABE还要无脑不少。下载链接(SourceForge)

  1. 点开uTinyRipper.exe,把Data文件夹直接拖进去主界面
  2. 等文件加载完。看到那个大大的Export了吗?点他!导出

选完输出文件夹之后等待一会就导出完了。uTinyRipper要说好处真是用起来相当无脑,坏处也就是太无脑了,不管你要不要的资源全给你导出来,速度比较慢。但与此同时,他也会将不同资源分类。这时的资源命名规则跟之前提到的差不多,只是带有后缀_0的文件,表示IM解锁方形封面或者是预览音频。区分出来用起来就很方便了。

资源的自动化整理

咕咕咕


参考资料

偶然间看到了酷Q有C++的SDK,正好在学习C++,决定开发一个小项目。

那开发什么呢?先从复读机器人开始吧!毕竟人类的本质是复读机

环境搭建

在环境搭建上参照酷QC++SDK的开发文档

我个人使用参照教程使用cmake,Visual Studio 2019 Community和Visual Studio Code。

复读开始!

群聊复读

cqcppsdk自带的 src/demo.c里提供了很多的示例,其中就有一个复读消息的。虽然说是说一句复读一句,但只要加上判断语句就行了!

群聊消息触发的是on_group_message()事件。它的用法是:

on_group_message([](const GroupMessageEvent &event) 
{
    //Code Block
}

要复读一条信息,使用的是send_message()方法,给的参数是复读对象和复读内容。由此可知,我们需要知道这条消息来自哪个群,以及这条消息包含了什么。要获取这段信息相关的信息,我们只要调用类型GroupMessageEvent的成员targetmessage。为了防止网络问题导致抛出异常进而引起酷Q崩溃,需要把方法套在try...catch结构里面。代码如下:

try
{
    send_message(event.target, event.message);
} catch(ApiError &){} //忽略网络异常

但是现在这样,讲一句复读一句太吵了迟早被踢,还需要加上判断逻辑。我的想法是群友讲两句,复读一句,而且不会二次复读送完助攻就跑。那么只要判断当前消息和前一条相同,且和前第二条不同。判断代码有点长而且写的太屑了还和本文主题不符就不在这贴了)

最后调用event.block()方法表示这个事件已经处理完毕。

私聊复读

私聊复读和群聊复读类似,事件是on_private_message(),用法为

on_private_message([](const PrivateMessageEvent &event)
{
    //Code Block
}

其它部分相同。这样机器人接到私聊消息时就会进行复读了。但我只希望只有机器人好友的消息会被复读,所以还要加上判断。要判断消息来源,需要使用sub_type这个成员。查文档知sub_type是枚举类型,在/src/core/event.hpp中给出定义如下:

enum class SubType {
            FRIEND = 11, // 好友消息
            GROUP = 2, // 群临时会话
            DISCUSS = 3, // 讨论组临时会话
            OTHER = 1, // 陌生人消息
        };

这时判断代码的写法也很显然了:

if(event.sub_type == PrivateMessageEvent::SubType::FRIEND)
{
    //Code Block
}

完工!

最后

我还尝试使用on_friend_add()事件来实现机器人加好友时自动发消息,结果并不理想。显然,酷Q只监听机器人加好友,似乎没有考虑机器人主动加好友的情况毕竟谁会用一个号一边挂酷Q一边用TIM操作

相关代码在这就不放了。

用事件的时候别忘了在app.json里面请求相关权限


相关链接

2020.8.21
对,我咕了,咕得非常彻底,直到我换typecho+lnmp也没憋出来一篇,我紫菜

以下是原文章。


寒假在家很闲,之前一直想搭一个站写一点东西,现在正好有机会。因为是第一次接触建站,也踩了许多坑。因为不知道要写啥,但只有helloworld的话也太空了,在包含这篇的接下来的几篇文章里面,我打算记录一下建站的整个过程。

需求

  • 一个博客性质的站点,可以在上面发布内容。
  • 写文章最好可以方便地用'markdown'进行。相比使用富文本编辑器,我个人更喜欢纯文本的方式。
  • 整个站点最好较为轻量,这样访问体验也会比较好要不是穷学生缺钱我会这样

在尝试了'Wordpress'之后,我感觉到不是很符合自己的需求,一个是加载很慢,一个是模板定制太不自由了))我怎么可能花几百刀去买模板的vip

最终在受欢迎的博客框架中,我选择了'Hexo'。它可以用'markdown'语法生成美观的静态页面,使用'hexo d'指令就可以方便地部署,正符合我的需求。

服务器

我使用的是阿里云的云翼计划ECS1,单核2GB内存的配置虽说有些磕碜,但搭个静态站还是绰绰有余的。
国内主机连接很快,缺点是解析需要备案。备案这块没什么好说的,在阿里那边填入信息就可以了。我个人的话备案整个流程用了20天,阿里也还算良心,给实例又免费续了20天的量。

再买个域名。开工啦!

服务器系统用的是Windows Server 2012 R2。我虽然用过一些Linux发行版,但对它实在是一知半解……出于想省点事的心理用了Windows Server结果踩了好多坑

阿里云的 Windows Server 默认情况下防火墙是没有开的,网络需要在阿里云控制台的安全组中进行配置。将对应端口设置为开放就可以...?

理论上是这样,但我在开了实例然后搭建FTP的过程中发下FTP根本连不上...阿里云给的文档竟然让我设置全部端口开放?不管这块了,暂且先全开好了。

接下来的内容有点多,准备分成几篇写。

接下来...

  • [1. Hexo 本体搭建 & 让它运行在Apache上吧!]()
  • [2. 实现hexo -d自动化部署 —— 就像Github Pages那样]()
  • [3. 部署一个方便的图床 & 写作时快捷地插入图片]()
  • [4. 全站HTTPS配置 —— 为了地址栏的小锁标识]()

Coming S∞n...


  1. 在写这篇文章的时候,我发现这个页面多了一张满20减100的券……阿里可以把20块钱差价补给我吗