ANTICHAT.RU    VIDEO.ANTICHAT.RU    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  

Выкупаем RU трафик и RU инсталы в любых объемах. У нас лучшие цены!



ViKing – лучшая программа для быстрой раскрутки групп ВКонтакте!

Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Реверсинг ASM KEYGENME#1
  #1  
Старый 19.06.2010, 11:54
Аватара для FairHawk
FairHawk
Познающий
Регистрация: 16.03.2010
Сообщения: 52
Провел на форуме:
1 день 11 часов 21 минуту

Репутация: 1 ±

По умолчанию Реверсинг ASM KEYGENME#1

Реверсинг ASM KEYGENME#1
Данный keygenme довольно простой, но тем не мнение, рассмотрим именно его, думаю новичкам будет интересно. В качестве отладчика будем использовать всеми любимый OllyDbg)) Скачать ASM KEYGENME#1 можно тут:тут
Из названия подопытного, ясно чем нам придется заняться.
Перед тем как его перейти к реверсингу, запускаем его, и смотрим как он работает. После чего открываем его в отладчике.
Видим что то непонятное вместо обычного нам вида, дизассемблированного кода.
Не трудно догадаться, что файл зашифрован, причем не очень хорошо. В самом начале видим прыжок на 004011AE, ПКМ – Follow. Попадаем на фрагмент кода дескриптора. Так как, сейчас нам это мало интересно, пропустим этот фрагмент, нажимаем F9. Запускается программа..
Дальше в отладчике, нажимаем Ctrl + A или ПКМ – Analysis – Analysis code;
После чего в окне отладчика появляется основной код, нашего keygenme :

Начнем пожалуй с того, что посмотрим WinAPi функции, используемые тут, нажимаем
Ctrl + N или Search for – Name(Label) in current module. Видим следующие:

Там интересны только, GetDlgItemTexaA ( получение текста, например из поля ввода..), MessageBoxA ( вывод сообщения) и на последок wsprintfA( сравнение строк), что уже на данном этапе дает нам понять, что кейгенми довольно простой.
Остановимся на GetDlgItemTexaA .
Выбираем его, после чего ПКМ – Toggle Breakpoint on Import. Теперь при вызове этой функции программой, произойдет ее остановка, дабы дать нам возможность “осмотреться”.
Переходим к нашей запущенной программе, вводим любое имя, с серийником, в моем случаи Fairhawk;123456, нажимаем «ОК».
После чего программа останавливается, т.к срабатывает наша точка останова, что бы убедиться в этом смотрим в нижний левый угол отладчика на строку состояния, и видим там: «Breakpoint at user32.GetDlgItemTexaA.
Смотрим что у нас находиться в стеке:

Давайте обратим внимание на выделенную зеленным цветом строчку. Тут указывается на некий буфер, куда по идеи должно занестись выполнение нашей функции. Выделяем данную строчку, и нажимаем ПКМ – Follow in Dump.

Видим что тут пока не чего нет, т.к мы остановили нашу программу только на начале функции, и она еще не успела выполниться. Нужно это исправить.
Выделяем строку где произошла наша остановка, и нажимаем F2, что снимет от туда Breakpoint.
После чего ставим новый, на конце этой функции:


Опять же нажатием F2 ( хотя если ты читаешь этот материал, то ты наверняка знаком с этим ;) ) ставим новую точку останова.
Нажимаем F9, и наш keygenme снова останавливается, но только уже на другом месте )
Снова смотрим на наш адрес в дампе..

Видим что, наша функция выполнилась, и теперь по адресу находиться то, что мы ввели в поле ввода «Name» !) Запоминаем адрес, думаю он нам пригодиться )
Убираем Breakpoint, и нажимаем F7 что бы выйти из функции.
Останавливаемся на строчке:
MOV DWORD PTR DS:[403100],EAX
Которая заносит результат выполнения функции ( в данном случаи количество строк), в «ячейку» по адресу 403100. После чего EAX обнуляется, командой :
XOR EAX,EAX.
Нажимаем ПКМ на MOV DWORD PTR DS:[403100],EAX– Follow Dump – Memory address. И видим что там тоже пусто. Но стоит нам выполнить данную команду нажатием F7, как видим там:

Число 8, в моем случаи количество символов в слове «Fairhawk») Также «запоминаем» адрес.)
Чуть ниже, видите еще один вызов GetDlgItemTexaA, в точности похожею на первый:

Красным цветом выделен, первый, нами разборный, вызов этой функции. Заметим так же, что тут в строчке :
PUSH ASM_KEYG.004030C0
И указывается, тот адрес, куда и заноситься наше имя, в моем случаи «Fairhawk»)
Во втором, вызове видим подобное:
PUSH ASM_KEYG.004030E0
Следовательно туда наверняка будет заноситься наш серийник . Давайте это проверим, ставим точку останова сюда:

Нажимаем F9. После чего ПКМ на PUSH ASM_KEYG.004030E0– Follow Dump –Immediate constant.
Как видите, наши предположения оправдались:

Там действительно находиться наш серийный номер).
Убираем, точку останова, нажимаем ПКМ на MOV DWORD PTR DS:[403128],EAX– Follow Dump – Memory address, после чего F7,и видим что 403128 находиться число 6 ) длина нашего серийника).
Теперь осталось выяснить, где используется наши числа (6 и 8)…
Cделаем так, найдем в дампе первое (8), после чего выполняем следующие:

Это тот же Breakpoint, только ставиться он на определенный участок в дампе, который срабатывает при любом вызове к этому адресу. И так, убираем наш предыдущую точку останова, и нажимаем F9.
Останавливаемся тут:

Тут и видим CMP DWORD PTR DS:[403100],0 обращение к нашему адресу(где у нас находиться длина нашего имени – 8 ), в данном случаи, происходит проверка, «если по адресу 403100 находиться 0, то вывести пользователю не приятное сообщение).
Чуть выше тоже самое, но уже с адресом 403128 (длина поля для серийника – 6).
После того как программа убеждается, что поля не пустые, выполняется выделенный красным цветом код..
Перед тем как разбирать его, уберем наш Breakpoint , который расположен в дампе. Делается это так, ПКМ – Breakpoint- Remove memory Breakpoint, все )
Первые 4 строчки в выделенной рамки, Обнуляют ESI, ECX, а в EDX заноситься 0A (10);
Ну а после чего, собственно идет генерация гуд серийника ) . Весь его разбирать смысла я не вижу, так что расскажу только основные моменты.
MOVSX EAX,BYTE PTR DS:[ECX+4030C0] – Начало цикла, где берется первый символ нашего имени, после чего выполняется, сам алгоритм генерации ключа, до момента:
CMP ECX,DWORD PTR DS:[403100]
JNZ SHORT ASM_KEYG.00401137
Где проверяется, всели буквы были «пройдены» . После чего результат заноситься в стек, из регистров EDI и ESI.
Затем вызваться функция wsprintfA для преобразования, всего этого в нужный нам формат:
"LOD-%lu-%lX". Затем проверка на правильность нашего, и сгенерированного недавно ключа тут:

Поставим Breakpoint там, где это сделал я.
Нажмем F9.
И видим что нам приходиться сравнивать))

В String1 находиться нужный нам серийник).
CMP EAX,0
Если наш серийник правильный, то в EAX должен оказаться 0.
Давайте проверим это. Убираем точку останова, нажимаем F8(тоже самое что и F7, только не заходит внутрь функций).

Как видите зеленым выделено подтверждение того, что наш серийник не правильный, иначе бы там было 0 )). И флаг Z будет содержать 0, после чего выполниться переход выделенный синим цветом, к плохому сообщению, затем программа закроется.
Перед тем как писать не посредственно keygen давайте проверим то, что я сейчас сказал).
Нажимаем 2 раза F7, пока наш курсор не окажется на:
JNZ SHORT ASM_KEYG.00401191
Как видите, красная линия показывает что он выполниться, смотрим куда.. и видим что к не очень хорошему для нас сообщению.
Кликаем 2 раза на флаг Z, в правой части отладчика.
И видим что переход стал тусклым, что означает, что «прыжка» не будет, а вместо этого выполниться строчка под ним. Давайте посмотрим, нажимаем F9!!!
И как нашей радости видим что программа говорит нам, о том что серийник правельный)
Осталось только написать keygen. Все что нам для этого нужно, так это взять кусок кода генерации, а именно :
XOR ESI,ESI
XOR ECX,ECX
XOR EDX,EDX
MOV ECX,0
MOV EDX,0A
MOVSX EAX,BYTE PTR DS:[ECX+4030C0]
INC EAX
ADD EAX,EDX
ADD ESI,EAX
INC ECX
IMUL EDX,ECX
MOV EDI,EDX
IMUL EDI,ESI
CMP ECX,DWORD PTR DS:[403100]
JNZ SHORTASM_KEYG.00401137
И переделать под свои нужды.
Скачать написанный мной keygen на masm32 ты можешь скачать ТУТ . Он слегка сыроват, но зато исправно работает))
Из итог наверное то, что кто то укрепил свои знания в реверсинге, ну или дал лишний повод убедиться какой он крутой, сказав себе «Та, я это и так знаю»))))
В любом случаи удачи!)

Последний раз редактировалось FairHawk, 19.06.2010 в 15:17.
 
Ответить с цитированием

  #2  
Старый 19.06.2010, 12:08
Аватара для Getty
Getty
Banned
Регистрация: 17.06.2010
Сообщения: 156
Провел на форуме:
2 дня 13 часов 30 минут

Репутация: 1 ±

По умолчанию

Отличная статья
 
Ответить с цитированием

  #3  
Старый 19.06.2010, 12:59
Аватара для slashd
slashd
Познающий
Регистрация: 03.09.2008
Сообщения: 48
Провел на форуме:
3 дня 16 часов 16 минут

Репутация: 4 ±

Отправить сообщение для  slashd с помощью ICQ
По умолчанию

Хорошая статья
Из замечаний лишь одно - команды слиплись, например:
Код:
MOVDWORDPTRDS:[403100],EAX

Сперва даже не сообразил, а потом дошло, что это
Код:
MOV DWORD PTR DS:[403100], EAX


Сам увлекаюсь reversing'ом, но в основном под *nix.
Респект за статью
 
Ответить с цитированием

  #4  
Старый 19.06.2010, 13:18
Аватара для s0l_ir0n
s0l_ir0n
Участник форума
Регистрация: 14.03.2009
Сообщения: 258
Провел на форуме:
1 неделю 2 дня

Репутация: 11 ±

Отправить сообщение для  s0l_ir0n с помощью ICQ
По умолчанию

уг. пеар.
 
Ответить с цитированием

  #5  
Старый 19.06.2010, 14:50
Аватара для desTiny
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщения: 1,169
Провел на форуме:
1 месяц 5 дней

Репутация: 69 ±



По умолчанию

>>фрагмент дескриптора.
=\
__________________
Bedankt euch dafür bei euch selbst.
 
Ответить с цитированием

  #6  
Старый 19.06.2010, 15:10
Аватара для FairHawk
FairHawk
Познающий
Регистрация: 16.03.2010
Сообщения: 52
Провел на форуме:
1 день 11 часов 21 минуту

Репутация: 1 ±

По умолчанию

s0l_ir0n ?
desTiny ну по крайней мере я так понял. исправил, может опять не на true вариант, но все же
Getty, slashd спс
 
Ответить с цитированием

  #7  
Старый 19.06.2010, 17:59
Аватара для desTiny
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщения: 1,169
Провел на форуме:
1 месяц 5 дней

Репутация: 69 ±



По умолчанию

Я к тому, что есть разница между словами descriptor (описатель) и decryptor (расшифровыватель).

PS не исправляй, а то так хотя бы что-то забавное в статье есть
__________________
Bedankt euch dafür bei euch selbst.
 
Ответить с цитированием

  #8  
Старый 19.06.2010, 18:13
Аватара для FairHawk
FairHawk
Познающий
Регистрация: 16.03.2010
Сообщения: 52
Провел на форуме:
1 день 11 часов 21 минуту

Репутация: 1 ±

По умолчанию

desTiny
ок )
 
Ответить с цитированием

  #9  
Старый 20.06.2010, 14:17
Аватара для zeppe1in
zeppe1in
Постоянный
Регистрация: 12.07.2006
Сообщения: 377
Провел на форуме:
2 недели 6 дней

Репутация: 31 ±

По умолчанию

Та, я это и так знаю
 
Ответить с цитированием

  #10  
Старый 20.06.2010, 14:54
Аватара для MaZaHaKer
MaZaHaKer
Участник форума
Регистрация: 19.01.2008
Сообщения: 121
Провел на форуме:
1 неделю 3 дня

Репутация: 4 ±

По умолчанию

Цитата:
Сообщение от zeppe1in  
Та, я это и так знаю



 
Ответить с цитированием
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отладчик ASM FUTsin283 С/С++, C#, Delphi, .NET, Asm 8 15.06.2010 11:31
.NET реверсинг procedure Реверсинг 8 01.06.2010 09:02
XRumer 5.04 реверсинг ex3me Реверсинг 100 29.05.2010 17:24
Asm exploit magichire *nix 7 24.06.2009 00:07
Asm Bill С/С++, C#, Delphi, .NET, Asm 9 16.04.2006 19:47


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Быстрый переход

plohihzagrusok.net


Powered by: vBulletin Version 3.0.x
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.

ANTICHAT.RU