Здравствуйте! В общем давайте я расскажу что и как В общем при запуске приложения, загружается DLL-ка которую я сейчас как раз пишу. Далее она сканирует все окна и процессы. Но сканирует не просто так. Мы должны проверять есть ли процесс\окно в "черном списке" Если есть - убиваем процесс (или приложение). Пока что "черный список выглядит так" Код (Text): aL2jes0_1_193 db 'L2Jes ;) 0.1.193 ',0 aL2net db 'L2NET',0 aL2control db 'l2control',0 WindowName db 'AvK LineAge2 Edition by iNEOi',0 aUopilot db 'uopilot',0 aAcTool db 'AC Tool',0 aAutoclick2_2 db 'AutoClick 2.2',0 aClickermann db 'Clickermann',0 aL2walker10_7_4 db 'L2Walker 10.7.4',0 aLa2funV_1_1 db 'LA2Fun v.1.1',0 aHlapex db 'hLaPEx',0 aL2packethackV3 db 'L2PacketHack v3.5.33.166 by CoderX.ru Team',0 aL2packethack db 'L2PacketHack',0 ClassName db 'TApplication',0 aHlapexLineageP db 'hLaPEx (LineAge Packets EXplorer by Hint)',0 aTfrmmain db 'TfrmMain',0 aL2radar db 'L2Radar',0 aL2divine db 'L2Divine',0 aAsi db 'Asi',0 aLa2RemoteContr db 'LA2 Remote Controller',0 aAcp db 'Acp',0 aL2fish db 'L2Fish',0 ...... А функция проверки так Код (Text): proc FindIllegalWindow invoke FindWindowA,0,aL2jes0_1_193 invoke FindWindowA,0,aL2net invoke FindWindowA,0,aL2control invoke FindWindowA,0,WindowName invoke FindWindowA,0,aUopilot invoke FindWindowA,0,aAcTool invoke FindWindowA,0,aAutoclick2_2 invoke FindWindowA,0,aClickermann invoke FindWindowA,0,aL2walker10_7_4 invoke FindWindowA,0,aLa2funV_1_1 invoke FindWindowA,0,aHlapex invoke FindWindowA,0,aL2packethackV3 invoke FindWindowA,0,aL2packethack invoke FindWindowA,0,ClassName invoke FindWindowA,0,aHlapexLineageP invoke FindWindowA,0,aTfrmmain invoke FindWindowA,0,aL2radar invoke FindWindowA,0,aL2divine invoke FindWindowA,0,aAsi invoke FindWindowA,0,aLa2RemoteContr invoke FindWindowA,0,aAcp invoke FindWindowA,0,aL2fish invoke FindWindowA,0,aTmainform ;--------------------------------------------------- ....... endp ВОПРОС: Возможно как то поместить эти строки "черный список" в массив и не писать 100 строчек с проверками, а сделать цикл? по типу For (String _element : Elements) .... (Java) , где Elements - массив строк. Саму DLL пишу в FASM Очень надеюсь на Вашу помощь...
Код (Text): mov edi, wnd_str+4 @@: invoke FindWindowA,0,edi add edi, dword[edi-4] or byte[edi], 0 jnz @b .............. .data wnd_str: @@:dd @f-@b aL2jes0_1_193 db 'L2Jes ;) 0.1.193 ',0 @@:dd @f-@b aL2net db 'L2NET',0 @@:dd 0 dd 0
Что-то типа такого Код (Text): ... ; Куча db и прочей байды mov ebx,offset aL2jes0_1_193 l2: invoke FindWindow,0,ebx ... ; Здесь должна быть проверка хэндла и проделывание с ним всякой хрени invoke _lstrlen,ebx or eax,eax jz l1 add ebx,eax inc ebx jmp l2 l1: ... ; Всякая последующая хрень В конец списка дописать db 0 в качестве стоп-байта. ФАСМ не знаю, и вообще сочинял по памяти. PS Исходник изначально кривой, искать имя класса в тексте окна - это оригинально. Ну и сам алгоритм поиска, конечно, душераздирающий. Это ничего, что TheBat, Help&Manual и ещё мульён программ на Delphi и С++ Builder, которые ко всяким онлайн-игрищам никакого отношения не имеют, создают невидимое окошко с именем класса TApplication?
r2max мои пять копеек Код (Text): push edi;можно esi,ebx,esp так как FindWindow ;не изменяет значения в этих регистрах push aTmainform push aL2fish push aAcp push aLa2RemoteContr push aAsi push aL2divine push aL2radar push aTfrmmain push aHlapexLineageP push ClassName push aL2packethack push aL2packethackV3 push aHlapex push aLa2funV_1_1 push aL2walker10_7_4 push aClickermann push aAutoclick2_2 push aAcTool push aUopilot push WindowName push aL2control push aL2net push aL2jes0_1_193 mov edi,24 @@: invoke FindWindowA,0 dec edi jnz @b pop edi
И сколько там еще строчек после многоточия? Думается, что вместо "сотни" вызовов FindWindow лучше перебрать все окна по EnumWindows с поиском названия окна в своем "черном списке". Для ускорения поиска строки можно заюзать сортированный массив указателей на строки, а если строк очень много, то можно и что-то вроде хэш-таблицы замутить. А делать это ес-но проще не на асме, а на готовых решениях - сишных или даже (о, ужас) дельфийских
r2max Скажу вам, что решение хорошее (если смотреть со стороны читеров). Если вы убьёте программу, то читеру ничего не стоит защититься от этого. И он либо пропатчит вашу программу либо свою читерскую.
а нельзя сделать макрос? И как бы новый тип данных? например структура Код (Text): struct StringArray id dd ? ; Номер строки pStr dd ? ; Указатель на строку ends и какой то макрос...
r2max Используется, очевидно, вот так: Код (Text): strtbl blacklist,\ 'L2Jes ;) 0.1.193 ',\ 'L2NET',\ 'l2control',\ 'AvK LineAge2 Edition by iNEOi',\ 'uopilot',\ 'AC Tool',\ 'AutoClick 2.2',\ 'Clickermann',\ 'L2Walker 10.7.4',\ 'LA2Fun v.1.1',\ 'hLaPEx',\ 'L2PacketHack v3.5.33.166 by CoderX.ru Team',\ 'L2PacketHack',\ 'TApplication',\ 'hLaPEx (LineAge Packets EXplorer by Hint)',\ 'TfrmMain',\ 'L2Radar',\ 'L2Divine',\ 'Asi',\ 'LA2 Remote Controller',\ 'Acp',\ 'L2Fish'
Если есть возможность сначала получить спейсог всех имен окон - то потом можно элегантно strstrA/W. Не?
PSR1257II Зачем его получать, если можно наоборот - перебирать по одному окну в EnumWindows и искать его название в своем "черном списке" (см.#6). Если скорость поиска особо не волнует, то - да, можно записать все имена списка в одну строку с неким разделителем, например Tab=9, и искать обычной strstr
Та бред ето всё, какие окна, какие процессы? Если у окна "легальный" класс и оно не имеет имени что делать? Ток @лбоёб напишет в окне: "l2control", "L2Fish" и т.п. палево. Если треды чита не имеют процесса(загружен как длл(перекриптованая) в любой процесс)? Шо тогда делать? Недавно писал бота для рыбалки, драйвером, хукал что ему надо и работал. Окно мне было нужно только чтоб запустить и остановить "процесс". Ну и как такому подходу противодействовать?
zabej, целостность чего? Кто знает что я похукал? Анука угадай со второго раза ))), отдыхай со своей целконостью, серьёзно.
r2max Пропатчить перехватчик, чтобы он ничего не делал и профит.... Разработчики защит всегда в невыгодном положении по сравнению с читерами (по крайней мере в винде). Читеры могут использовать трюки, на которые разработчики (ну, нормальные разработчики) никогда не решаться. Взять тот же старфорс - за границей его используют в весьма урезанном виде от чего он прекрасно снимается спецами. У нас же они используют все опции защиты и плевать они хотели на баги и тормоза. Иногда когда ставишь на игру очередной апдейт она вдруг начинает меньше тормозить, а причина предельна проста - разраб срезал защиту. К сожалению, этим обычно занимаются иностранные конторы, а наши никогда защиту не снимают, даже если игре 20 лет. Почему же отечественные разработчики всё время ставят геймеров раком? Ну, не знаю, наверно, это геймерам просто нравиться. Лично я никогда не покупаю игр с дебильной защитой. Если бы все так делали, то возможно, что и к нам пришла бы цивилизация. zabej Отломают код, который отвечает за это и будут спокойно хукать и не думать о целостности. Если, конечно, игра пользуется популярностью. r2max Может не стоит мудрить, а купить какой-нибудь протектор игр?