Помогите с оптимизацией....

Тема в разделе "WASM.ASSEMBLER", создана пользователем r2max, 18 авг 2011.

  1. r2max

    r2max Женя

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    40
    Адрес:
    Киев
    Здравствуйте!
    В общем давайте я расскажу что и как :)
    В общем при запуске приложения, загружается DLL-ка которую я сейчас как раз пишу.
    Далее она сканирует все окна и процессы.
    Но сканирует не просто так.
    Мы должны проверять есть ли процесс\окно в "черном списке"
    Если есть - убиваем процесс (или приложение).

    Пока что "черный список выглядит так"
    Код (Text):
    1. aL2jes0_1_193   db 'L2Jes ;) 0.1.193 ',0
    2. aL2net          db 'L2NET',0
    3. aL2control      db 'l2control',0  
    4. WindowName      db 'AvK  LineAge2 Edition by iNEOi',0
    5. aUopilot        db 'uopilot',0          
    6. aAcTool         db 'AC Tool',0        
    7. aAutoclick2_2   db 'AutoClick 2.2',0  
    8. aClickermann    db 'Clickermann',0    
    9. aL2walker10_7_4 db 'L2Walker 10.7.4',0
    10. aLa2funV_1_1    db 'LA2Fun v.1.1',0    
    11. aHlapex         db 'hLaPEx',0          
    12. aL2packethackV3 db 'L2PacketHack v3.5.33.166 by CoderX.ru Team',0
    13. aL2packethack   db 'L2PacketHack',0    
    14. ClassName       db 'TApplication',0    
    15. aHlapexLineageP db 'hLaPEx (LineAge Packets EXplorer by Hint)',0
    16. aTfrmmain       db 'TfrmMain',0        
    17. aL2radar        db 'L2Radar',0        
    18. aL2divine       db 'L2Divine',0        
    19. aAsi            db 'Asi',0            
    20. aLa2RemoteContr db 'LA2 Remote Controller',0
    21. aAcp            db 'Acp',0              
    22. aL2fish         db 'L2Fish',0  
    23. ......
    А функция проверки так
    Код (Text):
    1. proc FindIllegalWindow
    2.     invoke FindWindowA,0,aL2jes0_1_193
    3.     invoke FindWindowA,0,aL2net
    4.     invoke FindWindowA,0,aL2control
    5.     invoke FindWindowA,0,WindowName
    6.     invoke FindWindowA,0,aUopilot
    7.     invoke FindWindowA,0,aAcTool
    8.     invoke FindWindowA,0,aAutoclick2_2
    9.     invoke FindWindowA,0,aClickermann
    10.     invoke FindWindowA,0,aL2walker10_7_4
    11.     invoke FindWindowA,0,aLa2funV_1_1
    12.     invoke FindWindowA,0,aHlapex
    13.     invoke FindWindowA,0,aL2packethackV3
    14.     invoke FindWindowA,0,aL2packethack
    15.     invoke FindWindowA,0,ClassName
    16.     invoke FindWindowA,0,aHlapexLineageP
    17.     invoke FindWindowA,0,aTfrmmain
    18.     invoke FindWindowA,0,aL2radar
    19.     invoke FindWindowA,0,aL2divine
    20.     invoke FindWindowA,0,aAsi
    21.     invoke FindWindowA,0,aLa2RemoteContr
    22.     invoke FindWindowA,0,aAcp
    23.     invoke FindWindowA,0,aL2fish
    24.     invoke FindWindowA,0,aTmainform
    25.     ;---------------------------------------------------
    26.     .......
    27. endp
    ВОПРОС:
    Возможно как то поместить эти строки "черный список" в массив и не писать 100 строчек с проверками, а сделать цикл? по типу For (String _element : Elements) .... (Java) , где Elements - массив строк.

    Саму DLL пишу в FASM

    Очень надеюсь на Вашу помощь...
     
  2. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    Код (Text):
    1.     mov edi, wnd_str+4
    2. @@:
    3.     invoke FindWindowA,0,edi
    4.     add edi, dword[edi-4]
    5.     or byte[edi], 0
    6.     jnz @b
    7.  ..............
    8. .data
    9. wnd_str:
    10. @@:dd @f-@b
    11. aL2jes0_1_193   db 'L2Jes ;) 0.1.193 ',0
    12. @@:dd @f-@b
    13. aL2net          db 'L2NET',0
    14. @@:dd 0
    15. dd 0
     
  3. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    litrovith
    Неплохо, только адрес FindWindowA можно в регистр (ESI например) и:
    Код (Text):
    1. call esi
     
  4. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Что-то типа такого
    Код (Text):
    1. ... ; Куча db и прочей байды
    2.  
    3. mov ebx,offset aL2jes0_1_193
    4. l2:
    5. invoke FindWindow,0,ebx
    6. ... ; Здесь должна быть проверка хэндла и проделывание с ним всякой хрени
    7. invoke _lstrlen,ebx
    8. or eax,eax
    9. jz l1
    10. add ebx,eax
    11. inc ebx
    12. jmp l2
    13. l1:
    14. ... ; Всякая последующая хрень
    В конец списка дописать db 0 в качестве стоп-байта. ФАСМ не знаю, и вообще сочинял по памяти.

    PS Исходник изначально кривой, искать имя класса в тексте окна - это оригинально. Ну и сам алгоритм поиска, конечно, душераздирающий. Это ничего, что TheBat, Help&Manual и ещё мульён программ на Delphi и С++ Builder, которые ко всяким онлайн-игрищам никакого отношения не имеют, создают невидимое окошко с именем класса TApplication?
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    r2max
    мои пять копеек
    Код (Text):
    1. push edi;можно esi,ebx,esp так как FindWindow
    2. ;не изменяет значения в этих регистрах
    3. push aTmainform
    4. push aL2fish
    5. push aAcp
    6. push aLa2RemoteContr
    7. push aAsi
    8. push aL2divine
    9. push aL2radar
    10. push aTfrmmain
    11. push aHlapexLineageP
    12. push ClassName
    13. push aL2packethack
    14. push aL2packethackV3
    15. push aHlapex
    16. push aLa2funV_1_1
    17. push aL2walker10_7_4
    18. push aClickermann
    19. push aAutoclick2_2
    20. push aAcTool
    21. push aUopilot
    22. push WindowName
    23. push aL2control
    24. push aL2net
    25. push aL2jes0_1_193
    26. mov edi,24
    27. @@: invoke FindWindowA,0
    28.        dec edi
    29.        jnz @b
    30.        pop edi
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    И сколько там еще строчек после многоточия?
    Думается, что вместо "сотни" вызовов FindWindow лучше перебрать все окна по EnumWindows с поиском названия окна в своем "черном списке". Для ускорения поиска строки можно заюзать сортированный массив указателей на строки, а если строк очень много, то можно и что-то вроде хэш-таблицы замутить.
    А делать это ес-но проще не на асме, а на готовых решениях - сишных или даже (о, ужас) дельфийских ;)
     
  7. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    r2max
    Скажу вам, что решение хорошее (если смотреть со стороны читеров).

    Если вы убьёте программу, то читеру ничего не стоит защититься от этого. И он либо пропатчит вашу программу либо свою читерскую.
     
  8. r2max

    r2max Женя

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    40
    Адрес:
    Киев
    а нельзя сделать макрос?
    И как бы новый тип данных?
    например структура
    Код (Text):
    1. struct StringArray
    2.  id dd ?   ; Номер строки
    3.  pStr dd ? ; Указатель на строку
    4. ends
    и какой то макрос...
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    r2max
    Используется, очевидно, вот так:
    Код (Text):
    1. strtbl blacklist,\
    2.     'L2Jes ;) 0.1.193 ',\
    3.     'L2NET',\
    4.     'l2control',\
    5.     'AvK  LineAge2 Edition by iNEOi',\
    6.     'uopilot',\
    7.     'AC Tool',\
    8.     'AutoClick 2.2',\
    9.     'Clickermann',\
    10.     'L2Walker 10.7.4',\
    11.     'LA2Fun v.1.1',\
    12.     'hLaPEx',\
    13.     'L2PacketHack v3.5.33.166 by CoderX.ru Team',\
    14.     'L2PacketHack',\
    15.     'TApplication',\
    16.     'hLaPEx (LineAge Packets EXplorer by Hint)',\
    17.     'TfrmMain',\
    18.     'L2Radar',\
    19.     'L2Divine',\
    20.     'Asi',\
    21.     'LA2 Remote Controller',\
    22.     'Acp',\
    23.     'L2Fish'
     
  10. PSR1257II

    PSR1257II New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2011
    Сообщения:
    228
    Если есть возможность сначала получить спейсог всех имен окон - то потом можно элегантно strstrA/W. Не?
     
  11. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    PSR1257II
    Зачем его получать, если можно наоборот - перебирать по одному окну в EnumWindows и искать его название в своем "черном списке" (см.#6). Если скорость поиска особо не волнует, то - да, можно записать все имена списка в одну строку с неким разделителем, например Tab=9, и искать обычной strstr
     
  12. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    Та бред ето всё, какие окна, какие процессы?
    Если у окна "легальный" класс и оно не имеет имени что делать? Ток @лбоёб напишет в окне: "l2control", "L2Fish" и т.п. палево.
    Если треды чита не имеют процесса(загружен как длл(перекриптованая) в любой процесс)?
    Шо тогда делать?
    Недавно писал бота для рыбалки, драйвером, хукал что ему надо и работал. Окно мне было нужно только чтоб запустить и остановить "процесс". Ну и как такому подходу противодействовать?
     
  13. zabej

    zabej New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2011
    Сообщения:
    14
    недавать хукать, проверять целостность
     
  14. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    zabej, целостность чего? Кто знает что я похукал? Анука угадай со второго раза ))), отдыхай со своей целконостью, серьёзно.
     
  15. r2max

    r2max Женя

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    40
    Адрес:
    Киев
    Перехватить функцию отправки и получения пакетов и проверять адрес возврата
     
  16. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    r2max
    Пропатчить перехватчик, чтобы он ничего не делал и профит....

    Разработчики защит всегда в невыгодном положении по сравнению с читерами (по крайней мере в винде). Читеры могут использовать трюки, на которые разработчики (ну, нормальные разработчики) никогда не решаться.
    Взять тот же старфорс - за границей его используют в весьма урезанном виде от чего он прекрасно снимается спецами.
    У нас же они используют все опции защиты и плевать они хотели на баги и тормоза. Иногда когда ставишь на игру очередной апдейт она вдруг начинает меньше тормозить, а причина предельна проста - разраб срезал защиту. К сожалению, этим обычно занимаются иностранные конторы, а наши никогда защиту не снимают, даже если игре 20 лет.

    Почему же отечественные разработчики всё время ставят геймеров раком? Ну, не знаю, наверно, это геймерам просто нравиться. Лично я никогда не покупаю игр с дебильной защитой. Если бы все так делали, то возможно, что и к нам пришла бы цивилизация.

    zabej
    Отломают код, который отвечает за это и будут спокойно хукать и не думать о целостности. Если, конечно, игра пользуется популярностью.

    r2max
    Может не стоит мудрить, а купить какой-нибудь протектор игр?
     
  17. guloc555

    guloc555 New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2011
    Сообщения:
    1