![]() |
eXeL@B —› Вопросы новичков —› технология взлома триальной программы....AtmanAVR 5.8.6 |
Посл.ответ | Сообщение |
|
Создано: 08 ноября 2007 10:53 · Личное сообщение · #1 Приветсвую всех! Столкнулся с такой проблемой новичка. Программа AtmanAVR 5.8.6 судя по Peid_0.9 не запакована (Visual C++ 6.0).Триальная программа на 30 дней. Сведения о триале "вероятно" хранятся в реестре. ("вероятно" потому, что - с регмонитором не научился еще ковырять реестр) Регистрация организована не на сервере онлайн. а путем отсылки некоторого сгенеренного при запуске кода разработчику с получением ответного кода...... Программа не пишет сколько дней осталось/прошло.Просто при запуске через месяц выводит окно с регистрацией.....при неудачной регистрации закрывается без месэйжбоксов и ..соответственно бряки на (messagebox и getwindowstextов) них бесполезны.....Может подскажете как найти процедуру проверки регистрации не имея ясно выраженных признаков начала/окончания проверки... писал в запросы на взлом программ..http://www.exelab.ru/f/action=vthread&forum=2&to pic=10399 ![]() ![]() |
|
Создано: 08 ноября 2007 11:18 · Личное сообщение · #2 |
|
Создано: 08 ноября 2007 13:27 · Поправил: DMD · Личное сообщение · #3 jkjk пишет: Может подскажете как найти процедуру проверки регистрации не имея ясно выраженных признаков начала/окончания проверки... каковой, похоже, нет. при регистрации программка некий СТАБИЛЬНЫЙ, похоже, это некий iD (у меня это 0060832F584B ) преобразует в то, что видно как INDEX CODE и регулярно мутирует. потом можно поймать место считывания REG CODE. так вот в чем вся ерунда: этот рег код ни разу не обрабатывается. те. совсем.. никак.. никакие бряки не срабатывают. и вполне красиво выходим на EXIT. ps/ никакой вменяемый аффтор не будет требовать: To register AtmanAvr C: 1) Email the Index Code to info@atmanecl.net 2) Wait for the reply and don't close the register window 3) Copy the Register Code you received to the "Register Code" box 4) Click OK "Чистый и не омраченный искрой разума бред." (С) pps/ да и сайт не вызывает чувства доверия.. ни контактов.. ни тел.. ни адресов.. ![]() |
|
Создано: 08 ноября 2007 15:33 · Поправил: DMD · Личное сообщение · #4 что бы не быть голословным... 0040280E . 53 PUSH EBX ; /Arg1
внутри этой процедуры: на останове 00454065 |. E8 E6C9FBFF CALL 00410A50
по адресу первого аргумента будет после выполнения INDEX CODE для отображения в регистрации для текущего запуска. по адресу второго можно увидеть стабильный iD всплываем на уровень выше.. и чуть ниже 00402833 . E8 90BF0C00 CALL <JMP.&MFC42.#2514>
это запуск процедуры отображения и считывания дааных из регистрации. Останов на 00402838 . 83F8 01 CMP EAX, 1
сработает если ввели что-то как Reg Code и нажали ОК что ввели можно увидеть немного проскролив окно стека $+178 > 008F50A8 ASCII "9a 44 a2 ea d4 53 28 b6 a5 42 "
"АААА" это я ввел как пример Rec Code. так вот, никакие бряки на адрес 00B77778 ASCII "AAAA" не срабатывают... примерно вот так получается.... если это изделие в триальный период корректно работает, силы нужно посвятить нахо;дению места хранения оного для обнуления раз в месяц. или определить условие ветвления "Триал-Не_триал". похоже, это самый простой выход из ситуации.... ![]() |
|
Создано: 08 ноября 2007 15:58 · Личное сообщение · #5 |
|
Создано: 08 ноября 2007 17:31 · Поправил: DMD · Личное сообщение · #6 jkjk пишет: А где ты его нашел то "стабильный код"?? поднимаем глаза выше по тексту и внимательно читаем: DMD пишет: 0040281F . E8 7C170500 CALL 00453FA0 ; \AtmanAvr.00453FA0 внутри этой процедуры: на останове 00454065 |. E8 E6C9FBFF CALL 00410A50 по адресу первого аргумента будет после выполнения INDEX CODE для отображения в регистрации для текущего запуска. по адресу второго можно увидеть стабильный iD * * * jkjk пишет: "рег код нигде не обрабатывается". это означает, что к веденным данным как рег код программа не обращается.. по крайней мере, мне найти такое место не удалось... * * * jkjk пишет: зачем тогда автор пишет чтобы на время отправки индекс кода не закрывать программу??? а я знаю?! он же китаез.. кто знает о чем он думает?! ![]() но посуди сам, весьма странное условие.... ![]() ![]() |
|
Создано: 09 ноября 2007 09:35 · Личное сообщение · #7 требуется информация.... в каком состоянии это программа у тебя сейчас? триал уже закончился? мне нужно каким-то образом смоделировать ее поведение якобы после окончания триала. ты не пробовал время на компе переводить? как она реагирует на это? УТОЧНЕНИЕ DMD пишет: внутри этой процедуры: на останове 00454065 |. E8 E6C9FBFF CALL 00410A50 по адресу первого аргумента будет после выполнения INDEX CODE для отображения в регистрации для текущего запуска. по адресу второго можно увидеть стабильный iD я был не прав: точнее, не совсем прав. по адресу второго аргумента можно увидеть некую последовательность, которая является стабильным "iD" для данной машины 0012FCC0 0012FCD8 |Arg1 = 0012FCD8
и кажется мне, что последующие ASCII цифровые символы, который я ошибочно принял за iD, тоже как-то связаны выделенными данными. ![]() |
|
Создано: 09 ноября 2007 11:19 · Поправил: jkjk · Личное сообщение · #8 окончание триала смоделировать можно переведя время системы вперед (возвращаешь время назад -все в порядке) только такая вот штука... после месяца работы перевод время системы назад не работает. по крайней мере у меня установлена на одной машине версия 5.8.2 с оконченным триалом порядка 4-5 месяцев назад.. на другой машине установлена 5.8.6 неделю назад (т.е. триал еще не вышел) .....на ней я вчера и двинул время впреред и затем назад.. ![]() |
|
Создано: 09 ноября 2007 14:00 · Личное сообщение · #9 |
|
Создано: 12 ноября 2007 10:25 · Поправил: DMD · Личное сообщение · #10 Есть новости.. есть полезные.. есть плохие... выловлено место считывания рег.кода. (выловить можно по USER32.GetWindowTextA) дальнейшее напоминает хороший дидюктив... при вводе очередной цифры введенные код несколько прикрывается, что бы не лежать в открытом виде. Процедура полностью "обратна" и помимо "закрытия" рег.кода в последующем еще восстанавливает рег.код перед его использованием. И еще самое интересное - восстанавливает стринги, по которым программа пытается детектировать: \.\SICE
введенный, скрытый рег.код при нажатии ОК в окне регистрации { код что будет считан в этот момет - не используется!! } и ранее обработанный, будет восстановлен, переведен в hex-представление {было введено ASCII "35871020" - получим в одном из регистров hex-число 0х35871020}. чуть позже будет использование этого числа как аргумент PUSH EAX ; /seed
вот и все.. на этом использование рег.кода закончилось.... * * * теперь несколько слов о триале... да, китайский парень хорошо поработал. что можно найти при изучении программы и что можно пытаться сделать в будующем, если метод "А" не поможет? нужно брать машину без AtmanAvr.. ставить какую-нибуть программу для работы с реестром с возможностью делать копии рееста + возможность сравнения копий + возможность делать откат на любую копию. отследить руками/глазами изменения всех ключей и значение - почти невозможно. Ну и пробовать отловить триальные ключи. может быть получится... Это первое. Второе - Первый запуск AtmanAvr через Олли! с остановом на KERNEL32.CreateFileW.. остановов будет не очень много, но терпением все равно придется запастить. Это даст список файлов к которым пытается обратить программа. Потом включаем голову и думаем о вечном... Собственно метод "А": 1) найти в системе (это должно быть в корне системы в папке %\SYSTEM\ ) и удалить ВСЕ "Stiopt.dll" файлы. 2) удалить в реестре HKEY_CURRENT_USER\Software\Atman 3) запустить программу и ввсести все что угодно в рег.код - да, программа сама закроется. 4) рестарт программы. *) почему именно "Stiopt.dll" ..? потому что именно с ним аффтор делает такое: 011F81E8 6C2D64E8 /CALL to CreateFileA from MFC42.6C2D64E2
и после обработки : PUSH EDX ; /pLastWrite
этот метод позволил запустить программу после того, как в процессе исследования и правки пары переходов при сравнении свертки рег.ключа с каким-то значением, программа при запуске стала давала неизвестное ей исключение и просто рушилась. Без варинтов на восстановление... этот же метод должен помочь запустить программу при откате даты в начало ее триального периода. Правда, это нужно проверить на машине с реальной клинической картиной. ps/ еслии ввести валидный рег.код - будет сформирован "AtmanAvr.licence" {нет, я не ошибся в написании - именно так и задумано аффтором!}. теоритически, такой файл можно импортировать при регистрации на другой машине.. вот только проскочится ли это? хз! я не знаю... * * * Послесловие. случай весьма не тривиальный... аффтор - чудак с весьма приличном чувством юмора и неплохими познаниями... как с ним бороться: - с регистрацией - пока не знаю.. - с триалом - см. выше... будут вопросы, будет что не понятно или интересно - в личку .. постараюсь ответить.. ![]() pps/ и последнне .. для особо рвущихся в бой (если таковые есть :s6 ![]() при старте программы в не триальный период времени необходимость запуска окна "Регистрация" "ведает" процедура 0040A130 {процедура очень длинная - ее окончание - 0040E14F}, в которой в триальный период один из маркеров установлен в "0х01", в НЕ_триальный - в "0х00". MOV BYTE PTR [56555B], AL
Попытка просто изменить маркер после Proc_0040A130 - не даст ни каких разумных результатов. при достаточной усидчивости и терпению, можно пройти эту процедуру в НЕ_триальный период как бы в триальный период - попровляя переходы.. да, программа запуститься без окна регистрации.. но все равно сама собой закроется .. и что мне особо взбесило (но с этим я так и не стал разбираться) с убиением Олли!... Успехов! ![]() ![]() ![]() |
![]() |
eXeL@B —› Вопросы новичков —› технология взлома триальной программы....AtmanAVR 5.8.6 |