eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 сентября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: user99, zombi-vadim, sty (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Crackme с hash
Посл.ответ Сообщение

Ранг: 14.1 (новичок)
Статус: Участник

Создано: 5 июня 2019 05:48 · Поправил: RoKZaR New!
Цитата · Личное сообщение · #1

Доброго времени! Копаю крякми где пароль хэшируется и сравнивается с готовым значением. Можно ли как то получить пароль не полным перебором. Сразу говорю длина имени до 20 символов. Код и ссылки ниже. Мой метод перебора тоже.
Перебор:
Code:
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <iostream>
  4. #include <fstream>
  5. #include <windows.h>
  6. #include <string>
  7. #include <vector>
  8.  
  9.  
  10. using namespace std;
  11. string name;
  12. vector <char> bytename;
  13.  
  14. int sumBName = 0;
  15. int RESULT = 0;
  16. int Acc1 = 0;
  17. int Acc2 = 0;
  18. int Acc3 = 0;
  19. int Acc4 = 0;
  20. int namelen = 0;
  21. int WordNum = 0;
  22.  
  23.  
  24. int hashfunc(string name) {
  25.  
  26.          sumBName = 0;
  27.          RESULT = 0;
  28.          Acc1 = 0;
  29.          Acc2 = 0;
  30.          Acc3 = 0;
  31.          Acc4 = 0;
  32.          namelen = 0;
  33.  
  34.          vector<char>bytename(name.begin(), name.end());
  35.          namelen = name.size();
  36.          int Counter2 = 0;
  37.          int Counter = 0;
  38.          while (Counter < namelen) {
  39.                  sumBName = sumBName + bytename[Counter];
  40.                  Counter = Counter + 1;
  41.          }
  42.          Counter = 0;
  43.          while (Counter < namelen) {
  44.                  Acc1 = (Acc1 + bytename[Counter]) * sumBName ^ 0x9876;
  45.                  Counter = Counter + 1;
  46.          }
  47.          Counter = 0;
  48.          while (Counter < namelen) {
  49.                  Acc2 = (Acc2 + (bytename[Counter] ^ 0xffU) ^ Acc1) + 0xabcd123;
  50.                  Counter = Counter + 1;
  51.          }
  52.          RESULT = sumBName * 0x4d2;
  53.          Counter = 0;
  54.          while (Counter < sumBName) {
  55.                  Acc4 = Counter + Acc2 ^ sumBName ^ 0x4d200;
  56.                  RESULT = (Counter + 0x1234abU ^ RESULT + Counter ^ 0x50f00aa2) + Acc4 * Acc4 + -0xaaf;
  57.                  Counter2 = 0;
  58.                  while (Counter2 < namelen) {
  59.                         Acc3 = (RESULT * namelen - namelen ^ Counter2) - Acc1;
  60.                         RESULT = Acc3 * Acc3 ^ Acc1;
  61.                         Counter2 = Counter2 + 1;
  62.                  }
  63.                  Counter = Counter + 1;
  64.          }
  65.          return RESULT;
  66. }
  67.  
  68. inline void keep_window_open()
  69. {
  70.          cin.clear();
  71.          cout << "\nPlease enter a character to exit\n";
  72.          char ch;
  73.          cin >> ch;
  74.          return;
  75. }
  76.  
  77. int main()
  78. {
  79.          setlocale(LC_ALL, "Russian");
  80.          SetConsoleCP(1251);
  81.          SetConsoleOutputCP(1251);
  82.  
  83.          ifstream filepass("pass.txt");
  84.          while(!filepass.eof()){
  85.                  getline(filepass, name);
  86.                  hashfunc(name);
  87.                  WordNum += 1;
  88.                  if (RESULT == 0xcd65ab89 || RESULT ==0xa904a4ec || RESULT ==0xeca404a9 || RESULT == 0x89ab65cd) {
  89.                         cout << name << "=" << RESULT << "\n";
  90.                  }
  91.          }
  92.  
  93.          cout <<"BAD RESULT \n";
  94.          keep_window_open();
  95.          
  96. }


Ссылка на крякми: https://dropmefiles.com/yjP4R
Сильно не пинайте только постигаю азы программирования на плюсах и работаю с хэшами тоже


Ранг: 213.9 (наставник)
Статус: Участник

Создано: 5 июня 2019 05:58 New!
Цитата · Личное сообщение · #2

32 бита всего, пусть и с умножением, а на входе 63 в 20й степени (это если только английские символы и цифры). В чем проблема перебрать?

Ранг: 14.1 (новичок)
Статус: Участник

Создано: 5 июня 2019 06:05 New!
Цитата · Личное сообщение · #3

Тогда как можно найти коллизию к этому хэшу? Если без приколов. Только начинаю и хочу разобраться


Ранг: 213.9 (наставник)
Статус: Участник

Создано: 5 июня 2019 06:48 · Поправил: f13nd New!
Цитата · Личное сообщение · #4

RoKZaR пишет:
Тогда как можно найти коллизию к этому хэшу?

Искать и найти, полным перебором. У тебя многообразие на входе гораздо больше, чем на выходе, коллизий должен быть гориллион целый.

Немного оптимизировал твой алгоритм, правда за 10 минут ничего не нашлось:
Code:
  1. #include <stdlib.h>
  2. #include "stdafx.h"
  3.  
  4. unsigned int hashfunc(unsigned char *bytename){
  5.          unsigned int namelen=0,Acc1=0,Acc2=0,Acc3=0,Acc4=0,Counter2=0,Counter=0,sumBName=0,RESULT;
  6.          for (namelen=0;namelen<20;namelen++)if (bytename[namelen]==0)break;
  7.          while (Counter < namelen) {
  8.                  sumBName = sumBName + bytename[Counter];
  9.                  Counter = Counter + 1;
  10.          }
  11.          Counter = 0;
  12.          while (Counter < namelen) {
  13.                  Acc1 = (Acc1 + bytename[Counter]) * sumBName ^ 0x9876;
  14.                  Counter = Counter + 1;
  15.          }
  16.          Counter = 0;
  17.          while (Counter < namelen) {
  18.                  Acc2 = (Acc2 + (bytename[Counter] ^ 0xff) ^ Acc1) + 0xabcd123;
  19.                  Counter = Counter + 1;
  20.          }
  21.          RESULT = sumBName * 0x4d2;
  22.          Counter = 0;
  23.          while (Counter < sumBName) {
  24.                  Acc4 = Counter + Acc2 ^ sumBName ^ 0x4d200;
  25.                  RESULT = (Counter + 0x1234ab ^ RESULT + Counter ^ 0x50f00aa2) + Acc4 * Acc4 -0xaaf;
  26.                  Counter2 = 0;
  27.                  while (Counter2 < namelen) {
  28.                         Acc3 = (RESULT * namelen - namelen ^ Counter2) - Acc1;
  29.                         RESULT = Acc3 * Acc3 ^ Acc1;
  30.                         Counter2 = Counter2 + 1;
  31.                  }
  32.                  Counter = Counter + 1;
  33.          }
  34.          return RESULT;
  35. }
  36.  
  37. int _tmain(int argc, _TCHAR* argv[])
  38. {
  39.          unsigned int i,RESULT;
  40.          unsigned char pwd[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  41.          //pwd[0]='a';
  42.          //pwd[1]='q';
  43.          //pwd[2]='n';
  44.          //pwd[3]='L';
  45.          //pwd[4]='7';
  46.          //RESULT = hashfunc(pwd);
  47.          //printf("pwd=%s, RESULT=%.8X\r\n",pwd,RESULT);
  48.          while (true){
  49.                  RESULT = hashfunc(pwd);
  50.                  if (RESULT == 0xcd65ab89 || RESULT ==0xa904a4ec || RESULT ==0xeca404a9 || RESULT == 0x89ab65cd) {
  51.                         printf("pwd=%s, RESULT=%.8X\r\n",pwd,RESULT);
  52.                         break;
  53.                  }
  54.                  for (i=0;i<20;i++){
  55.                         if (pwd[i]==0){
  56.                               pwd[i]='a';break;
  57.                         } else if (pwd[i]>='a' && pwd[i]<'z'){
  58.                               pwd[i]++;break;
  59.                         } else if (pwd[i]=='z'){
  60.                               pwd[i]='A';break;
  61.                         } else if (pwd[i]>='A' && pwd[i]<'Z'){
  62.                               pwd[i]++;break;
  63.                         } else if (pwd[i]=='Z'){
  64.                               pwd[i]='0';break;
  65.                         } else if (pwd[i]>='0' && pwd[i]<'9'){
  66.                               pwd[i]++;break;
  67.                         } else if (pwd[i]=='9'){
  68.                               pwd[i]='a';
  69.                         }
  70.                  }
  71.                  if (i==20)break;
  72.          }
  73.          printf("done\r\n");
  74.          unsigned char s[32];
  75.          scanf("%s",&s);
  76.          return 0;

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

Добавлено спустя 1 час 59 минут
ЗЫ: подправил исходник на всякий случай. Коллизия aqnL7, фиг знает сколько считалось, можешь проверить. Кстати ты знаковый тип используешь, может быть поэтому не смог подобрать.

| Сообщение посчитали полезным: plutos, RoKZaR



Ранг: 508.5 (!)
Статус: Участник
_Вечный_Студент_

Создано: 5 июня 2019 10:02 New!
Цитата · Личное сообщение · #5

RoKZaR, f13nd

Поделитесь результатами: execution time, processor type, sample size и т.д.
Хотелось бы сравнить.


Ранг: 213.9 (наставник)
Статус: Участник

Создано: 5 июня 2019 10:23 New!
Цитата · Личное сообщение · #6

plutos, да я не засекал, запустил просто и своими делами занимался, через два часа заметил. Процессор заурядный i7-4790K, работало понятно одно ядро только, размер 6кб, собирал 2005й студией с дефолтными настройками. Совершенно точно можно если не на порядки, то в разы перебор ускорить, но для кастомного алгоритма, да еще из крякмиса, смысла нету.

Ранг: 14.1 (новичок)
Статус: Участник

Создано: 5 июня 2019 11:23 New!
Цитата · Личное сообщение · #7

f13nd пишет:
ЗЫ: подправил исходник на всякий случай. Коллизия aqnL7, фиг знает сколько считалось, можешь проверить. Кстати ты знаковый тип используешь, может быть поэтому не смог подобрать.

Тоже нашел эту коллизию. По времени примерно пару часов. А про тип это да, только познаю ещё. Скорее всего поэтому. Процессор мамы простой amd a4-4000.


Ранг: 213.9 (наставник)
Статус: Участник

Создано: 5 июня 2019 11:49 New!
Цитата · Личное сообщение · #8

dma
По-моему умением сделать хеловорлд в студии меньше всего кого-то можно удивить. Бывает нужна только потому что исходник легким движением руки под кейль переделывается, а отлаживать в студии проще.


Ранг: 298.4 (наставник)
Статус: Участник

Создано: 5 июня 2019 12:17 New!
Цитата · Личное сообщение · #9

Ранг: -13.4 (нарушитель)
Статус: Участник

Создано: 5 июня 2019 12:17 New!
Цитата · Личное сообщение · #10

f13nd пишет:
По-моему умением сделать хеловорлд в студии меньше всего кого-то можно удивить.


Ну так а я про что? ntldr вон тоже не видит разницы между хеловордом и каким-нибудь rootkits или bootkits.


Ранг: 508.5 (!)
Статус: Участник
_Вечный_Студент_

Создано: 5 июня 2019 13:15 · Поправил: plutos New!
Цитата · Личное сообщение · #11

f13nd пишет:
для кастомного алгоритма, да еще из крякмиса


для ad hoc алгоритма очень даже неплохо.


Ранг: 213.9 (наставник)
Статус: Участник

Создано: 5 июня 2019 13:33 New!
Цитата · Личное сообщение · #12

plutos пишет:
полезно иметь под рукой

Не понял что полезно иметь под рукой. Алгоритм, который вероятно с точки зрения криптографии любительская поделка или брутфорсер к нему, который больше никогда не понадобится?

Ранг: -13.4 (нарушитель)
Статус: Участник

Создано: 5 июня 2019 13:48 · Поправил: dma New!
Цитата · Личное сообщение · #13

DenCoder пишет:
dma
Ты не уважаешь логику


DenCoder, так очень неумных человеков, чаще всего и тянет к умным, так что с логикой тут, вроде, все в порядке.

Ранг: 3.5 (гость)
Статус: Участник

Создано: 5 июня 2019 14:40 New!
Цитата · Личное сообщение · #14

f13nd пишет:
Не понял что полезно иметь под рукой.


ну как же, вот такой козырный генератор!

for (i=0;i<20;i++){
&nbs
p; if (pwd[i]==0){
&nbs
p; pwd[i]='a';break;
&nbs
p; } else if (pwd[i]>='a' && pwd[i]<'z'){
&nbs
p; pwd[i]++;break;
&nbs
p; } else if (pwd[i]=='z'){
&nbs
p; pwd[i]='A';break;
&nbs
p; } else if (pwd[i]>='A' && pwd[i]<'Z'){
&nbs
p; pwd[i]++;break;
&nbs
p; } else if (pwd[i]=='Z'){
&nbs
p; pwd[i]='0';break;
&nbs
p; } else if (pwd[i]>='0' && pwd[i]<'9'){
&nbs
p; pwd[i]++;break;
&nbs
p; } else if (pwd[i]=='9'){
&nbs
p; pwd[i]='a';
&nbs
p; }
}
if (i==20)break;
 eXeL@B —› Вопросы новичков —› Crackme с hash

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS