Skip to content

Commit c794c3f

Browse files
committed
handle for null bytes in registry key names (RegHide)
1 parent c1ed19d commit c794c3f

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

FlashpointSecurePlayer/EnvironmentVariables.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,6 @@ public class EnvironmentVariables : Modifications {
2222

2323
public EnvironmentVariables(EventHandler importStart, EventHandler importStop) : base(importStart, importStop) { }
2424

25-
private string GetComparableName(string name) {
26-
if (name == null) {
27-
return name;
28-
}
29-
30-
int comparableNameLength = name.IndexOf('\0');
31-
return comparableNameLength == -1 ? name : name.Substring(0, comparableNameLength);
32-
}
33-
3425
private string GetFlashpointProxyName(string name, out string comparableName) {
3526
comparableName = null;
3627

FlashpointSecurePlayer/RegistryStates.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1545,9 +1545,10 @@ private void ModificationAdded(RegistryTraceData registryTraceData) {
15451545
//return;
15461546
//}
15471547

1548+
// comparable names, since registry key/value names shouldn't have null bytes in them according to Win32
15481549
RegistryStateElement registryStateElement = new RegistryStateElement {
1549-
KeyName = registryTraceData.KeyName,
1550-
ValueName = registryTraceData.ValueName
1550+
KeyName = GetComparableName(registryTraceData.KeyName),
1551+
ValueName = GetComparableName(registryTraceData.ValueName)
15511552
};
15521553

15531554
// KeyHandle is meant to be a uint32, so we discard the rest
@@ -1740,8 +1741,8 @@ private void ModificationRemoved(RegistryTraceData registryTraceData) {
17401741

17411742
// create filler element to get name
17421743
RegistryStateElement registryStateElement = new RegistryStateElement {
1743-
KeyName = registryTraceData.KeyName,
1744-
ValueName = registryTraceData.ValueName
1744+
KeyName = GetComparableName(registryTraceData.KeyName),
1745+
ValueName = GetComparableName(registryTraceData.ValueName)
17451746
};
17461747

17471748
ulong safeKeyHandle = registryTraceData.KeyHandle & 0x00000000FFFFFFFF;
@@ -1795,7 +1796,7 @@ private void KCBStarted(RegistryTraceData registryTraceData) {
17951796
kcbModificationKeyNames = new Dictionary<ulong, string>();
17961797
}
17971798

1798-
kcbModificationKeyNames[safeKeyHandle] = registryTraceData.KeyName;
1799+
kcbModificationKeyNames[safeKeyHandle] = GetComparableName(registryTraceData.KeyName);
17991800
}
18001801

18011802
private void KCBStopped(RegistryTraceData registryTraceData) {
@@ -1854,7 +1855,7 @@ private void KCBStopped(RegistryTraceData registryTraceData) {
18541855
registryStateElement = registryStateElements[j];
18551856

18561857
keyName = GetRedirectedKeyValueName(
1857-
GetKeyValueNameFromKernelRegistryString(registryTraceData.KeyName + "\\" + registryStateElement.KeyName),
1858+
GetKeyValueNameFromKernelRegistryString(GetComparableName(registryTraceData.KeyName) + "\\" + registryStateElement.KeyName),
18581859
modificationsElement.RegistryStates.BinaryType
18591860
);
18601861

FlashpointSecurePlayer/Shared.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2054,6 +2054,15 @@ public string this[string shortPath] {
20542054
public PathNamesLong Long { get; } = new PathNamesLong();
20552055
}
20562056

2057+
public static string GetComparableName(string name) {
2058+
if (name == null) {
2059+
return name;
2060+
}
2061+
2062+
int comparableNameLength = name.IndexOf('\0');
2063+
return comparableNameLength == -1 ? name : name.Substring(0, comparableNameLength);
2064+
}
2065+
20572066
public static string GetEnvironmentVariablePreference(List<string> names) {
20582067
string preferenceString = null;
20592068

0 commit comments

Comments
 (0)