Итак, есть препарант- UltraEdit32 v11 (да знаю, знаю- сломана уже наверное, просто интересно). После ввода серийника без всяких там проверок (явных) и MessageBox'ов- просят перезапустить программу. Естественно, после перезапуска программы появляется наг с тем, что жить осталось 45 дней... Отсюда вопрос: как вообще прога "запоминает", что она зарегистрированна? (мои варианты: пишет себе в тело (реально?), пишет в свой DLL, пишет в реестр, вообще в какой-нить "левый" файл, типа не она это. Вопрос относится вообще ко всему софту, в котором процедура регистрации проверяется один раз.. Перед этим сломал фиговину, которая при каждом запуске читала из своего лицензионного файла- там всё ясно. Ещё вопрос: как перешибить гадость? Bpx ShowWindow даёт просто тучу срабатываний, и не поймешь, какое..
griniland Делают так обычно для того, чтобы вроде как спрятать проверку. Толку мало конечно, но вот, видимо, судя по топику, все же есть =) После ввода следи за серийником, куда-то он должен сохраниться, или в реестр, или в файл, не знаю. Поставь BPM на адрес с серийником. Ну а после перезапуска, соответственно, следи за его чтением. Можешь мониторы запустить, RegMon, FileMon, глядишь узреешь что-нибудь подозрительное А на ShowWindow bpx ставить бесполезное дело.
Спасибо, попробую.. Я вот ещё о чем подумал: а может она всё-таки делает проверку сразу, только не афиширует это. С введенным кодом тоже не всё так гладко: всякие GetWindowText и GetDlgText срабатывают постоянно, причем вообще даже тогда, когда на экране нет ни каких окошек с полями ввода=). Во, ещё вопрос: пытался поставить bmsg на кнопку..Как это сделать? Читал много чего- а толку.. Делаю Hwnd <имя_приложения> получаю кучу hwnd, относящихся к нему. Нахожу там button И что дальше? при Bmsg hwnd=hwnd(button) он не дает дописать ни одного сообщения, зато постоянно вылетает по этому бряку. Прикол в том, что когда пытаюсь задать даже сработавшие сообщения- пишет- Invalid window handle
getWindowText срабатывают потому что прога написана с применением MFC или VCL. А там такая практика в порядке вещей. Тебе вроде стоит узнать, откуда узнает что она не зарегена из файла или реестра.Дальше в дизассемблере смотреть ссылки на отнсящиеся функции. Хотя думаю, это не лучший вариант. Кстати, ламать проги в дизассемблере сравнительно легче (IMHO), чем в отладчике.
griniland Еще может быть слайсовая защита. Типа, записываем в остаток сегмента, после конца файла всю необходимую инфу.
насколько я знаю - там армадило был раньше. А перезапуск в 90% означает присутствие пакеров аспр или арма. ибо они при запуске чекают серийник и если ок то расшифровывают куски проги etc.
раньше. сейчас нет. UE и так не самый шустый, а с диллой так вообще тормозной стал, так вот пользователи и надавили на производиля проги редкий лучай, когда автор программы пошёл на поводу у пользователей в том, что касается защиты программы хотя тут дело касалось скорее производительности, а не защиты. короче, на данный момент (версия 11) UltraEdit ничем не запакован да ладно! ты хочешь сказать, что лишь 10% прог, не защищёных аспром или диллой требуют перезапуска для проверки серийника? ты почитай рекомендации западным шароварщикам: им твердят, что серийник лучше проверять - при запуске - перед важной функцией в программе при вводе серийника проверять лишь основные характеристики типа длины etc регистрационный метод UE не менялся с очень давних времён: вводишь серийник, прога генерит рег-файл (он же ключ, uedit32.reg), требует перезапуска и лишь при следующей загрузке чекает файл при чём при плохом раскладе (лажовый ключик) она удаляет рег-файл следовательно, отлавливать нужно не GetWindowText и иже с ним, а ReadFile, проверяя кол-во прочитанных байт (см. размер uedit32.reg), раньше было 256 байт, в последней версии 260. чтобы отловить удаление рег-файла ставишь бряк на DeleteFileA UE к тому же перед удалением ставит ему аттрибут Normal на тот случай, если ты такой хитрый и поставил ему Read Only, следовательно, можно смотреть SetFileAttributesA, а за ним должен следовать DeleteFileA дальше понятно: смотришь, что же вызывает этот кусок кода с DeleteFile и там можешь смотреть процедуру проверки ключика и либо патчить, либо кейгенить для версии UtraEdit-32 11.0: файл: uedit32.exe размер: 2.91 МБ (3 055 616 байт) ставим бряк на SetFileAttributesA Код (Text): 00444396 |. 8D85 ECFDFFFF lea eax, [local.133] 0044439C |. 56 push esi ; /BufSize = 104 (260.) 0044439D |. 50 push eax ; |PathBuffer = 0012F02C 0044439E |. 6A 00 push 0 ; |hModule = NULL 004443A0 |. FF15 C8C45600 call near dword ptr ds:[<&KERNEL32.GetModuleFileNameA>] ; \GetModuleFileNameA 004443A6 |. 8D85 ECFDFFFF lea eax, [local.133] 004443AC |. 6A 5C push 5C 004443AE |. 50 push eax ; /Arg1 = 0012F02C ASCII "C:\Program Files\UltraEdit\uedit32.reg" 004443AF |. E8 074A0D00 call uedit32.00518DBB ; \uedit32.00518DBB 004443B4 |. 59 pop ecx ; 0012F02C 004443B5 |. 85C0 test eax, eax 004443B7 |. 59 pop ecx ; 0012F02C 004443B8 |. 0F84 02010000 je uedit32.004444C0 004443BE |. 8060 01 00 and byte ptr ds:[eax+1], 0 004443C2 |. FF35 40285700 push dword ptr ds:[572840] ; uedit32.005AF9AC 004443C8 |. 8D85 ECFDFFFF lea eax, [local.133] 004443CE |. 50 push eax 004443CF |. E8 CC4E0D00 call uedit32.005192A0 004443D4 |. 59 pop ecx ; 0012F02C 004443D5 |. 59 pop ecx ; 0012F02C 004443D6 |> 8B3D ECC35600 mov edi, dword ptr ds:[<&KERNEL32.SetFileAttributesA>] ; kernel32.SetFileAttributesA 004443DC |. 8D85 ECFDFFFF lea eax, [local.133] 004443E2 |. 68 80000000 push 80 ; /FileAttributes = NORMAL 004443E7 |. 50 push eax ; |FileName = "C:\Program Files\UltraEdit\uedit32.reg" 004443E8 |. FFD7 call near edi ; \SetFileAttributesA как видно, BufSize = 104 (260.), как раз размер нашего uedit32.reg далее по адресу 00444479 получаем адрес расшифрованного куска рег-файла Код (Text): 00444479 |. 8D85 F4FEFFFF lea eax, [local.67] 0044447F |. 6A 17 push 17 00444481 |. 50 push eax 00444482 |. 56 push esi 00444483 |. E8 B2810D00 call uedit32.0051C63A 00444488 |. 8066 17 00 and byte ptr ds:[esi+17], 0 ; | 0044448C |. FF35 3C285700 push dword ptr ds:[57283C] ; |Arg2 = 005AF9B8 ASCII "h4x0r" 00444492 |. 8D85 F4FEFFFF lea eax, [local.67] ; | 00444498 |. 50 push eax ; |Arg1 = 0012F134 ASCII "I1V40-X0R7I-S401B-E304J1337Jupiterh4x0rI1V40-X0R7I-S401B-E304JJupiter " 00444499 |. E8 F0730D00 call uedit32.0051B88E ; \uedit32.0051B88E 0044449E |. 83C4 14 add esp, 14 004444A1 |. 85C0 test eax, eax 004444A3 |. 74 1B je short uedit32.004444C0 дальше нужно покопать процедуру проверки.