Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Задача на применение логических инструкций

16.12.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter
Когда-то кому-то помогал с решением задачи на ассемблере, формулировка задания была такая:


Дан массив из 5 байт. Рассматривая его как массив из восьми 5-битных слов, посчитать количество слов с четным числом единиц в слове.


Алгоритм хитровывернутый, комментарии специально не прописывал, чтобы тупая и ленивая школота не смогла объяснить преподу, откуда взялось такое решение и как оно работает.
  1. ;---------------------------------------------------------------
  2. ; Задача на применение логических инструкций
  3. ;
  4. ; Дан массив из 5 байт. Рассматривая его как массив из восьми
  5. ; 5-битных слов, посчитать количество слов с четным числом
  6. ; единиц в слове.
  7. ;
  8. ; Решение: ManHunter / PCL
  9. ;---------------------------------------------------------------
  10.  
  11. format PE GUI 4.0
  12. entry start
  13.  
  14. include 'win32a.inc'
  15.  
  16. ;---------------------------------------------------------------
  17.  
  18. section '.data' data readable writeable
  19.  
  20. xbytes   db 00111000b ; Данные для задачки, взяты с потолка :)
  21.          db 11111110b
  22.          db 01010101b
  23.          db 00001001b
  24.          db 00000110b
  25.  
  26. mask     db 'Count: %i',13,10,13,10
  27.          db '%i%i%i%i%i - %i%i%i%i%i - %i%i%i%i%i - %i%i%i%i%i',13,10
  28.          db '%i%i%i%i%i - %i%i%i%i%i - %i%i%i%i%i - %i%i%i%i%i',13,10
  29.         db 0
  30.  
  31. title    db 'Solution',0
  32. tmp      rb 100
  33.  
  34. ;---------------------------------------------------------------
  35.  
  36. section '.code' code readable executable
  37. start:
  38.          mov     esi,xbytes+4
  39. loc_1:
  40.          lodsb
  41.          mov     ecx,8
  42. loc_2:
  43.          xor     edx,edx
  44.          test    al,00000001b
  45.          jz      loc_3
  46.          inc     edx
  47. loc_3:
  48.          push    edx
  49.          shr     al,1
  50.          loop    loc_2
  51.  
  52.          dec     esi
  53.          dec     esi
  54.          cmp     esi,xbytes
  55.          jnb     loc_1
  56.  
  57.          xor     eax,eax
  58.          xor     esi,esi
  59. loc_4:
  60.          xor     edi,edi
  61.          mov     ecx,5
  62. loc_5:
  63.          add     edi,[esp+eax*4]
  64.          inc     eax
  65.          loop    loc_5
  66.  
  67.          test    edi,edi
  68.          jz      loc_6
  69.          test    edi,1
  70.          jnz     loc_6
  71.          inc     esi
  72. loc_6:
  73.          cmp     eax,40
  74.          jb      loc_4
  75.  
  76.          invoke  wsprintf,tmp,mask,esi
  77.          add     esp,12+(8*5*4)
  78.  
  79.          invoke  MessageBox,HWND_DESKTOP,tmp,title,MB_OK
  80.          invoke  ExitProcess,0
  81.  
  82. ;---------------------------------------------------------------
  83.  
  84. section '.idata' import data readable writeable
  85.  
  86. library kernel32,"KERNEL32.DLL",\
  87.          user32,"USER32.DLL"
  88.  
  89. include "apia\kernel32.inc"
  90. include "apia\user32.inc"
Исходник и скомпилированный файл прилагаются.

Читать статью целиком »
Просмотров: 5897 | Комментариев: 3

Защита от спама на сайтах и форумах

14.12.2008 | Категория: Web-мастеру и не только | Автор: ManHunter
Проблема спама в комментариях, гостевых книгах, сообщениях на форумах в настоящее время стоит очень остро. Раньше даже простенькая капча или подтверждение регистрации на форуме по e-mail были практически непреодолимым препятствием для спамботов и автосабмиттеров. Теперь появились достаточно мощные программы для авторегистрации и рассылки спама, способные реально обходить эти защиты. Никаких названий и ссылок на сайты указывать не буду, чтобы не делать рекламы этим ублюдкам. В описании одного из спамботов его аффтар хвалится:


Эксклюзивная возможность - программа обходит ЛЮБЫЕ виды защиты от автоматической регистрации и автосабмита! Такие, как:
- Защита при помощи пиктокода (тикетов) типа "Введите число, которое видите".
- Защита при помощи активации по e-mail.
- Защита при помощи некоторых Java-скриптов.
- Возможность распознавания защиты в виде арифметических операций и логических вопросов


а на следующей же страничке расписывается в своей беспомощности:


Изредка на некоторых форумах встречается защита от автосабмита в виде java- или VB-скрипта.
Как показала практика, чтобы научить программу обходить такого рода защиту, совсем необязательно писать полнофункциональный обработчик скрипта. Главное, чтобы такой вид защиты был достаточно распространён: нецелесообразно создавать обработчик, если такая защита используется только на одном-двух форумах.


Значит наш удар будет нанесен в самое слабое место спамботов - невозможность обрабатывать формы, защищенные при помощи скриптов JavaScript. Лично я противник использования на сайтах различных навороченных капчей, которые не то что робот, а и не каждый здоровый человек разберет. После первого же неправильного ввода желание оставлять комментарий, да и вообще посещать подобный ресурс, очень резко уменьшается. Туда же идут всякие "сколько будет 2+3", "что нарисовано на картинке" и прочие лишние телодвижения, не связанные непосредственно с комментированием.

Читать статью целиком »
Просмотров: 31226 | Комментариев: 64

Обработка перетаскивания файлов (Drag'n'Drop)

10.12.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter
Если в вашем приложении используется обработка файлов, то кроме открытия через стандартные диалоги выбора файла и каталога, можно получать их из Проводника Windows перетаскиванием. Обработка перетаскивания файлов выполняется в два этапа. При инициализации диалогового окна приложения должна вызываться функция DragAcceptFiles. Параметр функции TRUE разрешает принятие файлов окном, а FALSE его запрещает, так что прием файлов можно регулировать динамически. Непосредственно прием файлов окном выполняется функцией DragQueryFile.
  1. ; Сегмент кода
  2. section '.code' code readable executable
  3.         ... 
  4. ; Процедура обработчика окна
  5. proc DialogProc hwnddlg,msg,wparam,lparam 
  6.         ...
  7.         ; Инициализация окна
  8.         cmp     [msg],WM_INITDIALOG
  9.         je      wminitdialog
  10.         ; Обработка перетаскивания файлов
  11.         cmp     [msg],WM_DROPFILES
  12.         je      wmdropfiles
  13.         ...
  14. wminitdialog:
  15.         ; Разрешить окну принимать файлы
  16.         invoke  DragAcceptFiles,[hwnddlg],TRUE
  17.         jmp     processed
  18.  
  19. wmdropfiles:
  20.         ; Обработка полученных файлов. Функция DragQueryFile возвращает имя
  21.         ; файла с указанным индексом (нумерация индексов начинается с нуля).
  22.         ; Для получения общего количества переданных файлов ее надо вызвать с
  23.         ; индексом равным 0FFFFFFFFh
  24.         invoke  DragQueryFile,[wparam],0FFFFFFFFh,NULL,NULL
  25.         ; В регистре EAX количество переданных файлов
  26.  
  27.         ; Перебрать по очереди все переданные окну файлы
  28.         xor     ecx,ecx
  29. process_file:
  30.         push    ecx eax
  31.         ; Получить имя файла или каталога в буфер fname
  32.         invoke  DragQueryFile,[wparam],ecx,fname,100h
  33.         ...
  34.         ; Тут будет обработчик переданных файлов и каталогов
  35.         ...
  36.         pop     eax ecx
  37.         inc     ecx
  38.         cmp     ecx,eax
  39.         jne     process_file
  40.  
  41.         ; Освободить дескриптор операции
  42.         invoke  DragFinish,[wparam]
  43.         ...
Если требуется получить только один файл, то запрашивать общее количество файлов не обязательно, достаточно вызвать DragQueryFile с нулевым индексом файла. Если в интерфейсе предусмотрено несколько полей для приема файлов, то может возникнуть необходимость определять, в какое именно поле выполнятся сброс файла. Делать это можно, например, через субклассирование, но есть способ проще. При помощи функции DragQueryPoint можно определять координаты точки внутри окна, на которых был выполнен бросок файла. Сравнив их с координатами полей ввода, легко определить, какому из них предназначался файл.

После выполнения всех необходимых действий с файлом, надо освободить память, выделенную под файлы, при помощи функции DragFinish.

Читать статью целиком »
Просмотров: 5698 | Комментариев: 2

Готовим свинину в пиве

06.12.2008 | Категория: А еще я туда ем! | Автор: ManHunter

Готовим свинину в пиве

Как я и говорил, мясо я люблю больше шоколада. Поэтому сегодня у меня на обед свинина в пиве.

Читать статью целиком »
Просмотров: 10053 | Комментариев: 4

Фишинг серийников в Blumentals Screensaver Factory

04.12.2008 | Категория: Темная сторона Силы | Автор: ManHunter
При помощи программы Blumentals Screensaver Factory вы можете создавать красивые скринсейверы в виде слайдшоу из ваших фотографий. Саму "фабрику" можно без проблем найти в интернете, но речь сейчас не о ней, а о скринсейверах, которые сделаны с ее помощью. В Blumentals Screensaver Factory есть возможность создания коммерческих скринсейверов, защищенных серийным номером, и некоторые аффтары умудряются торговать подобными дешевками, на создание которых было затрачено всего несколько минут. Такие скринсейверы можно узнать по окну настроек:


Окно настроек скринсейвера

В зависимости от использованной версии "фабрики" вкладок может быть больше или меньше, но общий стиль оформления остается неизменный.

Читать статью целиком »
Просмотров: 6173 | Комментариев: 1

01 ... 410 411 412 413 414 415 416 ... 422
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2025
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.11 сек. / MySQL: 2 (0.0431 сек.) / Память: 4.5 Mb
Наверх