/// <summary> /// 得到APK的版本信息 /// </summary> /// <param name="apk">程序的名称</param> /// <returns></returns> public ActionResult Version(String apk) { StringBuilder sb = new StringBuilder(); sb.Append("<?xml version='1.0' encoding='utf-8'?>"); sb.Append("<info>"); ApkInfo ai = GetNewApk(apk, null); if (ai != null) { String sBasePath = System.Web.Configuration.WebConfigurationManager.AppSettings["DownUrl"]; sb.Append("<versioncode>" + ai.versioncode + "</versioncode>"); sb.Append("<version>" + ai.versionname + "</version>"); sb.Append("<url><![CDATA[" + sBasePath + RouteData.Values["Controller"] + "/HqlsAppDn?apk=" + ai.appname.Replace(".apk", "") + "&version=" + ai.versionname + "]]></url>"); sb.Append("<description><![CDATA[检查到新版本,请及时升级]]></description>"); sb.Append("<debug>"); foreach (ApkDebugInfo ad in ai.ApkDebugInfo) { sb.Append("<item><![CDATA[" + ad.DebugItem.Trim() + "]]></item>"); } sb.Append("</debug>"); sb.Append("<permissions>"); foreach (ApkPermission ap in ai.ApkPermission) { sb.Append("<permission>" + ap.permission + "</permission>"); } sb.Append("</permissions>"); } sb.Append("</info>"); return(Content(sb.ToString(), "text/xml")); }
private ApkInfo GetAndroidInfo(string path) { byte[] manifestData = null; byte[] resourcesData = null; string manifestPath = SearchPathToFile("AndroidManifest.xml", path); if (manifestPath == "") { Logger.WriteLog("Cannot search AndroidManifest.xml file", LogLevel.Usual); return(null); } string resourcesPath = SearchPathToFile("resources.arsc", path); if (resourcesPath == "") { Logger.WriteLog("Cannot search resources.arsc file", LogLevel.Usual); return(null); } manifestData = File.ReadAllBytes(manifestPath); resourcesData = File.ReadAllBytes(resourcesPath); if (manifestData == null || resourcesData == null) { return(null); } ApkReader apkReader = new ApkReader(); ApkInfo info = apkReader.extractInfo(manifestData, resourcesData); Logger.WriteLog("Get android info from archive", LogLevel.Usual); return(info); }
private ApkInfo GetAndroidInfo(string pathDirectoryAPK) { if (!string.IsNullOrEmpty(pathDirectoryAPK)) { string manifestPath = SearchPathToFile("AndroidManifest.xml", pathDirectoryAPK); if (!string.IsNullOrEmpty(manifestPath)) { string resourcesPath = SearchPathToFile("resources.arsc", pathDirectoryAPK); if (!string.IsNullOrEmpty(resourcesPath)) { byte[] manifestData = File.ReadAllBytes(manifestPath); byte[] resourcesData = File.ReadAllBytes(resourcesPath); if (manifestData != null || resourcesData != null) { ApkReader apkReader = new ApkReader(); ApkInfo info = apkReader.extractInfo(manifestData, resourcesData); Log.Info("Get android info from archive."); return(info); } } else { Log.Error("Can't search resources.arsc file."); } } else { Log.Error("Can't search AndroidManifest.xml file."); } } return(null); }
public ApkInfoForm(ApkInfo apkInfo) { InitializeComponent(); mApkInfo = apkInfo; refreshUI(); }
private void btnSelect_Click(object sender, EventArgs e) { rtbInfo.Text = ""; bool flag = openFileDialogeFunc(); if (flag) { fileIsSelected = true; foreach (string file in ofdApk.FileNames) { apkSelected = ofdApk.FileName; apkSelectedFileName = ofdApk.SafeFileName; var readApk = new Apk_Reader(); file_info = readApk.Get_File_Info(file); panel1.Visible = true; lblAppInfo.Visible = true; lblAppInfo.Text = "APK Name: " + file_info.apkName + "\n" + "APK Version: " + file_info.versionName + "\n"; } /*string[] apkSelected2 = ofdApk.FileNames; * int i = 0; * foreach (string str in apkSelected2) * { * i++; * long lengthApk = new System.IO.FileInfo(str).Length; * string retSize = humanReadableConvert(lengthApk); * rtbInfo.Text = rtbInfo.Text + "\nSuccesful Select[" + i + "]" + ":\n" + * "\t>> Apk Path: " + str + "\n" + * "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "; * }*/ } }
private ApkInfo GetNewApk(String apk, String version, String ext) { ApkInfo ai = null; if (apk == null) { apk = "HQLSApp" + ext; } else { apk += ext; } PhoneAppsDataClassesDataContext padc = new PhoneAppsDataClassesDataContext(); var qry = from e in padc.ApkInfo where e.appname == apk select e; if (version != null) { qry = qry.Where(e1 => e1.versionname == version); } qry = qry.OrderByDescending(eodrd => eodrd.appname).OrderByDescending(eodrid1 => eodrid1.versioncode).Take(1); if (qry != null && qry.Count() > 0) { ai = qry.ToArray()[0]; } return(ai); }
public string GetAPKPackageName(String apk) { this.Dispatcher.Invoke(() => { txtbox.AppendText("\n\nGetting APK package name"); }); Stopwatch s = Stopwatch.StartNew(); ApkReader apkReader = new ApkReader(); ApkInfo info = new ApkInfo(); try { ZipArchive a = ZipFile.OpenRead(apk); a.GetEntry("AndroidManifest.xml").ExtractToFile(exe + "Androidmanifest.xml", true); a.GetEntry("resources.arsc").ExtractToFile(exe + "resources.arsc", true); info = apkReader.extractInfo(File.ReadAllBytes(exe + "AndroidManifest.xml"), File.ReadAllBytes(exe + "resources.arsc")); } catch (Exception e) { this.Dispatcher.Invoke(() => { txtbox.AppendText("\n\nAn Error occured while getting the APK Version:\n" + e.ToString() + "\n\nYour APK may be corrupted.Please get a fresh copy of it and try again. If you used Auto downgrade then try again."); txtbox.ScrollToEnd(); }); }; this.Dispatcher.Invoke(() => { s.Stop(); txtbox.AppendText("\nGot APK package name (" + info.packageName + ") in " + s.ElapsedMilliseconds + " ms"); txtbox.ScrollToEnd(); }); return(info.packageName); }
static void Main(string[] args) { Console.WriteLine("Enter Path"); string APKfilePath = Console.ReadLine(); ApkInfo info = ReadApk.ReadApkFromPath(APKfilePath); Console.ReadKey(); }
private static void AnalyzeReport(ApkInfo info, string apkLocation) { string apkName = apkLocation.Split(new[] { "/" }, StringSplitOptions.None).Last(); var builder = new StringBuilder(); builder.AppendLine("{color:#fc035e}*" + $"Release V{PlayerSettings.bundleVersion}" + "*{color} " + $"[^{apkName}]"); //builder.AppendLine("{color:#fc035e}*" + $"Release V{PlayerSettings.bundleVersion}" + "*{color} " + $"[^{buildData.GetApkName}]"); builder.AppendLine($""); builder.AppendLine("{panel:title=Manifest Info|borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1|bgColor=#FFFFCE}"); builder.AppendLine($"* Name = *{info.label}*"); builder.AppendLine($"* packageID = {SetColorForBool(info.packageName,info.packageName.Equals("app.lustigovich.testadjusti"), false)}"); builder.AppendLine($"* appVersion = *{info.versionCode}*"); builder.AppendLine($"* minSdkVersion = {info.minSdkVersion}"); builder.AppendLine($"* targetSdkVersion = {SetColorForBool(info.targetSdkVersion,Int32.Parse(info.targetSdkVersion) >= 30)}"); builder.AppendLine($"* debuggable = {SetColorForBool(info.IsDebuggable, false)}"); builder.AppendLine($"* AdjustAvailable = {SetColorForBool(info.adjustAvailable)}"); builder.AppendLine($"* hasIcon = {SetColorForBool(info.hasIcon)}"); builder.AppendLine($"* screenOrientation = {Enum.Parse(typeof(AndroidScreenOrientation),info.screenOrientation)}"); builder.AppendLine($"* Permissions"); foreach (string permission in info.permissions) { builder.AppendLine($"** {permission}"); } builder.AppendLine($"* keysHash"); builder.AppendLine($"** {info.keysHash[0]}"); builder.Append($"** {info.keysHash[1]}"); builder.AppendLine("{panel}"); builder.AppendLine("{panel:title=Unity Settings|borderStyle=dashed|borderColor=#ccc|titleBGColor=#ACAEEB|bgColor=#D9E0FD}"); builder.AppendLine($"* productName = *{PlayerSettings.productName}*"); builder.AppendLine($"* companyName = {PlayerSettings.companyName}"); builder.AppendLine($"* appVersion = *{PlayerSettings.bundleVersion}*"); builder.AppendLine($"* packageID=*{SetColorForString(PlayerSettings.applicationIdentifier, "app.lustigovich.testadjusti", false)}*"); builder.AppendLine($"* minSdkVersion = {PlayerSettings.Android.minSdkVersion}"); builder.AppendLine($"* targetSdkVersion = {PlayerSettings.Android.targetSdkVersion}"); builder.AppendLine($"* scriptingBackend = {PlayerSettings.GetScriptingBackend(BuildTargetGroup.Android)}"); builder.AppendLine($"* targetArchitectures = {SetColorForEnum(PlayerSettings.Android.targetArchitectures, AndroidArchitecture.ARM64)}"); builder.AppendLine($"* debug = {SetColorForBool(EditorUserBuildSettings.development, false)}"); builder.AppendLine($"* useCustomKeystore = {SetColorForBool(PlayerSettings.Android.useCustomKeystore)}"); builder.AppendLine($"* keystoreName = {PlayerSettings.Android.keystoreName}"); builder.AppendLine($"* keystorePass = {PlayerSettings.Android.keystorePass}"); builder.AppendLine($"* keyaliasName = {PlayerSettings.Android.keyaliasName}"); builder.AppendLine($"* keyaliasPass = {PlayerSettings.Android.keyaliasPass}"); builder.Append($"* screenOrientation = {PlayerSettings.defaultInterfaceOrientation}"); builder.AppendLine("{panel}"); //string fileName = $"{GetFullApkPath(buildData, saveFolder)}.txt"; string fileName = $"{apkLocation}.txt"; WriteReport(fileName, builder); EditorUtility.RevealInFinder(fileName); }
public void GetAPKBuildWithInfo(string pathDirectoryAPK, ref Build apk) { if (!string.IsNullOrEmpty(pathDirectoryAPK) && apk != null) { ApkInfo info = GetAndroidInfo(pathDirectoryAPK); apk.buildName = info.packageName; apk.urlIcon = apk.buildHash + info.iconFileName[0]; apk.version = info.versionName; apk.numberBuild = info.targetSdkVersion; apk.bundleIdentifier = info.label; } }
private void SelectAPK(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); packageNameLBL.Text = "Package Name: LENDO ARQUIVO"; openFileDialog1.Filter = "APK Files|*.APK"; openFileDialog1.Title = "Selecione um arquivo .APK"; if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { NomeAPK = openFileDialog1.FileName; using (ICSharpCode.SharpZipLib.Zip.ZipInputStream zip = new ICSharpCode.SharpZipLib.Zip.ZipInputStream(File.OpenRead(openFileDialog1.FileName))) { using (var filestream = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read)) { ICSharpCode.SharpZipLib.Zip.ZipFile zipfile = new ICSharpCode.SharpZipLib.Zip.ZipFile(filestream); ICSharpCode.SharpZipLib.Zip.ZipEntry item; try { while ((item = zip.GetNextEntry()) != null) { if (item.Name.ToLower() == "androidmanifest.xml") { manifestData = new byte[50 * 1024]; using (Stream strm = zipfile.GetInputStream(item)) { strm.Read(manifestData, 0, manifestData.Length); } } if (item.Name.ToLower() == "resources.arsc") { using (Stream strm = zipfile.GetInputStream(item)) { using (BinaryReader s = new BinaryReader(strm)) { resourcesData = s.ReadBytes((int)s.BaseStream.Length); } } } } } catch (Exception) { } } } ApkReader apkReader = new ApkReader(); ApkInfo info = apkReader.extractInfo(manifestData, resourcesData); packageNameLBL.Text = "Package Name: " + info.packageName; versionLBL.Text = "Version: " + info.versionName; installAPKBTN.Enabled = true; } }
static void Main(string[] args) { string APKfilePath = @"SampleAPK\ApkReaderSample.apk"; string iconOutputlocation = @"SampleAPK\icons\"; ApkInfo info = ReadApk.ReadApkFromPath(APKfilePath); Directory.CreateDirectory(iconOutputlocation); for (var i = 0; i < info.iconFileName.Count; i++) { ExtractApkFile.ExtractFileAndSave(APKfilePath, info.iconFileName[i], @"SampleAPK\icons\", i); } Console.ReadKey(); }
public App GetAPKSet(string pathAPK, App apk) { ApkInfo info = GetAndroidInfo(pathAPK); if (info == null) { return(apk); } apk.app_name = info.packageName; apk.url_icon = "http://" + Domen + "/YobiApp" + (pathAPK + info.iconFileName[0]).Substring(CurrentDirectory.Length); apk.version = info.versionName; apk.build = info.targetSdkVersion; apk.bundleIdentifier = info.label; return(apk); }
private void LoadedAPKFile(object sender, CancelEventArgs e) { ApkPath.Text = openApkFile.FileName; try { Info = APKParser.ApkParser.Parse(openApkFile.FileName); } catch (Exception ex) { MessageBox.Show(ex.Message, "Can't read apk data"); } AppDetails.Content = $"Title: {Info.Label + Environment.NewLine}" + $"Package Name: {Info.PackageName + Environment.NewLine}" + $"Version: {Info.VersionName + Environment.NewLine}"; }
/// <summary> /// 解压并读取icon图片 /// </summary> /// <param name="apkInfo"></param> private static void ParseIcon(ref ApkInfo apkInfo) { if (apkInfo == null || string.IsNullOrEmpty(apkInfo.ApkFilePath) || apkInfo.IconDic == null || apkInfo.IconDic.Count <= 0) { return; } string icon = null; int i = 0; // 在多张尺寸的ICON里选择尺寸为240 foreach (KeyValuePair <string, string> kv in apkInfo.IconDic) { if (kv.Key.Contains("240")) { icon = kv.Value; apkInfo.IconName = Path.GetFileName(icon); break; } if (i == apkInfo.IconDic.Count - 1) { icon = kv.Value; apkInfo.IconName = Path.GetFileName(icon); break; } i++; } // 指定解压目录 string unZipPath = PathUtils.GetPath(Constants.DIR_TEMP_ICON); // 清空解压目录 FileUtils.ClearDir(unZipPath); // 解压指定的icon图片文件 ZipUtils.UnZip(apkInfo.ApkFilePath, unZipPath, icon); // 读取解压出来的图片文件 string iconPath = PathUtils.JoinPath(unZipPath, icon); apkInfo.Icon = new Bitmap(iconPath); }
/// <summary> /// 读取APK信息 /// </summary> /// <param name="apkFilePath"></param> /// <returns></returns> public static ApkInfo ReadApkInfo(string apkFilePath) { if (String.IsNullOrEmpty(apkFilePath)) { return(null); } string aaptPath = PathUtils.GetPath(Constants.PATH_AAPT); var startInfo = new ProcessStartInfo(aaptPath); string args = string.Format("dump badging \"{0}\"", apkFilePath); startInfo.Arguments = args; startInfo.UseShellExecute = false; startInfo.RedirectStandardOutput = true; startInfo.CreateNoWindow = true; startInfo.StandardOutputEncoding = Encoding.UTF8; // 读取命令行返回的所有txt文本和字符编码 List <string> lineLst = new List <string>(); using (var process = Process.Start(startInfo)) { var sr = process.StandardOutput; while (!sr.EndOfStream) { lineLst.Add(sr.ReadLine()); } process.WaitForExit(); } ApkInfo apkInfo = new ApkInfo(); apkInfo.ApkFilePath = apkFilePath; apkInfo.CurrentFileName = Path.GetFileName(apkFilePath); apkInfo.AllInfoList = lineLst; // 解析相关的配置参数 ParseTxtFile(ref apkInfo); ParseIcon(ref apkInfo); ParseAssetsConfig(ref apkInfo); return(apkInfo); }
public JsonResult GetApkInfos() { var scheme = Request.Url.Scheme; var root = Request.Url.Authority; var currentSUrl = $"{scheme}://{root}"; var path = Server.MapPath("~/Apks"); if (!Directory.Exists(path)) { return(null); } var url = Request.Url; DirectoryInfo dinfo = new DirectoryInfo(path); FileInfo[] finfos = dinfo.GetFiles(); var lstRes = new List <ApkInfo>(); foreach (var fileInfo in finfos) { var temp = $"{currentSUrl}/Apks/{fileInfo.Name}"; // var encry = Des3Util.encrypt("chainway", temp); var oModel = new ApkInfo { Id = Guid.NewGuid().ToString(), Name = fileInfo.Name, Size = $"{fileInfo.Length/1024/1024}mb" , UploadDate = fileInfo.CreationTime.ToShortDateString(), Uri = $"{currentSUrl}/Apks/{fileInfo.Name}" }; lstRes.Add(oModel); } // for (var i = 0; i < 50; i++) // { // var oModel = new ApkInfo {Id = Guid.NewGuid().ToString(), Name = "Apk" + i,Size=$"{(i+1)*1024}kb",UploadDate=DateTime.Now.AddHours(5).ToShortDateString(),Uri= Request.Url.ToString() }; // // lstRes.Add(oModel); // } // var total = lstRes.Count; // var rows = lstRes.Skip(offset).Take(limit).ToList(); // return Json(new { total = total, rows = rows }, JsonRequestBehavior.AllowGet); return(Json(lstRes, JsonRequestBehavior.AllowGet)); }
public static ApkInfo ReadApkFromPath(string path) { NativeMethods.Log("ReadApkFromPath: " + path); byte[] manifestData = null; byte[] resourcesData = null; using (ICSharpCode.SharpZipLib.Zip.ZipInputStream zip = new ICSharpCode.SharpZipLib.Zip.ZipInputStream(File.OpenRead(path))) { using (var filestream = new FileStream(path, FileMode.Open, FileAccess.Read)) { ICSharpCode.SharpZipLib.Zip.ZipFile zipfile = new ICSharpCode.SharpZipLib.Zip.ZipFile(filestream); ICSharpCode.SharpZipLib.Zip.ZipEntry item; while ((item = zip.GetNextEntry()) != null) { if (item.Name.ToLower() == "androidmanifest.xml") { manifestData = new byte[50 * 1024]; using (Stream strm = zipfile.GetInputStream(item)) { strm.Read(manifestData, 0, manifestData.Length); } } if (item.Name.ToLower() == "resources.arsc") { using (Stream strm = zipfile.GetInputStream(item)) { using (BinaryReader s = new BinaryReader(strm)) { resourcesData = s.ReadBytes((int)s.BaseStream.Length); } } } } } } ApkReader apkReader = new ApkReader(); ApkInfo info = apkReader.extractInfo(manifestData, resourcesData); return(info); }
private static void RenameApk(string apkPath, string pattern, string directory) { ApkInfo apkInfo = null; try { apkInfo = ReadApk.ReadApkFromPath(apkPath); } catch (Exception e) { Console.WriteLine(e); PrintHelp(); Environment.Exit(-1); } pattern = pattern.Replace("|label|", apkInfo.label); pattern = pattern.Replace("|application-name|", apkInfo.label); pattern = pattern.Replace("|name|", apkInfo.label); pattern = pattern.Replace("|version-name|", apkInfo.versionName); pattern = pattern.Replace("|version-code|", apkInfo.versionCode); pattern = pattern.Replace("|package-name|", apkInfo.packageName); foreach (string invalidChar in InvalidChars) { pattern = pattern.Replace(invalidChar, " "); } string newApkPath = Path.Combine(directory, pattern); try { File.Move(apkPath, newApkPath); Console.Write("{0} => {1}\n", apkPath, newApkPath); } catch (Exception e) { Console.WriteLine(e); PrintHelp(); Environment.Exit(-1); } }
/// <summary> /// 程序升级地址 /// </summary> /// <param name="apk">程序的名称</param> /// <param name="version">程序版本</param> public void HqlsAppDn(String apk, String version, String ext) { ext = ext == null ? "apk" : ext; if (Request.ServerVariables["HTTP_USER_AGENT"].IndexOf("MicroMessenger") >= 0) { Response.ContentType = "text/html"; String strPath = Server.MapPath("../syapksx.htm"); Response.WriteFile(strPath); Response.End(); } else { ApkInfo ai = GetNewApk(apk, version, "." + ext); if (ai != null) { Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=\"" + ai.appname + "\""); Response.BinaryWrite(ai.apk.ToArray()); } } }
public override void getPackage() { ApkInfo apkInfo = ReadApkFromPath(FileName); UsesPermissions = new ArrayList(); UsesFeatures = new ArrayList(); PackageName = apkInfo.packageName; VersionCode = apkInfo.versionCode; VersionName = apkInfo.versionName; Label = apkInfo.label; hasIcon = apkInfo.hasIcon; if (apkInfo.iconFileName.Count > 0) { IconPath = apkInfo.iconFileName[0]; } foreach (string s in apkInfo.Permissions) { UsesPermissions.Add(s); } }
public override ApkInfo getAPK() { var apk = new ApkInfo(); if (msg.Contains(SmallScreen)) { apk.SupportScreens.Add(SmallScreen); } if (msg.Contains(NormalScreen)) { apk.SupportScreens.Add(NormalScreen); } if (msg.Contains(LargeScreen)) { apk.SupportScreens.Add(LargeScreen); } if (msg.Contains(xLargeScreen)) { apk.SupportScreens.Add(xLargeScreen); } return(apk); }
static void Main(string[] args) { Console.WriteLine("Starting Apk Reader ..."); string RunningPath = AppDomain.CurrentDomain.BaseDirectory; string FileName = string.Format("{0}Resources\\cpu-z-1-26.apk", Path.GetFullPath(Path.Combine(RunningPath, @"..\..\"))); Console.WriteLine("Test Apk File Path: " + FileName); var read = new Apk_Reader(); Console.WriteLine("File Size: " + read.showFileSize(FileName)); ApkInfo file_info = read.Get_File_Info(FileName); Console.WriteLine("apkName: " + file_info.apkName); Console.WriteLine("versionName: " + file_info.versionName); Console.WriteLine("packageName: " + file_info.packageName); Console.WriteLine("sdkVersion: " + file_info.sdkVersion); Console.WriteLine("targetSdkVersion: " + file_info.targetSdkVersion); Console.WriteLine("versionCode: " + file_info.versionCode); Console.WriteLine("nativeCode: " + file_info.nativeCode); Console.ReadKey(); }
//拖放完成时 private void ApkInfoForm_DragDrop(object sender, DragEventArgs e) { string apkPath = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString(); if (apkPath.IndexOf(".apk") == -1 && apkPath.IndexOf(".zip") == -1) { MessageBox.Show("请拖入apk"); return; } ApkInfo apk = ReadApk.ReadApkFromPath(apkPath); //获取权限 List <string> Permissions = new List <string>(); Permissions = apk.Permissions; //Permissions = getPermissions(manifestData); //读取APK大小等信息 List <string> listInfo = new List <string>(); listInfo = getInfo(apkPath); if (listInfo.Count != 3) { return; } string iconPath = null; ////显示应用的LOGO Directory.CreateDirectory(strPath); for (var i = 0; i < apk.iconFileName.Count; i++) { iconPath = ExtractApkFile.ExtractFileAndSave(apkPath, apk.iconFileName[i], strPath, i); } if (iconPath.Length > 0) { pictureBox.ImageLocation = iconPath; pictureBox.SizeMode = PictureBoxSizeMode.Zoom; } //名称 apkName.Text = apk.label; //包名 packageName.Text = apk.packageName; //versionCode versionCode.Text = apk.versionCode; //versionName versionCode1.Text = apk.versionName; #region MyRegion Permission.Items.Clear(); //Permissions for (int i = 0; i < Permissions.Count; i++) { if (Permissions[i] == "android.permission.ACCESS_CHECKIN_PROPERTIES") { Permission.Items.Add("允许读写访问数据库"); } if (Permissions[i] == "android.permission.ACCESS_COARSE_LOCATION") { Permission.Items.Add("允许访问CellID或WiFi获取粗略的位置"); } if (Permissions[i] == "android.permission.ACCESS_FINE_LOCATION") { Permission.Items.Add("允许访问精良位置(如GPS)"); } if (Permissions[i] == "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS") { Permission.Items.Add("允许访问额外的位置提供命令"); } if (Permissions[i] == "android.permission.ACCESS_MOCK_LOCATION") { Permission.Items.Add("允许创建模拟位置提供用于测试"); } if (Permissions[i] == "android.permission.ACCESS_NETWORK_STATE") { Permission.Items.Add("允许访问有关GSM网络信息"); } if (Permissions[i] == "android.permission.ACCESS_SURFACE_FLINGER") { Permission.Items.Add("允许使用SurfaceFlinger底层特性"); } if (Permissions[i] == "android.permission.ACCESS_WIFI_STATE") { Permission.Items.Add("允许访问Wi-Fi网络状态信息"); } if (Permissions[i] == "android.permission.ADD_SYSTEM_SERVICE") { Permission.Items.Add("允许发布系统级服务"); } if (Permissions[i] == "android.permission.BATTERY_STATS") { Permission.Items.Add("允许更新手机电池统计信息"); } if (Permissions[i] == "android.permission.BLUETOOTH") { Permission.Items.Add("允许连接到已配对的蓝牙设备"); } if (Permissions[i] == "android.permission.BLUETOOTH_ADMIN") { Permission.Items.Add("允许发现和配对蓝牙设备"); } if (Permissions[i] == "android.permission.BRICK") { Permission.Items.Add("请求能够禁用设备(非常危险)"); } if (Permissions[i] == "android.permission.BROADCAST_PACKAGE_REMOVED") { Permission.Items.Add("允许广播消息在程序包移除后"); } if (Permissions[i] == "android.permission.BROADCAST_STICKY") { Permission.Items.Add("允许广播常用intents"); } if (Permissions[i] == "android.permission.CALL_PHONE") { Permission.Items.Add("允许初始化拨号无需确认"); } if (Permissions[i] == "android.permission.CALL_PRIVILEGED") { Permission.Items.Add("允许拨打任何号码"); } if (Permissions[i] == "android.permission.CAMERA") { Permission.Items.Add("请求访问使用照相设备"); } if (Permissions[i] == "android.permission.CHANGE_COMPONENT_ENABLED_STATE") { Permission.Items.Add("允许是否改变一个组件或其他的启用或禁用"); } if (Permissions[i] == "android.permission.CHANGE_CONFIGURATION") { Permission.Items.Add("允许修改当前设置"); } if (Permissions[i] == "android.permission.CHANGE_NETWORK_STATE") { Permission.Items.Add("允许改变网络连接状态"); } if (Permissions[i] == "android.permission.CHANGE_WIFI_STATE") { Permission.Items.Add("允许改变Wi-Fi连接状态"); } if (Permissions[i] == "android.permission.CLEAR_APP_CACHE") { Permission.Items.Add("允许清楚缓存从所有安装的程序在设备中"); } if (Permissions[i] == "android.permission.CLEAR_APP_USER_DATA") { Permission.Items.Add("允许清除用户设置"); } if (Permissions[i] == "android.permission.CONTROL_LOCATION_UPDATES") { Permission.Items.Add("允许启用禁止位置更新提示从无线模块"); } if (Permissions[i] == "android.permission.DELETE_CACHE_FILES") { Permission.Items.Add("允许删除缓存文件"); } if (Permissions[i] == "android.permission.DELETE_PACKAGES") { Permission.Items.Add("允许程序删除包"); } if (Permissions[i] == "android.permission.DEVICE_POWER") { Permission.Items.Add("允许访问底层电源管理"); } if (Permissions[i] == "android.permission.DIAGNOSTIC") { Permission.Items.Add("允许程序RW诊断资源"); } if (Permissions[i] == "android.permission.DISABLE_KEYGUARD") { Permission.Items.Add("允许程序禁用键盘锁"); } if (Permissions[i] == "android.permission.DUMP") { Permission.Items.Add("允许程序返回状态抓取信息从系统服务"); } if (Permissions[i] == "android.permission.EXPAND_STATUS_BAR") { Permission.Items.Add("允许扩展收缩在状态栏"); } if (Permissions[i] == "android.permission.FACTORY_TEST") { Permission.Items.Add("作为一个测试程序,运行在root用户"); } if (Permissions[i] == "android.permission.FLASHLIGHT") { Permission.Items.Add("访问闪光灯"); } if (Permissions[i] == "android.permission.FORCE_BACK") { Permission.Items.Add("允许程序强行一个后退操作"); } if (Permissions[i] == "android.permission.FOTA_UPDATE") { Permission.Items.Add("预留权限"); } if (Permissions[i] == "android.permission.GET_ACCOUNTS") { Permission.Items.Add("访问帐户列表在Accounts Service中"); } if (Permissions[i] == "android.permission.GET_PACKAGE_SIZE") { Permission.Items.Add("允许获取任何package占用空间容量"); } if (Permissions[i] == "android.permission.GET_TASKS") { Permission.Items.Add("允许程序获取信息"); } if (Permissions[i] == "android.permission.HARDWARE_TEST") { Permission.Items.Add("允许访问硬件"); } if (Permissions[i] == "android.permission.INJECT_EVENTS") { Permission.Items.Add("允许截获用户事件"); } if (Permissions[i] == "android.permission.INSTALL_PACKAGES") { Permission.Items.Add("允许安装packages"); } if (Permissions[i] == "android.permission.INTERNAL_SYSTEM_WINDOW") { Permission.Items.Add("允许打开窗口使用系统用户界面"); } if (Permissions[i] == "android.permission.INTERNET") { Permission.Items.Add("允许打开网络套接字"); } if (Permissions[i] == "android.permission.MANAGE_APP_TOKENS") { Permission.Items.Add("允许程序管理"); } if (Permissions[i] == "android.permission.MODIFY_AUDIO_SETTINGS") { Permission.Items.Add("允许修改全局音频设置"); } if (Permissions[i] == "android.permission.MODIFY_PHONE_STATE") { Permission.Items.Add("允许修改话机状态"); } if (Permissions[i] == "android.permission.MOUNT_UNMOUNT_FILESYSTEMS") { Permission.Items.Add("允许挂载和反挂载系统可移动存储"); } if (Permissions[i] == "android.permission.READ_CALENDAR") { Permission.Items.Add("允许读取用户日历数据"); } if (Permissions[i] == "android.permission.READ_CONTACTS") { Permission.Items.Add("允许读取用户联系人数据"); } if (Permissions[i] == "android.permission.READ_INPUT_STATE") { Permission.Items.Add("允许返回当前按键状态"); } if (Permissions[i] == "android.permission.READ_LOGS") { Permission.Items.Add("允许读取底层系统日志文件"); } if (Permissions[i] == "android.permission.READ_OWNER_DATA") { Permission.Items.Add("允许程序读取所有者数据"); } if (Permissions[i] == "android.permission.READ_SMS") { Permission.Items.Add("允许读取短信息"); } if (Permissions[i] == "android.permission.READ_SYNC_SETTINGS") { Permission.Items.Add("允许读取同步设置"); } if (Permissions[i] == "android.permission.READ_SYNC_STATS") { Permission.Items.Add("允许读取同步状态"); } if (Permissions[i] == "android.permission.REBOOT") { Permission.Items.Add("请求能够重新启动设备"); } if (Permissions[i] == "android.permission.RECEIVE_MMS") { Permission.Items.Add("允许监控将收到MMS彩信"); } if (Permissions[i] == "android.permission.RECEIVE_SMS") { Permission.Items.Add("允许监控短信息"); } if (Permissions[i] == "android.permission.RECORD_AUDIO") { Permission.Items.Add("允许录制音频"); } if (Permissions[i] == "android.permission.RESTART_PACKAGES") { Permission.Items.Add("允许重新启动其他程序"); } if (Permissions[i] == "android.permission.SEND_SMS") { Permission.Items.Add("允许发送SMS短信"); } if (Permissions[i] == "android.permission.SET_DEBUG_APP") { Permission.Items.Add("配置用于调试"); } if (Permissions[i] == "android.permission.SET_PROCESS_FOREGROUND") { Permission.Items.Add("允许当前运行程序强行到前台"); } if (Permissions[i] == "android.permission.SET_TIME_ZONE") { Permission.Items.Add("允许设置时间区域"); } if (Permissions[i] == "android.permission.SET_WALLPAPER") { Permission.Items.Add("允许设置壁纸"); } if (Permissions[i] == "android.permission.STATUS_BAR") { Permission.Items.Add("允许打开、关闭或禁用状态栏及图标"); } if (Permissions[i] == "android.permission.SYSTEM_ALERT_WINDOW") { Permission.Items.Add("允许显示在顶层"); } if (Permissions[i] == "android.permission.VIBRATE") { Permission.Items.Add("允许访问振动设备"); } if (Permissions[i] == "android.permission.WAKE_LOCK") { Permission.Items.Add("保持进程在休眠时从屏幕消失"); } if (Permissions[i] == "android.permission.WRITE_APN_SETTINGS") { Permission.Items.Add("允许写入API设置"); } if (Permissions[i] == "android.permission.WRITE_CALENDAR") { Permission.Items.Add("允许写入但不读取用户日历数据"); } if (Permissions[i] == "android.permission.WRITE_CONTACTS") { Permission.Items.Add("允许写入但不读取用户联系人数据"); } if (Permissions[i] == "android.permission.WRITE_GSERVICES") { Permission.Items.Add("允许修改Google服务地图"); } if (Permissions[i] == "android.permission.WRITE_SETTINGS") { Permission.Items.Add("允许程序读取或写入系统设置"); } if (Permissions[i] == "android.permission.INTERNET") { Permission.Items.Add("允许程序访问网络连接"); } else { Permission.Items.Add(Permissions[i]); } } #endregion //文件名 fileName.Text = apkPath; //md5 textMd5.Text = listInfo[2]; //文件大小 textSize.Text = listInfo[0] + "字节" + "(" + listInfo[1] + "MB)"; this.Refresh(); SetForegroundWindow(this.Handle); }
public async Task CopyAPKToLocalStorage(StorageFile sf) { apkName = sf.Name.Replace(".apk", ""); appsRoot = await localFolder.CreateFolderAsync("Apps", CreationCollisionOption.OpenIfExists); localAppRoot = await appsRoot.CreateFolderAsync(apkName, CreationCollisionOption.GenerateUniqueName); apkName = localAppRoot.Name; StorageFile copiedFile = await sf.CopyAsync(appsRoot, apkName + ".apk"); apkFile = copiedFile; try { ZipFile.ExtractToDirectory(copiedFile.Path, localAppRoot.Path); try { StorageFile manifestFile = await localAppRoot.GetFileAsync("AndroidManifest.xml"); StorageFile resFile = await localAppRoot.GetFileAsync("resources.arsc"); byte[] manifestBytes = await Disassembly.Util.ReadFile(manifestFile); byte[] resBytes = await Disassembly.Util.ReadFile(resFile); ApkReader apkReader = new ApkReader(); ApkInfo appinfo = apkReader.extractInfo(manifestBytes, resBytes); metadata = appinfo; appIcon = GetAppIcon(); InvokeLoadEvent(); resFolder = await localAppRoot.GetFolderAsync("res"); //manifest = new Manifest(manifestFile); /*if (localAppRoot.GetFileAsync("apktool.yml") != null) * { * manifest = new Manifest(manifestFile, true); * } * else * { * manifest = new Manifest(manifestFile); * }*/ //manifest = new Manifest(manifestFile); //StorageFile resFile = await localAppRoot.GetFileAsync("resources.arsc"); //resources = new Resources(resFile); } catch (System.IO.FileNotFoundException fnfEx) { var dialog = new MessageDialog($"Not a valid APK file. Please try a different APK file. \n\n{fnfEx.Message}"); await dialog.ShowAsync(); //Provided APK is not valid, purge from app data await localAppRoot.DeleteAsync(); await copiedFile.DeleteAsync(); //Go home return; } } catch (Exception ex) { Debug.WriteLine(ex.InnerException); } //Debug.WriteLine(localAppRoot.Path); //StorageFile manifestFile = await localAppRoot.GetFileAsync("AndroidManifest.xml"); //manifest = new Manifest(manifestFile); }
public async Task GetAPKInfoFromLocalAppFolder() { StorageFile manifestFile = await localAppRoot.GetFileAsync("AndroidManifest.old"); StorageFile resFile = await localAppRoot.GetFileAsync("resources.arsc"); resFolder = await localAppRoot.GetFolderAsync("res"); byte[] manifestBytes = await Disassembly.Util.ReadFile(manifestFile); byte[] resBytes = await Disassembly.Util.ReadFile(resFile); ApkReader apkReader = new ApkReader(); ApkInfo appinfo = apkReader.extractInfo(manifestBytes, resBytes); metadata = appinfo; appIcon = GetAppIcon(); //dexNet dexWriter = new EnhancedDexWriter(); //dexWriter = new PlainDexWriter(); StorageFile dexFile = await localAppRoot.GetFileAsync("classes.dex"); byte[] dexBytes = await Disassembly.Util.ReadFile(dexFile); MemoryStream dexStream = new MemoryStream(dexBytes); dex = new Dex(dexStream); dexWriter.dex = dex; //dexWriter.dex.GetMethod(). var methods = dexWriter.dex.GetClasses(); foreach (Class m in methods) { Debug.WriteLine(m.ToString()); if (m.Name.Equals("com.example.ticom.myapp.MainActivity") || m.Name.Equals("com.example.ticom.myapp.MainActivity$1") || m.Name.StartsWith("com.example.ticom.myapp.R")) { TextWriter tw = new StringWriter(); dexWriter.WriteOutClass(m, ClassDisplayOptions.Fields, tw); Debug.WriteLine(tw.ToString()); foreach (Field f in m.GetFields()) { Debug.WriteLine(f.ToString()); } var meths = m.GetMethods(); foreach (Method x in meths) { //Debug.WriteLine(x.ToString()); Debug.WriteLine(dexWriter.WriteOutMethod(m, x, new Indentation())); if (x.Name.Equals("onCreate") || x.Name.Equals("<init>")) { var opcodes = x.GetInstructions(); foreach (OpCode o in opcodes) { string opCodeString = o.ToString(); Debug.WriteLine(opCodeString); if (opCodeString.Contains("meth@")) { int pos = opCodeString.IndexOf("meth@"); string methId = opCodeString.Substring(pos + 5); uint id = uint.Parse(methId); Method mx = dexWriter.dex.GetMethod(id); Debug.WriteLine("meth name: " + mx.Name + "\n"); } else if (opCodeString.Contains("type@")) { int pos = opCodeString.IndexOf("type@"); string methId = opCodeString.Substring(pos + 5); uint id = uint.Parse(methId); string mx = dexWriter.dex.GetTypeName(id); Debug.WriteLine("type name: " + mx + "\n"); } else if (opCodeString.Contains("field@")) { int pos = opCodeString.IndexOf("field@"); string methId = opCodeString.Substring(pos + 6); uint id = uint.Parse(methId); Field mx = dexWriter.dex.GetField(id); Debug.WriteLine("field info: " + mx.ToString() + "\n"); } //Debug.WriteLine("instruction: " + o.ToString() + "\n"); } } } } } //context = new AstoriaContext(); }
public static ApkInfo ReadApkFromPath(string path) { byte[] manifestData = null; byte[] resourcesData = null; var manifest = "AndroidManifest.xml"; var resources = "resources.arsc"; //读取apk,通过解压的方式读取 using (var zip = ZipFile.Read(path)) { using (Stream zipstream = zip[manifest].OpenReader()) { //将解压出来的文件保存到一个路径(必须这样) using (var fileStream = File.Create(manifest, (int)zipstream.Length)) { manifestData = new byte[zipstream.Length]; zipstream.Read(manifestData, 0, manifestData.Length); fileStream.Write(manifestData, 0, manifestData.Length); } } using (Stream zipstream = zip[resources].OpenReader()) { //将解压出来的文件保存到一个路径(必须这样) using (var fileStream = File.Create(resources, (int)zipstream.Length)) { resourcesData = new byte[zipstream.Length]; zipstream.Read(resourcesData, 0, resourcesData.Length); fileStream.Write(resourcesData, 0, resourcesData.Length); } } } ApkReader apkReader = new ApkReader(); ApkInfo info = apkReader.extractInfo(manifestData, resourcesData); Console.WriteLine(string.Format("Package Name: {0}", info.packageName)); Console.WriteLine(string.Format("Version Name: {0}", info.versionName)); Console.WriteLine(string.Format("Version Code: {0}", info.versionCode)); Console.WriteLine(string.Format("App Has Icon: {0}", info.hasIcon)); if (info.iconFileName.Count > 0) { Console.WriteLine(string.Format("App Icon: {0}", info.iconFileName[0])); } Console.WriteLine(string.Format("Min SDK Version: {0}", info.minSdkVersion)); Console.WriteLine(string.Format("Target SDK Version: {0}", info.targetSdkVersion)); if (info.Permissions != null && info.Permissions.Count > 0) { Console.WriteLine("Permissions:"); info.Permissions.ForEach(f => { Console.WriteLine(string.Format(" {0}", f)); }); } else { Console.WriteLine("No Permissions Found"); } Console.WriteLine(string.Format("Supports Any Density: {0}", info.supportAnyDensity)); Console.WriteLine(string.Format("Supports Large Screens: {0}", info.supportLargeScreens)); Console.WriteLine(string.Format("Supports Normal Screens: {0}", info.supportNormalScreens)); Console.WriteLine(string.Format("Supports Small Screens: {0}", info.supportSmallScreens)); return(info); }
/// <summary> /// 解析TXT文件 /// </summary> /// <param name="apkInfo"></param> private static void ParseTxtFile(ref ApkInfo apkInfo) { if (apkInfo == null) { return; } string s; // 遍历解析各行 foreach (string line in apkInfo.AllInfoList) { if (string.IsNullOrEmpty(line)) { continue; } // 游戏名称 if (line.StartsWith("application-label:")) { string[] ss = line.Split(new char[] { ':' }); if (ss == null || ss.Length <= 1) { continue; } apkInfo.AppName = ss[1].Trim(new char[] { '\'' }); continue; } //package: name='com.test.sdk' versionCode='1' versionName='1.0.0' platformBuildVersionName='6.0-2438415' if (line.Contains("package: name=") && line.Contains("versionCode=") && line.Contains("versionName=")) { //string[] ss = info.Split(new char[]{' '}); string[] ss = Regex.Split(line, "\\s+", RegexOptions.IgnoreCase); if (ss == null || ss.Length < 4) { continue; } // 包名 string[] pp = ss[1].Split(new char[] { '=' }); if (pp == null || pp.Length < 2) { continue; } apkInfo.PackageName = pp[1].Trim(new char[] { '\'' }); // 版本号 pp = ss[2].Split(new char[] { '=' }); if (pp == null || pp.Length < 2) { continue; } apkInfo.VersionCode = pp[1].Trim(new char[] { '\'' }); // 版本名称 pp = ss[3].Split(new char[] { '=' }); if (pp == null || pp.Length < 2) { continue; } apkInfo.VersionName = pp[1].Trim(new char[] { '\'' }); continue; } // 最小SDK版本号 if (line.StartsWith("sdkVersion:")) { string[] ss = line.Split(new char[] { ':' }); if (ss == null || ss.Length <= 1) { continue; } apkInfo.MinSdkVersion = ss[1].Trim(new char[] { '\'' }); continue; } // 最大SDK版本号 if (line.StartsWith("maxSdkVersion:")) { string[] ss = line.Split(new char[] { ':' }); if (ss == null || ss.Length <= 1) { continue; } apkInfo.MaxSdkVersion = ss[1].Trim(new char[] { '\'' }); continue; } // 目标版本号 if (line.StartsWith("targetSdkVersion:")) { string[] ss = line.Split(new char[] { ':' }); if (ss == null || ss.Length <= 1) { continue; } apkInfo.TargetSdkVersion = ss[1].Trim(new char[] { '\'' }); continue; } if (line.StartsWith("densities:")) { string[] ss = line.Split(new char[] { ':' }); if (ss == null || ss.Length <= 1) { continue; } apkInfo.Densities = ss[1].Replace('\'', ' ').Trim(); continue; } if (line.StartsWith("supports-screens:")) { string[] ss = line.Split(new char[] { ':' }); if (ss == null || ss.Length <= 1) { continue; } apkInfo.SupportsScreens = ss[1].Replace('\'', ' ').Trim(); continue; } if (line.StartsWith("uses-permission:")) { string[] ss = line.Split(new char[] { ':' }); if (ss == null || ss.Length <= 1) { continue; } if (!string.IsNullOrEmpty(apkInfo.UsesPermission)) { apkInfo.UsesPermission += "\r\n"; } apkInfo.UsesPermission += ss[1].Replace('\'', ' '); continue; } if (line.StartsWith("uses-feature:")) { string[] ss = line.Split(new char[] { ':' }); if (ss == null || ss.Length <= 1) { continue; } if (!string.IsNullOrEmpty(apkInfo.UsesFeature)) { apkInfo.UsesFeature += "\r\n"; } apkInfo.UsesFeature += ss[1].Replace('\'', ' '); continue; } // icon文件集合 //application-icon-120:'res/drawable-ldpi-v4/ic_launcher.png' //application-icon-160:'res/drawable-mdpi-v4/ic_launcher.png' //application-icon-240:'res/drawable-hdpi-v4/ic_launcher.png' //application-icon-320:'res/drawable-xhdpi-v4/ic_launcher.png' //application-icon-480:'res/drawable-xxhdpi/ic_launcher.png' //application-icon-640:'res/drawable-xxxhdpi/ic_launcher.png' if (line.StartsWith("application-icon")) { if (apkInfo.IconDic == null) { apkInfo.IconDic = new Dictionary <string, string>(); } string[] ss = line.Split(new char[] { ':' }); if (ss == null || ss.Length <= 1) { continue; } if (!apkInfo.IconDic.ContainsKey(ss[0])) { apkInfo.IconDic.Add(ss[0], ss[1].Trim(new char[] { '\'' })); } continue; } } }
/// <summary> /// 根据用户配置读取assets目录下的文件参数 /// </summary> /// <param name="apkInfo"></param> private static void ParseAssetsConfig(ref ApkInfo apkInfo) { if (apkInfo == null || string.IsNullOrEmpty(apkInfo.ApkFilePath)) { return; } List <AssetsConfig> configList = ConfigUtils.ReadUserConfig(); if (configList == null || configList.Count <= 0) { return; } StringBuilder sb = new StringBuilder(); // 根据用户配置,遍历解压指定文件,并根据配置读取指定参数 foreach (AssetsConfig config in configList) { if (string.IsNullOrEmpty(config.FileName)) { continue; } // 指定解压目录 string unZipPath = PathUtils.GetPath(Constants.DIR_TEMP_ASSETS); // 清空解压目录 FileUtils.ClearDir(unZipPath); // 解压指定的文件 ZipUtils.UnZip(apkInfo.ApkFilePath, unZipPath, "assets/" + config.FileName); // 读取解压出来的文件 string configFilePath = PathUtils.JoinPath(unZipPath, "assets/" + config.FileName); if (!File.Exists(configFilePath) || !FileUtils.HasContent(configFilePath)) { sb.AppendLine(config.FileName + "文件读取失败"); continue; } // 以下是读取配置文件中指定的参数 // 用户没有配置读取指定参数时,表示读取整个配置文件 List <string> keyList = CommonUtils.ToList(config.Keys); if (keyList == null) { sb.AppendLine(File.ReadAllText(configFilePath)); continue; } // 用户配置读取指定参数 Dictionary <string, bool> keyDic = new Dictionary <string, bool>(); foreach (string key in keyList) { if (keyDic.ContainsKey(key)) { continue; } keyDic.Add(key, true);// 将参数放置到字典里,true表示未找到参数,false表示未找到参数 } string[] lines = File.ReadAllLines(configFilePath); foreach (string line in lines) { if (string.IsNullOrEmpty(line)) { continue; } string[] ss = line.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); if (ss != null && ss.Length > 0 && keyDic.ContainsKey(ss[0])) { sb.AppendLine(line); keyDic[ss[0]] = false;// 已找到参数 } } // 如果参数未找到则提示 foreach (KeyValuePair <string, bool> kv in keyDic) { if (kv.Value) { sb.AppendLine(kv.Key + "参数未找到"); } } } apkInfo.AssetsConfig = sb.ToString(); }
public static ApkInfo ReadApkFromPath(string path) { byte[] manifestData = null; byte[] resourcesData = null; using (ICSharpCode.SharpZipLib.Zip.ZipInputStream zip = new ICSharpCode.SharpZipLib.Zip.ZipInputStream(File.OpenRead(path))) { using (var filestream = new FileStream(path, FileMode.Open, FileAccess.Read)) { ICSharpCode.SharpZipLib.Zip.ZipFile zipfile = new ICSharpCode.SharpZipLib.Zip.ZipFile(filestream); ICSharpCode.SharpZipLib.Zip.ZipEntry item; while ((item = zip.GetNextEntry()) != null) { if (item.Name.ToLower() == "androidmanifest.xml") { manifestData = new byte[50 * 1024]; using (Stream strm = zipfile.GetInputStream(item)) { strm.Read(manifestData, 0, manifestData.Length); } } if (item.Name.ToLower() == "resources.arsc") { using (Stream strm = zipfile.GetInputStream(item)) { using (BinaryReader s = new BinaryReader(strm)) { resourcesData = s.ReadBytes((int)s.BaseStream.Length); } } } } } } ApkReader apkReader = new ApkReader(); ApkInfo info = apkReader.extractInfo(manifestData, resourcesData); //Console.WriteLine(string.Format("Package Name: {0}", info.packageName)); //Console.WriteLine(string.Format("Version Name: {0}", info.versionName)); //Console.WriteLine(string.Format("Version Code: {0}", info.versionCode)); //Console.WriteLine(string.Format("App Has Icon: {0}", info.hasIcon)); //if (info.iconFileName.Count > 0) // Console.WriteLine(string.Format("App Icon: {0}", info.iconFileName[0])); //Console.WriteLine(string.Format("Min SDK Version: {0}", info.minSdkVersion)); //Console.WriteLine(string.Format("Target SDK Version: {0}", info.targetSdkVersion)); //if (info.Permissions != null && info.Permissions.Count > 0) //{ // Console.WriteLine("Permissions:"); // info.Permissions.ForEach(f => // { // Console.WriteLine(string.Format(" {0}", f)); // }); //} //else // Console.WriteLine("No Permissions Found"); //Console.WriteLine(string.Format("Supports Any Density: {0}", info.supportAnyDensity)); //Console.WriteLine(string.Format("Supports Large Screens: {0}", info.supportLargeScreens)); //Console.WriteLine(string.Format("Supports Normal Screens: {0}", info.supportNormalScreens)); //Console.WriteLine(string.Format("Supports Small Screens: {0}", info.supportSmallScreens)); return(info); }