如何获取app(apk和ipa)中的资源

news/2024/7/20 21:26:39 标签: app, apk, ipa, android, ios

     移动互联网中,主要的两个平台是Android和iOS,android上文件的安装包是后缀名为apk的文件,ios上文件的安装包是后缀名为ipa的文件,在本文分析一下这两种文件的特点,以及如何用程序去解析这些安装包的资源。


1.    androidapk文件


(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的文件信息。

 

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /usr/bin/sudo/usr/local/bin/aapt dump badging apk文件路径  


执行的例子如图2:

 

                                                                           图2


从上面红框的三行,就能获取apk的版本号,名称,图标。

 

2.    iosipa文件

(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)就能把里面的内容解密。

 

简单的用法如下:

 

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. require_once(__DIR__.'/../classes/CFPropertyList/CFPropertyList.php');  
  2.    
  3. $content =file_get_contents("/tmp/Info.plist");  
  4. $plist = new CFPropertyList();  
  5. $plist->parse($content);  
  6. var_dump( $plist->toArray() );  

 

$plist这个数组的信息如下:

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1.    
  2. array(29) {  
  3.  'CFBundleName' =>  
  4.  string(12) "DataDemo"  
  5.  'DTXcode' =>  
  6.  string(4) "0511"  
  7.  'DTSDKName' =>  
  8.  string(11) "iphoneos7.1"  
  9.  'DTSDKBuild' =>  
  10.  string(6) "11D167"  
  11.  'CFBundleDevelopmentRegion' =>  
  12.  string(2) "en"  
  13.  'CFBundleVersion' =>   //版本号  
  14.  string(3) "2.0"  
  15.  .........  
  16.   'CFBundleDisplayName' => //应用名称  
  17.  string(12) "DataDemo"  
  18.  .........  
  19.  array(1) {  
  20.    'CFBundlePrimaryIcon' =>  
  21.    array(1) {  
  22.      'CFBundleIconFiles' =>  //图标文件  
  23.      array(2) {  
  24.        [0] =>  
  25.        string(5) "icon2"  
  26.        [1] =>  
  27.        string(4) "icon"  
  28.      }  
  29. }  


 

在这个数组中,关键的部分如下:

 

'CFBundleVersion':版本号

'CFBundleDisplayName':应用名称

'CFBundlePrimaryIcon'->'CFBundleIconFiles':图标文件

 

根据这里的图标名称,在ipa文件中找到加密过的图标文件。使用开源工具(https://github.com/pcans/PngCompote),就能把加密过的图标文件还原。

 

Pngcompote的用法:

 

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. require_once 'pngCompote.php';  
  2. $filename = 'Lenna.crush.png'//需要解密的文件路径  
  3. $newFilename = 'Lenna.compote.png'//解密后的文件路径  
  4.    
  5. $png = new PngFile($filename);  
  6. if ($png->revertIphone($newFilename)) {  
  7.        echo 'cleaning done!'.PHP_EOL;  
  8.        echo '<img src="'.$newFilename.'"/>'.PHP_EOL;  
  9. }  




http://www.niftyadmin.cn/n/1767068.html

相关文章

WCF4.0新特性体验(9):非破坏性队列消息接收(Non-destructive queue receive)

WCF4.0新特性体验(9):非破坏性队列消息接收&#xff08;Non-destructive queue receive&#xff09; 本文来自博客园 作者&#xff1a;Frank Xu Lei 这次来介绍一下WCF4.0新特性体验(9):非破坏性队列接收&#xff08;Non-destructive queue receive &#xff09;。这个特性不是…

Loadrunner Http Json接口压力测试

Loadrunner Http Json接口压力测试 前天接到了一个测试任务&#xff0c;要求测试一下ES&#xff08;elsticsearch&#xff09;在不同并发下的查询效率。如图&#xff1a; 业务场景是在客户端根据具体车牌查询相关车辆信息&#xff0c;结果返回前10条记录。从图中可以看到&#…

WPF学习笔记二 依赖属性实现原理及性能分析

在这里讨论依赖属性实现原理&#xff0c;目的只是学习WPF是怎么设计依赖属性的&#xff0c;同时更好的使用依赖属性。 首先我们来思考一个简单的问题&#xff1a;我们希望能验证属性的值是否有效&#xff0c;属性变更时进行自己的处理。回顾一下.net的处理方式 Public Class My…

信息收集(六)之绕过CDN查找真实IP-part1

一、简介 目前很多网站使用了cdn服务&#xff0c;用了此服务 可以隐藏服务器的真实IP&#xff0c;加速网站静态文件的访问&#xff0c; 而且你请求网站服务时&#xff0c;cdn服务会根据你所在的地区&#xff0c;选择合适的线路给予你访问&#xff0c;由此达网站加速的效果&…

HTTP 协议详解(工作很重要)

HTTP是一个属于应用层的面向对象的协议&#xff0c;由于其简捷、快速的方式&#xff0c;适用于分布式超媒体信息系统。它于1990年提出&#xff0c;经过几年的使用与发展&#xff0c;得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版&#xff0c;HTTP/1.1的规范化工作…

信息收集(六)之绕过CDN查找真实IP-part2

一、查找真实IP方法 1、dns历史绑定记录 通过以下这些网站可以访问dns的解析&#xff0c;有可能存在未有绑cdn之前的记录。 https://dnsdb.io/zh-cn/ ###DNSDB查询 https://x.threatbook.cn/ ###微步在线 http://viewdns.info/ ###DNS、IP等查询 https://sitereport.netcraft…

Fiddler抓取HTTP请求详解

Fiddler抓取HTTP请求。 抓包是Fiddler的最基本的应用&#xff0c;以本博客为例&#xff0c;启动Fiddler之后&#xff0c;在浏览器中输入http://baidu.com 键入回车之后&#xff0c;在Fiddler的web session界面捕获到的HTTP请求如下图所示&#xff1a; 各字段的详细说明已经解释…

信息收集(六)之绕过CDN查找真实IP-part3

一、查找真实IP方法 4、利用SSL证书 证书颁发机构(CA)必须将他们发布的每个SSL/TLS证书发布到公共日志中&#xff0c;SSL/TLS证书通常包含域名、 子域名和电子邮件地址。因此SSL/TLS证书成为了攻击者的切入点。第1步&#xff1a;获取网站SSL证书的HASH&#xff0c;https://cr…