apk文件解析,学习笔记
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文件解析,学习笔记的更多相关文章
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- Android APK安装过程学习笔记
1.什么是APK APK,即Android Package,Android安装包.不同平台的安装文件格式都不同,类似于Windows的安装包是二进制的exe格式,Mac的安装包是dmg格式.APK可以 ...
- python的文件处理学习笔记
python的文件处理函数是open() 以下主要是关于这个函数的一些学习笔记 1.文件处理离不开编码 要注意的是文件打开时的编码和文件保存时的编码的统一,这样才能保证你打开的文件不会存在乱码 总结: ...
- C# IO流与文件读写学习笔记
本笔记摘抄自:https://www.cnblogs.com/liyangLife/p/4797583.html,记录一下学习过程以备后续查用. 一.文件系统 1.1文件系统类的介绍 文件操作类大都在 ...
- 干货分享:互联网运营 学习SEO从零开始 SEO深度解析学习笔记
最近在自学SEO,互联网运营,把做的笔记干货分享给大家啊! 希望能帮到大家,如有好的建议可以关注我[磨人的小妖精]或留言,大家一起探讨. 之前还写过一篇文章互联网运营+SEO:推荐必看的5本书籍,学习 ...
- react 详细解析学习笔记
React的介绍: React来自于Facebook公司的开源项目 React 可以开发单页面应用 spa(单页面应用) react 组件化模块化 开发模式 React通过对DOM的模拟 ...
- PHP文件包含学习笔记
看完下面的几篇文章,然后从第8行开始以后的内容可以忽略!此文是个笔记梳理,是对大佬文章简单的COPY记录,方便以后查看,自己只复现了其中的例子 参考文章: PHP文件包含漏洞利用思路与Bypass总结 ...
- Linux用户、用户组、文件权限学习笔记
最近打算更仔细学习一下linux操作系统.先是恶补了一下用户.用户组.文件权限这三样比较重要的知识.学习这几样东西,得先掌握linux的权限系统相关知识.linux的权限系统主要是由用户.用户组和权限 ...
- maclean-【性能调优】Oracle AWR报告指标全解析 学习笔记
原文链接:http://www.askmaclean.com/archives/performance-tuning-oracle-awr.html AWR小技巧 手动执行一个快照: Exec dbm ...
随机推荐
- ShareSDK(iOS版)开发实践:自定义授权视图和分享视图导航栏
最近很多人问ShareSDK的授权视图和分享视图的导航栏样式与应用风格不一致,能否修改导航栏的样式?那么这里我就2.6.1版本进行说明(还在使用1.x版本的朋友建议升级到2.x版本,在新版本中可定制的 ...
- JSON和XML:不可同日而语
[编者按]本文作者 Yegor Bugayenko 是 Teamed.io 公司的联合创始人,在软件质量和工程管理方法领域有深入的研究.本文中,作者通过对比 JSON ,向大家更详细地阐述了 XML ...
- Katu Puzzle
poj3678:http://poj.org/problem?id=3678 题意:给你一些数,然后这些要么是0要么是1,然后回给出一些数之间的and,or,xor的值,问你是否存在一组解. 题解:2 ...
- [topcoder]UnsealTheSafe
http://community.topcoder.com/stat?c=problem_statement&pm=4471&rd=10711 这题果然是道简单题,图+DP.拿道题便觉 ...
- Android MAVEN项目标准目录结构
1.标准目录结构: src -main –bin 脚本库 –java java源代码文件 –resources 资源库,会自动复制到classes目录里 –fi ...
- 译文: async/await SynchronizationContext 上下文问题
async / await 使异步代码更容易写,因为它隐藏了很多细节. 许多这些细节都捕获在 SynchronizationContext 中,这些可能会改变异步代码的行为完全由于你执行你的代码的环境 ...
- Apache HBase RPC身份验证中间人安全措施绕过漏洞(CVE-2013-2193)
漏洞版本: Apache Group HBase 0.94.x Apache Group HBase 0.92.x 漏洞描述: BUGTRAQ ID: 61981 CVE(CAN) ID: CVE-2 ...
- 怎么打开Windows Server 2008 图片预览的功能?
打开一个文件夹,点击菜单中的“工具”->“文件夹选项”,切换到“查看”选项卡,在高级设置中取消如下选项: “始终显示图标,从不显示缩略图” “在缩略图上显示文件图标”
- C#中的四舍五入算法
最近在产品开发过程中遇到一个问题,就是在对数值进行截取,例如说保留两位小数时,最终得到的结果跟预期的在某些情况下会产生差异,这个差异的表现就是最后一位与预期的不一致,也就是说在"四舍五入&q ...
- 工作总结之动画与VR
一.Unity5的动画新特性: 1.animator controller默认就包含Any State.Entry.Exit三个状态 2.animator可以给每个动画片段添加脚本,该脚本继承 Sta ...