Сейчас на форуме: cppasm, asfa (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Алгоритм генерации crackme
Посл.ответ Сообщение

Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 апреля 2016 00:39
· Личное сообщение · #1

Разбирал Этот crackme теперь думал написать к нему keygen так как к своему нику пароль нашел но не могу разобрать алгоритм генерации! я писал уже 3-4 кейгена на дельфи но там было просто тут не понимаю!вопрос: Мне надо учить с++ и просто прикрепить к кейгену Этот алгоритм не разбирая или же Это можно и на дельфи записать разобрав все пошагово ?

c599_24.04.2016_EXELAB.rU.tgz - CuTedEvil CrackMe 1.exe




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 24 апреля 2016 01:58
· Личное сообщение · #2

412512 пишет:
или же Это можно и на дельфи записать разобрав все пошагово

Да написать-то можно на чем угодно, главное алгоритм разобрать.
Кстати, ваше сообщение тоже что-то вроде crackme: попробуй сперва разобрать!

-----
Give me a HANDLE and I will move the Earth.


| Сообщение посчитали полезным: Gideon Vi


Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 24 апреля 2016 03:58 · Поправил: Gideon Vi
· Личное сообщение · #3

plutos пишет:
Кстати, ваше сообщение тоже что-то вроде crackme: попробуй сперва разобрать!


в шапке же четко написано: ищется алгоритм для генерации crackme. Видимо ТС хочет поставить на поток создание этих самых crackme. Или в топике речь о чем-то другом?

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


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 24 апреля 2016 06:21
· Личное сообщение · #4

Gideon Vi пишет:
Видимо ТС хочет поставить на поток создание этих самых crackme.


А ведь и правда! Слона-то я и не заметил.

-----
Give me a HANDLE and I will move the Earth.





Ранг: 196.6 (ветеран), 11thx
Активность: 0.070.01
Статус: Участник

Создано: 24 апреля 2016 14:38
· Личное сообщение · #5

"только у нас вы сможете приобрести самые лучшие коды для самых сложных crackme"




Ранг: 56.2 (постоянный), 14thx
Активность: 0.120
Статус: Участник

Создано: 24 апреля 2016 17:09
· Личное сообщение · #6

а как нашли пароль для своего ника опишите действия интересно.




Ранг: 57.7 (постоянный), 49thx
Активность: 0.070
Статус: Участник

Создано: 27 апреля 2016 05:15 · Поправил: Inffo
· Личное сообщение · #7

412512, script_kidis Мне тоже интересно)

412512
Вот примерно так надо было сделать ну разобраться как и куда что идет ;)

Кстати, вопрос спецам, почему нельзя в 5-ом символе использовать букву?)

И еще, не знаю почему крякмис для новичка, попытался на бумаге разложить нифига не получилось, написал брут) Или новички брутом должны уметь пользоваться?)

0906_27.04.2016_EXELAB.rU.tgz - KeyGen_CrackMe.exe




Ранг: 56.2 (постоянный), 14thx
Активность: 0.120
Статус: Участник

Создано: 29 апреля 2016 18:12
· Личное сообщение · #8

412512 я так понял разбора полётов не будет)



Ранг: 6.7 (гость), 2thx
Активность: 0.01=0.01
Статус: Участник

Создано: 30 апреля 2016 21:34 · Поправил: ambro83
· Личное сообщение · #9

А чего там такого в этом крякме? Он же сам свой ответ внутри генерирует. Вроде так.


Code:
  1. LRESULT __stdcall DialogFunc(HWND hWnd_, UINT Msg, WPARAM wParam, LPARAM lParam)
  2. {
  3.   unsigned int i; // ecx@9
  4.   int v5; // eax@11
  5.   int j; // ecx@12
  6.   char *v7; // esi@15
  7.   int v8; // eax@15
  8.   int v9; // eax@16
  9.   signed int v10; // ecx@17
  10.   char *key_ptr; // esi@17
  11.   char *res_ptr; // edi@17
  12.  
  13.   switch ( Msg )
  14.   {
  15.     case 0x110u:
  16.       hWnd = hWnd_;
  17.       break;
  18.     case 0x111u:
  19.       switch ( (unsigned __int16)wParam )
  20.       {
  21.         case 0x2711u:
  22.           SendMessageA(hWnd_, 0x10u, 0, 0);
  23.           break;
  24.         case 0x3EDu:
  25.           if ( GetDlgItemTextA(hWnd, 1002, name, 255) )
  26.           {
  27.             if ( GetDlgItemTextA(hWnd, 1004, key, 255) )
  28.             {
  29.   
  30.               // Здесь мы исходное имя немного модифицируем. Не знаю, как там на Дельфи, есть ли операция 
  31.               // битового вращения rol
  32.               for ( i = 0; i <= 3; ++i )
  33.               {
  34.                 v5 = __ROL4__(*(_DWORD *)&name[+ 1] ^ *(_DWORD *)&name[i], 2);
  35.                 *(_DWORD *)&modified_name[4 * i] = v5;
  36.               }
  37.  
  38.               // Здесь еще какой-то ксор идет
  39.               for ( j = 0; j != 17; ++j )
  40.                 modified_name[j] ^= modified_name[+ 1] ^ 7;
  41.  
  42.               // Здесь из того, что наксорили создаем новую строку, которая и является ответом к загадке
  43.               v7 = &res[-1];
  44.               v7[2] = modified_name[0];
  45.               v7[3] = modified_name[1];
  46.               v7[1] = modified_name[14];
  47.               v7[15] = modified_name[2];
  48.               v7[9] = modified_name[6];
  49.               v7[7] = modified_name[3];
  50.               v7[5] = modified_name[5];
  51.               v7[4] = modified_name[8];
  52.               v7[6] = modified_name[9];
  53.               v7[12] = modified_name[4];
  54.               v7[10] = modified_name[7];
  55.               v7[8] = modified_name[10];
  56.               v7[11] = modified_name[12];
  57.               v7[13] = modified_name[11];
  58.               v7[14] = modified_name[13];
  59.               v7[17] = modified_name[1];
  60.               v7[16] = modified_name[2];
  61.               v7[21] = modified_name[5];
  62.               v7[25] = modified_name[4];
  63.               v7[19] = modified_name[6];
  64.               v7[22] = modified_name[0];
  65.               v7[18] = modified_name[3];
  66.               v7[23] = modified_name[9];
  67.               v7[20] = modified_name[10];
  68.               v7[26] = modified_name[7];
  69.               v7[24] = modified_name[8];
  70.               v7[27] = modified_name[13];
  71.               v7[29] = modified_name[14];
  72.               v7[15] = modified_name[11];
  73.               v7[28] = modified_name[12];
  74.               v7[32] = 'C';
  75.               v7[29] = 'u';
  76.               v7[31] = 'T';
  77.               v7[30] = 'e';
  78.  
  79.               // А здесь сравниваем, что получилось
  80.               v8 = lstrlenA(key); // длина введенного ключа
  81.               if ( v8 )  // если длина ключа ненулевая
  82.               {
  83.                 v9 = __ROL4__(v8, 3); // v9 = v8 * 8
  84.                 if ( v9 == 0x100 )  // если v9 = 0x100, т.е. v8 = 0x20 - длина ключа равна 32, то проверяем дальше
  85.                 {
  86.  
  87.                   // дальше просто сравнение двух строк, одна - введенный пользователем ключ, другая - валидный ключ
  88.                   v10 = 0x2FE;
  89.                   key_ptr = key;
  90.                   res_ptr = res;
  91.                   while ( *res_ptr )
  92.                   {
  93.                     if ( *key_ptr == *res_ptr )
  94.                     {
  95.                       ++key_ptr;
  96.                       ++res_ptr;
  97.                       --v10; // это я не знаю зачем, лишние детали
  98.                       if ( v10 )
  99.                         continue;
  100.                     }
  101.                     return 0; // сработает только если длина строки результата = 0x2FE. Т.е. вообще не сработает
  102.                   }
  103.                   MessageBoxA(hWnd, Text, Caption, 0); // Пишет что ключ годный
  104.                 }
  105.               }
  106.             }
  107.             else
  108.             {
  109.               MessageBoxA(hWnd, aSorryYouMust_0, Caption, 0);
  110.             }
  111.           }
  112.           else
  113.           {
  114.             MessageBoxA(hWnd, aSorryYouMustEn, Caption, 0);
  115.           }
  116.           break;
  117.         case 0x3EFu:
  118.           MessageBoxA(hWnd, aWellThisCrackM, Caption, 0);
  119.           break;
  120.         case 0x3EEu:
  121.           ExitProcess(0);
  122.           break;
  123.       }
  124.       break;
  125.     case 0x10u:
  126.       DestroyWindow(hWnd_);
  127.       break;
  128.     default:
  129.       if ( Msg != 2 )
  130.         return DefWindowProcA(hWnd_, Msg, wParam, lParam);
  131.       PostQuitMessage(0);
  132.       break;
  133.   }
  134.   return 0;
  135. }


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



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 01 мая 2016 01:30 · Поправил: dosprog
· Личное сообщение · #10

ambro83 пишет:
А чего там такого в этом крякме? Он же сам свой ответ внутри генерирует. Вроде так.

Вроде да.. - Ну, тогда вот так: 4f49_01.05.2016_EXELAB.rU.tgz - CuTedEvil.rar


--Добавлено--

Inffo пишет:
Кстати, вопрос спецам, почему нельзя в 5-ом символе использовать букву?)

Да, почему? - Всё там можно..






 eXeL@B —› Вопросы новичков —› Алгоритм генерации crackme
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати