Android 应用程序包文件 (APK) 是一种Android操作系统上的应用程序安装文件格式,其英文全称为 “application package file” 。

如果懂得使用反编译工具,可以下载apk解析工具,获得反编译代码。

需要下载:SharpZipLib.zip http://www.icsharpcode.net/opensource/sharpziplib/download.aspx

主要方法如下

using ICSharpCode.SharpZipLib.Zip;

public static Dictionary<object, object> getPackageInfo(string path){

Dictionary<object, object> returnMap = new Dictionary<object, object>();
returnMap.Add("版本编号(VersionCode)", "");
returnMap.Add("版本名称(VersionName)", "");
returnMap.Add("包名(Package)", "");
returnMap.Add("签名(Sig)", "");
returnMap.Add("启动activity", "");
returnMap["证书有效期"] = "";
returnMap["证书过期时间"] = "";
returnMap["证书Hash"] = "";
returnMap["证书MD5"] = "";
returnMap["PublicKey"] = "";
List<string> list = new List<string> { ".DSA", ".RSA" };
if (string.IsNullOrWhiteSpace(path))
{
throw new Exception("文件路径不正确:" + path);
}
string str = "";
if (path.LastIndexOf(".") >= 0)
{
str = path.Substring(path.LastIndexOf("."));
}
if (".apk".Equals(str, StringComparison.OrdinalIgnoreCase))
{
try
{
ZipInputStream zip = new ZipInputStream(File.OpenRead(path));
ZipEntry zipEntry = null;
while ((zipEntry = zip.GetNextEntry()) != null)
{
string fileName = Path.GetFileName(zipEntry.Name);
if ((fileName != null) && (fileName.LastIndexOf(".") >= 0))
{
string item = fileName.Substring(fileName.LastIndexOf("."));
if ("AndroidManifest.xml".Equals(fileName, StringComparison.OrdinalIgnoreCase))
{
getPackageDetails(zip, zipEntry, returnMap);
}
else if (list.Contains(item))
{
getSig(zip, zipEntry, returnMap);
}
}
}
zip.Close();
}
catch (Exception exception)
{
throw new Exception("解析apk包错误:" + exception.Message);
}
}
return returnMap;
}

private static void getSig(ZipInputStream zip, ZipEntry zipEntry, Dictionary<object, object> returnMap)
{
MemoryStream stream = new MemoryStream();
byte[] rawCertData = new byte[0x400];
int count = 0;
while ((count = zip.Read(rawCertData, 0, 0x400)) > 0)
{
stream.Write(rawCertData, 0, count);
}
stream.Seek(0L, SeekOrigin.Begin);
string str = "";
X509Certificate certificate = new X509Certificate(stream.GetBuffer());
returnMap["证书有效期"] = certificate.GetEffectiveDateString();
returnMap["证书过期时间"] = certificate.GetExpirationDateString();
returnMap["证书Hash"] = certificate.GetCertHashString();
returnMap["证书MD5"] = BitConverter.ToString(MD5.Create().ComputeHash(certificate.GetRawCertData())).Replace('-', ':');
returnMap["PublicKey"] = certificate.GetPublicKeyString();
rawCertData = certificate.GetRawCertData();
byte[] buffer2 = SHA1.Create().ComputeHash(certificate.GetRawCertData());
for (int i = 0; i < buffer2.Length; i++)
{
str = str + ((sbyte) buffer2[i]);
}
stream.Close();
returnMap["签名(Sig)"] = str;
}

apk文件上传大小限制,web.config文件添加如下:

<system.web>
<httpRuntime maxRequestLength="" executionTimeout="3600" />
</system.web>

<system.webServer>
<security>
<requestFiltering>

<requestLimits maxAllowedContentLength="">
</requestLimits>
</requestFiltering>
</security>
</system.webServer>

apk文件解析,学习笔记的更多相关文章

  1. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  2. Android APK安装过程学习笔记

    1.什么是APK APK,即Android Package,Android安装包.不同平台的安装文件格式都不同,类似于Windows的安装包是二进制的exe格式,Mac的安装包是dmg格式.APK可以 ...

  3. python的文件处理学习笔记

    python的文件处理函数是open() 以下主要是关于这个函数的一些学习笔记 1.文件处理离不开编码 要注意的是文件打开时的编码和文件保存时的编码的统一,这样才能保证你打开的文件不会存在乱码 总结: ...

  4. C# IO流与文件读写学习笔记

    本笔记摘抄自:https://www.cnblogs.com/liyangLife/p/4797583.html,记录一下学习过程以备后续查用. 一.文件系统 1.1文件系统类的介绍 文件操作类大都在 ...

  5. 干货分享:互联网运营 学习SEO从零开始 SEO深度解析学习笔记

    最近在自学SEO,互联网运营,把做的笔记干货分享给大家啊! 希望能帮到大家,如有好的建议可以关注我[磨人的小妖精]或留言,大家一起探讨. 之前还写过一篇文章互联网运营+SEO:推荐必看的5本书籍,学习 ...

  6. react 详细解析学习笔记

    React的介绍: React来自于Facebook公司的开源项目 React 可以开发单页面应用       spa(单页面应用) react 组件化模块化  开发模式 React通过对DOM的模拟 ...

  7. PHP文件包含学习笔记

    看完下面的几篇文章,然后从第8行开始以后的内容可以忽略!此文是个笔记梳理,是对大佬文章简单的COPY记录,方便以后查看,自己只复现了其中的例子 参考文章: PHP文件包含漏洞利用思路与Bypass总结 ...

  8. Linux用户、用户组、文件权限学习笔记

    最近打算更仔细学习一下linux操作系统.先是恶补了一下用户.用户组.文件权限这三样比较重要的知识.学习这几样东西,得先掌握linux的权限系统相关知识.linux的权限系统主要是由用户.用户组和权限 ...

  9. maclean-【性能调优】Oracle AWR报告指标全解析 学习笔记

    原文链接:http://www.askmaclean.com/archives/performance-tuning-oracle-awr.html AWR小技巧 手动执行一个快照: Exec dbm ...

随机推荐

  1. Gogs:可能是比Gitlab更好的选择

    Gitlab是一个很棒的Git托管服务,几乎像GitHub一样强大. 但是,有没有能和Gitlab/Github媲美但操作更简单的项目呢?我认为 Gogs 是很好的选择. 简介 现在,GitHub已经 ...

  2. 研究OpenRisc的高人,几十篇文章

    http://blog.csdn.net/rill_zhen/article/details/8190322 流水线的实现: http://blog.csdn.net/rill_zhen/articl ...

  3. Lua function 函数

    Lua支持面向对象,操作符为冒号‘:’.o:foo(x) <==> o.foo(o, x). Lua程序可以调用C语言或者Lua实现的函数.Lua基础库中的所有函数都是用C实现的.但这些细 ...

  4. 【HDOJ】1892 See you~

    wa了十次,原来变量名写错.二维树状数组. #include <cstdio> #include <cstring> #define MAXN 1002 int nums[MA ...

  5. 2015第44周六tomcat集群了解

    对于WEB应用集群的技术实现而言,最大的难点就是如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点,大体上有两种方式,一种是把所有Sessi ...

  6. RC滤波器

    1.一阶RC低通滤波器 RC低通滤波器的电路及其幅频.相频特性如下图所示,输入电压为ex,输出电压为ey 其中ζ=RC,截止频率f=1/2πRC. 2.一阶RC高通滤波器 其中ζ=RC,截止频率f=1 ...

  7. [转载]jQuery.extend 函数详解

    JQuery的extend扩展方法:      Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解.      一.Jquery的扩展方 ...

  8. zabbix2.2.3 VMware Vsphere exsi监控配置步骤

    zabbix2.2.3 VMware Vsphere exsi监控配置步骤, 1,添加监控主机 2,添加聚集macro;{$PASSWORD} = yoodo.com{$URL} = http://i ...

  9. Java+protobuf 实例

    之前开发都是JSON格式, 据说用这种格式的 安全, 输入输出全是二进制文件,且 数据占用内存小. 主要永远移动端数据传送.以下是代码: controller: 请求的是实体: package cn. ...

  10. OCCI处理CHAR类型字符串变量的不同

    问题背景: 一个旧应用,原先应用是用proc写的,9i的库,如今应用须要改为使用OCCI,当中有一段查询逻辑:select ... where upper(state)=upper(:1). (此处请 ...