跟上一篇类似,我们也需要对APK的一些诸如umengkey,ADkey,TalkingData进行验证,那么我们同样需要解压apk文件,然后提取其中的AndroidManifest.xml。然后解析xml对内容进行分析对比。

  1.解压apk文件

if (Path.GetExtension(filePath).Equals(".apk"))
{// 获取应用名称String appName = Path.GetFileNameWithoutExtension(filePath);// 导出目录String outPath = "tempandroid\\" + appName;// 创建解压流ZipInputStream s = new ZipInputStream(File.OpenRead(filePath));String AndroidManifestName = "AndroidManifest.xml";ZipEntry theEntry;bool found = false;while ((theEntry = s.GetNextEntry()) != null){Console.WriteLine(theEntry.Name);// 获取解压文件名string fileName = Path.GetFileName(theEntry.Name);// 遍历查找配置文件if (AndroidManifestName != null){if (fileName.Equals(AndroidManifestName)){found = true;if (outPath.Length > 0){Directory.CreateDirectory(outPath);}using (FileStream streamWriter = File.Create(outPath + "\\" + AndroidManifestName)){int size = 2048;byte[] data = new byte[2048];while (true){size = s.Read(data, 0, data.Length);if (size > 0){streamWriter.Write(data, 0, size);}else{break;}}streamWriter.Flush();streamWriter.Close();// 执行解密操作,由于签名的xml必须解密,不然是二进制文件String execString = "java -jar " + decodeXmljar + " " + outPath + "\\" + AndroidManifestName + " > " + outPath + "\\AndroidManifest2.xml";runcommand(execString);// 执行文件替换操作Thread.Sleep(3000);File.Delete(outPath + "\\" + AndroidManifestName);File.Move(outPath + "\\AndroidManifest2.xml", outPath + "\\" + AndroidManifestName);}break;}}}s.Close();if (found == false){logAppend(appName + "------- 无效", false, false);logAppend(Environment.NewLine, false, false);}
}

  2.解压出来的xml文件是二进制文件,必须要解密,用的是AXMLPrinter2.jar,具体实现如下

private String decodeXmljar = "AXMLPrinter2.jar";// 执行解密操作
String execString = "java -jar " + decodeXmljar + " " + outPath + "\\" + AndroidManifestName + " > " + outPath + "\\AndroidManifest2.xml";
runcommand(execString);
//执行文件替换操作
Thread.Sleep(3000);
File.Delete(outPath + "\\" + AndroidManifestName);
File.Move(outPath + "\\AndroidManifest2.xml", outPath + "\\" + AndroidManifestName);/*** 运行命令* */
private void runcommand(String command)
{Process p = new Process();p.StartInfo.FileName = "cmd.exe";p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardOutput = true;p.StartInfo.RedirectStandardError = true;p.StartInfo.CreateNoWindow = true;p.StartInfo.WorkingDirectory = Application.StartupPath;try{p.Start();Console.WriteLine("command:" + command + " &exit");p.StandardInput.WriteLine(command);p.StandardOutput.Close();p.Close();}catch (Exception e1){Console.WriteLine("error" + e1.Message);}
}

  3.解密文件后,我们就可以使用xml读取去处理,这边我们引用的包是System.Xml,C#自带

XmlDocument doc = new XmlDocument();
// 加载Xml文件
doc.Load(pathInfo);
// 获取根节点
XmlElement rootElem = doc.DocumentElement;
// 获取person子节点集合
XmlNodeList metadatanodes = rootElem.GetElementsByTagName("meta-data");
String appKey = rootElem.GetAttribute("package");
String mangguokey  = "";
String talkingData = "";
String umengKey    = "";
String qihuKey     = "";
foreach (XmlNode metadatanode in metadatanodes)
{if(metadatanode.NodeType == XmlNodeType.Element){XmlElement nodeelement = (XmlElement)metadatanode;String name = nodeelement.GetAttribute("android:name");if("UMENG_APPKEY".Equals(name)){umengKey = nodeelement.GetAttribute("android:value");}else if("TD_APP_ID".Equals(name)){talkingData = nodeelement.GetAttribute("android:value");}else if("MANGO_ID".Equals(name)){mangguokey  = nodeelement.GetAttribute("android:value");}else if ("QH_360_ID".Equals(name)){qihuKey = nodeelement.GetAttribute("android:value");}}
}

  综合以上三步,我们可以很简单的提取到xml中的信息进行比对。

结语

  • 受益,学会了提取apk中的AndroidManifest.xml中的信息

本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 )

转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4528708.html

转载于:https://www.cnblogs.com/superdo/p/4528708.html

[工具-004]如何从apk中提取AndroidManifest.xml并提取相应信息相关推荐

  1. apk解压后查看 AndroidManifest.xml 文件内容,解决乱码问题

    解决方案一. 一般对于我来说如果需要知道一个apk的包名的话,有两种比较快速的方式: (1)使用命令:aapt dump badging xxx.apk ,一般是apk就在电脑上,使用比较方便. (2 ...

  2. Android动态部署六:如何从插件apk中启动BroadcastReceiver和ContentProvider

    转载请注明出处:http://blog.csdn.net/ximsfei/article/details/51083464 github地址:https://github.com/ximsfei/Dy ...

  3. androidmanifest.xml文件

    文章目录 参考资料 免责说明 概述 文件主要功能(TBD) 软件包名称和应用ID(TBD) 应用组件 权限(TBD) 设备兼容性(TBD) 文件约定 元素 属性 多个值 资源值(TBD) 字符串值 清 ...

  4. Android学习之AndroidManifest.xml

    概述 每个应用项目必须在项目源设置的根目录中加入 AndroidManifest.xml 文件(且必须使用此名称). 清单文件会向 Android 构建工具.Android 操作系统和 Google ...

  5. AndroidManifest.xml文件详解

    更多原文,请见:http://mobile.51cto.com/aprogram-340646.htm AndroidManifest.xml文件是Android系统重要的权限申请和定义配置文件,程序 ...

  6. Qt for Android创建AndroidManifest.xml和Java类文件

    前言 随着Qt的不断升级,如今用Qt来做跨平台开发也越来越方便,特别是Qt5.0版本以后加大了对Qt Quick的拓展,用QML来开发移动端的应用非常简单,并且支持的库也越来越多. 今天要讲的是Qt开 ...

  7. PMS解析AndroidManifest.xml文件的过程

    一.前言 ​      前段时间在看当下主流的安卓插件化技术原理的时候,发现目前插件化技术对于四大组件的处理基本都是通过代理来实现的(动态注册的广播接收器除外).简单说就是需要先在主包里预埋一个注册在 ...

  8. 【工具】统计jar包和apk中的java方法数

    2019独角兽企业重金招聘Python工程师标准>>> [工具]统计jar包和apk中的java方法数 :http://www.baidufe.com/item/5891ec6f73 ...

  9. 提取APK中的URL地址

    一.目的   客户端渗透测试前期信息收集过程中可以在APK中检索开发过程中没有删掉的URL地址,在这些地址中可能会发现后台.搜索引擎.子域名查找不到的一些资源. 二.操作 这里我使用任意一款APP进行 ...

最新文章

  1. 剑指offer:面试题33. 二叉搜索树的后序遍历序列
  2. 从0到1思考与实现iOS-Widget
  3. Java synchronized 和 volatile 的区别
  4. linux通过tftp下载的文件大小为0,linux 通过 tftp下载文件
  5. 大白话5分钟带你走进人工智能 - 第二十一节 牛顿法和L-BFGS求函数最优解
  6. 值得收藏的Redis基础总结
  7. 2018中国十大科技进展公布!两院院士投票,港珠澳大桥和天河三号上榜
  8. oracle vm virtualbox无网络连接_VirtualBox 安装 Windows 2000/XP 测试
  9. 怎么用python移动文件夹
  10. 用Java实现信号量机制
  11. 第三方包的安装及管理
  12. 我国三大常用坐标系:北京54、西安80和WGS-84
  13. cadence使用教程
  14. 位、字节、字、字长的概念以及存储单位的的换算
  15. android连不上电脑,安卓手机USB数据线连接不上电脑的最佳解决方法
  16. 家用监控摄像机录制视频上的时间水印有什么用
  17. 庄子 泛若不系之舟,虚而遨游者也。
  18. 记疫情无聊时对老师答题网站的一次渗透(1)
  19. 人生遐思:所谓的人生到底是什么呢
  20. 如何将网站制作成自己app

热门文章

  1. QT关于Excel的操作
  2. 【520有奖征文】 老同学聚会,20年IT行业从业感悟
  3. js 隐藏滚动条_轻量级 React.js 虚拟美化滚动条组件RScroll
  4. 在Keil中利用AStyle插件格式化代码
  5. Deformable ConvNets自己的理解
  6. 驱动中定时器,taskle,工作队列编程
  7. 一文详解LDA主题模型
  8. 吴恩达深度学习4.1笔记_Convolutional Neural Networks_卷积神经网络基础
  9. zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)
  10. Redis Cluster 集群扩容与收缩