• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

FFFTPのソースコードです。


Commit MetaInfo

Revision7cb12f483de9b9744b4435a7720da9110446bfdf (tree)
Zeit2014-01-11 18:47:44
Autors_kawamoto <s_kawamoto@user...>
Commiters_kawamoto

Log Message

Change the algorithm to encrypt all settings.
Add a confirmation when the settings of a future version exist.
Modify documents.

Ändern Zusammenfassung

Diff

Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
--- a/common.h
+++ b/common.h
@@ -1802,6 +1802,8 @@ int LoadSettingsFromFile(void);
18021802 // ポータブル版判定
18031803 int IsRegAvailable();
18041804 int IsIniAvailable();
1805+// バージョン確認
1806+int ReadSettingsVersion();
18051807
18061808 /*===== lvtips.c =====*/
18071809
--- a/doc/eng/FFFTP.txt
+++ b/doc/eng/FFFTP.txt
@@ -49,6 +49,9 @@ Changes in Ver.1.99
4949
5050 -- Fixed bugs of Select dialog.
5151
52+-- Changed to confirm how the settings will be saved when the settings of a
53+ future version exist in the registry.
54+
5255
5356 Outline
5457 -------
--- a/doc/eng/history.txt
+++ b/doc/eng/history.txt
@@ -21,6 +21,9 @@ Changes in Ver.1.99
2121
2222 -- Fixed bugs of Select dialog.
2323
24+-- Changed to confirm how the settings will be saved when the settings of a
25+ future version exist in the registry.
26+
2427 Changes in Ver.1.98g
2528 --------------------
2629
--- a/doc/jpn/FFFTP.txt
+++ b/doc/jpn/FFFTP.txt
@@ -53,6 +53,9 @@ Ver 1.99
5353
5454 E‘I‘ðƒ_ƒCƒAƒƒO‚ª³í‚É‹@”\‚µ‚È‚¢ƒoƒO‚ðC³‚µ‚Ü‚µ‚½B
5555
56+EƒŒƒWƒXƒgƒŠ‚ɏ«—ˆ‚̃o[ƒWƒ‡ƒ“‚̐ݒ肪‘¶Ý‚·‚éê‡‚ɐݒè‚Ì•Û‘¶•û–@‚ð
57+@Šm”F‚·‚é‚悤‚É‚µ‚Ü‚µ‚½B
58+
5659
5760 Ver 1.96dˆÈ‘O‚Ö–ß‚·ê‡
5861 -----------------------
--- a/doc/jpn/history.txt
+++ b/doc/jpn/history.txt
@@ -25,6 +25,9 @@ FFFTP
2525
2626 E‘I‘ðƒ_ƒCƒAƒƒO‚ª³í‚É‹@”\‚µ‚È‚¢ƒoƒO‚ðC³‚µ‚Ü‚µ‚½B
2727
28+EƒŒƒWƒXƒgƒŠ‚ɏ«—ˆ‚̃o[ƒWƒ‡ƒ“‚̐ݒ肪‘¶Ý‚·‚éê‡‚ɐݒè‚Ì•Û‘¶•û–@‚ð
29+@Šm”F‚·‚é‚悤‚É‚µ‚Ü‚µ‚½B
30+
2831 ¡Ver 1.98g
2932
3033 EWindows 8 (32bit/64bit)‚Å“®ì‚ðŠm”F‚µ‚Ü‚µ‚½B
--- a/main.c
+++ b/main.c
@@ -265,6 +265,8 @@ int EncryptAllSettings = NO;
265265 int AutoRefreshFileList = YES;
266266 // 古い処理内容を消去
267267 int RemoveOldLog = NO;
268+// バージョン確認
269+int ReadOnlySettings = NO;
268270
269271
270272
@@ -500,13 +502,33 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow)
500502 if(IsRegAvailable() == YES && IsIniAvailable() == NO)
501503 {
502504 if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(ini_from_reg_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)
503- {
504505 ImportPortable = YES;
505- ForceIni = NO;
506- RegType = REGTYPE_REG;
506+ }
507+ }
508+ // バージョン確認
509+ if(ReadSettingsVersion() > VER_NUM)
510+ {
511+ if(IsRegAvailable() == YES && IsIniAvailable() == NO)
512+ {
513+ switch(MessageBox(GetMainHwnd(), MSGJPN351, "FFFTP", MB_YESNOCANCEL | MB_DEFBUTTON2))
514+ {
515+ case IDCANCEL:
516+ ReadOnlySettings = YES;
517+ break;
518+ case IDYES:
519+ break;
520+ case IDNO:
521+ ImportPortable = YES;
522+ break;
507523 }
508524 }
509525 }
526+ // ポータブル版判定
527+ if(ImportPortable == YES)
528+ {
529+ ForceIni = NO;
530+ RegType = REGTYPE_REG;
531+ }
510532
511533 // AllocConsole();
512534
--- a/mesg-eng.h
+++ b/mesg-eng.h
@@ -349,6 +349,7 @@
349349 #define MSGJPN348 _Tu8("EUC", "EUC")
350350 #define MSGJPN349 _Tu8("UTF-8", "UTF-8")
351351 #define MSGJPN350 _Tu8("UTF-8 HFS+", "UTF-8 HFS+")
352+#define MSGJPN351 _Tu8("The settings of a newer version are detected.\nThe settings may not be read correctly, or they will be changed when they are overwritten for this version.\nChoose 'Yes' to overwrite settings for this version.\nChoose 'No' to save settings to the INI file.\nChoose 'Cancel' to load settings as read only.", "The settings of a newer version are detected.\nThe settings may not be read correctly, or they will be changed when they are overwritten for this version.\nChoose 'Yes' to overwrite settings for this version.\nChoose 'No' to save settings to the INI file.\nChoose 'Cancel' to load settings as read only.")
352353 #if defined(HAVE_TANDEM)
353354 #define MSGJPN2000 _Tu8("NonStop Server", "NonStop Server")
354355 #define MSGJPN2001 _Tu8("OSS<->GUARDIAN Switch(&O)", "OSS<->GUARDIAN Switch(&O)")
--- a/mesg-jpn.h
+++ b/mesg-jpn.h
@@ -349,6 +349,7 @@
349349 #define MSGJPN348 _Tu8("EUC", "EUC")
350350 #define MSGJPN349 _Tu8("UTF-8", "UTF-8")
351351 #define MSGJPN350 _Tu8("UTF-8 HFS+", "UTF-8 HFS+")
352+#define MSGJPN351 _Tu8("新しいバージョンの設定が検出されました.\nこのバージョンでは一部の設定が正しく読み込まれない、またはこのバージョンで設定を上書きすると設定が変化する可能性があります.\nこのバージョン用に設定を上書きして保存するには「はい」を選択してください.\n設定をレジストリではなくINIファイルに保存するには「いいえ」を選択してください.\n読み取り専用で設定を読み込むには「キャンセル」を選択してください.", "\xE6\x96\xB0\xE3\x81\x97\xE3\x81\x84\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\xAE\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\x8C\xE6\xA4\x9C\xE5\x87\xBA\xE3\x81\x95\xE3\x82\x8C\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F.\n\xE3\x81\x93\xE3\x81\xAE\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\xA7\xE3\x81\xAF\xE4\xB8\x80\xE9\x83\xA8\xE3\x81\xAE\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\x8C\xE6\xAD\xA3\xE3\x81\x97\xE3\x81\x8F\xE8\xAA\xAD\xE3\x81\xBF\xE8\xBE\xBC\xE3\x81\xBE\xE3\x82\x8C\xE3\x81\xAA\xE3\x81\x84\xE3\x80\x81\xE3\x81\xBE\xE3\x81\x9F\xE3\x81\xAF\xE3\x81\x93\xE3\x81\xAE\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\xA7\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE4\xB8\x8A\xE6\x9B\xB8\xE3\x81\x8D\xE3\x81\x99\xE3\x82\x8B\xE3\x81\xA8\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\x8C\xE5\xA4\x89\xE5\x8C\x96\xE3\x81\x99\xE3\x82\x8B\xE5\x8F\xAF\xE8\x83\xBD\xE6\x80\xA7\xE3\x81\x8C\xE3\x81\x82\xE3\x82\x8A\xE3\x81\xBE\xE3\x81\x99.\n\xE3\x81\x93\xE3\x81\xAE\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE7\x94\xA8\xE3\x81\xAB\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE4\xB8\x8A\xE6\x9B\xB8\xE3\x81\x8D\xE3\x81\x97\xE3\x81\xA6\xE4\xBF\x9D\xE5\xAD\x98\xE3\x81\x99\xE3\x82\x8B\xE3\x81\xAB\xE3\x81\xAF\xE3\x80\x8C\xE3\x81\xAF\xE3\x81\x84\xE3\x80\x8D\xE3\x82\x92\xE9\x81\xB8\xE6\x8A\x9E\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84.\n\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE3\x83\xAC\xE3\x82\xB8\xE3\x82\xB9\xE3\x83\x88\xE3\x83\xAA\xE3\x81\xA7\xE3\x81\xAF\xE3\x81\xAA\xE3\x81\x8FINI\xE3\x83\x95\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB\xE3\x81\xAB\xE4\xBF\x9D\xE5\xAD\x98\xE3\x81\x99\xE3\x82\x8B\xE3\x81\xAB\xE3\x81\xAF\xE3\x80\x8C\xE3\x81\x84\xE3\x81\x84\xE3\x81\x88\xE3\x80\x8D\xE3\x82\x92\xE9\x81\xB8\xE6\x8A\x9E\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84.\n\xE8\xAA\xAD\xE3\x81\xBF\xE5\x8F\x96\xE3\x82\x8A\xE5\xB0\x82\xE7\x94\xA8\xE3\x81\xA7\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE8\xAA\xAD\xE3\x81\xBF\xE8\xBE\xBC\xE3\x82\x80\xE3\x81\xAB\xE3\x81\xAF\xE3\x80\x8C\xE3\x82\xAD\xE3\x83\xA3\xE3\x83\xB3\xE3\x82\xBB\xE3\x83\xAB\xE3\x80\x8D\xE3\x82\x92\xE9\x81\xB8\xE6\x8A\x9E\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84.")
352353 #if defined(HAVE_TANDEM)
353354 #define MSGJPN2000 _Tu8("NonStop Server", "NonStop Server")
354355 #define MSGJPN2001 _Tu8("OSS<->GUARDIAN 切り替え(&O)", "OSS<->GUARDIAN \xE5\x88\x87\xE3\x82\x8A\xE6\x9B\xBF\xE3\x81\x88(&O)")
--- a/registry.c
+++ b/registry.c
@@ -221,6 +221,8 @@ extern int EncryptAllSettings;
221221 extern int AutoRefreshFileList;
222222 // 古い処理内容を消去
223223 extern int RemoveOldLog;
224+// バージョン確認
225+extern int ReadOnlySettings;
224226
225227 /*----- マスタパスワードの設定 ----------------------------------------------
226228 *
@@ -350,6 +352,10 @@ void SaveRegistry(void)
350352 if(EncryptSettingsError == YES)
351353 return;
352354
355+ // バージョン確認
356+ if(ReadOnlySettings == YES)
357+ return;
358+
353359 SetRegType(RegType);
354360 if(CreateReg("FFFTP", &hKey3) == FFFTP_SUCCESS)
355361 {
@@ -372,7 +378,13 @@ void SaveRegistry(void)
372378 EncryptSettings = EncryptAllSettings;
373379 memset(&EncryptSettingsChecksum, 0, 20);
374380
375- if(CreateSubKey(hKey3, "Options", &hKey4) == FFFTP_SUCCESS)
381+ // 全設定暗号化対応
382+// if(CreateSubKey(hKey3, "Options", &hKey4) == FFFTP_SUCCESS)
383+ if(EncryptAllSettings == YES)
384+ strcpy(Str, "EncryptedOptions");
385+ else
386+ strcpy(Str, "Options");
387+ if(CreateSubKey(hKey3, Str, &hKey4) == FFFTP_SUCCESS)
376388 {
377389 WriteIntValueToReg(hKey4, "NoSave", SuppressSave);
378390
@@ -683,6 +695,29 @@ void SaveRegistry(void)
683695 // 全設定暗号化対応
684696 EncryptSettings = NO;
685697 WriteBinaryToReg(hKey3, "EncryptAllChecksum", &EncryptSettingsChecksum, 20);
698+ if(EncryptAllSettings == YES)
699+ {
700+ if(RegType == REGTYPE_REG)
701+ {
702+ if(RegCreateKeyEx(hKey3, "Options", 0, "", REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, (HKEY*)&hKey4, NULL) == ERROR_SUCCESS)
703+ {
704+ for(i = 0; ; i++)
705+ {
706+ sprintf(Str, "Host%d", i);
707+ if(RegDeleteKey(hKey4, Str) != ERROR_SUCCESS)
708+ break;
709+ }
710+ for(i = 0; ; i++)
711+ {
712+ sprintf(Str, "History%d", i);
713+ if(RegDeleteKey(hKey4, Str) != ERROR_SUCCESS)
714+ break;
715+ }
716+ RegCloseKey(hKey4);
717+ }
718+ RegDeleteKey(hKey3, "Options");
719+ }
720+ }
686721 CloseReg(hKey3);
687722 }
688723 return;
@@ -773,7 +808,13 @@ int LoadRegistry(void)
773808 }
774809 }
775810
776- if(OpenSubKey(hKey3, "Options", &hKey4) == FFFTP_SUCCESS)
811+ // 全設定暗号化対応
812+// if(OpenSubKey(hKey3, "Options", &hKey4) == FFFTP_SUCCESS)
813+ if(EncryptAllSettings == YES)
814+ strcpy(Str, "EncryptedOptions");
815+ else
816+ strcpy(Str, "Options");
817+ if(OpenSubKey(hKey3, Str, &hKey4) == FFFTP_SUCCESS)
777818 {
778819 ReadIntValueFromReg(hKey4, "WinPosX", &WinPosX);
779820 ReadIntValueFromReg(hKey4, "WinPosY", &WinPosY);
@@ -1277,6 +1318,24 @@ void ClearRegistry(void)
12771318 RegCloseKey(hKey4);
12781319 }
12791320 RegDeleteKey(hKey3, "Options");
1321+ // 全設定暗号化対応
1322+ if(RegCreateKeyEx(hKey3, "EncryptedOptions", 0, "", REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey4, &Dispos) == ERROR_SUCCESS)
1323+ {
1324+ for(i = 0; ; i++)
1325+ {
1326+ sprintf(Str, "Host%d", i);
1327+ if(RegDeleteKey(hKey4, Str) != ERROR_SUCCESS)
1328+ break;
1329+ }
1330+ for(i = 0; ; i++)
1331+ {
1332+ sprintf(Str, "History%d", i);
1333+ if(RegDeleteKey(hKey4, Str) != ERROR_SUCCESS)
1334+ break;
1335+ }
1336+ RegCloseKey(hKey4);
1337+ }
1338+ RegDeleteKey(hKey3, "EncryptedOptions");
12801339 RegCloseKey(hKey3);
12811340 }
12821341 RegDeleteKey(hKey2, "FFFTP");
@@ -3186,6 +3245,7 @@ DWORD GetRandamDWRODValue(void)
31863245 }
31873246
31883247 // 全設定暗号化対応
3248+// 内部状態推定対策としてハッシュの160ビットのうち80ビットのみを鍵として使用
31893249 void MaskSettingsData(const char* Salt, int SaltLength, void* Data, DWORD Size, int EscapeZero)
31903250 {
31913251 char Key[FMAX_PATH*2+1];
@@ -3193,23 +3253,23 @@ void MaskSettingsData(const char* Salt, int SaltLength, void* Data, DWORD Size,
31933253 DWORD i;
31943254 DWORD j;
31953255 ulong Hash[5];
3196- BYTE Mask[20];
3256+ BYTE Mask[10];
31973257 memcpy(&Key[0], SecretKey, SecretKeyLength);
31983258 memcpy(&Key[SecretKeyLength], Salt, SaltLength);
31993259 p = (BYTE*)Data;
32003260 for(i = 0; i < Size; i++)
32013261 {
3202- if(i % 20 == 0)
3262+ if(i % 10 == 0)
32033263 {
32043264 memcpy(&Key[SecretKeyLength + SaltLength], &i, 4);
32053265 sha_memory(Key, SecretKeyLength + SaltLength + 4, Hash);
32063266 // sha.cはビッグエンディアンのため
32073267 for(j = 0; j < 5; j++)
32083268 Hash[j] = _byteswap_ulong(Hash[j]);
3209- memcpy(&Mask, &Hash, 20);
3269+ memcpy(&Mask, &Hash, 10);
32103270 }
3211- if(EscapeZero == NO || (p[i] != 0 && p[i] != Mask[i % 20]))
3212- p[i] ^= Mask[i % 20];
3271+ if(EscapeZero == NO || (p[i] != 0 && p[i] != Mask[i % 10]))
3272+ p[i] ^= Mask[i % 10];
32133273 }
32143274 }
32153275
@@ -3261,3 +3321,28 @@ int IsIniAvailable()
32613321 return Sts;
32623322 }
32633323
3324+// バージョン確認
3325+int ReadSettingsVersion()
3326+{
3327+ void *hKey3;
3328+ int i;
3329+ int Version;
3330+
3331+ SetRegType(REGTYPE_INI);
3332+ if((i = OpenReg("FFFTP", &hKey3)) != FFFTP_SUCCESS)
3333+ {
3334+ if(AskForceIni() == NO)
3335+ {
3336+ SetRegType(REGTYPE_REG);
3337+ i = OpenReg("FFFTP", &hKey3);
3338+ }
3339+ }
3340+ Version = INT_MAX;
3341+ if(i == FFFTP_SUCCESS)
3342+ {
3343+ ReadIntValueFromReg(hKey3, "Version", &Version);
3344+ CloseReg(hKey3);
3345+ }
3346+ return Version;
3347+}
3348+