Простой шаблон кейгена ( перевод статьи Simple KeyGen Templeate by ARTeam/Goppit) ARTeam Win32 Assembly for Crackers / 6 перевёл: KindEcstasy [ [email protected] ] В этом уроке мы напишем простой кейген и добавим в него пример кода простой генерации ключа, которая в последствии может быть улучшена до настоящего алгоритма генерации выдранного из любого программного обеспечения. Так же мы добавим в кейген код который позволяет копировать наш готовый (сгенерированный ключ ) в буффер обмена windows. Как обычно запустите WinAsm, создайте новый проект - standart exe project. И добавьте новый скрипт ресурса и создайте новый диалог и иконку (как в предидущих уроках). Добавьте 2 контрола "EditBox" чтобы вводить наше имя и показывать наш серийник. 2 статические надписи, чтобы подписать где какое поле находиться и 3 кнопки, как показанно на рисунке: Измените стиль для DialogBox, добавив свойство DS_CENTER. К надписям примените свойство SS_CENTERIMAGE, а к полю где будет выводиться серийник примените свойство ES_READONLY. Скрипт вставлен в исходный код проекта как simplekeygen.rc Теперь переключитесь в главный исходник программы ( simplekeygen.asm ) и вставьте код из нижепреведённого листинга. Вот главный код тела програмы: Вот код функции диалога: Процедура генерации серийника, которая и вычисляет правильный номер: Теперь давайте проанализируем приведённый выше код: Переменные Есть 2 неинициализированные переменные строчного типа в которые будут помещены имя которое ввёл пользователь и сгенерированный серийный номер. Функция диалога По кнопке Generate мы просто получаем имя введённое пользователем из поля ввода для имени (Name) и сохраняем его в строчную переменную NameBuffer, вызываем нашу процедуру генерации и выводим полученный в результате серийный номер в поле для серийника (Serial). Кнопка Copy вызывает копирование всего что находиться в поле ввода серийника в буффер обмена. Вызывается это посылкой windows-сообщения полю для ввода серийника. Это намного просще, чем писать отдельную функцию для проделывания этой операции. Кстати заметьте что по спецификации из Win32.hlp, текст который должен быть скопирован, должен быть сперва выделен!: Сообщение которое позволяет выделить всё что находиться в editbox приведено ниже: Важно отметить, что в Windows есть масса сообщений разного рода для разных задач, позволяющих выполнить что-то без нужды написания дополнительного кода. Функция кнопки Exit была описанна в ранних уроках (прим. перев. Она просто завершает программу) Процедура генерации и метки Функция генерации - простой пример действия который меняет порядок символов в строке введённой в поле для имени (Name). Заметьте что мы не передаём функции никаких параметров, так же как и функция в свою очередь ничего не возвращает. Так что сдесь нет никакой необходимости в обьявлении прототипа функции и вызова её с помощью Invoke. Сначала процедура генерации была написанна без следующих строк: Code: test eax,eax jle NOINPUT NOINPUT: Но, нажатии на кнопку Generate вызывало сбой если буффер (переменная) NameBuffer был пуст (то есть пользователь не вводил ничего в поле для имени). Первая функция lstrlen подсчитывает длинну строки в буффере NameBuffer и возвращает результат в регистре EAX. Выдержка из Win32.hlp: "Функция lstrlen возвращает длинну в байтах (для ANSI версии) или в символах (Unicod версия) заданной строки (нулевой символ прерывания строки не учитываеться)". Test eax,eax устанавливает флаг нуля если регистр EAX равен 0 (нулю) и совершаеться условный переход jle (Jump if Less or Equal) к метке NOINPUT и затем выполняется инструкция RET, если флаг нуля установлен! Метки - это что-то вроде закладок, которыми вы можете подписать какой-то кусок (часть) кода для того чтобы в последствии совершать условные прыжки к этим меткам. Когда вы определяете метку вы должны поставить после ней двоеточие, но когда вы вызываете метку или делаете на неё прыжок - двоеточие не пишеться (прим. перев: LABEL1: <- обьявили метку JMP LABEL1 <- прыгнули на метку). Если длинна строки в EAX больше чем 0 (нуль), то длинна копируеться в регистр ECX по средствам инструкции MOV. ECX обычно используеться как счётчик который указывает сколько раз должна совершиться цикл (LOOP). В нашем примере мы используем это чтобы пройтись по всем символам в строке. Затем в регистры ESI & EDI кладуться адреса в памяти переменных NameBuffer & SerialBuffer. Эти два регистра обычно используються в качестве источника и приёмника в строковых операциях. @@: обьявляет ананимную метку. В длинных конструкциях используеться много переходов и/или циклов. Это заставляет нас обьявлять много разных имён для наших меток, но MASM может использовать ананимные метки для коротких прыжков и циклов. Для того чтобы использовать ананимную метку: JMP @F - совершает прыжок вперёд по коду к ближайшей метке @@: JMP @B - совершает прыжок назад по коду к ближайшей метке @@: Соответственно F - Forward, B - Backward. В общем конструкция перевода строки выглядит следующим образом: Сначала счётчик ECX уменьшаеться на 1, так что финальный проход по циклу (петля) заканчиваеться на 0 (нуль) а не на 1. То есть если длинна строки была 6 символов, тогда ECX будет "петлять" от 5 до 0 и конструкция повториться 6 раз. ESI содержит адрес первого символа переменной NameBuffer, то когда ECX=0, ESI+ECX - указывают на следующий символ и когда ECX=5, ESI+ECX - указывают на последний символ в строке. Первая инструкция MOV копирует последний байт (символ) из NameBuffer в младший байт регистра EDX ( DL ). Вторая инструкция MOV копирует этот байт на место первого байта в переменной SerialBuffer (адрес которой записанн в регистре EDI) Потом значение EDI увеличиваеться на 1чтобы указать на второй байт переменной SerialBuffer и приготовиться ко второму проходу по циклу (ко второй петле). И наконец инструкция OR (логическое ИЛИ) используеться с регистром ECX, которая установит флаг нуля если ECX достиг нуля. Инструкция JA (Jump if above) совершит прыжок, если флаг нуля НЕ установлен. Другими словами цикл будет продолжаться до тех пор пока ECX не достигнет нуля. Когда выполнение дойдёт до RET мы выйдем из функции в главную процедуру окна (диалога). Это очень простой способ написания функции. Вы можете передавать функции параметр и получать возвращаеме значения в отличии от результата в EAX. Обьявление прототипа позволит вам вызвать вашу функцию с помощью Invoke. В следующих уроках мы добавим обложку для нашего кейгена и вставим в него музыку и графику. автор: Goppit | ARTeam перевод: robo9 <[email protected]> оригинал можно скачать по этой ссылке: http://team-x.ru/guru-exe/Tutorials/Coding/Win32Assembler%20Coding%20for%20Crackers%20v1.1.zip
а в чем смысл писать кейген на ассемблере? потому, что крякеры других языков не знают или может показать свой профессионализм? только тогда к чему этот windelphiasm? или научить других ассемблеру? кейген это исследование алгоритма генерации серийного номера по имени, ничего подобного в статье не упоминается. его безусловно на ассемблере писать проще, но вот красочную обертку делать на нем же смысла нет, тем более для отдельной статьи.
Ну во первых писал это не я. Я только перевел на русский. А во вторых цель данной статьи не написание кейгена, а создание платформы (заготовки) для будущих кейгенов. Статья расчитанна на новичков и алго генерации как такового нет, просто паказанно как создать темплейт. Я начал переводить её потому, что посчитал её интересной для новичков. А смысл написания кейгенов на ассемблере прост как веник - потому что выходные файлы самые маленькие по размеру и что этот язык напрямую связан с крэкингом. Крекеры безусловно знают и другие языки программирования, просто за ассемблером они проводят большую часть своего времени, а не потому что они хотят казаться профессионалами (каждый в чём-то профи). Алгоритм создания ключа по имени упоминаеться просто он очень лёгкий (это как бы пример такой ). И нету здесь никаких красочных обложек просто форма и кнопки ....
бля, вот только хотел написать это, потом увидел пост зако, где он это уже написал... плюсадин! нахер это надо неясно, вон slesh выкладывал traceroute на осенблере, и думает что ему в репу плюсики поставят, ему даже плюсиков не поставили! гыгы да уж, неибаться классная цель статьи. написать заготовку для месагбокса - вот это проффесионально. создается впечатление, что диалоговые окна (но осенблере конечно!!!) значат больше, чем сам кейген. Ещё один заблуждающийся.. Стереотипы пиздец. Не пробовал в студии делать? Ужаснешься! Ты там увидишь оптимизацию, который в этом асм-коде нет. Особенно это касается call [длинный дворт], который в студии заменяется на call регистр, в который заранее кладется адрес. Хотя бы это. Мб тоже самое в студии (правильно сделаное) будет весить ещё меньше. Или столько же. Из-за выравнивания Да и НАХЕРА маленький размер? Маленький размер нужен лоадеру. Иначе лоадер - просто не будет работать. Маленький размер нужен трояну. Но уже не настолько. А вот кейгену маленький размер впизду не сдался. Если это своеобразный понт, то он отнимает времени и сил, а толк от него, конечно, специфический: "просто-так". Ага, я видел как они знают. Видел их исходники. Которые похожи на сорцы кузьмича, даже хуже. Так, вкратце, как сделать какой-нибудь кейген - да, а проэкт серьезный спроэктировать - ***. Короче какое-то разъяснение новичка, только что освоившего пару машинных инструкций, плюс прочитавшего про DialogBoxParam в MSDN ... К счастью, к автору это ничего отношения не имеет, потому что он только переводил. Аффтар плюсадин.
Спасиб Ну чтож такое то... ну для ньюбисов же писали. Кстати другие его туториалы более профессионально написанны и в плане сорцов. Там примеры и лоадеров и чего тока нету. Просто доходчиво всё разьеснено и понятно. Имхо, для новичков самое то! Кстати ARTeam довольно сильная команда реверсеров в частности и Goppit А по поводу зачем они пишут на асемблере, ну ещё наверное потому что мало кто из них представляет что такое классы да и если знают то по наслышке... Ассемблер для них это язык №1 вот и пишут на нём. Некоторые пишут и на Delphi и С++ но это всё равно уже не то... / Ага но перед этим то в регистр нужно ещё какойто адрес впиндюрить... по почкам не бейте так как это всего лишь имхо...
Да лан нормально,для новичков сойдет в конце концов начинать же с чего надо,а на кеза не обращай внимания он уже кончает...
Кез,тебе по-моему везет, ты вечно находишь какое-то говно =))) А этих темплейтов для кейгенов туева хуча =))) http://webfile.ru/1663271 нашел на винте Что-то мне подсказывает,что ребята там серьезные и про классы уж точно они знают =)))
GoreMaster Это метафора - так как в основном используется ассемблер И темплейтов хоть и много но тут написанно как его запрограммировать... И ЭТО не я писал так что я бы выслуiал лучше мнения о качестве перевода а не всякий оффтоп
А чего, ну нормальное качество, песдато, молодец. Просто если тебя на античате не критикуют - значит все норм, всем понравилось, можешь не волноваться Т.е. не к чему придраться. Т.к. если бы было к чему придраться - поверь, придрались бы уже Ввввооооововововов, именно. Вот про что я и говорил. Твои слова звучат так в переводе на русский: "самая главная непостижимая вещь вещь - это классы си плюс плюс! я про них не особо знаю, но говорят, что классы - это проффесионально, не то, что ваш осенблер, а прям по - взрослому".
Тут ты прав,так как не было необходимости нет,просто говорят,что про классы реверсеры хоть что-то да должны знать З.Ы.:КЕЗ, с наступившим тебя, не пей много бутирата в Новом 2008 году