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="1073741824" executionTimeout="3600" />
</system.web>

<system.webServer>
<security>
<requestFiltering>

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

 

 

转载于:https://www.cnblogs.com/jiaqichinese/p/3594354.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值