Как снять метку времени для триальной защиты

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Как снять метку времени для триальной защиты

Сообщение ark » 28.07.2011 (Чт) 5:26

Хакер писал(а):Мне не нужен бредовый код с непонятными константами. Мне нужно, чтобы ты объяснил смысл фразы «адрес чужого процесса».

Послушайте, уважаемый, Вы не могли бы эпитеты типа "бредовый", "гиперидиотизм" и проч. психиатрические термины оставить для более узкоспециализированного форума?
"адрес чужого процесса" - адрес в памяти текущего (current) процесса, куда загружена "чужая" dll.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как снять метку времени для триальной защиты

Сообщение Хакер » 28.07.2011 (Чт) 5:29

ark писал(а):Послушайте, уважаемый, Вы не могли бы эпитеты типа "бредовый", "гиперидиотизм" и проч. психиатрические термины оставить для более узкоспециализированного форума?

Нет, не мог бы.

ark писал(а):"адрес чужого процесса" - адрес в памяти текущего (current) процесса, куда загружена "чужая" dll.

Ух ты. Ладно, по какому критерию DLL делятся на свои и чужие?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Как снять метку времени для триальной защиты

Сообщение ark » 28.07.2011 (Чт) 5:35

Хакер писал(а): по какому критерию DLL делятся на свои и чужие

Ни по какому, если процесс не знает, какие dll он загрузил сам.
UPD - в контексте топика - те, куда перенаправлены 'хукнутые' функции

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как снять метку времени для триальной защиты

Сообщение Хакер » 28.07.2011 (Чт) 6:12

ark писал(а):Ни по какому, если процесс не знает, какие dll он загрузил сам.

А процесс никогда не будет знать.

ark писал(а):UPD - в контексте топика - те, куда перенаправлены 'хукнутые' функции

Тогда тебе понадобится писать дизассемблирующий движок.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Как снять метку времени для триальной защиты

Сообщение ark » 28.07.2011 (Чт) 6:40

Хакер писал(а):А процесс никогда не будет знать

Ну, если это "мой" процесс (то-бишь код мой), то я ему скажу :)
Хакер писал(а):Тогда тебе понадобится писать дизассемблирующий движок

Это если сплайсинг. А если ЕАТ перенаправлен - просто сравнить адрес с "родным".

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как снять метку времени для триальной защиты

Сообщение Хакер » 28.07.2011 (Чт) 7:38

ark писал(а):Ну, если это "мой" процесс (то-бишь код мой), то я ему скажу :)

Ты не можешь знать, какие DLL будут подгружены из-за побочных зависимостей. И какие будут подгружены автоматически.

ark писал(а):Это если сплайсинг.

Это не если сплайсинг. Это если адрес в EAT/IAT указывает на страницы памяти, не принадлежащие ни одному из загруженных образов. Это не сплайсинг, но чей это хук ты уже не определишь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Как снять метку времени для триальной защиты

Сообщение ark » 28.07.2011 (Чт) 7:59

Хакер писал(а):Ты не можешь знать, какие DLL будут подгружены из-за побочных зависимостей

В принципе, да, но не суть. Если GetSystenTime, скажем, лезет не в kernell, а куда-то еще - то это "куда-то ещё" - чужое.
Хакер писал(а):Это если адрес в EAT/IAT указывает на страницы памяти

Тогда это и не patching EAT в "чистом" виде, а еще и "сырой" inject. Кстати, в этом случае как дизасм поможет?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Как снять метку времени для триальной защиты

Сообщение Antonariy » 28.07.2011 (Чт) 10:29

Если GetSystenTime, скажем, лезет не в kernell, а куда-то еще - то это "куда-то ещё" - чужое.
Как процесс узнает, что GetSystemTime, скажем, должно лежать в kernel, а не "где-то еще"?
Как процесс узнает, что "что-то еще", скажем, не может/не должно содержать другую такую же GetSystemTime?
Лучший способ понять что-то самому — объяснить это другому.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Как снять метку времени для триальной защиты

Сообщение ark » 28.07.2011 (Чт) 10:42

Antonariy писал(а):Как процесс узнает, что GetSystemTime, скажем, должно лежать в kernel

Так это же мой процесс.
Open "kernel32.dll" For Binary Access Read - здесь в IAT/EAT лежат "правильные" RVA (в т.ч. для GetSystemTime).
GetModuleHandle (или LoadLibrary)("kernel32.dll"...) - здесь в IAT/EAT - уже "хукнутые" (если).

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как снять метку времени для триальной защиты

Сообщение Хакер » 28.07.2011 (Чт) 18:00

ark писал(а):Тогда это и не patching EAT в "чистом" виде, а еще и "сырой" inject.

Не важно, как кто-то там называет это. Главное, что это перехват.

ark писал(а):Кстати, в этом случае как дизасм поможет?

Там будет jmp в винтересную DLL. Или не будет, но тогда и DLL будет в принципе.

ark писал(а):
Antonariy писал(а):Как процесс узнает, что GetSystemTime, скажем, должно лежать в kernel

Так это же мой процесс.
Open "kernel32.dll" For Binary Access Read - здесь в IAT/EAT лежат "правильные" RVA (в т.ч. для GetSystemTime).
GetModuleHandle (или LoadLibrary)("kernel32.dll"...) - здесь в IAT/EAT - уже "хукнутые" (если).

  • А в kernel32.dll большая часть будет форвардами в ntdll.dll. Или, как там в висте, в кучу каких-то DLL с омерзительными именами. Будешь ещё по цепочке форвардов ходить?
  • Даже если ты определишь перехват, ты не знаешь, чей он.
  • Чтение из файла может «сэмулировано», если сверка-проверка крутая, или сама проверка может быть вырезана, если он примитивная.
  • Если перехват был правкой IAT, то GetModuleHandle вернёт то же, что и исследование файла-образа вручную.
  • Можно перехватить правкой адресов внутри thunk-ов, которые генерируются компилятором. В этом случае даже проверка IAT ничего не даст.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Как снять метку времени для триальной защиты

Сообщение ark » 29.07.2011 (Пт) 1:33

Хакер писал(а):Там будет jmp в винтересную DLL
Т.е. dll загружена, но вызов сперва форвардится "на страницы памяти, не принадлежащие ни одному из загруженных образов", а потом уже в саму интересную dll? Ну, ИМХО, это уж слишком мудрено.
Хакер писал(а):тогда и DLL будет в принципе
Ну так и я о том же - тогда и дизасм не поможет - это будет inject OP-кодов.
По поводу дальнейшего списка: можно сразу вызывать ntdll-ные аналоги. Чтобы обойти IAT - вызывать сразу по адресу, причем для kernell/ntdll GetProcessAddress не нужен, они всегда мэппятся в один адрес, можно его хоть константой прописать.
Хакер писал(а):Чтение из файла может «сэмулировано"
ИМХО проще CreateFile (или NTCreateFile) перехватить и открыть "левый" уже пропатченный файл. Копая дальше, можно добраться до перехвата прерываний на уровне ядра да и еще многого, чего ни я, ни , возможно, Вы не знаете.
Предлагаю вернуться к креативу. Итак, есть 2 задачи:
1. Определить триал период
2. Сделать это как можно менее заметным
Сперва 1. Надо 2 величины - Start и Current
Start можно прописать при установке в закрытой ветке реестра или в ресурсах родного екзешника (можно закриптовать).
Варианты получения Current:
а) Now (aka GetSystemTime или ZwQuerySystemTime, кстати, насколько мне известно, они НЕ связаны). Недостатки - перевод часов юзером, в т.ч. из под БИОС.
б) Чтение метки с файла/ветки реестра - ИМХО заведомо дохлая идея - редко обновляющиеся - оставят дату от Р.Х., часто обновляющиеся - поменяют вместе с системой.
с)....?
Как отследить перевод часов? ИМХО - рыть надо в сторону виндовских логов. На выходных покопаюсь, постараюсь сделать API вариант. Если мне не изменяет память, в WMI тож что-то про логи было - пусть автор вопроса в "своем любимом" интсрументе покопается.
По поводу "менее заметно" - можно, конечно, и свою ОСь под проект написать, или на микроконтроллерах девайс для налоговой отчетности сделать, но давайте что-то типа "цена/качество" учитывать.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как снять метку времени для триальной защиты

Сообщение Хакер » 29.07.2011 (Пт) 1:49

ark писал(а):Т.е. dll загружена, но вызов сперва форвардится "на страницы памяти, не принадлежащие ни одному из загруженных образов", а потом уже в саму интересную dll? Ну, ИМХО, это уж слишком мудрено.

Что значит форвардится? Мне нужно перехватить 10 функций, скрыв свой модуль: я создаю десять 5-байтовых переходничков и записываю их в страницу, выделенную VirtualAlloc. При перехвате я указываю адреса переходничков. Это сверхэлементарно, и только ленивый не сделает этого, если будет хакать программу, которая определяет хуки по адресам из сторонних модулей.

ark писал(а):это будет inject OP-кодов.

Я сатанею, когда люди что-то подразумевают, но пишут какой-то словесный мусор, который только отдалённо связан с подразумеваемым. Когда пишут английские слова, в то время, как есть подходящие русские. Когда пишут слово «inject», которое является глаголом, хотя следовало бы писать существительное «injection», хотя вообще говоря следовало бы писать «внедрение», потому что нет причин заменять русские слова на английские без надобности. Когда пишут «OP-кодов», делая букву «P» заглавной, словно это акроним, хотя это просто огрызок слова «operation». И особо люто: когда пишут «опкоды», подразумевая на самом деле не опкоды, а инструкции. Да, опкоды и инструкции — это не одно и то же.

ark писал(а):Как отследить перевод часов? ИМХО - рыть надо в сторону виндовских логов.

Это бессмысленно. Можно перехватить GetSystemTime. Можно перехватить анализ логов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Как снять метку времени для триальной защиты

Сообщение ark » 29.07.2011 (Пт) 2:50

"Код операции, операционный код, опкод — часть машинного языка, называемой инструкцией"
По "injection" - пардон.
Хакер писал(а):Это бессмысленно. Можно перехватить GetSystemTime. Можно перехватить анализ логов.

Тогда остается застрелиться. Вообще, всё фигня, кроме пчёл. Я таки займусь логами - интересно.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как снять метку времени для триальной защиты

Сообщение Хакер » 29.07.2011 (Пт) 2:52

ark писал(а):"Код операции, операционный код, опкод — часть машинного языка, называемой инструкцией"

Да, в Википедии ещё много статьей по программированию, из которых я не убрал ересь. Вот если бы ты глянул в английскую версию статьи, там бы в первых строчках нашёл больше истины.

Надо же, я заранее глянул туда, предположив, что там может быть ересь (ошибка-то распространённая), и что мне возразят этой ересью. И точно. Неужели тебя не тронуло то, что даже само предложение написано с ошибкой согласования?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Как снять метку времени для триальной защиты

Сообщение ark » 29.07.2011 (Пт) 4:57

В английской Вики дословно то же (ток там род согласовывать не надо :) ). Ладно, так пойдет: "это будет внедрение опкодов и операндов"? :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как снять метку времени для триальной защиты

Сообщение Хакер » 29.07.2011 (Пт) 5:11

ark писал(а):В английской Вики дословно то же

Не то же. Там Opcode is a portion of instruction.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, SemrushBot, Yandex-бот и гости: 26

    TopList