OSDN Git Service

Change the algorithm to encrypt all settings.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Sat, 11 Jan 2014 05:23:58 +0000 (14:23 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Sat, 11 Jan 2014 05:23:58 +0000 (14:23 +0900)
FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
registry.c

index 901b7e3..b1c0d53 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index dae4da7..fd66fd5 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index 925cac0..143f431 100644 (file)
@@ -3189,55 +3189,33 @@ DWORD GetRandamDWRODValue(void)
 void MaskSettingsData(const char* Salt, int SaltLength, void* Data, DWORD Size, int EscapeZero)\r
 {\r
        char Key[FMAX_PATH*2+1];\r
-       ulong Hash[5];\r
+       BYTE* p;\r
        DWORD i;\r
+       DWORD j;\r
+       ulong Hash[5];\r
        BYTE Mask[20];\r
-       BYTE* p;\r
        memcpy(&Key[0], SecretKey, SecretKeyLength);\r
        memcpy(&Key[SecretKeyLength], Salt, SaltLength);\r
-       sha_memory(Key, SecretKeyLength + SaltLength, Hash);\r
-       // sha.cはビッグエンディアンのため\r
-       for(i = 0; i < 5; i++)\r
-               Hash[i] = _byteswap_ulong(Hash[i]);\r
-       memcpy(&Mask, &Hash, 20);\r
        p = (BYTE*)Data;\r
        for(i = 0; i < Size; i++)\r
        {\r
-               if(EscapeZero == YES)\r
+               if(i % 20 == 0)\r
                {\r
-                       if(p[i] != 0 && p[i] != Mask[i % sizeof(Mask)])\r
-                               p[i] ^= Mask[i % sizeof(Mask)];\r
+                       memcpy(&Key[SecretKeyLength + SaltLength], &i, 4);\r
+                       sha_memory(Key, SecretKeyLength + SaltLength + 4, Hash);\r
+                       // sha.cはビッグエンディアンのため\r
+                       for(j = 0; j < 5; j++)\r
+                               Hash[j] = _byteswap_ulong(Hash[j]);\r
+                       memcpy(&Mask, &Hash, 20);\r
                }\r
-               else\r
-                       p[i] ^= Mask[i % sizeof(Mask)];\r
+               if(EscapeZero == NO || (p[i] != 0 && p[i] != Mask[i % 20]))\r
+                       p[i] ^= Mask[i % 20];\r
        }\r
 }\r
 \r
 void UnmaskSettingsData(const char* Salt, int SaltLength, void* Data, DWORD Size, int EscapeZero)\r
 {\r
-       char Key[FMAX_PATH*2+1];\r
-       ulong Hash[5];\r
-       DWORD i;\r
-       BYTE Mask[20];\r
-       BYTE* p;\r
-       memcpy(&Key[0], SecretKey, SecretKeyLength);\r
-       memcpy(&Key[SecretKeyLength], Salt, SaltLength);\r
-       sha_memory(Key, SecretKeyLength + SaltLength, Hash);\r
-       // sha.cはビッグエンディアンのため\r
-       for(i = 0; i < 5; i++)\r
-               Hash[i] = _byteswap_ulong(Hash[i]);\r
-       memcpy(&Mask, &Hash, 20);\r
-       p = (BYTE*)Data;\r
-       for(i = 0; i < Size; i++)\r
-       {\r
-               if(EscapeZero == YES)\r
-               {\r
-                       if(p[i] != 0 && p[i] != Mask[i % sizeof(Mask)])\r
-                               p[i] ^= Mask[i % sizeof(Mask)];\r
-               }\r
-               else\r
-                       p[i] ^= Mask[i % sizeof(Mask)];\r
-       }\r
+       MaskSettingsData(Salt, SaltLength, Data, Size, EscapeZero);\r
 }\r
 \r
 void CalculateSettingsDataChecksum(void* Data, DWORD Size)\r