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

 eXeL@B —› Вопросы новичков —› технология взлома триальной программы....AtmanAVR 5.8.6
Посл.ответ Сообщение

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

Создано: 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



7254_07.11.2007_CRACKLAB.rU.tgz - Безымянный.JPG



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

Создано: 08 ноября 2007 11:18
· Личное сообщение · #2

скриншот

8c40_08.11.2007_CRACKLAB.rU.tgz - Безымянный.JPG



Ранг: 85.5 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 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/ да и сайт не вызывает чувства доверия.. ни контактов.. ни тел.. ни адресов..



Ранг: 85.5 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 08 ноября 2007 15:33 · Поправил: DMD
· Личное сообщение · #4

что бы не быть голословным...

0040280E . 53 PUSH EBX ; /Arg1
0040280F . 0F94C2 SETE DL ; |
00402812 . 8D8C24 1C010000 LEA ECX, DWORD PTR [ESP+11C] ; |
00402819 . 8995 F8020000 MOV DWORD PTR [EBP+2F8], EDX ; |
0040281F . E8 7C170500 CALL 00453FA0 ; \AtmanAvr.00453FA0


внутри этой процедуры:
на останове
00454065 |. E8 E6C9FBFF CALL 00410A50
по адресу первого аргумента будет после выполнения INDEX CODE для отображения в регистрации для текущего запуска.
по адресу второго можно увидеть стабильный iD

всплываем на уровень выше..

и чуть ниже

00402833 . E8 90BF0C00 CALL <JMP.&MFC42.#2514>
00402838 . 83F8 01 CMP EAX, 1
0040283B . 75 23 JNZ SHORT 00402860


это запуск процедуры отображения и считывания дааных из регистрации. Останов на
00402838 . 83F8 01 CMP EAX, 1
сработает если ввели что-то как Reg Code и нажали ОК

что ввели можно увидеть немного проскролив окно стека

$+178 > 008F50A8 ASCII "9a 44 a2 ea d4 53 28 b6 a5 42 "
$+17C > 00B77778 ASCII "AAAA"
$+180 > 00B86B1C ASCII "AtmanAvr is integrated development environment working with GCC Compiler for AVR.
AtmanAvr C IDE is shareware. You may evaluate it for a period of 30 days at no charge.
If you decide you wish to continue using it, you must purchase a l"...
$+184 > 00B87B34 ASCII "AtmanAvr is integrated development environment working with GCC Compiler for AVR.
AtmanAvr C IDE is shareware. You may evaluate it for a period of 30 days at no charge.
If you decide you wish to continue using it, you must purchase a l"...


"АААА" это я ввел как пример Rec Code.

так вот, никакие бряки на адрес 00B77778 ASCII "AAAA" не срабатывают...

примерно вот так получается....

если это изделие в триальный период корректно работает, силы нужно посвятить нахо;дению места хранения оного для обнуления раз в месяц.
или определить условие ветвления "Триал-Не_триал".

похоже, это самый простой выход из ситуации....



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

Создано: 08 ноября 2007 15:58
· Личное сообщение · #5

А где ты его нашел то "стабильный код"??

и еще не совсем понял... "рег код нигде не обрабатывается".
и зачем тогда автор пишет чтобы на время отправки индекс кода не закрывать программу???



Ранг: 85.5 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 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 пишет:
зачем тогда автор пишет чтобы на время отправки индекс кода не закрывать программу???


а я знаю?! он же китаез.. кто знает о чем он думает?!
но посуди сам, весьма странное условие....



Ранг: 85.5 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 09 ноября 2007 09:35
· Личное сообщение · #7

требуется информация....

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

ты не пробовал время на компе переводить? как она реагирует на это?

УТОЧНЕНИЕ

DMD пишет:
внутри этой процедуры:
на останове
00454065 |. E8 E6C9FBFF CALL 00410A50
по адресу первого аргумента будет после выполнения INDEX CODE для отображения в регистрации для текущего запуска.
по адресу второго можно увидеть стабильный iD


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

0012FCC0 0012FCD8 |Arg1 = 0012FCD8
0012FCC4 008F4B08 \Arg2 = 008F4B08

008F4AF8 1E 00 00 00 40 00 00 00 ...@...
008F4B08 FD DC BC FD AC E9 FD 9C D9 FD 7C DC FD CC AC FD эЬјэ¬йэњЩэ|ЬэМ¬э
008F4B18 BC B9 FD E9 A9 FD DC E9 FD BC BC FD E9 6C 00 30 ј№эй©эЬйэјјэйl.0
008F4B28 30 36 30 38 33 32 46 35 38 34 42 7D 00 F0 AD BA 060832F584B}.р­є


и кажется мне, что последующие ASCII цифровые символы, который я ошибочно принял за iD, тоже как-то связаны выделенными данными.



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

Создано: 09 ноября 2007 11:19 · Поправил: jkjk
· Личное сообщение · #8

окончание триала смоделировать можно переведя время системы вперед (возвращаешь время назад -все в порядке)

только такая вот штука... после месяца работы перевод время системы назад не работает.

по крайней мере у меня установлена на одной машине версия 5.8.2 с оконченным триалом порядка 4-5 месяцев назад..
на другой машине установлена 5.8.6 неделю назад (т.е. триал еще не вышел)
.....на ней я вчера и двинул время впреред и затем назад..



Ранг: 85.5 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 09 ноября 2007 14:00
· Личное сообщение · #9

ясно..

видно, дело сложное и придется лесть в глубины MFC.. попробуем...



Ранг: 85.5 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 12 ноября 2007 10:25 · Поправил: DMD
· Личное сообщение · #10

Есть новости.. есть полезные.. есть плохие...

выловлено место считывания рег.кода. (выловить можно по USER32.GetWindowTextA)
дальнейшее напоминает хороший дидюктив...
при вводе очередной цифры введенные код несколько прикрывается, что бы не лежать в открытом виде.
Процедура полностью "обратна" и помимо "закрытия" рег.кода в последующем еще восстанавливает рег.код перед его использованием. И еще самое интересное - восстанавливает стринги, по которым программа пытается детектировать:

\.\SICE
\.\NTICE
\.\SIWDEBUG
\.\SIWVID
\.\FILEMON
\.\FILEVXD
\.\REGMON
\.\REGVXD
\.\Trw
\.\Trw2000
\.\TRWDEBUG


введенный, скрытый рег.код при нажатии ОК в окне регистрации { код что будет считан в этот момет - не используется!! } и ранее обработанный, будет восстановлен, переведен в hex-представление {было введено ASCII "35871020" - получим в одном из регистров hex-число 0х35871020}.
чуть позже будет использование этого числа как аргумент

PUSH EAX ; /seed
CALL DWORD PTR [<&MSVCRT.srand>] ; \srand
.
.CALL DWORD PTR [<&MSVCRT.rand>]


вот и все.. на этом использование рег.кода закончилось....

* * *

теперь несколько слов о триале...

да, китайский парень хорошо поработал. что можно найти при изучении программы и что можно пытаться сделать в будующем, если метод "А" не поможет?

нужно брать машину без 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
011F81EC 00B89D48 |FileName = "C:\WINNT\SYSTEM\Stiopt.dll"
011F81F0 80000000 |Access = GENERIC_READ
011F81F4 00000000 |ShareMode = 0
011F81F8 011F8318 |pSecurity = 011F8318
011F81FC 00000003 |Mode = OPEN_EXISTING
011F8200 00000080 |Attributes = NORMAL
011F8204 00000000 \hTemplateFile = NULL

Result
01348424 000000F0 !!! *
01348428 00000001
0134842C 00B89E08 ASCII "C:\WINNT\SYSTEM\Stiopt.dll"


и после обработки :

PUSH EDX ; /pLastWrite
MOV EDX, DWORD PTR [ESP+F0] ; |
LEA ECX, DWORD PTR [ESP+108] ; |
PUSH EAX ; |pLastAccess
PUSH ECX ; |pCreationTime
PUSH EDX ; |hFile
CALL DWORD PTR [<&KERNEL32.GetFileTime>] ; \GetFileTime

Stack
01348328 000000FC |hFile = 000000F0 !!! *
0134832C 0134843C |pCreationTime = 0134843C
01348330 01348444 |pLastAccess = 01348444
01348334 01348430 \pLastWrite = 01348430


этот метод позволил запустить программу после того, как в процессе исследования и правки пары переходов при сравнении свертки рег.ключа с каким-то значением, программа при запуске стала давала неизвестное ей исключение и просто рушилась. Без варинтов на восстановление...

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

ps/ еслии ввести валидный рег.код - будет сформирован "AtmanAvr.licence" {нет, я не ошибся в написании - именно так и задумано аффтором!}.
теоритически, такой файл можно импортировать при регистрации на другой машине.. вот только проскочится ли это? хз! я не знаю...

* * *

Послесловие.

случай весьма не тривиальный... аффтор - чудак с весьма приличном чувством юмора и неплохими познаниями...
как с ним бороться:
- с регистрацией - пока не знаю..
- с триалом - см. выше...

будут вопросы, будет что не понятно или интересно - в личку .. постараюсь ответить..

pps/ и последнне .. для особо рвущихся в бой (если таковые есть :s6 ..
при старте программы в не триальный период времени необходимость запуска окна "Регистрация" "ведает" процедура 0040A130 {процедура очень длинная - ее окончание - 0040E14F}, в которой в триальный период один из маркеров установлен в "0х01", в НЕ_триальный - в "0х00".
MOV BYTE PTR [56555B], AL

Попытка просто изменить маркер после Proc_0040A130 - не даст ни каких разумных результатов.

при достаточной усидчивости и терпению, можно пройти эту процедуру в НЕ_триальный период как бы в триальный период - попровляя переходы.. да, программа запуститься без окна регистрации.. но все равно сама собой закроется .. и что мне особо взбесило (но с этим я так и не стал разбираться) с убиением Олли!...

Успехов!


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


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