关于ipa和apk文件的解压
移动互联网中,主要的两个平台是Android和ios,android上文件的安装包是后缀名为apk的文件,ios上文件的安装包是后缀名为ipa的文件,在本文分析一下这两种文件的特点,以及如何用程序去解析这些安装包的资源。
1. android的apk文件
(1) apk文件的结构
apk文件其实是zip格式,但后缀名被修改为apk,所以,把apk的文件后缀改为zip后,就能用压缩软件打开安装包。
打开apk文件后,可看到如下的文件结构,如图1:
图1
META-INF目录:存放的是签名信息,用来保证apk包的完整性和系统的安全。
lib目录:子目录armeabi存放的是一些so文件。
assets目录:存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。
res目录:放资源文件。包括图片,字符串等等。
AndroidManifest.xml:该文件是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息。
classes.dex:java源码编译后生成的java字节码文件(首先是java文件通过jdk编译成字节码文件然后经过dex编译成classes.dex)。
resources.arsc:编译后的二进制资源文件的索引(apk文件的资源表(索引))
(2) 如何获取apk文件的基本信息
要获取apk文件的基本信息(例如图标,应用名称,版本),可以使用android-apktool(我已打包上传到http://download.csdn.net/detail/newjueqi/7713025), 把里面的所有文件复制到/usr/local/bin/ 目录后,用如下命令就能获取apk的文件信息。
- /usr/bin/sudo/usr/local/bin/aapt dump badging apk文件路径
执行的例子如图2:
图2
从上面红框的三行,就能获取apk的版本号,名称,图标。
2. ios的ipa文件
(1) ipa文件架构
ipa文件其实也是一个zip文件,把ipa后缀名改为zip后,就能把它打开,打开后首先看的是”payload”文件夹,进入”payload”文件夹就是”应用名.app”文件夹,进入这个文件夹后就是资源的位置。
资源的例子,如图3所示:
_CodeSignature:文件的签名。
Info.plist: 被加密过的文件,应用名,版本,图标等信息都包含在这个文件中。
icon2.png,icon.png:不同尺寸的图标文件,也是被加密过的。
(2) 如何获取ipa文件的信息
在(1) 中已经提过了,ipa文件的信息是保存在Info.plist,用开源工具(https://github.com/rodneyrehm/CFPropertyList)就能把里面的内容解密。
简单的用法如下:
- require_once(__DIR__.'/../classes/CFPropertyList/CFPropertyList.php');
- $content =file_get_contents("/tmp/Info.plist");
- $plist = new CFPropertyList();
- $plist->parse($content);
- var_dump( $plist->toArray() );
$plist这个数组的信息如下:
- array(29) {
- 'CFBundleName' =>
- string(12) "DataDemo"
- 'DTXcode' =>
- string(4) "0511"
- 'DTSDKName' =>
- string(11) "iphoneos7.1"
- 'DTSDKBuild' =>
- string(6) "11D167"
- 'CFBundleDevelopmentRegion' =>
- string(2) "en"
- 'CFBundleVersion' => //版本号
- string(3) "2.0"
- .........
- 'CFBundleDisplayName' => //应用名称
- string(12) "DataDemo"
- .........
- array(1) {
- 'CFBundlePrimaryIcon' =>
- array(1) {
- 'CFBundleIconFiles' => //图标文件
- array(2) {
- [0] =>
- string(5) "icon2"
- [1] =>
- string(4) "icon"
- }
- }
在这个数组中,关键的部分如下:
'CFBundleVersion':版本号
'CFBundleDisplayName':应用名称
'CFBundlePrimaryIcon'->'CFBundleIconFiles':图标文件
根据这里的图标名称,在ipa文件中找到加密过的图标文件。使用开源工具(https://github.com/pcans/PngCompote),就能把加密过的图标文件还原。
Pngcompote的用法:
- require_once 'pngCompote.php';
- $filename = 'Lenna.crush.png'; //需要解密的文件路径
- $newFilename = 'Lenna.compote.png'; //解密后的文件路径
- $png = new PngFile($filename);
- if ($png->revertIphone($newFilename)) {
- echo 'cleaning done!'.PHP_EOL;
- echo '<img src="'.$newFilename.'"/>'.PHP_EOL;
- }
链接:
关于ipa和apk文件的解压的更多相关文章
- tar.xz文件如何解压
1. tar.xz介绍 XZ压缩最新压缩率之王 xz这个压缩可能很多都很陌生,不过您可知道xz是绝大数linux默认就带的一个压缩工具. 之前xz使用一直很少,所以几乎没有什么提起. 2. 压缩 ta ...
- linux ubuntu12.04 解压中文zip文件,解压之后乱码
在windows下压缩后的zip包,在ubuntu下解压后显示为乱码问题 1.zip文件解压之后文件名乱码: 第一步 首先安装7zip和convmv(如果之前没有安装的话) 在命令行执行安装命令如下: ...
- Linux下*.tar.bz2等文件如何解压--转
如果tar不支持j这个参数就先用 bzip2 -d xxx.tar.bz2 把它解压成.tar文件,然后再用 tar xvf xxx.tar 拆包.压缩解压 linux下怎么解后缀名是gzip的文件? ...
- PHP zip压缩文件及解压
PHP zip压缩文件及解压 利用ZipArchive 类实现 只有有函数.界面大家自己写 ZipArchive(PHP 5.3 + 已自带不需要安装dll) /** * 文件解压 * @param ...
- SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html
SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html 说明: 1.环境:SpringMVC+Spring+Tomcat7+JDK1.7 2.支持 zip和rar格式的压 ...
- 解决MOFH免费空间cpanel面板大文件无法解压的情况
解决办法: 解压大文件,重新压缩为tar格式的压缩格式,这样可以更小,而且也可以在cpanel面板解压,记得使用filezilla软件上传文件,在cpanel的网页界面不要刷新,一刷新就不可以解压大文 ...
- Java实现zip压缩文件的解压
需求描述: 前段时间写了一篇博客<Java实现对文本文件MD5加密并ftp传送到远程主机目录>,实现了一部分的业务需求.然而有些业务可能不止传送一个文件,有时候客户需要传多个文件,原有系统 ...
- .tar.xz文件的解压方法
废话不多说: 直接看 方法一: tar -xvJf ***.tar.gz 方法二: 先减压成 .tar 格式的文件, 再解压 .tar #xz是一个工具, 系统中没有安装,需要下载 xz -d *** ...
- Android 下载zip压缩文件并解压
网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,在此记录一下下载zip文件并直接解压的方法. 其实也很简单,就是把下载文件和解压zip文件结合到一起.下面即代码: URLConne ...
随机推荐
- c#中奖算法的实现
算法名称 Alias Method public class AliasMethod { /* The probability and alias tables. */ private int[] _ ...
- 20个编写现代 CSS 代码的建议
明白何谓Margin Collapse 不同于其他很多属性,盒模型中垂直方向上的Margin会在相遇时发生崩塌,也就是说当某个元素的底部Margin与另一个元素的顶部Margin相邻时,只有二者中的较 ...
- SQL Server 索引
SQL Server 中数据存储的基本单位是页(Page).数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到 n 连续编号).磁盘 I/O 操作在页级执行.也 ...
- 深入理解及应用Position
position俗称定位,主要取值及作用如下: static 默认值.没有定位,出现在正常文档流中 absolute 绝对定位,相对于position为absolute.relative.fixed的 ...
- javascript中的弹框
大家都见过某度中的恶意广告,你关闭了又出来了!为何,JS来告诉你 效果猛戳此处 HTML <body> <h3 class="whiteColor">无法关 ...
- arcgis for flex或silverlight全国地图天气预报的实现
系统架构是B/S,目前有两个不同的版本,1.开发语言是C#.silverlight,开发平台是.NET:2.开发语言是java.flex,开发平台是myeclise. 采用地图是ArcGIS全国地图, ...
- SharePoint 2013 版本功能对比
前言:在SharePoint使用中,经常纠结于版本问题,SharePoint 2013主要有免费的Foundation和收费的标准版.企业版三个版本,他们之间的功能上是不一样的,找了一些资料才发现下面 ...
- IOS开发基础知识--碎片1
一:NSString与NSInteger的互换 NSInteger转化NSString类型:[NSString stringWithFormat: @"%d", NSInteger ...
- IOS开发基础知识--碎片6
三十三:IOS多视图跳转方法 第一种: 跳转:[self presentModalViewController:control animated:YES]; 返回:[self dismissModal ...
- Android编码规范02
同一项目开发过程中需要所有开发人员都有一种风格,做Android项目就要统一遵从Android代码风格: 要想了解Android的代码风格,最好的方式就是查看Android源代码: 下载Android ...