Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

"Временная" защита

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

Назад на стр. 057-036-1  Содержание  Вперед на стр. 057-036-3