Сейчас на форуме: _MBK_ (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Расшифровка пароля на CryptoAPI
Посл.ответ Сообщение

Ранг: 40.4 (посетитель), 3thx
Активность: 0.080
Статус: Участник

Создано: 06 октября 2010 20:17 · Поправил: Модератор
· Личное сообщение · #1

Всем доброго времяпрепровождения форумчане, вот понадобилось одну прогу ломануть, суть её состоит в том, что она играет простенькую midi музычку, нужно угадать из какой она (музыка) игры и ввести название в соотв. поле. Но т.к я не геймер и названия игры не знаю, (хотя что-то эта музыка мне все же напоминает я её разреверсил и узнал, что данная функция:
Code:
  1.   
  2. /*401244*/  PUSH EAX
  3. /*401245*/  PUSH 10
  4. /*401247*/  PUSH gui.0040300C
  5. /*40124C*/  CALL gui.004012AA


Оперирует со следующими Win32 API:
1. CryptAcquireContextA
2. CryptCreateHash
3. CryptHashData
4. CryptDeriveKey - все ф-и из advapi32.dll
и т.д... Очевидно, что прога генерирует хешики а потом сравнивает полученный результат.

В общем, т.к я с этим ни разу не сталкивался. прошу помощи у вас. Просто я не представляю, как выковыривать из этих хешей истинный пароль . Ссылка на прогу в аттаче (написана на асме). Всем откликнувшимся огромное спасибо и низкий поклон!

bc92_06.10.2010_CRACKLAB.rU.tgz - gui.rar




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 06 октября 2010 20:33
· Личное сообщение · #2

как бы ответ в вопросе
из хешей пароль не ковыряется, только брутом
если ты не ошибся в терминологии

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 40.4 (посетитель), 3thx
Активность: 0.080
Статус: Участник

Создано: 06 октября 2010 20:36
· Личное сообщение · #3

Isaev
Не, тама есть функции для расшифровки хешей. Т.е это не как с md5, только шифровка и все ,ещё и дешифровать можно (CryptHashDecrypt).




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 06 октября 2010 20:39 · Поправил: Isaev
· Личное сообщение · #4

если можно дешифровать, то это не хеш, а крипто я бы сказал
хеш по определению не обратима в идеале

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 40.4 (посетитель), 3thx
Активность: 0.080
Статус: Участник

Создано: 06 октября 2010 20:44
· Личное сообщение · #5

Isaev
А твоя подпись, это хеш или крипто?




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 06 октября 2010 20:53 · Поправил: Isaev
· Личное сообщение · #6

Это позиционная система счисления
не признал что ли?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 40.4 (посетитель), 3thx
Активность: 0.080
Статус: Участник

Создано: 06 октября 2010 20:58
· Личное сообщение · #7

Isaev
Ясно. Так что насчет проги?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2010 21:17
· Личное сообщение · #8

ZLOvarZLOvar то, что функция называется CryptHashDecrypt означает лишь, что она дешифрует буфер с помощью некоего хеша.

-----
Yann Tiersen best and do not fuck




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 06 октября 2010 21:29
· Личное сообщение · #9

введенный номер хэшируется SHA-1
этот хэш берется как ключ (CryptDeriveKey)
после чего этим ключем расшифровывается некая константа
вроде так, хотя могу и ошибаться.



Ранг: 40.4 (посетитель), 3thx
Активность: 0.080
Статус: Участник

Создано: 06 октября 2010 21:33 · Поправил: ZLOvar
· Личное сообщение · #10

Я разобрался. Вот пароль для проги:
Ninja Gaiden




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 06 октября 2010 21:39
· Личное сообщение · #11

Раз разобрался, тогда закрою.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 06 октября 2010 22:32
· Личное сообщение · #12

Code:
  1. BOOL __stdcall VerifyPassword(int CryptedPwd, SIZE_T nSize, LPCSTR pbData)
  2. {
  3.   BOOL result;
  4.   BYTE *sPassword;
  5.   HCRYPTKEY hKey;
  6.   HCRYPTHASH hHash;
  7.   HCRYPTPROV hProv;
  8.   result = FALSE;
  9.   if ( CryptAcquireContextA(&hProv, 0, 0, PROV_RSA_AES, 0)
  10.     || CryptAcquireContextA(&hProv, 0, 0, PROV_RSA_AES, CRYPT_NEWKEYSET)
  11.   {
  12.     if ( CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash) )
  13.     {
  14.       if ( CryptHashData(hHash, (const BYTE *)pbData, lstrlenA(pbData), 0) )
  15.       {
  16.         if ( CryptDeriveKey(hProv, CALG_AES_256, hHash, 0x1000000u, &hKey) )
  17.         {
  18.           CryptDestroyHash(hHash);
  19.            sPassword = (BYTE *)VirtualAlloc(0, nSize, MEM_COMMIT, 4);
  20.           memfill(sPassword, nSize, 0);
  21.           memcpy(CryptedPwd, sPassword, nSize);
  22.           if ( CryptDecrypt(hKey, 0, 1, 0, sPassword, &nSize) )
  23.           {
  24.             sPassword[nSize] = 0;
  25.             MessageBoxA(0, (LPCSTR)sPassword, "Пароль от архива", 0);
  26.             CryptDestroyKey(hKey);
  27.             CryptReleaseContext(hProv, 0);
  28.             VirtualFree(sPassword, 0, MEM_RELEASE);
  29.             result = TRUE;
  30.           }
  31.         }
  32.       }
  33.     }
  34.   }
  35.   return result;
  36. }


-----
EnJoy!



 eXeL@B —› Вопросы новичков —› Расшифровка пароля на CryptoAPI
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати