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

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

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

Создано: 25 мая 2011 00:14
· Личное сообщение · #1

Приветствую.
Есть программа, была упакована ASPack. Защиту сняли, импорт восстановили, экзешка ззапускается, вроде работает даже
После долгого и мучительного (давно не было практики) анализа и поиска места проверки серийника выяснил следующее:
0) C++ Builder
1) при вводе серийник не проверяется, не считая длины а просто закрывается
2) он проверяется при запуске программы, где хранится - непонятно, ProcMon наталкивет на мысль, что все хранится в конфиге (ни к чему подозрительному не обращается прога наша больше), но похожих на хеши и пароли строчек там нет.
3) периодически через какие-то промежутки времени выскакивает диалог, и говорит мне, что я нехороший буратина. В окрестностях вызова диалога проверки также не нашел.
4) эта пакость при запуске 100500 раз считывает с файла по 1 байтику, чем сильно захламляет логи...

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




Ранг: 109.3 (ветеран), 55thx
Активность: 0.060
Статус: Участник
Yes! I_m noob!

Создано: 25 мая 2011 00:41 · Поправил: [0utC4St]
· Личное сообщение · #2

Macr0s, почитай хотя бы Рикардо Нарваха (http://wasm.ru/series.php?sid=17).
"Реверсинг" процмоном - лишь частный случай изучения сабжа.

-----
z+7v+/Lq4CAtIO/l8OL76SD44OMg6iDv8O7i4OvzLiCpIMPu7OXwINHo7O/x7u0=




Ранг: 129.0 (ветеран), 116thx
Активность: 0.060
Статус: Участник

Создано: 25 мая 2011 01:22
· Личное сообщение · #3

Macr0s
Ссылку на прогу дай ибо как можно что-то советовать, разве что гадать...?

-----
We do what we want because we can.




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 25 мая 2011 01:37
· Личное сообщение · #4

Возьми какую-нибудь прогу которая умеет делать снимки реестра и файлов и сравни снимки до и после ввода номера.




Ранг: 95.2 (постоянный), 26thx
Активность: 0.060
Статус: Участник

Создано: 25 мая 2011 03:13
· Личное сообщение · #5

Vovan666
Да зачем блин? не проще ли бряк на апи поставить?

GetPrivateProfileString
ReadFile
RegOpenKey



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 25 мая 2011 04:13
· Личное сообщение · #6

inf1kek пишет:
Да зачем блин? не проще ли бряк на апи поставить?

Иногда нет. А уж ТС тем более.



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 25 мая 2011 05:13
· Личное сообщение · #7

verdizela пишет:
сравни снимки до и после ввода номера.

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

| Сообщение посчитали полезным: ClockMan

Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 25 мая 2011 09:34
· Личное сообщение · #8

Macr0s
Включи логику. Серийник либо поверяется при вводе, либо куда-то записывается. Проще отследить именно этот момент - здесь меньше посторонних вызовов.
Про мусор в логах - раз его много, то придется таки искать причину диалога про буратину.
Серийник может проверятся динамически на валидность - например если он из цифр, то буква просто взведет флажок и СЕРЬЕЗНОЙ проверки не будет.

| Сообщение посчитали полезным: Macr0s

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

Создано: 25 мая 2011 11:52
· Личное сообщение · #9

tundra37 ты прав оказался, при вводе легкая проверка идет, скипаются все символы кроме hex цифр. Потом еще нашел прверку по таймеру В проге генерится аппаратно-зависимый ключ, так что кроме самой проверки придется искать место генерации ключа



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

Создано: 25 мая 2011 12:12
· Личное сообщение · #10

А что обычно используют для генерации аппаратно-зависимого ключа? В смысле методы получения информации о железе? WMI?



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 25 мая 2011 12:45
· Личное сообщение · #11

Macr0s пишет:
А что обычно используют для генерации аппаратно-зависимого ключа?

GetVolumeInformation
cpuid
Так же можно из реестра получить кучу инфы (название и серийники харда, материнки, проца и т.д.)
HWID получить существует куча способов.

| Сообщение посчитали полезным: Macr0s

Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 25 мая 2011 13:44 · Поправил: VodoleY
· Личное сообщение · #12

продолжение... SystemBiosDate (дата биоса) кроме GetVolumeInformation , которое любым дискэдитором подменяеца, можно получить железный( заводской ) серийник винта/флехи, были извраты прога считала дату производства видеокарты (точнее ее биоса). еще был маразм, прога собирала че может проц(поддерживаемые инструкции и т.д.) на основе этого генерила хеш.. вощем извратов хватает
З.Ы. WMI лиш способ достучаца до инфы, как ты ее буш получать.. хоть своим драйвером с ринг 0.... дело десятое

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 42.9 (посетитель), 33thx
Активность: 0.040
Статус: Участник

Создано: 25 мая 2011 16:07
· Личное сообщение · #13

Macr0s пишет:
Есть программа, была упакована ASPack. Защиту сняли, импорт восстановили,

Какой такой ASPack защита? ASPack - простой упаковщик.
Macr0s пишет:
4) эта пакость при запуске 100500 раз считывает с файла по 1 байтику,

С какого файла? Может CRC считает?

Ух, всю ману потратил, аж вспотел.



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

Создано: 25 мая 2011 17:52 · Поправил: Macr0s
· Личное сообщение · #14

Konstantin не придирайся к словам А с файла данные считывает по 1 байту, на полном серьезе, там скорее всего какой-то хитрый парсер настроек самописный - влом разбираться было.
В итоге нашел я валидный серийник для проги и место куда оно его пишет, осталось кейген сделать. Пока копался обнаружил, что оно получает серийный номер винчестера и хитрым образом меняет в нем символы перед всеми операциями после этого руки опустились... Дальше тут всё очень весело. Запрос на серийник (система отзыв-пароль) не совпадает с тем, на основании чего проверяется валидность ключа, хитрая функция почему-то после 2го прохода по массиву (по которому проверяется валидность ключа) выдает валидный ключ

Патчить прогу не хочу, алгоритм генерации серийника тут размазан хорошо по нескольким функциям и сам по себе довольно веселый... Зато адрес валидного серийника находится ровно в 36 байтах от начала введенного серийника, но после закрытия его формы ввода бесследно стирается. Есть идеи, как его отловить run-time?




Ранг: 88.2 (постоянный), 111thx
Активность: 0.070.01
Статус: Участник

Создано: 25 мая 2011 18:53
· Личное сообщение · #15

"Пациента" бы увидеть, а то сеанс телепатии просто




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 25 мая 2011 22:02
· Личное сообщение · #16

Macr0s пишет:
с файла данные считывает по 1 байту, на полном серьезе, там скорее всего какой-то хитрый парсер настроек самописный

Улыбнуло
Macr0s пишет:
Есть идеи, как его отловить run-time?

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

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




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

Создано: 26 мая 2011 10:09
· Личное сообщение · #17

Isaev пишет:
когда автору лень жертву выложить, а он рассказывает какая злостная и неимоверная защита там стоит...

Не то чтобы лень, есть другие моменты:
1) интересны общие принципы действий в аналогичных ситуациях
2) после прямых подсказок типа "да тут по этому вот адресу проверка, по этому jmp по этому генерация сериала" как-то неохота самому копаться что да как

А прога вот:
http://superbot.su/botva.php

Кстати обнаружилась онлайн-проверка, придется патчить




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 31 мая 2011 08:24
· Личное сообщение · #18

Macr0s пишет:
обнаружилась онлайн-проверка, придется патчить

Если онлайн-проверка грамотная, то патч не поможет

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 31 мая 2011 12:07
· Личное сообщение · #19

Isaev пишет:
Если онлайн-проверка грамотная, то патч не поможет

Это если патч не грамотный

-----
zzz





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 31 мая 2011 12:33 · Поправил: Isaev
· Личное сообщение · #20

zeppe1in пишет:
Это если патч не грамотный

Смело!
простой пример:
post запрос с HWID и KEY, проверка в php если KEY не от этого HWID функционал на стороне сервера выполнился не правильно, скрипт пернул пару килобайт не верного ответа и на его основе пошли дальше не верные вычисления и всё пошло не так
что будешь патчить?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 31 мая 2011 13:35
· Личное сообщение · #21

Isaev
Встречный вопрос
А ты что, кейген будешь делать?
Если верный ответ, по дальнейшим вычислениям угадать не представляется возможным, то единственная валидная пара решит проблему, и за патчу правильный ответ.
Тут или патч, или сервер свой поднимать. Как наверное с любой онлайн проверкой.

-----
zzz




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 02 июня 2011 16:45
· Личное сообщение · #22

Тут или патч, или сервер свой поднимать
Сервер не получится, т.к. это бот для игры. Да и задачка не стоит усилий - полный бот стоит 500р



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

Создано: 03 июня 2011 12:30
· Личное сообщение · #23

согласен что 500 не деньги. но вот мне надо поднять 10+ мультов на разных компах. я разорюсь покупать бота для разных машин))

насчет онлайн проверки:
1. для самого бота - написана программа которая дает правильный ключ. для бота ключ введен правильно и он считает себя зарегенным.
2. бот делает онлайн проверку - отсылается сгенеренный ключ(зависит от конкретного компа) и еще какая то инфа. какая - неизвестно пока что.
3. первую пару дней - приходит валидный ответ от сервера и бот работает. затем начинает приходить другой ответ и прямо в тексте ответа текст: "Прога не зарегена и т.д.", который бот выбрасывает в мессаж боксе при получении и завершает работу.
4. запрет серверов для онлайн проверки - не дает результатов, бот пытается в бесконечном цикле все таки получить онлайн проверку и не работает.
5. демо версией можно пользоваться выходит 2-3 дня, после этого твой хардварный ключ блокируется на сервере, и всегда приходит ответ что прога не зарегена.
6. подмена ответа онлайн-проверки на валидный - который приходил в первые пару дней - не дает положительных результатов, бот снова шлет постоянно запросы на проверку.
7. подмена запроса с помощью прокси на другой хардварный ключ - дает валидный ответ(на пару-тройку дней). но в целом не помогает. ответ от сервера приходит валидный судя по всему для того ключа - который был отправлен. НО, скорее всего бот делает проверку ответа на основе твоего хардварного ключа и она тоже не проходит.

Есть идеи?

Есть смысл делать хук на функцию которая возвращает например серийный номер винта, на основании которого вычисляется хардварный ключ?



Ранг: 49.6 (посетитель), 9thx
Активность: 0.030
Статус: Участник

Создано: 03 июня 2011 13:54
· Личное сообщение · #24

SomeSpy пишет:
Есть идеи?

Найти функу генерации хвида и сделать её рандомной+периодически генерировать ключ для нового хвида




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 04 июня 2011 01:09
· Личное сообщение · #25

SomeSpy пишет:
Есть смысл делать хук на функцию которая возвращает например серийный номер винта, на основании которого вычисляется хардварный ключ?

Зачем её хучить то? Вызови просто и получи номер винта )))

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




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

Создано: 06 июня 2011 13:26
· Личное сообщение · #26

Isaev пишет:
Зачем её хучить то? Вызови просто и получи номер винта )))


и? что мне это даст? номер своего винта и я так уже знаю. надо то бота обмануть




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 06 июня 2011 15:32
· Личное сообщение · #27

zeppe1in
Если верный ответ, по дальнейшим вычислениям угадать не представляется возможным, то единственная валидная пара решит проблему

Ну вот, уважаемый человек, а такое говорите. Вы же наверняка про криптографию слышали, и про взлом алгоритма только лишь при наличии определённого колчиства plain-text и crypted text. Одной парой тут всё явно не ограничится. Возможно, вы что-то другое имели ввиду?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 06 июня 2011 15:56
· Личное сообщение · #28

ARCHANGEL Он имел ввиду запатчить эту пару вовнутрь бота

zeppe1in ....и за патчу правильный ответ.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 06 июня 2011 16:26 · Поправил: ARCHANGEL
· Личное сообщение · #29

Ну а как это на сервере запатчить?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 07 июня 2011 09:12
· Личное сообщение · #30

Ну а как это на сервере запатчить?
На сервере никак. В экзе можно запатчить, чтобы выдавал "правильный" HWID, который зареган. Естественно придется 500р отстегнуть.
SomeSpy : для самого бота - написана программа которая дает правильный ключ.
Или имелось ввиду : менять через 2 дня этот ключ - естественно вместе с HWID.


. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Найти место проверки серийника
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати