Revert back to DotNetZip but using ProDotNetZip for fixed vulnerability

This commit is contained in:
AndnixSH
2025-03-19 17:14:12 +01:00
parent aca3de41b7
commit 4ed20cf3de
6 changed files with 143 additions and 134 deletions
+20 -10
View File
@@ -112,6 +112,9 @@
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="ProDotNetZip, Version=1.20.0.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL">
<HintPath>..\packages\ProDotNetZip.1.20.0\lib\netstandard2.0\ProDotNetZip.dll</HintPath>
</Reference>
<Reference Include="ResourceLoader, Version=3.3.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ResourceLoader.3.3.1\lib\netstandard2.0\ResourceLoader.dll</HintPath>
</Reference>
@@ -135,6 +138,7 @@
<Private>True</Private>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Data.OracleClient" />
<Reference Include="System.Design" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=9.0.0.3, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.9.0.3\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
@@ -144,6 +148,7 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.DirectoryServices" />
<Reference Include="System.Formats.Nrbf, Version=9.0.0.3, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Formats.Nrbf.9.0.3\lib\net462\System.Formats.Nrbf.dll</HintPath>
</Reference>
@@ -157,17 +162,7 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
<Private>True</Private>
@@ -192,6 +187,7 @@
<Reference Include="System.Memory, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.6.1\lib\net462\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Net" />
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
<Private>True</Private>
@@ -241,6 +237,9 @@
<Private>True</Private>
</Reference>
<Reference Include="System.Security" />
<Reference Include="System.Security.AccessControl, Version=6.0.0.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.AccessControl.6.0.1\lib\net461\System.Security.AccessControl.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>True</Private>
@@ -261,11 +260,22 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Security.Permissions, Version=9.0.0.3, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Permissions.9.0.3\lib\net462\System.Security.Permissions.dll</HintPath>
</Reference>
<Reference Include="System.Security.Principal.Windows, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
</Reference>
<Reference Include="System.ServiceProcess" />
<Reference Include="System.Text.Encoding.CodePages, Version=9.0.0.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.9.0.3\lib\net462\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>
<Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Transactions" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
+13 -20
View File
@@ -10,18 +10,12 @@ using APKToolGUI.Properties;
using APKToolGUI.ApkTool;
using APKToolGUI.Utils;
using System.Threading.Tasks;
using System.Collections.Generic;
using APKToolGUI.Handlers;
using Microsoft.WindowsAPICodePack.Taskbar;
using System.Media;
using System.Linq;
using System.Windows.Interop;
using System.Security.Cryptography;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using APKToolGUI.Controls;
using Dark.Net;
using APKEasyTool;
using System.IO.Compression;
using Ionic.Zip;
namespace APKToolGUI
{
@@ -196,35 +190,35 @@ namespace APKToolGUI
{
Directory.CreateDirectory(splitPath);
using (ZipArchive archive = ZipFile.OpenRead(file))
using (ZipFile zipDest = ZipFile.Read(file))
{
bool mainApkFound = false;
foreach (ZipArchiveEntry entry in archive.Entries)
foreach (ZipEntry entry in zipDest.Entries)
{
if (!mainApkFound && !entry.FullName.Contains("config.") && entry.FullName.EndsWith(".apk"))
if (!mainApkFound && !entry.FileName.Contains("config.") && entry.FileName.EndsWith(".apk"))
{
Debug.WriteLine("Found main APK: " + entry.FullName);
string extractPath = Path.Combine(splitPath, entry.FullName);
Debug.WriteLine("Found main APK: " + entry.FileName);
string extractPath = Path.Combine(splitPath, entry.FileName);
Directory.CreateDirectory(Path.GetDirectoryName(extractPath));
entry.ExtractToFile(extractPath, true);
entry.Extract(splitPath, ExtractExistingFileAction.OverwriteSilently);
file = extractPath;
mainApkFound = true;
}
if (entry.FullName.Contains("lib/armeabi-v7a"))
if (entry.FileName.Contains("lib/armeabi-v7a"))
{
arch += "armeabi-v7a, ";
}
if (entry.FullName.Contains("lib/arm64-v8a"))
if (entry.FileName.Contains("lib/arm64-v8a"))
{
arch += "arm64-v8a, ";
}
if (entry.FullName.Contains("lib/x86"))
if (entry.FileName.Contains("lib/x86"))
{
arch += "x86, ";
}
if (entry.FullName.Contains("lib/x86_64"))
if (entry.FileName.Contains("lib/x86_64"))
{
arch += "x86_64, ";
}
@@ -890,9 +884,9 @@ namespace APKToolGUI
if (Directory.Exists(Path.Combine(inputFolder, "original", "META-INF")))
{
string unsignedApkPath = Path.Combine(Path.GetDirectoryName(outputCompiledApkFile), Path.GetFileName(outputUnsignedApk));
ZipUtils.AddDirectory(outputFile, Path.Combine(inputFolder, "original", "META-INF"), "META-INF");
ZipUtils.UpdateDirectory(outputFile, Path.Combine(inputFolder, "original", "META-INF"), "META-INF");
if (File.Exists(Path.Combine(inputFolder, "original", "stamp-cert-sha256")))
ZipUtils.AddFile(outputFile, Path.Combine(inputFolder, "original", "stamp-cert-sha256"));
ZipUtils.UpdateFile(outputFile, Path.Combine(inputFolder, "original", "stamp-cert-sha256"));
ToLog(ApktoolEventType.Infomation, String.Format(Language.CopyFileTo, outputFile, unsignedApkPath));
File.Copy(outputFile, unsignedApkPath, true);
}
@@ -1627,7 +1621,6 @@ namespace APKToolGUI
#endregion
#region Fix flickering
public static void SetDoubleBuffered(System.Windows.Forms.Control c)
{
if (System.Windows.Forms.SystemInformation.TerminalServerSession)
+1 -1
View File
@@ -8,7 +8,7 @@ using System.Reflection;
using Microsoft.WindowsAPICodePack.Shell;
using APKToolGUI.Languages;
namespace APKEasyTool
namespace APKToolGUI
{
public class TaskBarJumpList
{
+96 -101
View File
@@ -1,165 +1,160 @@
using System;
using Ionic.Zip;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Documents;
namespace APKToolGUI.Utils
{
public class ZipUtils
{
public static void ExtractAllStream(string path, string embeddedZip)
{
Assembly _assembly = Assembly.GetExecutingAssembly();
Stream _zipFileStream = _assembly.GetManifestResourceStream(embeddedZip);
using (ZipFile zipFile = ZipFile.Read(_zipFileStream))
{
zipFile.ExtractAll(path);
}
}
public static string GetFileName(string path, string fileNameContains, string folderContains = "")
{
using (ZipArchive archive = ZipFile.OpenRead(path))
using (ZipFile zipDest = ZipFile.Read(path))
{
var entry = archive.Entries
.FirstOrDefault(e => e.FullName.Contains(fileNameContains) &&
(string.IsNullOrEmpty(folderContains) || e.FullName.Contains(folderContains)));
return entry != null ? Path.GetFileName(entry.FullName) : string.Empty;
foreach (ZipEntry entry in zipDest.Entries)
{
if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains))
return Path.GetFileName(entry.FileName);
}
}
return "";
}
public static string GetFileNameWithoutExtension(string path, string fileNameContains, string folderContains = "")
{
using (ZipArchive archive = ZipFile.OpenRead(path))
using (ZipFile zipDest = ZipFile.Read(path))
{
var entry = archive.Entries
.FirstOrDefault(e => e.FullName.Contains(fileNameContains) &&
(string.IsNullOrEmpty(folderContains) || e.FullName.Contains(folderContains)));
return entry != null ? Path.GetFileNameWithoutExtension(entry.FullName) : string.Empty;
foreach (ZipEntry entry in zipDest.Entries)
{
if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains))
return Path.GetFileNameWithoutExtension(entry.FileName);
}
}
return "";
}
public static bool Exists(string path, string fileNameContains, string folderContains = "")
{
using (ZipArchive archive = ZipFile.OpenRead(path))
using (ZipFile zipDest = ZipFile.Read(path))
{
return archive.Entries.Any(e => e.FullName.Contains(fileNameContains) &&
(string.IsNullOrEmpty(folderContains) || e.FullName.Contains(folderContains)));
foreach (ZipEntry entry in zipDest.Entries)
{
if (entry.FileName.Contains(fileNameContains) && String.IsNullOrEmpty(folderContains))
return true;
else if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains))
return true;
}
}
return false;
}
public static void AddFile(string zipFile, string fileName, string directoryPathInArchive = "")
{
using (ZipFile zip = ZipFile.Read(zipFile))
{
if (!String.IsNullOrEmpty(directoryPathInArchive))
zip.AddFile(fileName, directoryPathInArchive);
else
zip.AddFile(fileName);
zip.Save();
}
}
public static void AddFile(string zipPath, string filePath, string targetFolderInZip = "")
public static void UpdateFile(string zipFile, string fileName, string directoryPathInArchive = "")
{
using (FileStream zipToOpen = new FileStream(zipPath, FileMode.Open))
using (ZipFile zip = ZipFile.Read(zipFile))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
// Combine the target folder with the file name to create the entry path
string fileName = Path.GetFileName(filePath);
string entryPath = string.IsNullOrEmpty(targetFolderInZip)
? fileName
: Path.Combine(targetFolderInZip, fileName).Replace("\\", "/");
// Remove the entry if it already exists
var existingEntry = archive.GetEntry(entryPath);
existingEntry?.Delete();
// Add the file to the archive
archive.CreateEntryFromFile(filePath, entryPath, CompressionLevel.Optimal);
Console.WriteLine($"Added '{filePath}' to ZIP archive at '{entryPath}'.");
}
if (!String.IsNullOrEmpty(directoryPathInArchive))
zip.UpdateFile(fileName, directoryPathInArchive);
else
zip.UpdateFile(fileName);
zip.Save();
}
}
public static void RemoveFile(string zipFile, string fileName)
{
using (FileStream fs = new FileStream(zipFile, FileMode.OpenOrCreate))
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Update))
using (ZipFile zip = ZipFile.Read(zipFile))
{
var entry = archive.Entries.FirstOrDefault(e => e.FullName.Contains(fileName));
entry?.Delete();
bool chkresult2 = zip.Any(entry => entry.FileName.Contains(fileName));
if (chkresult2)
{
zip.RemoveEntry(fileName);
zip.Save();
}
}
}
public static void ExtractFile(string path, string fileName, string destination)
{
using (ZipArchive archive = ZipFile.OpenRead(path))
using (ZipFile zip = ZipFile.Read(path))
{
var entry = archive.Entries.FirstOrDefault(e => e.FullName.Contains(fileName));
entry?.ExtractToFile(Path.Combine(destination, Path.GetFileName(entry.FullName)), true);
bool chkresult2 = zip.Any(entry => entry.FileName.Contains(fileName));
if (chkresult2)
{
zip.FlattenFoldersOnExtract = true;
ZipEntry e = zip[fileName];
e.Extract(destination, ExtractExistingFileAction.OverwriteSilently);
}
}
}
public static void ExtractAll(string path, string destination, bool flattenFoldersOnExtract = false)
{
using (ZipArchive archive = ZipFile.OpenRead(path))
using (ZipFile zip = ZipFile.Read(path))
{
foreach (var entry in archive.Entries)
{
string fullPath = flattenFoldersOnExtract
? Path.Combine(destination, Path.GetFileName(entry.FullName))
: Path.Combine(destination, entry.FullName);
string directoryPath = Path.GetDirectoryName(fullPath);
if (!string.IsNullOrEmpty(directoryPath)) Directory.CreateDirectory(directoryPath);
entry.ExtractToFile(fullPath, true);
}
zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
zip.ExtractAll(destination, ExtractExistingFileAction.OverwriteSilently);
}
}
public static void AddDirectory(string zipPath, string directoryPath, string directoryPathInArchive = "")
public static void AddDirectory(string path, string fileName, string directoryPathInArchive = "")
{
if (!File.Exists(zipPath))
{
Console.WriteLine("ZIP file does not exist.");
return;
}
using (FileStream zipToOpen = new FileStream(zipPath, FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
foreach (string filePath in Directory.GetFiles(directoryPath, "*", SearchOption.AllDirectories))
{
// Calculate the relative path and prepend the target folder inside the ZIP
string relativePath = GetRelativePath(directoryPath, filePath);
string entryPath = Path.Combine(directoryPathInArchive, relativePath).Replace("\\", "/");
// Remove the entry if it already exists
var existingEntry = archive.GetEntry(entryPath);
existingEntry?.Delete();
// Add the file to the archive
archive.CreateEntryFromFile(filePath, entryPath, CompressionLevel.Optimal);
}
}
}
ZipFile zip = new ZipFile();
if (!String.IsNullOrEmpty(directoryPathInArchive))
zip.AddDirectory(fileName, directoryPathInArchive);
else
zip.AddDirectory(fileName);
zip.Save(path);
}
static string GetRelativePath(string basePath, string fullPath)
public static void UpdateDirectory(string path, string dirName, string directoryPathInArchive = "")
{
// Ensure both paths are absolute
basePath = Path.GetFullPath(basePath);
fullPath = Path.GetFullPath(fullPath);
if (!fullPath.StartsWith(basePath, StringComparison.OrdinalIgnoreCase))
using (ZipFile zip = ZipFile.Read(path))
{
throw new ArgumentException("The fullPath is not within the basePath.");
if (!String.IsNullOrEmpty(directoryPathInArchive))
zip.UpdateDirectory(dirName, directoryPathInArchive);
else
zip.UpdateDirectory(dirName);
zip.Save();
}
return fullPath.Substring(basePath.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
}
public static void ExtractDirectory(string path, string folderName, string destination, bool flattenFoldersOnExtract = false)
{
using (ZipArchive archive = ZipFile.OpenRead(path))
using (ZipFile zip = ZipFile.Read(path))
{
foreach (ZipArchiveEntry entry in archive.Entries.Where(e => e.FullName.Contains(folderName)))
zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
foreach (ZipEntry e in zip.Where(x => x.FileName.Contains(folderName)))
{
string extractPath = flattenFoldersOnExtract
? Path.Combine(destination, Path.GetFileName(entry.FullName))
: Path.Combine(destination, entry.FullName);
string directoryPath = Path.GetDirectoryName(extractPath);
if (!string.IsNullOrEmpty(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
entry.ExtractToFile(extractPath, true);
e.Extract(destination, ExtractExistingFileAction.OverwriteSilently);
}
}
}
}
}
}
+8
View File
@@ -330,6 +330,14 @@
<assemblyIdentity name="Microsoft.Bcl.HashCode" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.3" newVersion="9.0.0.3" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Security.Permissions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.3" newVersion="9.0.0.3" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+5 -2
View File
@@ -12,6 +12,7 @@
<package id="Ookii.Dialogs.WinForms" version="4.0.0" targetFramework="net48" />
<package id="OSVersionExt" version="3.0.0" targetFramework="net48" />
<package id="PortableSettingsProvider" version="0.2.5" targetFramework="net48" />
<package id="ProDotNetZip" version="1.20.0" targetFramework="net48" />
<package id="Resource.Embedder" version="2.2.0" targetFramework="net48" />
<package id="ResourceLoader" version="3.3.1" targetFramework="net48" />
<package id="System.AppContext" version="4.3.0" targetFramework="net48" />
@@ -28,8 +29,6 @@
<package id="System.Globalization" version="4.3.0" targetFramework="net48" />
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net48" />
<package id="System.IO" version="4.3.0" targetFramework="net48" />
<package id="System.IO.Compression" version="4.3.0" targetFramework="net48" />
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net48" />
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net48" />
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Linq" version="4.3.0" targetFramework="net48" />
@@ -53,11 +52,15 @@
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net48" />
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net48" />
<package id="System.Security.AccessControl" version="6.0.1" targetFramework="net48" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="net48" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net48" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net48" />
<package id="System.Security.Permissions" version="9.0.3" targetFramework="net48" />
<package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net48" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net48" />
<package id="System.Text.Encoding.CodePages" version="9.0.3" targetFramework="net48" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net48" />
<package id="System.Text.RegularExpressions" version="4.3.1" targetFramework="net48" />
<package id="System.Threading" version="4.3.0" targetFramework="net48" />