| eXeL@B —› Вопросы новичков —› Найти место проверки серийника | 
| . 1 . 2 . >> | 
| Посл.ответ | Сообщение | 
| 
 | 
Создано: 25 мая 2011 00:14  · Личное сообщение · #1 Приветствую. Есть программа, была упакована ASPack. Защиту сняли, импорт восстановили, экзешка ззапускается, вроде работает даже ![]() После долгого и мучительного (давно не было практики) анализа и поиска места проверки серийника выяснил следующее: 0) C++ Builder 1) при вводе серийник не проверяется, не считая длины а просто закрывается 2) он проверяется при запуске программы, где хранится - непонятно, ProcMon наталкивет на мысль, что все хранится в конфиге (ни к чему подозрительному не обращается прога наша больше), но похожих на хеши и пароли строчек там нет. 3) периодически через какие-то промежутки времени выскакивает диалог, и говорит мне, что я нехороший буратина. В окрестностях вызова диалога проверки также не нашел. 4) эта пакость при запуске 100500 раз считывает с файла по 1 байтику, чем сильно захламляет логи... Собсно как можно выявить место проверки серийника при запуске? По логике я думаю, что нужно реверсить механизм чтения настроек, можно ли это как-то сделать красиво и быстро? Может проверенные методики, тулзы? ![]()  | 
| 
 | 
Создано: 25 мая 2011 00:41 · Поправил: [0utC4St]  · Личное сообщение · #2  | 
| 
 | 
Создано: 25 мая 2011 01:22  · Личное сообщение · #3  | 
| 
 | 
Создано: 25 мая 2011 01:37  · Личное сообщение · #4  | 
| 
 | 
Создано: 25 мая 2011 03:13  · Личное сообщение · #5  | 
| 
 | 
Создано: 25 мая 2011 04:13  · Личное сообщение · #6  | 
| 
 | 
Создано: 25 мая 2011 05:13  · Личное сообщение · #7 verdizela пишет: сравни снимки до и после ввода номера. прога может выдать меседж типа "перезапусти меня" а сама чекать серийник и, в случае его невалидности, она его в реестр и незапишет   | Сообщение посчитали полезным: ClockMan | 
| 
 | 
Создано: 25 мая 2011 09:34  · Личное сообщение · #8 Macr0s Включи логику. Серийник либо поверяется при вводе, либо куда-то записывается. Проще отследить именно этот момент - здесь меньше посторонних вызовов. Про мусор в логах - раз его много, то придется таки искать причину диалога про буратину. Серийник может проверятся динамически на валидность - например если он из цифр, то буква просто взведет флажок и СЕРЬЕЗНОЙ проверки не будет.   | Сообщение посчитали полезным: Macr0s | 
| 
 | 
Создано: 25 мая 2011 11:52  · Личное сообщение · #9  | 
| 
 | 
Создано: 25 мая 2011 12:12  · Личное сообщение · #10  | 
| 
 | 
Создано: 25 мая 2011 12:45  · Личное сообщение · #11 Macr0s пишет: А что обычно используют для генерации аппаратно-зависимого ключа? GetVolumeInformation cpuid Так же можно из реестра получить кучу инфы (название и серийники харда, материнки, проца и т.д.) HWID получить существует куча способов.   | Сообщение посчитали полезным: Macr0s | 
| 
 | 
Создано: 25 мая 2011 13:44 · Поправил: VodoleY  · Личное сообщение · #12 продолжение... SystemBiosDate (дата биоса) кроме GetVolumeInformation , которое любым дискэдитором подменяеца, можно получить железный( заводской ) серийник винта/флехи, были извраты прога считала дату производства видеокарты (точнее ее биоса). еще был маразм, прога собирала че может проц(поддерживаемые инструкции и т.д.) на основе этого генерила хеш.. вощем извратов хватает З.Ы. WMI лиш способ достучаца до инфы, как ты ее буш получать.. хоть своим драйвером с ринг 0.... дело десятое ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]()  | 
| 
 | 
Создано: 25 мая 2011 16:07  · Личное сообщение · #13  | 
| 
 | 
Создано: 25 мая 2011 17:52 · Поправил: Macr0s  · Личное сообщение · #14 Konstantin не придирайся к словам   А с файла данные считывает по 1 байту, на полном серьезе, там скорее всего какой-то хитрый парсер настроек самописный - влом разбираться было. В итоге нашел я валидный серийник для проги и место куда оно его пишет, осталось кейген сделать. Пока копался обнаружил, что оно получает серийный номер винчестера и хитрым образом меняет в нем символы перед всеми операциями   после этого руки опустились... Дальше тут всё очень весело. Запрос на серийник (система отзыв-пароль) не совпадает с тем, на основании чего проверяется валидность ключа, хитрая функция почему-то после 2го прохода по массиву (по которому проверяется валидность ключа) выдает валидный ключ   Патчить прогу не хочу, алгоритм генерации серийника тут размазан хорошо по нескольким функциям и сам по себе довольно веселый... Зато адрес валидного серийника находится ровно в 36 байтах от начала введенного серийника, но после закрытия его формы ввода бесследно стирается. Есть идеи, как его отловить run-time? ![]()  | 
| 
 | 
Создано: 25 мая 2011 18:53  · Личное сообщение · #15  | 
| 
 | 
Создано: 25 мая 2011 22:02  · Личное сообщение · #16 Macr0s пишет: с файла данные считывает по 1 байту, на полном серьезе, там скорее всего какой-то хитрый парсер настроек самописный Улыбнуло Macr0s пишет: Есть идеи, как его отловить run-time? Странно, что до сих пор людям не лень гадать, чаще сразу закрывают такие топики, когда автору лень жертву выложить, а он рассказывает какая злостная и неимоверная защита там стоит... ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]()  | 
| 
 | 
Создано: 26 мая 2011 10:09  · Личное сообщение · #17 Isaev пишет: когда автору лень жертву выложить, а он рассказывает какая злостная и неимоверная защита там стоит... Не то чтобы лень, есть другие моменты: 1) интересны общие принципы действий в аналогичных ситуациях 2) после прямых подсказок типа "да тут по этому вот адресу проверка, по этому jmp по этому генерация сериала" как-то неохота самому копаться что да как А прога вот: http://superbot.su/botva.php Кстати обнаружилась онлайн-проверка, придется патчить  
![]()  | 
| 
 | 
Создано: 31 мая 2011 08:24  · Личное сообщение · #18  | 
| 
 | 
Создано: 31 мая 2011 12:07  · Личное сообщение · #19  | 
| 
 | 
Создано: 31 мая 2011 12:33 · Поправил: Isaev  · Личное сообщение · #20 zeppe1in пишет: Это если патч не грамотный Смело! простой пример: post запрос с HWID и KEY, проверка в php если KEY не от этого HWID функционал на стороне сервера выполнился не правильно, скрипт пернул пару килобайт не верного ответа и на его основе пошли дальше не верные вычисления и всё пошло не так что будешь патчить?  
----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]()  | 
| 
 | 
Создано: 31 мая 2011 13:35  · Личное сообщение · #21  | 
| 
 | 
Создано: 02 июня 2011 16:45  · Личное сообщение · #22  | 
| 
 | 
Создано: 03 июня 2011 12:30  · Личное сообщение · #23 согласен что 500 не деньги. но вот мне надо поднять 10+ мультов на разных компах. я разорюсь покупать бота для разных машин  ))насчет онлайн проверки: 1. для самого бота - написана программа которая дает правильный ключ. для бота ключ введен правильно и он считает себя зарегенным. 2. бот делает онлайн проверку - отсылается сгенеренный ключ(зависит от конкретного компа) и еще какая то инфа. какая - неизвестно пока что. 3. первую пару дней - приходит валидный ответ от сервера и бот работает. затем начинает приходить другой ответ и прямо в тексте ответа текст: "Прога не зарегена и т.д.", который бот выбрасывает в мессаж боксе при получении и завершает работу. 4. запрет серверов для онлайн проверки - не дает результатов, бот пытается в бесконечном цикле все таки получить онлайн проверку и не работает. 5. демо версией можно пользоваться выходит 2-3 дня, после этого твой хардварный ключ блокируется на сервере, и всегда приходит ответ что прога не зарегена. 6. подмена ответа онлайн-проверки на валидный - который приходил в первые пару дней - не дает положительных результатов, бот снова шлет постоянно запросы на проверку. 7. подмена запроса с помощью прокси на другой хардварный ключ - дает валидный ответ(на пару-тройку дней). но в целом не помогает. ответ от сервера приходит валидный судя по всему для того ключа - который был отправлен. НО, скорее всего бот делает проверку ответа на основе твоего хардварного ключа и она тоже не проходит. Есть идеи? Есть смысл делать хук на функцию которая возвращает например серийный номер винта, на основании которого вычисляется хардварный ключ? ![]()  | 
| 
 | 
Создано: 03 июня 2011 13:54  · Личное сообщение · #24  | 
| 
 | 
Создано: 04 июня 2011 01:09  · Личное сообщение · #25  | 
| 
 | 
Создано: 06 июня 2011 13:26  · Личное сообщение · #26  | 
| 
 | 
Создано: 06 июня 2011 15:32  · Личное сообщение · #27 zeppe1in Если верный ответ, по дальнейшим вычислениям угадать не представляется возможным, то единственная валидная пара решит проблему Ну вот, уважаемый человек, а такое говорите. Вы же наверняка про криптографию слышали, и про взлом алгоритма только лишь при наличии определённого колчиства plain-text и crypted text. Одной парой тут всё явно не ограничится. Возможно, вы что-то другое имели ввиду? ----- Stuck to the plan, always think that we would stand up, never ran. ![]()  | 
| 
 | 
Создано: 06 июня 2011 15:56  · Личное сообщение · #28  | 
| 
 | 
Создано: 06 июня 2011 16:26 · Поправил: ARCHANGEL  · Личное сообщение · #29  | 
| 
 | 
Создано: 07 июня 2011 09:12  · Личное сообщение · #30 Ну а как это на сервере запатчить? На сервере никак. В экзе можно запатчить, чтобы выдавал "правильный" HWID, который зареган. Естественно придется 500р отстегнуть. SomeSpy : для самого бота - написана программа которая дает правильный ключ. Или имелось ввиду : менять через 2 дня этот ключ - естественно вместе с HWID. ![]()  | 
| . 1 . 2 . >> | 
| eXeL@B —› Вопросы новичков —› Найти место проверки серийника | 









 В проге генерится аппаратно-зависимый ключ, так что кроме самой проверки придется искать место генерации ключа 

 



 Для печати