Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

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


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

Flashget 1.4 - как вычислить ключ

Обсудить статью на форуме

Очень удобно, когда все крэкерские инструменты, книги и статьи в одном месте. Используйте сборник от EXELAB - вот тут.

Автор: Nic <shell@monch.mels.ru>

Данная статья написана только в образовательных целях

Инструменты:
TRW 2000 или Softice
Я использовал TRW2000

После запука программы вводим Имя, E-Mail и рег.код (1234567890abc)

так будет лече понять какой по счёту символ и с чем сравнивается. Жмём “OK”. Прога запишет введённые данные в реестр и при повторном запуске будет проверять.
Запускаем TRW2000 находим в Browse flashget.exe,жмём Load и попадаем в отладчик. Ставим бряк BPX RegQueryValueExA. Жмем F5, Я жал 5.раз
Вводим поиск: s 0 l ffffffff ‘1234567890asd’ получаем адрес 0000B29F явно не то что нужно. Вводим s и “OK” получаем 014B4340 (кстате у вас адреа могут быть и другие).. Теперь снимем бряк, вводим (BC * OK) и ставим бряк на полученый адрес (BPM 014B4340 “OK”).попадаем в Kernel32 жмём F12 пока непопадём в программу.Жмём F5 и останавливаемся в этом месте
 : 0049A232 movsx eax, [edi]
 Протрассировав по F8 значительный кусок кода вы поймёте что это не то что нам
 надо
 По этому дойдя до такого кода
 :0049A214 jne 0049A1EF
 :0049A216 test esi, esi
 :0049A218 je 0049A223
 поставте бряк на :0049A216 (прога здесь прыгает назад столько раз, сколько
 символов в
 веденном номере) выделите мышкой эту строку жмите F9 и F5.
 Далее трассируем по F8 до
 :0041C65C mov eax, dword ptr [edx-08] – количество символов в ведённом номере
 :0041C65F cmp eax, 0000002C (HEX)-сравнение с 44 (дес)
 :0041C662 jne 0041C739-если неравно (а нам туда не надо)
 Значит длинна s/n равна 44 символам. Вводим после выполнения команды в регистр
 EAX 0000002C или после CMP изменяем флаг нуля
 Далее трассируем по F8 или просто жмём F5 и попадаем сюда:
 :0048A93E mov al, [edi] =31
 :0048A940 inc esi ---мы здесь
 :0048A941 cmp al, dl
 :0048A943 je 0048A95A
 
смотрим предыдущую команду. Здесь в AL загружается первый символ введённого s/n Далее идёт сравнение с DL а сдесь 66(HEX) код символа (f ) выделяем регистр EAX и меняем AL на 66 а также в окне данных 31 на 66 . Трассируем F8
 0048A95A mov al, [esi] =32
 :0048A95C inc esi
 :0048A95D cmp al, dh
 смотрим что в DX = 67 меняем AL на 67 и в в окне данных 32 на 67 идём дальше
 0048A96B mov al, [esi] =33
 :0048A96D add esi, 00000002
 :0048A970 cmp al, ah
 в AX 63 меняем AL на 63 в окне данных 33 на63 дальше
 0048A97B mov ah, [esi-01] =34
 :0048A97E add ecx, 00000002
 :0048A981 cmp al, ah
 :0048A983 je 0048A964
 в AL - 2D меняем AH на 2D в окне данных 34 на2D дальше прыгаем назад
 0048A964 mov ah, [ecx+02] =00
 :0048A967 test ah, ah
 :0048A969 je 0048A993
 прыгаем на 0048A993 далее на RET и выходим из процедуры.
 Можно трассировать по F8 или поставить бряк на адрес пятого символа.
 0041C6A8 mov eax, dword ptr [ebp+00] =38373635
 в EAX копируется следущие 4 символа
 трассируем дальше:
 :0041C6D5 mov cl, [esp+1E] =37
 :0041C6D9 mov dl, ah ==36
 :0041C6DB xor ecx, edx ECX=014B6701
 :0041C6DD movsx edx, [esp+1F] =38
 :0041C6E2 and ecx, 0000007F =01
 :0041C6E5 imul ecx, edx умножить ECX на EDX 01*38=38
 :0041C6E8 movsx eax, al = 35
 :0041C6EB add ecx, eax =6D
 :0041C6ED mov esi, ecx =6D
 0041C6EF mov eax, [esp+10] =01
 :0041C6F3 test eax, eax
 :0041C6F5 je 0041C703
 :0041C6F7 movsx ecx, [004EF643] =69
 :0041C6FE cmp edi, 00000002 =00000000
 :0041C701 je 0041C70A
 :0041C703 movsx ecx, [edi+004EF640] = 6B
 :0041C70A mov eax, esi = 6D
 :0041C70C xor edx, edx ---овнуляеся
 :0041C70E div ecx-----------деление EAX на ECX остаток будет в EDX
 :0041C710 mov eax, edi =00000000
 здесь придется тормознуть и омыслить что будет дальше
 :0041C721 test edx, edx
 :0041C723 jne 0041C730 если в EDX не 00000000 прыгаем
 
и неполучаем регистрацию

Что тут можно сделать?
Надо чтобы деление прошло без остатка тоесть в EAX должно выть 6B а не 6D Теперь поднимемся в верх на адрес 0041C6E5 там 0041C6E5 imul ecx, edx умножить ECX на EDX (01*38=38) :0041C6E8 movsx eax, al = 35 :0041C6EB add ecx, eax =6D А нам надо 6B для этого пятый символ уменьшим на две единицы 33+38=6B.(HEX) Тас теперь запишем в регистр EDX 00000000 а в окне данных заменим 35 на 33 И трассируем дальше
 :0041C72B jmp 0041C6A8 прыгаем назад
 теперь вEAX копируется 9,10,11,12, символ
 0041C6A8 mov eax, [ebp+00] =62613039
 :0041C6BC movsx esi, [esp+1E] =61
 :0041C6C1 movsx edx, [esp+1F] =62
 :0041C6C6 movsx ecx, ah =30
 :0041C6C9 and esi, ecx =20
 :0041C6CB imul esi, edx =00000C40
 :0041C6CE movsx eax, al =39
 :0041C6D1 add esi, eax =0C79
 :0041C6D3 jmp 0041C6EF
 :0041C6EF mov eax, [esp+10] =01
 :0041C6F3 test eax, eax =01
 :0041C6F5 je 0041C703
 :0041C6F7 movsx ecx, [004EF643] =69
 :0041C6FE cmp edi, 00000002 =01
 :0041C701 je 0041C70A
 :0041C703 movsx ecx, [edi+004EF640] =65
 :0041C70A mov eax, esi =0C79
 :0041C70C xor edx, edx =00000000
 :0041C70E div ecx
 :0041C710 mov eax, edi =01
 :0041C712 sub eax, 00000000 =01
 :0041C715 je 0041C721
 :0041C717 dec eax =00000000
 :0041C718 jne 0041C725
 здесь тоже придетсятормознуть и омыслить что будет дальше
 
 :0041C71A cmp edx, 00000008 EDX=0000003E
 :0041C71D jne 0041C730 если в EDX не 00000008 прыгаем
 
и неполучаем регистрацию
Надо зделать так чтобы после DIV в EDX был остаток 00000008 В ECX сейчас 65 Вводим команду (? 65 “OK”) получаем 101десятичное Теперь подумайте! какое число надо разделить на 101 и получить остаток 08 конечно 109 проверте на калькуляторе получится 1,079. Команда DIV беззнаковое деление мы получим в EAX 00000001 а в EDX 00000008 . 109(Dec) = 6D(Hex) Теперь смотрим выше
 :0041C6D1 add esi, eax ---должны получится 6D Как получить ?
 А что если подогнать операцию
 :0041C6C9 and esi, ecx так чтобы после её выполнения в ESI оказался 0 тогда
 после умножения
 :0041C6CB imul esi, edx --- получится 0
 :0041C6CE movsx eax, al в AL нходитса девятый символ 39 меняем его на 6D
 и после сложения
 :0041C6D1 add esi, eax получаем 6D
 
 Займёмся (and esi, ecx)
 :0041C6BC movsx esi, [esp+1E] =61—значит в ESI код 11того символа
 :0041C6C6 movsx ecx, ah =30----а в ECX код 10того символа
 
AND-- это битовая операция так что берём карандаш + бумагу пишем 61 и переводим из Hex в двоичное Суть команды такова, если под поднятыми битами будут нули то получим 0

61h = 01100001

Что не ставь получится 8? или 9? или 1? (где “?” любой знак от 1 до F) под код символов не попадает, попробуем другой (варьянтов много) например 41 (“A” в верхнем регистре)

41h = 01000001

Получилось 30 Hex (символ “0”). Меняем в окне данных 61 на 41 Десятый символ менять не кчему и так 30 а тагже в EDX вводим 00000008 чтоб не пролететь. Как выяснилось проверяютса только первые одиннадцать символов Перепишем из окна данных полученный s/n fgc-3678m0A и дополните его до 44 любыми символами. Снимаем все бряки (BC * “OK”) жмём F5 . Прога запустилась без окна банеров.Перезапустите программу и введите s/n. Два замечания:
1) При регистрации вводите тоже Имя и Email что и в первый раз иначе получите облом или окно будет немного искажено.
2) Если вместо fgc ввести fgf всёравно зарегистрируетесь.

Обсуждение статьи: Flashget 1.4 - как вычислить ключ >>>


Комментарии к статье: Flashget 1.4 - как вычислить ключ

Zer0 15.04.2004 20:09:12
имхо, статья неинтересна и неактуальна. троечка.
---

Материалы находятся на сайте https://exelab.ru



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


Вы находитесь на EXELAB.rU
Проект ReactOS