"Временная" защита GL#0M (gl00m-crk@yandex.ru) Спецвыпуск: Хакер, номер #057, стр. 057-036-2 Через некоторое время мы заметим интересный код: .text:0041E667 push0 ; lpReserved .text:0041E669 mov eax, [ebp+lpValueName] .text:0041E66C pusheax ; lpValueName .text:0041E66D mov ecx, [ebp+hKey] .text:0041E670 pushecx ; hKey .text:0041E671 callds:RegQueryValueExA .text:0041E677 mov [ebp+var_8], eax .text:0041E67A cmp [ebp+var_8], 0 .text:0041E67E jnz loc_41E74A .text:0041E684 mov eax, dword ptr [ebp+Data] .text:0041E687 xor edx, edx .text:0041E689 mov ecx, 64h .text:0041E68E div ecx .text:0041E690 mov [ebp+var_20], edx .text:0041E693 mov eax, dword ptr [ebp+Data] .text:0041E696 xor edx, edx .text:0041E698 mov ecx, 64h .text:0041E69D div ecx .text:0041E69F mov [ebp+var_1C], eax .text:0041E6A2 cmp [ebp+var_20], 0 .text:0041E6A6 jbe short loc_41E6AE .text:0041E6A8 cmp [ebp+var_20], 0Fh<- 0Fh = 15 .text:0041E6AC jbe short loc_41E6C4 Странное совпадение, не правда ли? Для проверки нашего предположения откроем цель в OllyDbg и поставим точку останова на адрес начала данной процедуры - 0041E5E0. В результате мы обнаружим, что скрытая переменная находится в ключе раздела по адресу HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion и называется ShellEAC. После ее удаления trial обнуляется. Есть море способов сделать его бесконечным, пусть это будет твоим домашним заданием ;). 2) Для чтения из файла: ReadFile, ReadFileEx, CreateFileA, SetFilePointer, SetFilePointerEx и т.д. Пример: теперь взглянем на программу TypeSpeak. Сайт производителя www.feifeisoft.com. Trial – 30 дней. Можно попытаться найти место проверки счетчика в IDA, то есть произвести действия, аналогичные тем, что были проделаны в предыдущем методе борьбы (это, естественно, предпочтительнее, особенно для новичков, так как этим самым наращивается опыт), но на этот раз мы сразу откроем цель в OllyDbg. Так или иначе, мы должны искать вызов API для работы с файлом, например CreateFileA. Ставим точку останова на эту API. Как ни странно, вызов всего один: 0040507D|. 68 AC474100push004147AC ; /More = "lexicon1033.dat" 00405082|. 8D8424 5405000>lea eax, dword ptr [esp+554] ; | 00405089|. 50 pusheax; |Path = "C:\WINNT\System32" 0040508A|. FF15 54414100calldword ptr [<&SHLWAPI.PathAppendA>] ; \PathAppendA 00405090|> 57 pushedi; /hTemplateFile 00405091|. 68 80000000push80 ; |Attributes = NORMAL 00405096|. 6A 03push3; |Mode = OPEN_EXISTING 00405098|. 57 pushedi; |pSecurity 00405099|. 57 pushedi; |ShareMode 0040509A|. 68 000000C0pushC0000000 ; |Access = GENERIC_READ|GENERIC_WRITE 0040509F|. 8D8C24 6805000>lea ecx, dword ptr [esp+568] ; | 004050A6|. 51 pushecx; |FileName 004050A7|. FF15 40404100calldword ptr [<&KERNEL32.CreateFileA>]; \CreateFileA 004050AD|. 8BD8 mov ebx, eax 004050AF|. 83FB FFcmp ebx, -1 004050B2|. 0F84 FB020000je004053B3 |