!Cb}oFB))
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
CpU0K}
literal 0
HcmV?d00001
diff --git a/.vs/CXMLCli/FileContentIndex/read.lock b/.vs/CXMLCli/FileContentIndex/read.lock
new file mode 100644
index 0000000..e69de29
diff --git a/.vs/CXMLCli/v17/.suo b/.vs/CXMLCli/v17/.suo
new file mode 100644
index 0000000000000000000000000000000000000000..5dfaa8f3de504e7ea2d925eb69f72e6ea9968f25
GIT binary patch
literal 74240
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
literal 0
HcmV?d00001
diff --git a/CXMLCli/CXMLCli.csproj b/CXMLCli/CXMLCli.csproj
index 01a2170..cbcae8e 100644
--- a/CXMLCli/CXMLCli.csproj
+++ b/CXMLCli/CXMLCli.csproj
@@ -1,112 +1,113 @@
-
-
-
-
- Debug
- AnyCPU
- {BE72E673-25FF-47AB-AF5B-9448B69E3990}
- Exe
- CXMLDecompiler
- CXMLDecompiler
- v4.6.1
- 512
- true
- true
-
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
- false
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
- false
-
-
- true
- bin\x64\Debug\
- DEBUG;TRACE
- full
- x64
- prompt
- MinimumRecommendedRules.ruleset
- true
-
-
- bin\x64\Release\
- TRACE
- true
- pdbonly
- x64
- prompt
- MinimumRecommendedRules.ruleset
- true
-
-
- true
- bin\x86\Debug\
- DEBUG;TRACE
- full
- x86
- prompt
- MinimumRecommendedRules.ruleset
- true
-
-
- bin\x86\Release\
- TRACE
- true
- pdbonly
- x86
- prompt
- MinimumRecommendedRules.ruleset
- true
-
-
- cxml.ico
-
-
-
- ..\packages\DotNetZip.1.13.3\lib\net40\DotNetZip.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ Debug
+ AnyCPU
+ {BE72E673-25FF-47AB-AF5B-9448B69E3990}
+ Exe
+ CXMLDecompiler
+ CXMLDecompiler
+ v4.6.1
+ 512
+ true
+ true
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE
+ full
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x86\Release\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ cxml.ico
+
+
+
+ ..\packages\DotNetZip.1.13.3\lib\net40\DotNetZip.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CXMLCli/CXMLReader.cs b/CXMLCli/CXMLReader.cs
index f04c60b..09170d4 100644
--- a/CXMLCli/CXMLReader.cs
+++ b/CXMLCli/CXMLReader.cs
@@ -1,13 +1,14 @@
using Ionic.Zlib;
+using General;
+
using System;
using System.Collections.Generic;
using System.Diagnostics;
-using General;
using System.IO;
using System.Text;
using System.Xml;
using System.Globalization;
-
+
namespace CXML
{
@@ -67,6 +68,7 @@ namespace CXML
List SilicaTypingInformationList = new List();
+ String MagicReplacePattern = Tools.GenerateReplacePattern();
String SilicaTypingInformation = "SilicaTypingInformation{{[[";
FileStream InfoFile;
@@ -89,16 +91,9 @@ namespace CXML
BinaryReader bHashIDTable;
BinaryReader bStringIDTable;
- public class LoopbackHandler
- {
- public String FileName;
- public String OldFileName;
- public Int64 FilePointer;
- }
-
List FileList = new List();
- XmlWriter XMLFile;
+ XmlWriter XMLWriter;
public bool ProcessFiles = false;
public bool WaitExit = false;
@@ -399,16 +394,22 @@ namespace CXML
XmlWriterSettings XMLSettings = new XmlWriterSettings();
XMLSettings.Indent = true;
+ XMLSettings.Encoding = Encoding.UTF8;
+
string XMLPath = Path.Combine(MainDir, XMLFilename);
- XMLFile = XmlWriter.Create(XMLPath, XMLSettings);
- XMLFile.WriteStartDocument();
- XMLFile.WriteComment("REPLACE_WITH_SILICATOKEN");
+
+ StreamWriter sw = new StreamWriter(new MemoryStream(), Encoding.UTF8);
+
+
+ XMLWriter = XmlWriter.Create(sw, XMLSettings);
+ XMLWriter.WriteStartDocument();
+ XMLWriter.WriteComment(MagicReplacePattern);
AddTypingInfo("MAGIC", MagicNumber);
AddTypingInfo("VERSION", ReadVersion());
ReadElements();
- XMLFile.WriteEndDocument();
- XMLFile.Flush();
- XMLFile.Close();
+ XMLWriter.WriteEndDocument();
+ XMLWriter.Flush();
+ XMLWriter.Close();
GotoEnd();
int bytesRemaining = Convert.ToInt32(InfoFile.Length - InfoFile.Position);
@@ -432,44 +433,62 @@ namespace CXML
}
SilicaTypingInformation += "]]}}SilicaTypingInformation";
+ byte[] XMLBytes = new byte[sw.BaseStream.Length];
- // Make corrections
- string XmlData = File.ReadAllText(XMLPath, Encoding.UTF8);
- XmlData = XmlData.Replace("REPLACE_WITH_SILICATOKEN", SilicaTypingInformation);
+ sw.Flush();
+ sw.BaseStream.Seek(0x00, SeekOrigin.Begin);
+ sw.BaseStream.Read(XMLBytes, 0x00, XMLBytes.Length);
+ sw.Close();
+
+ string XMLData = Encoding.UTF8.GetString(XMLBytes);
+
+ // Resolve Replace Patterns
+
+ XMLData = XMLData.Replace(MagicReplacePattern, SilicaTypingInformation);
foreach(LoopbackHandler lpHandler in FileList)
- {
- if(lpHandler.OldFileName != null)
- {
- if(lpHandler.FileName != null)
- {
- string oldName = Path.Combine(lpHandler.OldFileName);
- string extension = Path.GetExtension(oldName);
- string folderPath = Path.GetDirectoryName(oldName);
- string newPath = Path.ChangeExtension(Path.Combine(folderPath, lpHandler.FileName), extension);
-
- if(!File.Exists(newPath))
- {
- File.Move(oldName, newPath);
-
- string xmlRelOldPath = oldName.Substring(Tools.GetRootFolder(oldName).Length + 1);
- string xmlRelNewPath = newPath.Substring(Tools.GetRootFolder(newPath).Length + 1);
- Console.WriteLine("Moved " + xmlRelOldPath + " => " + xmlRelNewPath);
- XmlData = XmlData.Replace(xmlRelOldPath, xmlRelNewPath);
- }
-
- if (ProcessFiles)
- ProcessFile(newPath);
- }
- else
- {
- Console.WriteLine("NOT MOVING: " + lpHandler.OldFileName);
- if (ProcessFiles)
- ProcessFile(lpHandler.OldFileName);
- }
+ {
+ if (lpHandler.ReplacePattern != null && lpHandler.OldFileName != null)
+ {
+
+ string replacePattern = lpHandler.ReplacePattern;
+ string oldName = lpHandler.OldFileName;
+ string extension = Path.GetExtension(oldName);
+ string folderPath = Path.GetDirectoryName(oldName);
+ byte[] fileData = lpHandler.FileData;
+
+ if (lpHandler.FileName != null)
+ {
+
+ string newPath = Path.ChangeExtension(Path.Combine(folderPath, lpHandler.FileName), extension);
+
+ if (!Directory.Exists(folderPath))
+ Directory.CreateDirectory(folderPath);
+
+ if (!File.Exists(newPath))
+ {
+ File.WriteAllBytes(newPath, fileData);
+ string xmlRelNewPath = newPath.Substring(Tools.GetRootFolder(newPath).Length + 1);
+ Console.WriteLine("Resolved " + replacePattern + " => " + xmlRelNewPath);
+ XMLData = XMLData.Replace(replacePattern, xmlRelNewPath);
+ }
+
+ if (ProcessFiles)
+ ProcessFile(newPath);
+ }
+ else
+ {
+ Console.WriteLine("Unable to resolve: " + oldName);
+ if (!File.Exists(oldName))
+ File.WriteAllBytes(oldName, fileData);
+
+ if (ProcessFiles)
+ ProcessFile(oldName);
+ }
}
+
}
- File.WriteAllText(XMLPath, XmlData);
+ File.WriteAllText(XMLPath, XMLData);
Term();
}
@@ -493,7 +512,7 @@ namespace CXML
cxmlParser.Init(FileName);
cxmlParser.ProcessFiles = this.ProcessFiles;
cxmlParser.MainDir = DirectoryName;
- cxmlParser.FileDir = Path.Combine(cxmlParser.MainDir,"files");
+ cxmlParser.FileDir = Path.Combine(cxmlParser.MainDir, "files");
cxmlParser.DecompileCXML(FileName);
}
catch (Exception) { };
@@ -555,7 +574,7 @@ namespace CXML
}
}
- public void RegisterFile(Int64 ElementPtr, String NewName, Boolean FileEntry, String IdealName=null)
+ public void RegisterFile(Int64 ElementPtr, String NewName, Boolean FileEntry, String ReplacePattern=null, byte[] FileData=null, String IdealName=null)
{
Console.WriteLine("Adding Entry for Loopback: 0x" + ElementPtr.ToString("X8", CultureInfo.InvariantCulture) + " (" + NewName + ")");
for(int i = 0; i < FileList.Count; i++)
@@ -583,6 +602,8 @@ namespace CXML
{
lpHandler.OldFileName = NewName;
lpHandler.FileName = IdealName;
+ lpHandler.FileData = FileData;
+ lpHandler.ReplacePattern = ReplacePattern;
}
else
{
@@ -610,12 +631,14 @@ namespace CXML
break;
case AttributeType.TYPE_INT:
AttributeValue = bTreeTable.ReadInt32();
- Console.WriteLine("Int - Value: " + AttributeValue.ToString() + " sz:" + bTreeTable.ReadInt32());
+ int sz = bTreeTable.ReadInt32();
+ Console.WriteLine("Int - Value: " + AttributeValue.ToString() + " sz:" + sz);
break;
case AttributeType.TYPE_FLOAT:
float FloatValue = bTreeTable.ReadSingle();
AttributeValue = FloatValue.ToString("G9", CultureInfo.InvariantCulture) + "f";
- Console.WriteLine("Float - Value: " + AttributeValue.ToString() + " sz:" + bTreeTable.ReadInt32());
+ sz = bTreeTable.ReadInt32();
+ Console.WriteLine("Float - Value: " + AttributeValue.ToString() + " sz:" + sz);
break;
case AttributeType.TYPE_STRING:
int StringOffset = bTreeTable.ReadInt32();
@@ -689,28 +712,18 @@ namespace CXML
Byte[] FileData = new Byte[FileSz];
FileTable.Seek(FilePtr, SeekOrigin.Begin);
FileTable.Read(FileData, 0, FileSz);
- string FileHash = Tools.GenerateHash(FileData);
- string FileSmallHash = Tools.GenerateShortHash(FileData);
+
+ String FileHash = Tools.GenerateHash(FileData);
+ String FileSmallHash = Tools.GenerateShortHash(FileData);
String Extension = Tools.GetFileExtension(FileData);
- String FileName = Path.Combine(FileDir, "original", FilePtr.ToString("X", CultureInfo.InvariantCulture) +"-"+FileHash + Extension);
+ String FileName = Path.Combine(FileDir, "original", FilePtr.ToString("X", CultureInfo.InvariantCulture) + "-" + FileHash + Extension);
String IdealName = ElementName + "-" + AttributeName + "-" + FileSmallHash + Extension;
- if (!File.Exists(FileName))
- {
- Console.WriteLine("Writing: " + FileName);
+ String ReplacePattern = Tools.GenerateReplacePattern();
- if (!Directory.Exists(Path.GetDirectoryName(FileName)))
- Directory.CreateDirectory(Path.GetDirectoryName(FileName));
+ //File.WriteAllBytes(FileName, FileData);
+ RegisterFile(ElementPtr, FileName, true, ReplacePattern, FileData, IdealName);
- File.WriteAllBytes(FileName, FileData);
- RegisterFile(ElementPtr, FileName, true, IdealName);
- }
- else
- {
- Console.WriteLine("File allready extracted.");
- }
-
- string xmlRelPath = FileName.Substring(Tools.GetRootFolder(FileName).Length + 1);
- AttributeValue = xmlRelPath;
+ AttributeValue = ReplacePattern;
break;
case AttributeType.TYPE_ID_STRING_LOOPBACK:
int StringIdTableOffset = bTreeTable.ReadInt32();
@@ -725,7 +738,9 @@ namespace CXML
AttributeValue = Tools.ReadString(StringIDTable);
RegisterFile(LoopbackPtr, AttributeValue.ToString(), false);
- Console.WriteLine("Loopback ID String: " + StringIdTableOffset + " sz: " + bTreeTable.ReadInt32());
+ sz = bTreeTable.ReadInt32();
+
+ Console.WriteLine("Loopback ID String: " + StringIdTableOffset + " sz: " + sz);
break;
case AttributeType.TYPE_ID_STRING: // This is probably right, tbh
StringIdTableOffset = bTreeTable.ReadInt32();
@@ -733,7 +748,8 @@ namespace CXML
AttributeValue = Tools.ReadString(StringIDTable);
- Console.WriteLine("ID String: " + StringIdTableOffset + " sz: " + bTreeTable.ReadInt32());
+ sz = bTreeTable.ReadInt32();
+ Console.WriteLine("ID String: " + StringIdTableOffset + " sz: " + sz);
break;
case AttributeType.TYPE_ID_INT_LOOPBACK:
int IntIdTableOffset = bTreeTable.ReadInt32();
@@ -750,7 +766,8 @@ namespace CXML
AttributeValue = IDValue.ToString("X8", CultureInfo.InvariantCulture);
RegisterFile(LoopbackPtr, AttributeValue.ToString(), false);
- Console.WriteLine("Loopback Int: " + IntIdTableOffset + " sz: " + bTreeTable.ReadInt32());
+ sz = bTreeTable.ReadInt32();
+ Console.WriteLine("Loopback Int: " + IntIdTableOffset + " sz: " + sz);
break;
case AttributeType.TYPE_ID_INT:
IntIdTableOffset = bTreeTable.ReadInt32();
@@ -758,7 +775,8 @@ namespace CXML
IDValue = bIntIDTable.ReadInt32();
AttributeValue = IDValue.ToString("X8", CultureInfo.InvariantCulture);
- Console.WriteLine("Int Id: " + IntIdTableOffset + " sz: " + bTreeTable.ReadInt32());
+ sz = bTreeTable.ReadInt32();
+ Console.WriteLine("Int Id: " + IntIdTableOffset + " sz: " + sz);
break;
default:
Console.WriteLine("UNKNOWN TYPE @ " + TreeTable.Position);
@@ -768,8 +786,8 @@ namespace CXML
AddTypingInfo(ElementName + ":" + AttributeName, ((int)Type).ToString(CultureInfo.InvariantCulture));
Console.WriteLine(AttributeName + "=" + AttributeValue.ToString());
- XMLFile.WriteAttributeString(AttributeName, AttributeValue.ToString());
- XMLFile.Flush();
+ XMLWriter.WriteAttributeString(AttributeName, AttributeValue.ToString());
+ XMLWriter.Flush();
}
public void ReadElements()
@@ -796,7 +814,7 @@ namespace CXML
Console.WriteLine("FirstChild: " + FirstChild);
Console.WriteLine("LastChild: " + LastChild);
- XMLFile.WriteStartElement(ElementName);
+ XMLWriter.WriteStartElement(ElementName);
if(NumAttributes > 0)
{
@@ -813,8 +831,8 @@ namespace CXML
}
- XMLFile.WriteEndElement();
- XMLFile.Flush();
+ XMLWriter.WriteEndElement();
+ XMLWriter.Flush();
if (NextSibling != -1)
{
diff --git a/CXMLCli/LoopbackHandler.cs b/CXMLCli/LoopbackHandler.cs
new file mode 100644
index 0000000..fdc356d
--- /dev/null
+++ b/CXMLCli/LoopbackHandler.cs
@@ -0,0 +1,13 @@
+using System;
+
+namespace CXML
+{
+ public class LoopbackHandler
+ {
+ public String FileName;
+ public String OldFileName;
+ public String ReplacePattern;
+ public byte[] FileData;
+ public Int64 FilePointer;
+ }
+}
diff --git a/CXMLCli/Tools.cs b/CXMLCli/Tools.cs
index c745f3d..7ab6f7f 100644
--- a/CXMLCli/Tools.cs
+++ b/CXMLCli/Tools.cs
@@ -1,8 +1,5 @@
using System;
-using System.Collections.Generic;
using System.Drawing;
-using System.Drawing.Imaging;
-using System.Globalization;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
@@ -13,14 +10,14 @@ namespace General
class Tools
{
- public static byte[] bmp = Encoding.ASCII.GetBytes("BM"); // BMP
- public static byte[] gif = Encoding.ASCII.GetBytes("GIF"); // GIF
- public static byte[] png = new byte[] { 137, 80, 78, 71 }; // PNG
- public static byte[] tiff = new byte[] { 73, 73, 42 }; // TIFF
- public static byte[] tiff2 = new byte[] { 77, 77, 42 }; // TIFF
- public static byte[] jpeg = new byte[] { 255, 216, 255 }; // jpeg
-
-
+ public static byte[] bmp = Encoding.ASCII.GetBytes("BM"); // BMP
+ public static byte[] gif = Encoding.ASCII.GetBytes("GIF"); // GIF
+ public static byte[] png = new byte[] { 137, 80, 78, 71 }; // PNG
+ public static byte[] tiff = new byte[] { 73, 73, 42 }; // TIFF
+ public static byte[] tiff2 = new byte[] { 77, 77, 42 }; // TIFF
+ public static byte[] jpeg = new byte[] { 255, 216, 255 }; // jpeg
+ public static Random rng = new Random(Guid.NewGuid().GetHashCode());
+
public static void WriteStringToStream(Stream s, String str)
{
Byte[] bytes = Encoding.UTF8.GetBytes(str);
@@ -46,34 +43,40 @@ namespace General
stream.Seek(0, SeekOrigin.Begin);
stream.Read(Bytes, 0x00, StreamLen);
return Bytes;
- }
-
- public static string GetFileExtension(byte[] Bytes)
- {
- if (bmp.SequenceEqual(Bytes.Take(bmp.Length)))
- {
- return ".bmp";
- }
- else if (gif.SequenceEqual(Bytes.Take(gif.Length)))
- {
- return ".gif";
- }
- else if (png.SequenceEqual(Bytes.Take(png.Length)))
- {
- return ".png";
- }
- else if (tiff.SequenceEqual(Bytes.Take(tiff.Length)))
- {
- return ".tiff";
- }
- else if (tiff2.SequenceEqual(Bytes.Take(tiff2.Length)))
- {
- return ".tiff";
- }
- else if (jpeg.SequenceEqual(Bytes.Take(jpeg.Length)))
- {
- return ".jpg";
- }
+ }
+
+ public static string GenerateReplacePattern()
+ {
+ byte[] RandomNumber = new byte[0x20];
+ rng.NextBytes(RandomNumber);
+ return "{{" + BitConverter.ToString(RandomNumber).Replace("-", "") + "}}";
+ }
+ public static string GetFileExtension(byte[] Bytes)
+ {
+ if (bmp.SequenceEqual(Bytes.Take(bmp.Length)))
+ {
+ return ".bmp";
+ }
+ else if (gif.SequenceEqual(Bytes.Take(gif.Length)))
+ {
+ return ".gif";
+ }
+ else if (png.SequenceEqual(Bytes.Take(png.Length)))
+ {
+ return ".png";
+ }
+ else if (tiff.SequenceEqual(Bytes.Take(tiff.Length)))
+ {
+ return ".tiff";
+ }
+ else if (tiff2.SequenceEqual(Bytes.Take(tiff2.Length)))
+ {
+ return ".tiff";
+ }
+ else if (jpeg.SequenceEqual(Bytes.Take(jpeg.Length)))
+ {
+ return ".jpg";
+ }
else if (IsZlib(Bytes))
{
return ".z";
@@ -94,7 +97,7 @@ namespace General
{
return ".gim";
}
- else if(!HasBinaryContent(Encoding.UTF8.GetString(Bytes)))
+ else if (!HasBinaryContent(Encoding.UTF8.GetString(Bytes)))
{
return ".txt";
}
|