Сейчас на форуме: vsv1 (+5 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Создание захватчика ключа из памяти |
Посл.ответ | Сообщение |
|
Создано: 02 февраля 2016 02:00 · Личное сообщение · #1 Здравствуйте уважаемые друзья, столкнулся с одной проблемой - нужно мне было создать кейген одной программы которая генерирует серейник по hwid (GetVolumeInformationA), места генераций серейника (и сам алгоритм) я нашел, сам ключ тоже, но алгоритм генераций оказалось очень завернутым и кейген писать для меня трудно будет, теперь собственно вопросы: 1. можно ли создать захватчик серейника ? (так как ключ каждый раз генерируется и проверяется с юзеровским ключом в файле license.lic) 2. Если да, есть у кого примеры реализаций на C# e ? Серейник генерируется( в функций sub_40EE90() ) и проверяется с юзеровским(v21) в этой части: Code:
3. Означает это - что сперва надо захвативать функцию strcmp() ? 4. В программе несколько вызовов этой функций как узнать когда именно нужно захвативать ? Заранее спасибо! С уважением, cryptX. ![]() |
|
Создано: 02 февраля 2016 03:49 · Личное сообщение · #2 cryptX может тебе достаточно что-то наподобие ![]() |
|
Создано: 02 февраля 2016 12:31 · Поправил: VodoleY · Личное сообщение · #3 типа простой лоадер.. который грузится в память таргета.. потом его стопает на нужной функе.. забирает данные.. потом востанавливет/отдает управление основному процессу.. с нужными данными.. скучно Добавлено спустя 2 минуты если по феншую.. то каждой проге нужен кей ген... если ВЫ нашил процедуру.. и можете просчитать ответ.. вам это делать надо 1 раз.. но смысл ТЗ от меня както по прежнему скрыт.. количество вызовов.. не имеет значения, если прога будет иметь валидную пару ЗЫ. типа патчи.. это зло.. ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
|
Создано: 02 февраля 2016 12:43 · Поправил: cryptX · Личное сообщение · #4 SReg Спасибо за ответ дружище! Но проблема в том что в программе нет кнопки(и.т.д) которая вызывает процедуру проверки ключа, проверка происходит только при загрузке программы через файл лицензий. Поетому хотелось по подробнее узнать как захват осуществить (да и перед захватом надо несколько байтов в памяти поправить). Есть другие идеи ? Добавлено спустя 10 минут VodoleY Спасибо за ответ! Есть где почитать про этот простой лоадер ? (на C# если можно) Как я понимаю лоадер будет ставить бряки ? Патч не прокатит, так как программа очень редко меняется а вот алгоритм генераций оставляют почему то прежним... Почему не кейген - процедура "извращений" огромная, а знаний мои в эту сторону ограничены ... ![]() |
|
Создано: 02 февраля 2016 13:27 · Поправил: Kindly · Личное сообщение · #5 Если ключ привязан только к GetVolumeInformationA, то подменяй его в проге, и юзай найденный для него ключ, если закейгенить никак. ----- Array[Login..Logout] of Life ![]() |
|
Создано: 02 февраля 2016 19:46 · Поправил: DenCoder · Личное сообщение · #6 cryptX пишет: Серейник генерируется( в функций sub_40EE90() ) и проверяется с юзеровским(v21) в этой части: if ( strcmp((const char *)sub_40EE90(&v18, 0), (const char *)&v21) ) Инжектится dll, которая устанавливает хук на выходе из ф-ции sub_40EE90, забирает серийник и предлагает сохранить в файле license.lic . Чем не вариант? Добавлено спустя 2 минуты Один раз забирает и устанавливает в true флаг, что серийник забран, чтоб ещё миллион ненужных раз этого не делать. ----- IZ.RU ![]() |
|
Создано: 07 февраля 2016 13:47 · Личное сообщение · #7 |
|
Создано: 07 февраля 2016 19:34 · Личное сообщение · #8 cryptX пишет: как ставить хук на выходе функций ? практический пример) Есть 2 способа: 1) Ставится хук на начало ф-ции путём замены 5 байт на jmp в свою dll. При перехвате обязательно исполняются заменённые инструкции и работает вставка в стек перед адресом возврата адреса пост-обработчика. 2) Ставится хук на конец ф-ции путём замены байт. Всё аналогично 1му варианту, только без кода первого обработчика. Чтобы осуществить замену в коде определённых байт на свои, используются 2 функции: VirtualProtect() для разрешения записи в участок памяти для кода и FlushInstructionCache(), чтобы "случайно" кэшированный старый код не исполнялся. ----- IZ.RU ![]() |
|
Создано: 10 февраля 2016 14:02 · Личное сообщение · #9 |
|
Создано: 10 февраля 2016 14:44 · Поправил: kid · Личное сообщение · #10 |
|
Создано: 10 февраля 2016 16:46 · Личное сообщение · #11 cryptX пишет: А можно кусок кода на C#-е демонстрирующее первый способ ? В теории есть и для шарпа класс как-то вроде WinApi. Но зачем так извращаться? Я лично пишу такие вещи на си иногда с применением асм-вставок, гораздо проще так! Тут ничего нового - скачайте любой апи-логгер, апи-шпион, пореверсите и поймёте... Добавлено спустя 1 минуту Тем более давно это всё в многочисленных сорцах ----- IZ.RU ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Создание захватчика ключа из памяти |
Эта тема закрыта. Ответы больше не принимаются. |