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

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

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

Создано: 14 августа 2009 21:30 · Поправил: Bomzheg
· Личное сообщение · #1

Программка простая - распаковал, нашёл место проверки ключа, кстати в незахешированном виде. но вот процедура генерации ключа - тёмный лес...
содержание архива Russian.lng и All_Language_Translate.xls - русификация
Horse-Sport.exe -оригинальный файл
распаковывал - дамп OllyDbg (OEP - методом PUSHAD - POPAD) восстановление импорта - PE-TOOLS
результаты работы:
004A6661 - в регистре EAX правильный рег. код
004A615E - здесь, насколько я понимаю, вычисляется правильный код

конечно можно и просто в OllyDbg смотреть правильный код, но хочется сделать кейген
вот фрагмент:
в EDX - 0FEDCBA98h
Code:
  1. cld
  2. metka:   
  3.         LODS BYTE PTR DS:[ESI]
  4.          MOV EBX,EDX
  5.          XOR EBX,EAX
  6.          AND EBX,0FF
  7.          SHL EBX,2
  8.          SHR EDX,8
  9.          AND EDX,0FFFFFF
  10.          XOR EDX,DWORD PTR DS:[EBX+EDI] ;вот здесь самая загвоздка
  11.          DEC ECX
  12.          jnz metka

из-за того что EBX всё время меняется - всё время меняется адрес откуда записывается EDX... хоть пол-программы копируй в кейген...

b88a_14.08.2009_CRACKLAB.rU.tgz - Time 4.rar




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 14 августа 2009 21:58 · Поправил: BoRoV
· Личное сообщение · #2

Bomzheg пишет:
XOR EDX,DWORD PTR DS:[EBX+EDI] ;вот здесь самая загвоздка

это скорей всего масив, в EDI указательна на начало масива, а в EВX индекс этого масива, а сам масив имеет такой вид:
Code:
  1.   mass: array[0..1023] of byte;
  2.   или
  3.   mass: array[0..255] of dword;

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

З.Ы. програму пока не смотрел

Добавлено:
посмотрел, да, там тупо масив костант, тебе нужно только его рипнуть, и кейген готов

-----
Лучше быть одиноким, но свободным © $me




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

Создано: 14 августа 2009 22:27
· Личное сообщение · #3

а где можно про массивы почитать? даже если для крэкинга не пригодится, хочу почитать
*собирается шокировать преподов в универе прогами на асме ( поскольку мы химики - проходим только VBA)*




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 14 августа 2009 22:50
· Личное сообщение · #4

Bomzheg пишет:
а где можно про массивы почитать? даже если для крэкинга не пригодится, хочу почитать

в разных книгах по протраммированию, тема масивов расматривается наверное во всех книгах по программированию, но не в обиду сказано, поищи книги для чайников, там как бы объясняется на каком-то жизненом примере, что есть масив, потому как не все сразу понимают что такое масив, если объяснять научно, я сам не с первого и не со второго раза понял что такое масив в свое время

-----
Лучше быть одиноким, но свободным © $me




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

Создано: 14 августа 2009 23:05
· Личное сообщение · #5

что такое массив я знаю+) в VBA мы почти всё делали через вектора и матрицы. то есть само определение массива мне не нужно. Меня интересует синтаксис и особенности массивов в Асме.
книги Ассемблер для чайников я не нашёл, (это первое что я делаю при изучении нового языка) самое близкое к этому - туториалы Iczeliona (нашёл недавно на русском). До конца пока не дочитал... да и до середины не дочитал, но если там есть, то этого мне наверняка хватит.. хотя я сомневаюсь, он в основном рассказывает про API, а не про Ассемблер




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 15 августа 2009 01:07
· Личное сообщение · #6

массив байт
Code:
  1. pKeyArray Label BYTE
  2. db 11,11,11,11,..,..


массив слов (word)
Code:
  1. pKeyArray Label WORD
  2. dw 1111,1111,1111,1111,..,..


массив двойных слов (dword)
Code:
  1. pKeyArray Label DWORD
  2. dd 11111111,11111111,11111111,11111111,..,..


-----
EnJoy!




Ранг: 20.8 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 15 августа 2009 01:13
· Личное сообщение · #7

Bomzheg
Если английский впорядке, описание массивов на Asm'e можно найти в книге "Art Of Assembly by Randall Hide " (5 глава). Книга есть на wasm'e.



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

Создано: 15 августа 2009 09:51 · Поправил: Bomzheg
· Личное сообщение · #8

Jupiter
спасибо, но думаю этого мало.меня ещё интересует обращение к элементам по номеру элемента
um0v
с английским разумеется плохо но я нашёл вот такой мануал если кому интересно




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 15 августа 2009 10:44 · Поправил: BoRoV
· Личное сообщение · #9

Bomzheg пишет:
но думаю этого мало.меня ещё интересует обращение к элементам по номеру элемента

к примеру берем тот пример что привел Jupiter, слегка изменив:
Code:
  1. pKeyArray Label DWORD
  2. dd 11111110h,11111111h,11111112h,11111113h,..,..

и твой кейген:
Code:
  1. lea edi, [pKeyArray]  ; теперь у тебя есть указатель на начало масива
  2. metka:   
  3.         LODS BYTE PTR DS:[ESI]
  4.          MOV EBX,EDX
  5.          XOR EBX,EAX
  6.          AND EBX,0FF
  7.          SHL EBX,2       ; это тоже самое, что и ЕВХ * 4, это нужно для того, чтоб брать элементы с масива по dword, т.к. размерность этого типа 4 байта
  8.          SHR EDX,8
  9.          AND EDX,0FFFFFF  ; эта строка вобще не нужна
  10.          XOR EDX,DWORD PTR DS:[EBX+EDI] ; к примеру у тебя ЕВХ = 4, тогда к адресу начала масива
  11.                                           прибавляется 4, и мы получаем указатель на второй элемент масива
  12.                                           и тогда эта операция будет выглядеть так xor edx, 11111111h
  13.          DEC ECX
  14.          jnz metka


как вариант, можно написать кейген так
Code:
  1.   lea edi, [CRC32Table]  ; теперь у тебя есть указатель на начало масива
  2. metka:   
  3.   LODS BYTE PTR DS:[ESI]
  4.   MOV EBX,EDX
  5.   XOR EBX,EAX
  6.   AND EBX,0FF
  7.   SHR EDX,8
  8.   XOR EDX,DWORD PTR DS:[EDI+EBX*4]
  9.   DEC ECX
  10. jnz metka

это простой алгоритм CRC32, поищи в инете реализацию этого алгоритма на асме и возьми его, только одно но, стартовое значение тебе прийдется задать то что ты приводил в шапке, которое в EDX лежит, просто по умолчанию стартовое значение равно 0FFFFFFFFh

-----
Лучше быть одиноким, но свободным © $me




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

Создано: 17 августа 2009 17:44 · Поправил: Bomzheg
· Личное сообщение · #10

BoRoV
Спасибо, с этим разобрался, с Вашей помощью. Ещё один вопрос: массив придётся копировать вручную? Мне не приходит в голову, как можно скопировать байты из программы в исходник. Если только уже в готовый .exe через OllyDbg "Binary copy/paste", но хочется полноценный исходник..




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 17 августа 2009 20:44
· Личное сообщение · #11

Есть куча разных плагинов, включая dataripper. Или отдельный софт Ripper Studio, если лень рипать руками.



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

Создано: 22 августа 2009 19:54
· Личное сообщение · #12

срипал 38 dword'ов(максимальная длина ника получится - 20) вставил в код и разумеется получил ответ от масма:
keygen.asm(25) : error A2042: statement too complex
keygen.asm(25) : error A2039: line too long
вопросы:
сколько ограничение на длину строки?
как бы сделать чтобы в программе все 38 двордов шли подряд и иметь на них указатель?
конечно, понимаю что можно сделать несколько строк поменьше и несколько циклов.. но это как-то глупо ИМХО.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 22 августа 2009 21:14
· Личное сообщение · #13

Массив из 38 двордов не катит? Учи масм тогда, что тут сказать, это уже основы масма, это не на этот форум, это в гугл.



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

Создано: 24 августа 2009 13:03
· Личное сообщение · #14

всё получилось. всем спасибо за помощь


 eXeL@B —› Вопросы новичков —› помогите написать кейген
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати