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

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


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

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

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

 eXeL@B —› Вопросы новичков —› Написание кейгена для кейгенми
Посл.ответ Сообщение

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

Создано: 9 марта 2019 18:53 · Поправил: RoKZaR New!
Цитата · Личное сообщение · #1

Здравствуйте! Разбираю простой кейгенми. Алгоритм разобрал но не могу понять как переписать его на с++. Пока не умею еще делать классические приложения. Только консольные. Так что GetDlgItemInt не
предлагать. алгоритм прикладываю. Основная проблема как строку предположим "RoKZaR" Перевести в hex. Остальное мелочи.
Code:
  1. 004012A8 | 55                       | push ebp                                |
  2. 004012A9 | 8BEC                     | mov ebp,esp                             |
  3. 004012AB | 803D B4124000 CC         | cmp byte ptr ds:[4012B4],CC             |
  4. 004012B2 | 74 53                    | je keygenme.401307                      |
  5. 004012B4 | 33C0                     | xor eax,eax                             |
  6. 004012B6 | 33C9                     | xor ecx,ecx                             |
  7. 004012B8 | 803D D4124000 CC         | cmp byte ptr ds:[4012D4],CC             |
  8. 004012BF | 74 46                    | je keygenme.401307                      |
  9. 004012C1 | 33D2                     | xor edx,edx                             | edx:"RoKZaR"
  10. 004012C3 | 8B55 08                  | mov edx,dword ptr ss:[ebp+8]            | [ebp+8]:"RoKZaR"
  11. 004012C6 | 8A02                     | mov al,byte ptr ds:[edx]                | edx:"RoKZaR"
  12. 004012C8 | 84C0                     | test al,al                              |
  13. 004012CA | 74 08                    | je keygenme.4012D4                      |
  14. 004012CC | 03C8                     | add ecx,eax                             |
  15. 004012CE | C1C1 08                  | rol ecx,8                               |
  16. 004012D1 | 42                       | inc edx                                 | edx:"RoKZaR"
  17. 004012D2 | EB F2                    | jmp keygenme.4012C6                     |
  18. 004012D4 | 83F1 02                  | xor ecx,2                               |
  19. 004012D7 | 83E9 50                  | sub ecx,50                              |
  20. 004012DA | 81F1 37130000            | xor ecx,1337                            |
  21. 004012E0 | 56                       | push esi                                |
  22. 004012E1 | 66:8B35 79614000         | mov si,word ptr ds:[406179]             |
  23. 004012E8 | 66:03CE                  | add cx,si                               |
  24. 004012EB | 803D FA124000 CC         | cmp byte ptr ds:[4012FA],CC             |
  25. 004012F2 | 74 13                    | je keygenme.401307                      |
  26. 004012F4 | 5E                       | pop esi                                 |
  27. 004012F5 | A1 5F624000              | mov eax,dword ptr ds:[40625F]           |
  28. 004012FA | 3BC1                     | cmp eax,ecx                             |
  29. 004012FC | 75 04                    | jne keygenme.401302                     |
  30. 004012FE | 33C0                     | xor eax,eax                             |
  31. 00401300 | EB 0E                    | jmp keygenme.401310                     |
  32. 00401302 | 33C0                     | xor eax,eax                             |
  33. 00401304 | 40                       | inc eax                                 |
  34. 00401305 | EB 10                    | jmp keygenme.401317                     |
  35. 00401307 | C605 63624000 01         | mov byte ptr ds:[406263],1              |
  36. 0040130E | EB 07                    | jmp keygenme.401317                     |
  37. 00401310 | C605 63624000 00         | mov byte ptr ds:[406263],0              |
  38. 00401317 | C9                       | leave                                   |
  39. 00401318 | C2 0400                  | ret 4                                   |

Сам кейгенми https://dropmefiles.com/tvXaL
Для проверки RoKZaR:1521736625
Заранее спасибо

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


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

Создано: 9 марта 2019 20:38 New!
Цитата · Личное сообщение · #2

google -> c++ str to hex

Ранг: 65.5 (постоянный)
Статус: Участник

Создано: 9 марта 2019 20:56 · Поправил: Boostyq New!
Цитата · Личное сообщение · #3

А зачем вам ее в хекс переводить? В вашем кейнеге это не нужно, тут просто читаются байты и все.
Code:
  1. uint32_t ROL32(uint32_t value, uint32_t count)
  2. {
  3.          count &= 31;
  4.          return (value << count) | (value >> ((~count + 1) & 31));
  5. }
  6.  
  7. uint32_t GenerateSerial(const char* input)
  8. {
  9.          uint32_t res = 0;
  10.          
  11.          while (*input != '\0')
  12.          {
  13.                  res += (uint32_t)*input;
  14.                  res = ROL32(res, 8);
  15.                  input++;
  16.          }
  17.  
  18.          res ^= 0x2;
  19.          res -= 0x50;
  20.          res ^= 0x1337;
  21.          res += g_nUnknownAdditive; // *(uint16_t*)0x406179 = 0x7E3; // возможно меняется
  22.          
  23.          return res;
  24. }

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

Создано: 9 марта 2019 22:10 · Поправил: RoKZaR New!
Цитата · Личное сообщение · #4

Разобрался в общем. Единственное операцию rol пришлось делать асм вставкой. Сколько не гуглил нет нормальных,правильных и адекватных решений как сделать rol. Реализация :
Code:
  1. #include<iostream>
  2. #include<fstream>
  3. #include<sstream>
  4. #include<cmath>
  5. #include<cstdlib>
  6. #include<string>
  7. #include<list>
  8. #include<vector>
  9. #include<algorithm>
  10. #include<stdexcept>
  11. #include<Windows.h>
  12.  
  13. using namespace std;
  14.  
  15. string name = "";
  16. int size_name = 0;
  17. int counter = 0;
  18. int calc_serial = 0;
  19.  
  20. inline void keep_window_open()
  21. {
  22.          cin.clear();
  23.          cout << "Please enter a character to exit\n";
  24.          char ch;
  25.          cin >> ch;
  26.          return;
  27. }
  28.  
  29. int XOR(int n, int value) {
  30.  
  31.          return n ^= value;
  32. }
  33.  
  34. int main(void) {
  35.  
  36.          setlocale(LC_ALL, "Russian");
  37.          SetConsoleCP(1251);
  38.          SetConsoleOutputCP(1251);
  39.          cout << "Pls enter your name: ";
  40.          cin >> name;
  41.          size_name = name.size();
  42.          if (size_name < 6 || size_name>51) {
  43.                  cout << "Name must be between 5 and 51 length\n";
  44.                  keep_window_open();
  45.                  exit(0);
  46.          }
  47.          for (int counter = 0; counter < size_name; counter++) {
  48.                  
  49.                  calc_serial += name[counter];
  50.                  _asm {
  51.                         rol calc_serial,8;
  52.                  }
  53.          }
  54.          calc_serial = XOR(calc_serial, 0x2);
  55.          calc_serial -= 0x50;
  56.          calc_serial = XOR(calc_serial, 0x1337);
  57.          calc_serial += 0x7E3;
  58.          cout << "\nName: " << name << "\n";
  59.          cout << "Serial: " << calc_serial << "\n";
  60.  
  61.          keep_window_open();
  62. }

Сильно не пинайте. Я еще только в начале пути. Как смог реализовал)
А и еще 2 байта по адресу 406179 получается в самом начале программы апишкой GetSystemTime. Меняется он или нет пока не понял.

Ранг: 286.0 (наставник)
Статус: Модератор
CrackLab

Создано: 9 марта 2019 23:28 New!
Цитата · Личное сообщение · #5

RoKZaR пишет:
пришлось делать асм вставкой

pragma intrinsic

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

Создано: 10 марта 2019 00:08 New!
Цитата · Личное сообщение · #6

Rol на 8 бит:
Code:
  1. val=(val<<8) | ((val>>(sizeof(val)*8-8)) & 0xFF);

Если нужна переносимость.
Или интринсики как выше советовали.
В чём смысл делать элементарные операции типа XOR отдельными функциями - непонятно.

Ранг: 65.5 (постоянный)
Статус: Участник

Создано: 10 марта 2019 00:26 · Поправил: Boostyq New!
Цитата · Личное сообщение · #7

Ему выше скинула полный код, через час разобрался говорит xD
Элементарную операцию ксора незачем пихать в отдельную функу, это не php где надо обрезать биты на каждой битовой операции
Реализация цикл. сдвига есть выше или в гугле, вставкой асма вы ломаете совместимость с x64
Множество инклудов не нужны, например вы не используете ни список, ни алгоритм, ни вектор
Мешать апи из разных наборов (winapi/stdlib/std) идея не очень, старайтесь использовать что-то одно

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

Создано: 10 марта 2019 01:43 · Поправил: RoKZaR New!
Цитата · Личное сообщение · #8

cppasm пишет:
В чём смысл делать элементарные операции типа XOR отдельными функциями - непонятно.

Сам не понял зачем. Туплю уже под вечер.
Про полный код который Boostyq скинул/а. Затык был в преобразовании букв в байты. Потом дошло уже. Говорю же только начинаю. Инклуды из заготовки беру. В следующий раз уберу лишнее. Про апи не до конца понял. И про интринсики тоже. Не дошел ещё в книге до этого. Вроде все.
 eXeL@B —› Вопросы новичков —› Написание кейгена для кейгенми

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

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