Blog. Just Blog

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

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

Исследование защиты программы USBFlashCopy

30.11.2011 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы USBFlashCopy

Программа USBFlashCopy предназначена для автоматического создания резервных копий данных с Flash-накопителей при подключении их к компьютеру. Резервная копия создается в фоновом режиме, возможны настройки для копирования файлов только отдельного типа, например, картинки или документы. Блин, да кого я обманываю... Программа USBFlashCopy предназначена для скрытого копирования информации с чужих флешек при подключении их к вашему компьютеру, например, файлов с паролями, личных фотографий, документов и других данных на ваш выбор. В бесплатном режиме на экране показывается окно с прогрессом копирования, которое невозможно закрыть, а также при каждом подключении носителей выдается окно с запросом настроек копирования. Чтобы убрать все палево и работать в скрытом режиме, требуется регистрация. Естественно, не бесплатная.

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

Как узнать, что программа запущена под Администратором

20.11.2011 | Категория: Образ мышления: Assembler | Автор: ManHunter
Иногда требуется узнать, запущена ли ваша программа под учетной записью с правами Администратора, или же от обычного пользователя. Для чего это нужно? Например, некоторые операции с реестром или файлами требуют права Администратора. При попытке выполнить их обычному пользователю вернется ошибка ERROR_ACCESS_DENIED, но для более точного анализа ситуации надо будет проверить права доступа и уведомить об этом пользователя. Проверить, что программа запущена под Администратором, можно несколькими способами.

Первый способ наиболее универсальный и работает даже на старых операционных системах. Он заключается в том, что надо получить группы доступа для токена текущего процесса, а затем проверить, входит ли хоть одна из них в группу Администраторов локального компьютера. Вот пример реализации:
  1. ; Сегмент данных
  2. section '.data' data readable writeable
  3.  
  4. SECURITY_NT_AUTHORITY       = 5
  5. TOKEN_READ                  = 0x00020008
  6. SECURITY_BUILTIN_DOMAIN_RID = 0x00000020
  7. DOMAIN_ALIAS_RID_ADMINS     = 0x00000220
  8. TokenGroups                 = 0x00000002
  9.  
  10. BUFF_SIZE = 1024h ;  Размер буфера для групп доступа токена
  11.  
  12. NtAuthority     db 0,0,0,0,0,SECURITY_NT_AUTHORITY
  13.  
  14. hTokenHandle    dd ?
  15. dInfoSize       dd ?
  16. psidAdmins      dd ?
  17. hHeap           dd ?
  18. pTokenGroups    dd ?
  19.  
  20. ;---------------------------------------------
  21.  
  22. ; Сегмент кода
  23. section '.code' code readable executable
  24.         ...
  25.         ; Получить токен текущего процесса
  26.         invoke  GetCurrentProcess
  27.         invoke  OpenProcessToken,eax,TOKEN_READ,hTokenHandle
  28.  
  29.         ; Выделить память для массива групп
  30.         invoke  GetProcessHeap
  31.         mov     [hHeap],eax
  32.  
  33.         invoke  HeapAlloc,eax,HEAP_ZERO_MEMORY,BUFF_SIZE
  34.         mov     [pTokenGroups],eax
  35.  
  36.         ; Получить информацию о группах доступа токена
  37.         invoke  GetTokenInformation,[hTokenHandle],TokenGroups,\
  38.                 [pTokenGroups],dword BUFF_SIZE,dInfoSize
  39.  
  40.         ; Прибраться за собой
  41.         invoke  CloseHandle,[hTokenHandle]
  42.  
  43.         invoke  AllocateAndInitializeSid,NtAuthority,2,\
  44.                 SECURITY_BUILTIN_DOMAIN_RID,\
  45.                 DOMAIN_ALIAS_RID_ADMINS,0,0,0,0,0,0,psidAdmins
  46.  
  47.         ; Количество записей в структуре TOKEN_GROUPS
  48.         mov     esi,[pTokenGroups]
  49.         mov     ebx,dword [esi]
  50.         ; Указатель на массив SID_AND_ATTRIBUTES
  51.         add     esi,4
  52. @@:
  53.         ; Проверить соответствие SID
  54.         mov     eax,dword [esi]
  55.         invoke  EqualSid,[psidAdmins],eax
  56.         or      eax,eax
  57.         jnz     loc_admin
  58.  
  59.         ; Следующая группа
  60.         add     esi,8
  61.         dec     ebx
  62.         or      ebx,ebx
  63.         jnz     @b
  64.  
  65. loc_not_admin:
  66.         ; Пользователь не Администратор
  67.         ...
  68.  
  69. loc_admin:
  70.         ; Пользователь Администратор
  71.         ...
Обратите внимание, что никаких проверок на ошибки не выполняется, оставлен только рабочий код. Полный вариант вы можете посмотреть в приложении к статье.

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

Блокировка отдельных IP c помощью политики безопасности

07.11.2011 | Категория: Software | Автор: ManHunter

Блокировка отдельных IP c помощью политики безопасности

С развитием интернета и сетевых сервисов все более актуальна задача отсеивания ненужных ресурсов. Это могут быть рекламные сайты, различные сервисы для проверки активации всякого коммерческого софта, да и просто сайты, по какой-либо причине нежелательные для посещения. Обычно такая блокировка обеспечивается на уровне браузеров (баннерорезки), системных служб (AdMuncher, Proxomitron, HtFilter), прописыванием перенаправлений в файле hosts, а также разграничением доступа в правилах фаервола. При всем этом многообразии способов ограничения доступа в сеть, иногда встречается софт, аффтары которого однозначно больны варезом головного мозга. Некоторые пытаются проверять свою регистрацию через браузер, другие сканируют файл hosts на предмет наличия в нем записей о своих доменах, а совсем конченные уроды докатились даже до проверки установленных фаерволов и требуют их отключения. Для подобных клинических случаев можно использовать блокировку отдельных IP c помощью настроек политики IP-безопасности Windows.

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

Расчет CRC8 на Ассемблере

25.09.2011 | Категория: Образ мышления: Assembler | Автор: ManHunter
Контрольная сумма CRC8 применяется в основном для коротких сетевых пакетов и в микроконтроллерах. Из-за большой вероятности появления коллизий, использовать ее можно или для контроля целостности небольших объемах данных (оптимально - до 15 байт информации), или в случаях, когда возможность появления искажений исходных данных крайне мала. Алгоритм расчета CRC8 реализуется очень просто, работает очень быстро, из-за чего до сих пор находит свое применение. Первый вариант - прямой расчет.
  1. ;-----------------------------------------------------------------------
  2. ; Функция вычисления хеша CRC8
  3. ; by ManHunter / PCL
  4. ; http://www.manhunter.ru
  5. ;-----------------------------------------------------------------------
  6. ; Параметры:
  7. ;       lpData - указатель на строку
  8. ;       dSize  - длина строки
  9. ; На выходе:
  10. ;       AL = полученный хеш
  11. ;-----------------------------------------------------------------------
  12. proc    CRC8 lpData:DWORD, dSize:DWORD
  13.         push    ebx ecx edx esi edi
  14.  
  15.         CRC8_POLYNOM = 31h
  16.  
  17.         ; Инициализация
  18.         mov     al,0FFh
  19.  
  20.         ; Длина строки
  21.         cmp     [dSize],0
  22.         je      .loc_ret
  23.  
  24.         ; Указатель на начало строки
  25.         xor     ecx,ecx
  26. @@:
  27.         ; Получить символ из строки
  28.         mov     ebx,[lpData]
  29.         xor     al,byte [ebx+ecx]
  30.  
  31.         xor     esi,esi
  32. .loc_cycle:
  33.         test    al,80h
  34.         jz      .loc_1
  35.  
  36.         shl     al,1
  37.         xor     al,CRC8_POLYNOM
  38.         jmp     .loc_next
  39. .loc_1:
  40.         shl     al,1
  41. .loc_next:
  42.         inc     esi
  43.         cmp     esi,8
  44.         jb      .loc_cycle
  45.  
  46.         ; Следующий символ
  47.         inc     ecx
  48.         cmp     ecx,[dSize]
  49.         jb      @b
  50.  
  51. .loc_ret:
  52.         and     eax,0FFh
  53.  
  54.         pop     edi esi edx ecx ebx
  55.         ret
  56. endp
Этот вариант компактный, но не самый быстрый по скорости вычисления. Более скоростной алгоритм расчета CRC8 - с использованием заранее подготовленной таблицы.

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

Расчет хеша Adler-32 на Ассемблере

12.07.2011 | Категория: Образ мышления: Assembler | Автор: ManHunter
Adler-32 - хеш-функция, разработанная Марком Адлером, хорошо известным по его работам в области компрессии данных. Этот хеш используется в библиотеке zlib, соавтором которой и является Марк Адлер. По скорости работы Adler-32 превосходит CRC32, однако уступает ей по качеству обнаружения ошибок контрольной суммы, особенно на коротких строках. Есть несколько вариантов реализации алгоритма на разных языках и с разной степенью эффективности, мой вариант на Ассемблере такой:
  1. ;-----------------------------------------------------------------------
  2. ; Функция вычисления хеша Adler-32
  3. ; by ManHunter / PCL
  4. ; http://www.manhunter.ru
  5. ;-----------------------------------------------------------------------
  6. ; Параметры:
  7. ;       lpData - указатель на строку
  8. ;       dSize  - длина строки
  9. ; На выходе:
  10. ;       EAX = полученный хеш
  11. ;-----------------------------------------------------------------------
  12. proc    Adler32 lpData:DWORD, dSize:DWORD
  13.         push    ebx ecx edx esi edi
  14.  
  15.         ; Инициализация
  16.         mov     edi,1           ; s1 = 1
  17.         xor     esi,esi         ; s2 = 0
  18.  
  19.         ; Длина строки
  20.         cmp     [dSize],0
  21.         je      .loc_ret
  22.  
  23.         mov     ebx,65521       ; base
  24.         xor     ecx,ecx
  25. @@:
  26.         ; Получить символ из строки
  27.         mov     eax,[lpData]
  28.         movzx   eax,byte [eax+ecx]
  29.  
  30.         add     eax,edi         ; s1 = (s1 + buf[i]) % 65521
  31.         xor     edx,edx
  32.         div     ebx
  33.         mov     edi,edx
  34.  
  35.         add     edx,esi         ; s2 = (s2 + s1) % 65521
  36.         mov     eax,edx
  37.         xor     edx,edx
  38.         div     ebx
  39.         mov     esi,edx
  40.  
  41.         ; Следующий символ
  42.         inc     ecx
  43.         cmp     ecx,[dSize]
  44.         jb      @b
  45. .loc_ret:
  46.         mov     eax,esi        ; adler32 = (s2 << 16) + s1
  47.         rol     eax,16
  48.         add     eax,edi
  49.  
  50.         pop     edi esi edx ecx ebx
  51.         ret
  52. endp
Пример использования:
  1. ; Сегмент данных
  2. section '.data' data readable writeable  
  3. ...
  4. somedata db 'Yeah! I like Flat Assembler!',0 ; Исходные данные для хеширования
  5.  
  6. ; Сегмент кода
  7. section '.code' code readable executable
  8.         ...
  9.         ; Расчет длины строки. Для бинарных данных lstrlen лучше не использовать
  10.         invoke  lstrlen,somedata
  11.         ; Расчет Adler-32 
  12.         stdcall Adler32,somedata,eax
  13.         ; EAX = 82E0095Dh
Как указано в описании, самый эффективный по скорости способ расчета Adler-32 представлен авторским алгоритмом в исходниках библиотеки zlib. Но для небольших объемов данных вполне сгодится и приведенный выше вариант.

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

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 3 (0.0046 сек.) / Память: 4.5 Mb
Наверх