Итак, Zerkella aka Андрею Циркусу посвящается....
Поскольку бороться с багами и недоработками этой проги я устал, а на письма автор реагирует на одно через двадцатьодно, то, дабы подвергнуть автора на какие нибудь телодвижения, решил выложить данную писанину, авось кому интересно будет.
Короче, жертва - ZShell v2.91y.
Exe'шники - zshell.exe и option.exe (сорри, за ZServer'ом надо на сервак лезть, а это геморойно да и лень. После разбора option.exe, я думаю, что защита zserver(а точнее её отсутствие) сделана абсолютно аналогично.)
Прога ничем не шифрована(и правильно - вначале надо баги поубирать, а потом уж пытаться бабки делать.).
При запуске видим такую байду: "ZShell не лицензирован для запуска на этом компьютере.", после чего он соотв. завершается. Поскольку с первого вида эта байда похожа на стандартный MessageBox(ну или там какуюнть его вариацию типа MessageBoxIndirect.....), соотв-но первая идея брякнуться на него. Делаем, после чего видим большой бенч - всё то же самое окно. Сразу же возникает куча остальных таких же идей подобного рода( всевозможные CreateWindow и т.д.), но конец рабочего дня пятницы взял своё и руки, проигнорировав сигналы мозга потянулись к пиву, после чего спинной мозг подсказал альтернативное решение - ведь прога ничем не шифрована. Соотв-но отдаём её на растерзание IDA. Параллельно с этим открываем WinHex'сом её exe'шник и ищем строку типа "ZShell не лицензирован.......". У меня она нашлась по смещению 77B0C. Перемещаемся на то же смещение в IDA, где видим ссылку, переходим по ней и видим откуда эта байда вызывается. Перед ней соотв-но видим условный переход и проверку некоего байта на ноль(можно конечно пофиксить этот переход, но тада мы рискуем получить облом чего нибудь другого где нибудь в дугом месте.).
CODE:00478538 call sub_478134
CODE:0047853D mov eax, ds
ff_47AC40 <--смотрим куда ссылается этот адрес
CODE:00478542 cmp byte ptr [eax], 0 ; <--проверка на лицензию
CODE:00478545 jnz short loc_478551
CODE:00478547 mov eax, offset aZshellAxIs ; ZShell не лицензирован для запуска на этом компьютере
CODE:0047854C call sub_448D1C
CODE:00478551
Смотрим куда ссылается off_47AC40. А ссылается он на
BSS:004809B0 byte_4809B0 db ? ; DATA XREF: sub_478134 49w
BSS:004809B0 ; CODE:0047824Dw ...
Смотрим что ссылается на этот байт и видим:
CODE:00478244 sub ds:dword_4809B4, 1
CODE:0047824B jnb short locret_47825B <-----чтобы перехода небыло забьём просто эту инструкцию нопами(0x90h)
CODE:0047824D mov ds:byte_4809B0, 0 <---- меняем 0 на 1
CODE:00478254 mov ds:byte_4809B8, 0 <-----меняем 0 на 1
(нижнюю переменную не смотрел чё от неё зависит, но по ходу алгоритма предполагаю, что её тоже стоит установить в 1, если кому не лень возиться с таким отстоем - посмотрите сами)
Далее:
CODE:0047816D lea eax, [ebp var_4]
CODE:00478170 call sub_403D10
CODE:00478175 mov eax, [ebp var_4]
CODE:00478178 call sub_4776C8 <----если не лень можете поковыряться в этой функции
CODE:0047817D mov ds:byte_4809B0, al <-----забьём инструкцию нопами
CODE:00478182 xor eax, eax
CODE:00478184 pop edx
CODE:00478185 pop ecx
CODE:00478186 pop ecx
CODE:00478187 mov fs:[eax], edx
CODE:0047818A jmp short loc_4781A7
После исправления всего этого в WinHex'е, наблюдаем, что всё прекрасно работает.
Открыв в Ida option.exe, и увидив абсолютно аналогичную картину, я даже не стал загружать его в софтайс. Исходя из этого думаю что у zserver.exe всё будет точно также.
Ну а для кого всё вышенаписанное полная мутотень - ниже привожу какие байты по каким смещениям в файлах менять:
ZShell.exe
7757D: A2 90
7757E: B0 90
7757F: 09 90
77580: 48 90
77581: 00 90
7764B: 73 90
7764C: 0E 90
77653: 00 01
7765A: 00 01
Option.exe
84C71: A2 90
84C72: 80 90
84C73: AC 90
84C74: 48 90
84C75: 00 90
84D3F: 73 90
84D40: 0E 90
84D47: 00 01
84D4E: 00 01
Используемые инструменты: IDA v4.1.5.520 ,Soft-Ice 4.05, WinHex 9.4, Brain.sys, Direct_hand.sys.
P.S: причём помоему brain.sys тут даже не использовался.
Рад всем присоединившимся.
X-Train >> насчёт сноса винды - приколы приколами, а я один раз с такой шуткой столкнулся! Игрушка Kyodai Mahjongg v10.00.
Глаза скажем так нимного оквадратели
После взлома остался рад, что не попался на неё.
SpectatoR -=GhosT=- >> Hi! Ты мать его кто? Мы знакомы? Напомни ради бога, ато чёто плох я совсем стал.