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/ 目录后,用如下命令:
/usr/bin/sudo /usr/local/bin/aapt dump badging apk文件路径,就能获取apk的文件信息。
实行的例子如图2:
图2
从上面红框的三行,就能获取apk的版本号,名称,图标。
2.ios的ipa文件
(1)ipa文件架构
ipa文件实在也是一个zip文件,把ipa后缀名改为zip后,就能把它打开,打开后首先看的是”payload”文件夹,进入”payload”文件夹便是”运用名.app”文件夹,进入这个文件夹后便是资源的位置。
资源的例子,如图3所示:
图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 );
在这个数组中,关键的部分如下:
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' => //运用名称
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;
}
----------------------------------------------
本文是原创文章,作者:曾健生,"大众年夜众号ID:appbackend。如果您转载本文,请附上以上信息,尊重原创。
在后台回答”目录”或者按菜单栏中的”目录”,可查看发布过的所有文章。