From 7d846847f67f90407e9b47765dfaf20614c9d292 Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Fri, 12 Apr 2024 18:24:02 +0900 Subject: [PATCH] Update the android manifest related feature --- .../Catswords.DataType.Client.csproj | 7 +++ .../Helper/ApkManifestExtractor.cs | 43 ++++++++++++------ .../Helper/FileExtensionDB.cs | 18 +++++--- Catswords.DataType.Client/Helper/Timeline.cs | 17 +++---- .../Model/AndroidPermission.cs | 5 +- Catswords.DataType.Client/Model/Indicator.cs | 6 ++- .../Properties/Resources.Designer.cs | 10 ++++ .../Properties/Resources.resx | 3 ++ .../2333410-android-os-smartphone_85588.png | Bin 0 -> 6879 bytes .../UserControl1.Designer.cs | 2 +- Catswords.DataType.Client/UserControl1.cs | 15 +++--- SocialOnTheFile.sln | 14 ++++++ 12 files changed, 102 insertions(+), 38 deletions(-) create mode 100644 Catswords.DataType.Client/Resources/2333410-android-os-smartphone_85588.png diff --git a/Catswords.DataType.Client/Catswords.DataType.Client.csproj b/Catswords.DataType.Client/Catswords.DataType.Client.csproj index 64d7c1a..27ace8c 100644 --- a/Catswords.DataType.Client/Catswords.DataType.Client.csproj +++ b/Catswords.DataType.Client/Catswords.DataType.Client.csproj @@ -190,10 +190,17 @@ + + {607eeb2c-6b7c-409e-959e-3b458a109426} + AndroidXml + {b1244c5a-cdeb-4d1d-8807-bf40251abcab} SsdeepNET + + + \ No newline at end of file diff --git a/Catswords.DataType.Client/Helper/ApkManifestExtractor.cs b/Catswords.DataType.Client/Helper/ApkManifestExtractor.cs index ca75394..f3eb868 100644 --- a/Catswords.DataType.Client/Helper/ApkManifestExtractor.cs +++ b/Catswords.DataType.Client/Helper/ApkManifestExtractor.cs @@ -1,9 +1,15 @@ -using Catswords.DataType.Client.Model; +using AndroidXml; +using Catswords.DataType.Client.Model; using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; +using System.Linq; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using System.Windows.Forms; using System.Xml; +using System.Xml.Linq; namespace Catswords.DataType.Client.Helper { @@ -48,21 +54,30 @@ namespace Catswords.DataType.Client.Helper { List permissions = new List(); - // Read the AndroidManifest.xml file - XmlDocument doc = new XmlDocument(); - doc.Load(ManifestPath); - - // Find all elements - XmlNodeList permissionNodes = doc.GetElementsByTagName("uses-permission"); - foreach (XmlNode node in permissionNodes) + using (FileStream stream = File.OpenRead(ManifestPath)) { - // Extract permissions - permissions.Add(new AndroidPermission + // Read the AndroidManifest.xml file + var reader = new AndroidXmlReader(stream); + XDocument doc = XDocument.Load(reader); + + // Find all elements + var permissionNodes = doc.Descendants().Where(e => e.Name.LocalName == "uses-permission"); + foreach (var node in permissionNodes) { - Name = node.Attributes["android:name"].Value, - Description = "", - Severity = 0 - }); + foreach (var attr in node.Attributes()) + { + if (attr.Name.LocalName == "name") + { + permissions.Add(new AndroidPermission + { + Name = attr.Value, + Description = "", + Severity = 0, + CreatedAt = DateTime.Now + }); + } + } + } } return permissions; diff --git a/Catswords.DataType.Client/Helper/FileExtensionDB.cs b/Catswords.DataType.Client/Helper/FileExtensionDB.cs index f35d7ee..0d9685d 100644 --- a/Catswords.DataType.Client/Helper/FileExtensionDB.cs +++ b/Catswords.DataType.Client/Helper/FileExtensionDB.cs @@ -41,7 +41,7 @@ namespace Catswords.DataType.Client.Helper Indicators.Add(new Indicator() { Id = itemNode.SelectSingleNode("id").InnerText, - CreatedAt = FormatDateTime(itemNode.SelectSingleNode("datetime").InnerText), + CreatedAt = GetDateTimeFromString(itemNode.SelectSingleNode("datetime").InnerText), Content = itemNode.SelectSingleNode("description").InnerText, Url = "" }); @@ -54,16 +54,22 @@ namespace Catswords.DataType.Client.Helper } } - public string FormatDateTime(string dateString) + public static DateTime GetDateTimeFromString(string dateString) { - string formattedDateTime = ""; + DateTime parsedDateTime; - if (DateTime.TryParseExact(dateString, "yyyy-MM-dd HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out DateTime parsedDateTime)) + if (DateTime.TryParseExact(dateString, "yyyy-MM-dd HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out parsedDateTime)) { - formattedDateTime = parsedDateTime.ToString(); + return parsedDateTime; + } + else + { + parsedDateTime = DateTime.Now; } - return formattedDateTime; + return parsedDateTime; } } } + + diff --git a/Catswords.DataType.Client/Helper/Timeline.cs b/Catswords.DataType.Client/Helper/Timeline.cs index ecf99f0..ef032c2 100644 --- a/Catswords.DataType.Client/Helper/Timeline.cs +++ b/Catswords.DataType.Client/Helper/Timeline.cs @@ -33,21 +33,22 @@ namespace Catswords.DataType.Client.Helper return result; } - public static string FormatDateTime(string dateString) + public static DateTime GetDateTimeFromString(string dateString) { - string formattedDateTime = ""; + DateTime localTime; // 날짜와 시간을 파싱 if (DateTime.TryParseExact(dateString, "MM/dd/yyyy HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out DateTime parsedDateTime)) { // UTC에서 로컬 시간으로 변환 - DateTime localTime = parsedDateTime.ToLocalTime(); - - // 현재 스레드의 문화권에 따라 날짜와 시간 출력 - formattedDateTime = localTime.ToString(); + localTime = parsedDateTime.ToLocalTime(); + } + else + { + localTime = DateTime.Now; } - return formattedDateTime; + return localTime; } public void Fetch(string q) @@ -78,7 +79,7 @@ namespace Catswords.DataType.Client.Helper Indicators.Add(new Indicator { - CreatedAt = FormatDateTime(createdAt), + CreatedAt = GetDateTimeFromString(createdAt), Content = RemoveHtmlTags(content) }); } diff --git a/Catswords.DataType.Client/Model/AndroidPermission.cs b/Catswords.DataType.Client/Model/AndroidPermission.cs index 8431897..ec89c49 100644 --- a/Catswords.DataType.Client/Model/AndroidPermission.cs +++ b/Catswords.DataType.Client/Model/AndroidPermission.cs @@ -1,9 +1,12 @@ -namespace Catswords.DataType.Client.Model +using System; + +namespace Catswords.DataType.Client.Model { class AndroidPermission { public string Name { get; set; } public string Description { get; set; } public int Severity { get; set; } + public DateTime CreatedAt { get; set; } } } diff --git a/Catswords.DataType.Client/Model/Indicator.cs b/Catswords.DataType.Client/Model/Indicator.cs index a47f0ee..38f5110 100644 --- a/Catswords.DataType.Client/Model/Indicator.cs +++ b/Catswords.DataType.Client/Model/Indicator.cs @@ -1,10 +1,12 @@ -namespace Catswords.DataType.Client.Model +using System; + +namespace Catswords.DataType.Client.Model { public class Indicator { public string Id { get; set; } public string Content { get; set; } public string Url { get; set; } - public string CreatedAt { get; set; } + public DateTime CreatedAt { get; set; } } } diff --git a/Catswords.DataType.Client/Properties/Resources.Designer.cs b/Catswords.DataType.Client/Properties/Resources.Designer.cs index ba441ec..ac09f8d 100644 --- a/Catswords.DataType.Client/Properties/Resources.Designer.cs +++ b/Catswords.DataType.Client/Properties/Resources.Designer.cs @@ -60,6 +60,16 @@ namespace Catswords.DataType.Client.Properties { } } + /// + /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다. + /// + internal static System.Drawing.Bitmap _2333410_android_os_smartphone_85588 { + get { + object obj = ResourceManager.GetObject("_2333410_android_os_smartphone_85588", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다. /// diff --git a/Catswords.DataType.Client/Properties/Resources.resx b/Catswords.DataType.Client/Properties/Resources.resx index f10255a..1681dc2 100644 --- a/Catswords.DataType.Client/Properties/Resources.resx +++ b/Catswords.DataType.Client/Properties/Resources.resx @@ -133,4 +133,7 @@ ..\Resources\message_bubble_conversation_speech_communication_talk_chat_icon_219299.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\2333410-android-os-smartphone_85588.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Catswords.DataType.Client/Resources/2333410-android-os-smartphone_85588.png b/Catswords.DataType.Client/Resources/2333410-android-os-smartphone_85588.png new file mode 100644 index 0000000000000000000000000000000000000000..ecdbec5813a03f35a43184194f044c50ec3f6b84 GIT binary patch literal 6879 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