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

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

 eXeL@B —› Основной форум —› Статья. Исследование и анализ алгоритма защиты TSRh official keygenme #1
Посл.ответ Сообщение


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

Создано: 13 июня 2013 23:58 · Поправил: DimitarSerg New!
Цитата · Личное сообщение · #1

В общем разбор в аттаче.
Сложность - не для новичков (crc-32, quintic equation, fpu math)
Инструменты: OllyDbg 1.10+плагины для удобства (NameChanger, Table Exporter, Code Ripper), Borland Delphi 7 (для кейгена)

Надеюсь TSRh в скором времени обновят keygenme ;).

{ Атач доступен только для участников форума } - tsrh.rar

| Сообщение посчитали полезным: SReg, plutos, ZaZa, verdizela, Abraham, nick8606, alexpol, ARCHANGEL, evggrig, Gideon Vi, 4kusNick, Evol, Rio, Dynamic, tempread, KViNTO, matrix, hors, _ruzmaz_, stas_02, Lacoste, ssx



Статус: Аноним

Создано: 14 июня 2013 00:58 New!
Цитата #2

Вообще загадка не угадана. Там все сводится к квадратному уравнению. И знание численных методов для решения уравнения 5-ой степени не требуется. Т.е. требуется познать FPU (многие крекеры решившие данный кейгенми, впервые изучили FPU из-за этого крекми), если он еще не познан, кропотливо разобрать все хэши и преобразования и проявить небольшую смекалку и свести финальное уравнение в уравнение 2-ой степени, т.е. квадратное, которые в школе все решать научились.

Хотя признаюсь, после кейгена в варианте квадратного уравнения, я сделал уравнение 5-ой степени через метод Ньютона. Но! Сделал это на чистом ассемблере, на паскале или си это скучно и не об этом. Этот кейгенми нет цели просто решить, это не грандиозно сложная задача, которая должна выявить уровень крекера, а простой обучающий курс для человека, который может еще через месяц или полгода будет выплевывать 100 кейгенов в месяц, как такие легенды, как Funbit и Nitrogen.


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

Создано: 14 июня 2013 01:21 New!
Цитата · Личное сообщение · #3

int пишет:
впервые изучили FPU из-за этого крекми

Да и я не стыкался с таким кол-вом фпу-команд до этого (так пара-тройка, которые либо хексрейс легко разбирал либо сразу было понятно).

int пишет:
Вообще загадка не угадана.

Возможно. Я не говорю, что у меня единственно правильный и самый короткий/простой путь. У меня такое видение решения, хотя подозревал, что можно что-то упростить, так как обращаемый цикл с "ролами" над 3-им блоком не пришлось обращать и та часть, где берутся индексы по 256-байтовой табличке тоже обращаема, но в моем решении тоже не пришлось.

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

Ранг: 29.9 (посетитель)
Статус: Участник

Создано: 14 июня 2013 15:31 New!
Цитата · Личное сообщение · #4

у меня вот только один вопрос: "зачем?"
хочешь показать всем, что ты неебически крут и решил официальный кейгенми от TSRh (через пень-колоду, правда)? Молодец, возьми с полки конфетку.

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

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

Создано: 14 июня 2013 15:54 · Поправил: JMPer New!
Цитата · Личное сообщение · #5

Ну сделал - молодец, можно было спросить у тсрх перед выкладыванием.


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

Создано: 14 июня 2013 15:56 New!
Цитата · Личное сообщение · #6

[X-Ray] пишет:
у меня вот только один вопрос: "зачем?"

а почему нет ? Было свободное время и желание...

[X-Ray] пишет:
хочешь показать всем, что ты неебически крут и решил официальный кейгенми от TSRh

Хотел самому себе доказать, что сделаю, а статья само собой получилась. Особенно интерес стимул разбору придал вот этот пост:
https://ssl.exelab.ru/f/index.php?action=vthread&forum=7&topic=5954#12

[X-Ray] пишет:
(через пень-колоду, правда)

Хоть один номерок неверный сгенерил ?


p.s. в общем примерно таких комментов и ждал от тсрх, изначально статья планировалась для хабра, но нервов не хватило из готового ртфа перегнать нормально в хабровский редактор (то, что можно видеть в chm-файле кардинально отличается от того, что сделал хабраредактор с текстом (особенно подсветкой кода))

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

Создано: 14 июня 2013 16:08 New!
Цитата · Личное сообщение · #7

DimitarSerg
Молодец хорошая работа.

Ранг: 307.2 (мудрец)
Статус: Модератор
CrackLab

Создано: 14 июня 2013 16:08 New!
Цитата · Личное сообщение · #8

[X-Ray] пишет:
у меня вот только один вопрос: "зачем?"

А зачем пишутся кигенми?
Кигенми не какой то приватный, а лежит для паблика!

DimitarSerg пишет:
Хоть один номерок неверный сгенерил ?

Имелось ввиду наверно что решил не как все. А если сделано не как "Я", то значит неверно.
И киген на С или паскалике - тоже не есть гуд, ибо скучно и не об этом

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


Ранг: 670.3 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 14 июня 2013 16:15 · Поправил: ARCHANGEL New!
Цитата · Личное сообщение · #9

Да и я вот что-то не понял, почему на человека наехали. DimitarSerg - молодец. Статью написал, всё подробно объяснил. Респект.

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


Ранг: 441.3 (мудрец)
Статус: Участник

Создано: 14 июня 2013 16:58 New!
Цитата · Личное сообщение · #10

А как теперь будут принимать людей в TSRH ?


Статус: Аноним

Создано: 14 июня 2013 17:03 New!
Цитата #11

Есть еще keygenme #2 )

Ранг: 441.3 (мудрец)
Статус: Участник

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

а где он есть?

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

Создано: 14 июня 2013 18:32 · Поправил: SWR New!
Цитата · Личное сообщение · #13

http://exelab.ru/f/index.php?action=vthread&forum=1&topic=262
это первый?

второй совсем другой.
тоже математика но несколько разных алг.
был на форуме топик, гдето

http://tsrh.freeserials.com/search.php?search=1&fprogram=1&program=keygenme+&filename=&releaser=TSRh+TeaM&datefrom=2013-05-15&dateto=2013-06-14&max_onpage=20&sort_type=progname

какой то там


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

Создано: 14 июня 2013 18:49 · Поправил: DimitarSerg New!
Цитата · Личное сообщение · #14

SWR пишет:
http://exelab.ru/f/index.php?action=vthread&forum=1&topic=262
это первый?

не
вот первый http://exelab.ru/f/index.php?action=vthread&forum=2&topic=13266&page=0

Forbidden
This is antileeching system of TSRH

А не, качается, если подумать

За 30 секунд бегло оценил. Вроде проще первого (думаю на порядок)...
Первый ценен фпу

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

Создано: 14 июня 2013 19:07 · Поправил: SWR New!
Цитата · Личное сообщение · #15

DimitarSerg
я его там разобрал.
Только в TSRh сразу не понравилось.
Почитал устав - пахать как на работе.


PS я его брутом сделал .
Хотя тут его не любят (тут на конкурсе крекеров 1е задание тоже брутом. (не искал дырку) зато универсально. заткнув дырку мой брут все равно работал бы).
Я считай что если брут максимум 1-2 секунды работает. то норм.


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

Создано: 14 июня 2013 22:32 · Поправил: DimitarSerg New!
Цитата · Личное сообщение · #16

int пишет:
Там все сводится к квадратному уравнению.

если обнулить оба коэффициента при х^5 ?

ну тогда да, один у меня обнулен, другой обнуляется так:

ebp2c:=Log10(ebp4A-StrToInt('$'+b2_6));
то есть чтобы получить 0 ( log10 (1) = 0) нужно чтобы ebp4A-StrToInt('$'+b2_6) = 1

ebp4A:=sum shr 8 and $F or 2;
оно там на црц считается от имени и еще математика... в общем обращать не нужно

а вот b2_6 - 6ой символ второго блока
запросто можно задать b2_6 = ebp4A-1

Ну а дальше останется квадратное. Видимо так ?

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

Создано: 15 июня 2013 00:11 New!
Цитата · Личное сообщение · #17

DimitarSerg, от души спасибо за познавательную статью и потраченное время!


Статус: Аноним

Создано: 24 июня 2013 15:19 New!
Цитата #18

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

Первым делом необходим разбор всех процедур, внутренних для основной процедуры проверки ключа. Первой встречается hex2int (перевод строкового шестнадцатеричного числа в число). Сразу становится понятно, что код состоит из 4-х блоков. 1-ый 4 цифры, остальные по 8. Далее есть strlen и crc32. В самой процедуре встречается несколько необратимых (хэширование) и обратимых алгоритмов. Хэши восстанавливаем в своем кейгене, обратимые алгоритмы разворачиваем. Теперь о двух финальных проверках:
Code:
  1. flt_404054      dd 7.77
  2. ...
  3. .text:00401A03                 mov     eax, [ebp+block4]
  4. .text:00401A06                 bswap   eax
  5. .text:00401A08                 sub     eax, [ebp+username_crc32]
  6. .text:00401A0B                 xor     eax, 0FADEC0DEh
  7. .text:00401A10                 mov     [ebp+X], eax
  8. .text:00401A13                 fld     [ebp+X]
  9. .text:00401A16                 fabs
  10. .text:00401A18                 fcomp   flt_404054
  11. .text:00401A1E                 fstsw   ax
  12. .text:00401A21                 sahf
  13. .text:00401A22                 jb      short loc_401AA2

Ну здесь проверяется X. username_crc32, который уже успел пройти через операцию NOT, ксорится с FADEC0DE, помещается в стэк FPU, берется абсолютное значение (модуль) и сравнивается с 7.77. Причем здесь 7.77? На самом деле это защита от подстановки малых значений X. А вот следующая проверка, с которой все становится понятно:
Code:
  1. .text:00401A24                 nop
  2. .text:00401A25                 finit
  3. .text:00401A28                 fld     [ebp+X]
  4. .text:00401A2B                 fmul    [ebp+X]
  5. .text:00401A2E                 fld     [ebp+B0]
  6. .text:00401A31                 fmulp   st(1), st
  7. .text:00401A33                 fld     [ebp+X]
  8. .text:00401A36                 fmul    [ebp+X]
  9. .text:00401A39                 fimul   [ebp+B1]
  10. .text:00401A3C                 faddp   st(1), st
  11. .text:00401A3E                 fld     [ebp+X]
  12. .text:00401A41                 fimul   [ebp+C]
  13. .text:00401A44                 faddp   st(1), st
  14. .text:00401A46                 fadd    [ebp+D0]
  15. .text:00401A49                 fild    [ebp+D1]
  16. .text:00401A4C                 fabs
  17. .text:00401A4E                 fchs
  18. .text:00401A50                 faddp   st(1), st
  19. .text:00401A52                 fld     [ebp+X]
  20. .text:00401A55                 fmul    [ebp+X]
  21. .text:00401A58                 fmul    [ebp+X]
  22. .text:00401A5B                 fmul    [ebp+X]
  23. .text:00401A5E                 fmul    [ebp+X]
  24. .text:00401A61                 fld     [ebp+A1]
  25. .text:00401A64                 fmulp   st(1), st
  26. .text:00401A66                 faddp   st(1), st
  27. .text:00401A68                 fld     [ebp+X]
  28. .text:00401A6B                 fmul    [ebp+X]
  29. .text:00401A6E                 fmul    [ebp+X]
  30. .text:00401A71                 fmul    [ebp+X]
  31. .text:00401A74                 fmul    [ebp+X]
  32. .text:00401A77                 fld     [ebp+A0]
  33. .text:00401A7A                 fmulp   st(1), st
  34. .text:00401A7C                 faddp   st(1), st
  35. .text:00401A7E                 fabs
  36. .text:00401A80                 fcom    flt_404044
  37. .text:00401A86                 fstsw   ax
  38. .text:00401A89                 sahf
  39. .text:00401A8A                  jnb     short loc_401AA2

В человеческой форме это выглядит как

(A0 + A1)X^5 + (B0 + B1)X^2 + CX + D0 - |D1| < 0.3131313

Опять же, под числом 0.3131313 скрыта идея - не сравнивать с нулем, а замаскировать ноль, просто заменив его маленьким значением. На самом же деле это уравнение 5-ой степени:

(A0 + A1)X^5 + (B0 + B1)X^2 + CX + D0 - |D1| = 0

Идея Фанбита была в том, чтобы обнулить A0 + A1. Решать квадратные уравнения в школе научились все. Но численные методы позволяют решить это уравнение и если оставить коэффициент при X^5 в вещественных корнях. Я применил метод касательных (метод Ньютона), реализовав его на FPU (математическое обоснование метода здесь: http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0).
Сначала находим производную функцию:
F = (A0 + A1)X^5 + (B0 + B1)X^2 + CX + D0 - |D1|
F' = 5(A0 + A1)X^4 + 2(B0 + B1)X + C

Реализация на FPU не сохранилась, но в ней нет ничего интересного. Заново ее делать я не стал. Реализовав обе функции в виде процедур с FPU дальше остается только выбрать какой-нибудь X. На самом деле любой. Потом надо реализовать процедуру приближения к корню, каждый раз новый X определяется формулой X_new = X_old - F(X_old) / derivative(X_old). Нужно делать это с определенной точностью, допустим это 4 знака после запятой. Тогда имеем формулу проверки abs(X_new - X_old) < 0.00001. Как только условие отрабатывает - мы нашли корень уравнения. Его обратная конвертация в 4-ый блок серийного номера завершает процедуру генерации ключа.

Для чего создавался этот keygen me, как вижу это я:
1. Научить человека разбираться в FPU, если он до этого не знал даже смысл команд математического сопроцессора. Зачем это надо? Вступив в TSRh одной из первых 20 программ, мне попалась такая, в которой FPU было и мне это пригодилось.
2. Научить человека разбираться в стандартных алгоритмах. Пример - процедура длины строки. Такая оптимизация длины строки встречается много где.
3. Научить или проверить способность человека отличать обратимые алгоритмы от необратимых. Для этого дан хэш crc32 (а это еще учит новичка искать по константам алгоритмы хэширования, что тоже потребуется в дальнейшем) и несколько других кустарных алгоритмов.
4. Проверить наличие смекалки у крекера. Обнулить коэффициент при X^5 мало кто в итоге догадался.

Именно из таких людей, способных пройти все эти проверки, вырастают "бомбардировщики" команды TSRh, способные справиться с любой задачей. И дело не в том, что надо пахать как лошадь, как сказал SWR, который этот кейгенми не решил. Дело в том, что надо делать это красиво. Ибо TSRh всегда боролась за качество. Лозунг команды почитайте - TSRh делает кейгены по качеству, лучше чем качество программ, для которых эти кейгены написаны. Хотя я видел экземпляры, которые из-за графики и наворотов не отлаженных не везде работают даже.

По поводу решения SWR: может на мощной игровой машине брутфорс и сходится быстро, но когда я проверял это решение, оно у меня заглючило минут на 15, повесив всю систему. Вы такие кейгены пользователям тоже будете предлагать? Если вы делаете креки для себя, зачем вообще вступать в команды какие либо?

Да, для кого-то все это смешно, дух соревнования, качество релизов. Но это сцена, изначально там все это было. Вдумайтесь в год создания кейгенми - 2004.

| Сообщение посчитали полезным: SReg, 4kusNick, ZaZa, 3ton, _ruzmaz_



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

Создано: 24 июня 2013 21:52 · Поправил: DimitarSerg New!
Цитата · Личное сообщение · #19

int пишет:
Вы такие кейгены пользователям тоже будете предлагать?

Не в защиту SWR (так как сам признаю и ценю тру релизы (кейгены к интересным алго)), но поверьте, да я думаю вы и сами согласны, что как в своё время говорил Красный Барон "Пользователю пох*й". Если у него даже будет выводится один серийник в едитбокс (брутом 10-минутны) но будет регать нужную ему программу, то пользователь будет счастлив.
Это Вы, я, другие кейгенеры могут заценить что-то интересное (сложная рега разобрана + красивый эффект + gfx + трекерная музычка) = hi-quality release
А именно пользователям (большинству) скорее всего насрать, и если серийник не привязан к машине, то он вообще сохранит его в serial.txt а кейген потрёт к х*ям.

p.s. Один мой друг-реверсер разбирал интересное алго математическое, загорелся был идеей графического представление решения прямо в кейгене, но поняв, что это мало кто оценит забил на интересную на мой взгляд идею.

p.p.s извините что написал дофига, сегодня ДР, позволил себе пару бутылок пива раз в полгода выпить ), жара +37 (в тени), шо то Остапа понесло

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


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

Создано: 25 июня 2013 15:46 New!
Цитата · Личное сообщение · #20

Порадовал, статей на кряклабе уже давно не было
Только для новичков как мне кажется слабо разжевано а профи и без статьи разберутся
Команда tsrh как я понял уже 4 года в коме находится а то и больше?


Статус: Аноним

Создано: 25 июня 2013 19:02 New!
Цитата #21

DimitarSerg
Методы касательных, метод хорд и другие методы решения уравнений больших степеней - это тоже по сути брутфорс, только умный. Заставлять пользователя программы, у которого до сих пор Pentium II, ждать два часа, пока брутфорс посчитает все - не красиво. Согласен, пользователю в принципе пофиг. У меня были случаи, что кроме как брутфорсом нельзя было сделать. Впихнул предварительно вычисленную таблицу значений прямо в кейген и работал он мгновенно на любой машине, давая 1000 разных вариантов для каждого имени.

Просто смысл тогда кейгена, если в него зашит длинный брут? Есть патчи и другие решения. Данный кейгенми, как я выше сказал, имел другую цель - отсеять лентяев, которые будут стучаться в команду. Rigel тоже сделал кейген для этого кейгенми, хотя его уровень опыта, когда он вступал в команду, сильно отличается от того, что он может сейчас. TSRh по-моему мнению это школа реверса прежде всего, а уже потом команда, которая радует своими релизами. Я ушел не потому, что надоело штамповать релизы, а потому что слишком много не ординарных авторитарных личностей в команде, с которыми я часто конфликтовал.

matrix пишет:
а профи и без статьи разберутся

профи почему-то делают брутфорс)
новичкам рекомендую не читать статью, а сесть и потратить хоть месяц на разбор (я потратил 3 месяца на решение, но плотно сидел над задачей всего лишь две недели буквально), это хороший учебник


Ранг: 533.6 (!)
Статус: Uploader
retired

Создано: 1 июля 2013 19:10 New!
Цитата · Личное сообщение · #22

DimitarSerg пишет:
За 30 секунд бегло оценил. Вроде проще первого (думаю на порядок)

Мне второй больше понравился

matrix пишет:
Команда tsrh как я понял уже 4 года в коме находится а то и больше?

Не, точно не 4 года, у них домен менялся чуть ли ни каждый год.

P.S. Кто знает последний адрес? ([X-Ray])


Статус: Аноним

Создано: 1 июля 2013 19:11 New!
Цитата #23

http://tsrh.freeserials.com/

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

Создано: 2 июля 2013 01:02 New!
Цитата · Личное сообщение · #24

Ничего непонятно. А где сама статья про второй кейгенми?

Ранг: 441.3 (мудрец)
Статус: Участник

Создано: 2 июля 2013 09:48 · Поправил: tihiy_grom New!
Цитата · Личное сообщение · #25

neoBlinXaker пишет:
Ничего непонятно. А где сама статья про второй кейгенми?




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

Создано: 2 июля 2013 12:50 · Поправил: DimitarSerg New!
Цитата · Личное сообщение · #26

*offtop*

Эх блин, разделал кейгенми от RED (http://redcrew.astalavista.ms/home/downloads/RED.Official.KeygenMe.Read.NfO-RED.zip , банальщина по большому счёту), думал еще написать небольшую статью, но на последнем этапе (решение DLP) вбил в гугл один из параметров подписи Эль-Гамаля и нашлось одно совпадение - http://bbs.pediy.com/archive/index.php?t-132650.html
Какой-то китаец уже выдал решение на паблик, поэтому наверное делать тутор уже не актуально

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

Создано: 2 июля 2013 14:06 New!
Цитата · Личное сообщение · #27

DimitarSerg, а мне было бы интересно почитать тутор от Вас


Ранг: 756.2 (! !)
Статус: Участник
Student

Создано: 4 июля 2013 11:33 · Поправил: Isaev New!
Цитата · Личное сообщение · #28

Это конечно дело автора, но я думаю зря статью на паблик
Как по мне, то это самый интересный кейгенми, который я встречал, убил на него много времени в своё время и fpu да, встретил первый раз в нём, было очень интересно и получил удовольствие...
Ребята его как тест для вступления в тиму писали вроде. Достойная работа получилась)

ps: кто не делал его сам, не читайте статью, пока не осилите! Он того стоит ;)

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

Создано: 6 июля 2013 00:31 New!
Цитата · Личное сообщение · #29

int пишет:
профи почему-то делают брутфорс)

Это професиональный брутфорс

DimitarSerg
Вот еще не решенный интересный не тупо крипто и математика

{ Атач доступен только для участников форума } - kgm12.exe


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

Создано: 6 июля 2013 02:40 · Поправил: DimitarSerg New!
Цитата · Личное сообщение · #30

matrix пишет:
Вот еще не решенный интересный не тупо крипто и математика

Для интересных кейгенми есть вроде тема, создана Isaev, туда было бы лучше запостить, просто насчёт кейгенми TSRh - это как исключение, длинная история, почему я его сделал и написал тутор. На самом деле я кейгенмисы не люблю, предпочитаю реальный софт, кейген к которому можно релизнуть, а иногда еще и подзаработать. Поэтому если что от меня и появится в плане туторов, то уже на примере реального незакейгененного софта )
Прошу не оффтопить, если что по теме - пишите конечно, а то съехали немного не туда, не охота закрывать.
 eXeL@B —› Основной форум —› Статья. Исследование и анализ алгоритма защиты TSRh official keygenme #1

Видеокурс ВЗЛОМ