Камрад
|
мне вот, что интересно - ради прикола убираю вывод на экран, сообщени, что прога "заражена"... казалось бы - все будет работать, ан нет.. нефига... сую оригинальный диск и получаю облом... вылет с ошибкой при проверке диска...
когда была проверка на изменение, там в частности было, что-то подобное (сейчас не помню точно - пишу по памяти):
mov eax,[что-то]
not ecx
cmp eax,ecx
jne куда-то (или наоборот je.. не помню..)
так вот - в ecx контрольная сумма или что-то еще.. она вроде бы даже, вроде бы берется откуда-то из самой .dll-ки... (в ida это видно прекрасно)
дальше.. это я сейчас придумал уже:
ловим момент взятия контрольной суммы.. походу дела прослеживаем изменения (если они будут)..
доходим до проверки - смотрим значение еах, по обратному алгоритму превращаем значение еах в контрольную сумму, которую благополучно прописываем куда нужно .. итого имеем, как-бы нетронутую .dll-ку...
так... у меня еще какие-то идеи были ... млин, не помню уже .. на работе сижу, машина старая - что-то дизасмить и смотреть - вломы... вспоминать буду..
один косяк, может быть этой контрольной суммой что-то там покриптованно?.. тогда облом... вернее даже не взятой контрольной суммой, а вычиленной... т.е нужно что-бы на месте вычисленной кс было значение "нужной/ориганальной"... вобщем этот момент интересен - нужно проверить...
так.. люди тоже все думают, что да как.. вот на одно сообщение нарвался:
----
En Taro Adun, All!
здрасствуйсте, Коллеги! Существует сабжевая защита CD-ROM дисков. Проковырялся
несколько дней, но за недостатком временине сломал до конца: как она работает?
насколько я успел убедиться она разделяется на защиту для 9х и HТ/2к/ХР. Во
втором случае подгружается сервис PRODRV02.SYS и с помощью него ведется
дальнейшая проверка "лицензионности" диска (не проверял, говорю судю по
варианту кода выданного IDA). В случае 9х или ме все сводится к следующему:
0) Проверяется наличие запущенного отладчика и самой отладки: (не проблема)
а) используя ф-ию IsDebuggerPresent из kernel32.dll (легко снимается)
б) различные "танцы" с проверкой на SoftICE пытаясь
динамически "подгрузить" VxDшники со след именами
\\.\SICE, \\.\NTICE и вроде \\.\WICE: (один из
неплохих способов отловить айса =) ) (снимается не менее легче)
1) Проверяется наличие диска в драйве (не проблема)
2) Проверяется лейбл (Label) диска (не проблема)
3) Потом насколько я понял считается контрольная сумма
DLLины и самого екзешника (обойти не проблемно)
И тут начинается самое интересное: программа на протяжении 2-х минут обращается
к CD-драйву, причем если не ошибается в режиме 9х сначала используются
16-битные функции из KRNL386.EXE через QT_Thunk такие как SMapLS и UnMapLS а
также GlobalDosAlloc и GlobalDosFree. Потом если прога считает диск
"нелицензионным" то выбрасыввается сообщение об ошибки, размер DLLины околу
полутора мегов, причем сегмент кода составляет всего с 1000h до A000h, т.е.
всего 36 кбайт, остальное забито данными и ресурсами. и т.д.
с чего все начинается: стартует екзешник и первым делом джампается в адресное
пространство дллки (подгрузив ее предварительно) и там все содердится....
насколько опять же я понял остальная часть екзешника забита нулями и после
удачной проверки "забивается правильным кодом" из ресурсов дллки предварительно
расшифрованым......
ЕСЛИ КТО МОЖЕТ ЧЕМ-HИТЬ помочь, или есть наработки очень прошу помочь можно и
нетмылом, можно мылом на [email]archon@mail.ru[/email]
заранее благодарен за внимание, сорри за длинный монолог
---
на счет "правильного кода" - нужно проверить... может быть попробывать "сорвать" этот правильный код, когда суем оригинальный диск?..
|