Быстрый поиск
Введите фрагмент названия статьи для поиска
Исследование защиты программы USBFlashCopy
30.11.2011 | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы USBFlashCopy
Программа USBFlashCopy предназначена для автоматического создания резервных копий данных с Flash-накопителей при подключении их к компьютеру. Резервная копия создается в фоновом режиме, возможны настройки для копирования файлов только отдельного типа, например, картинки или документы. Блин, да кого я обманываю... Программа USBFlashCopy предназначена для скрытого копирования информации с чужих флешек при подключении их к вашему компьютеру, например, файлов с паролями, личных фотографий, документов и других данных на ваш выбор. В бесплатном режиме на экране показывается окно с прогрессом копирования, которое невозможно закрыть, а также при каждом подключении носителей выдается окно с запросом настроек копирования. Чтобы убрать все палево и работать в скрытом режиме, требуется регистрация. Естественно, не бесплатная.
Читать статью целиком »
Просмотров: 9860 | Комментариев: 13
Как узнать, что программа запущена под Администратором
20.11.2011 | Категория: Образ мышления: Assembler | Автор: ManHunter
Иногда требуется узнать, запущена ли ваша программа под учетной записью с правами Администратора, или же от обычного пользователя. Для чего это нужно? Например, некоторые операции с реестром или файлами требуют права Администратора. При попытке выполнить их обычному пользователю вернется ошибка ERROR_ACCESS_DENIED, но для более точного анализа ситуации надо будет проверить права доступа и уведомить об этом пользователя. Проверить, что программа запущена под Администратором, можно несколькими способами.Первый способ наиболее универсальный и работает даже на старых операционных системах. Он заключается в том, что надо получить группы доступа для токена текущего процесса, а затем проверить, входит ли хоть одна из них в группу Администраторов локального компьютера. Вот пример реализации:
Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- SECURITY_NT_AUTHORITY = 5
- TOKEN_READ = 0x00020008
- SECURITY_BUILTIN_DOMAIN_RID = 0x00000020
- DOMAIN_ALIAS_RID_ADMINS = 0x00000220
- TokenGroups = 0x00000002
- BUFF_SIZE = 1024h ; Размер буфера для групп доступа токена
- NtAuthority db 0,0,0,0,0,SECURITY_NT_AUTHORITY
- hTokenHandle dd ?
- dInfoSize dd ?
- psidAdmins dd ?
- hHeap dd ?
- pTokenGroups dd ?
- ;---------------------------------------------
- ; Сегмент кода
- section '.code' code readable executable
- ...
- ; Получить токен текущего процесса
- invoke GetCurrentProcess
- invoke OpenProcessToken,eax,TOKEN_READ,hTokenHandle
- ; Выделить память для массива групп
- invoke GetProcessHeap
- mov [hHeap],eax
- invoke HeapAlloc,eax,HEAP_ZERO_MEMORY,BUFF_SIZE
- mov [pTokenGroups],eax
- ; Получить информацию о группах доступа токена
- invoke GetTokenInformation,[hTokenHandle],TokenGroups,\
- [pTokenGroups],dword BUFF_SIZE,dInfoSize
- ; Прибраться за собой
- invoke CloseHandle,[hTokenHandle]
- invoke AllocateAndInitializeSid,NtAuthority,2,\
- SECURITY_BUILTIN_DOMAIN_RID,\
- DOMAIN_ALIAS_RID_ADMINS,0,0,0,0,0,0,psidAdmins
- ; Количество записей в структуре TOKEN_GROUPS
- mov esi,[pTokenGroups]
- mov ebx,dword [esi]
- ; Указатель на массив SID_AND_ATTRIBUTES
- add esi,4
- @@:
- ; Проверить соответствие SID
- mov eax,dword [esi]
- invoke EqualSid,[psidAdmins],eax
- or eax,eax
- jnz loc_admin
- ; Следующая группа
- add esi,8
- dec ebx
- or ebx,ebx
- jnz @b
- loc_not_admin:
- ; Пользователь не Администратор
- ...
- loc_admin:
- ; Пользователь Администратор
- ...
Читать статью целиком »
Просмотров: 10470 | Комментариев: 22
Блокировка отдельных IP c помощью политики безопасности
07.11.2011 | Категория: Software | Автор: ManHunter
Блокировка отдельных IP c помощью политики безопасности
С развитием интернета и сетевых сервисов все более актуальна задача отсеивания ненужных ресурсов. Это могут быть рекламные сайты, различные сервисы для проверки активации всякого коммерческого софта, да и просто сайты, по какой-либо причине нежелательные для посещения. Обычно такая блокировка обеспечивается на уровне браузеров (баннерорезки), системных служб (AdMuncher, Proxomitron, HtFilter), прописыванием перенаправлений в файле hosts, а также разграничением доступа в правилах фаервола. При всем этом многообразии способов ограничения доступа в сеть, иногда встречается софт, аффтары которого однозначно больны варезом головного мозга. Некоторые пытаются проверять свою регистрацию через браузер, другие сканируют файл hosts на предмет наличия в нем записей о своих доменах, а совсем конченные уроды докатились даже до проверки установленных фаерволов и требуют их отключения. Для подобных клинических случаев можно использовать блокировку отдельных IP c помощью настроек политики IP-безопасности Windows.
Читать статью целиком »
Просмотров: 41183 | Комментариев: 29
Расчет CRC8 на Ассемблере
25.09.2011 | Категория: Образ мышления: Assembler | Автор: ManHunter
Контрольная сумма CRC8 применяется в основном для коротких сетевых пакетов и в микроконтроллерах. Из-за большой вероятности появления коллизий, использовать ее можно или для контроля целостности небольших объемах данных (оптимально - до 15 байт информации), или в случаях, когда возможность появления искажений исходных данных крайне мала. Алгоритм расчета CRC8 реализуется очень просто, работает очень быстро, из-за чего до сих пор находит свое применение. Первый вариант - прямой расчет.Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------------------
- ; Функция вычисления хеша CRC8
- ; by ManHunter / PCL
- ; http://www.manhunter.ru
- ;-----------------------------------------------------------------------
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; На выходе:
- ; AL = полученный хеш
- ;-----------------------------------------------------------------------
- proc CRC8 lpData:DWORD, dSize:DWORD
- push ebx ecx edx esi edi
- CRC8_POLYNOM = 31h
- ; Инициализация
- mov al,0FFh
- ; Длина строки
- cmp [dSize],0
- je .loc_ret
- ; Указатель на начало строки
- xor ecx,ecx
- @@:
- ; Получить символ из строки
- mov ebx,[lpData]
- xor al,byte [ebx+ecx]
- xor esi,esi
- .loc_cycle:
- test al,80h
- jz .loc_1
- shl al,1
- xor al,CRC8_POLYNOM
- jmp .loc_next
- .loc_1:
- shl al,1
- .loc_next:
- inc esi
- cmp esi,8
- jb .loc_cycle
- ; Следующий символ
- inc ecx
- cmp ecx,[dSize]
- jb @b
- .loc_ret:
- and eax,0FFh
- pop edi esi edx ecx ebx
- ret
- endp
Читать статью целиком »
Просмотров: 11837 | Комментариев: 3
Расчет хеша Adler-32 на Ассемблере
12.07.2011 | Категория: Образ мышления: Assembler | Автор: ManHunter
Adler-32 - хеш-функция, разработанная Марком Адлером, хорошо известным по его работам в области компрессии данных. Этот хеш используется в библиотеке zlib, соавтором которой и является Марк Адлер. По скорости работы Adler-32 превосходит CRC32, однако уступает ей по качеству обнаружения ошибок контрольной суммы, особенно на коротких строках. Есть несколько вариантов реализации алгоритма на разных языках и с разной степенью эффективности, мой вариант на Ассемблере такой:Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------------------
- ; Функция вычисления хеша Adler-32
- ; by ManHunter / PCL
- ; http://www.manhunter.ru
- ;-----------------------------------------------------------------------
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; На выходе:
- ; EAX = полученный хеш
- ;-----------------------------------------------------------------------
- proc Adler32 lpData:DWORD, dSize:DWORD
- push ebx ecx edx esi edi
- ; Инициализация
- mov edi,1 ; s1 = 1
- xor esi,esi ; s2 = 0
- ; Длина строки
- cmp [dSize],0
- je .loc_ret
- mov ebx,65521 ; base
- xor ecx,ecx
- @@:
- ; Получить символ из строки
- mov eax,[lpData]
- movzx eax,byte [eax+ecx]
- add eax,edi ; s1 = (s1 + buf[i]) % 65521
- xor edx,edx
- div ebx
- mov edi,edx
- add edx,esi ; s2 = (s2 + s1) % 65521
- mov eax,edx
- xor edx,edx
- div ebx
- mov esi,edx
- ; Следующий символ
- inc ecx
- cmp ecx,[dSize]
- jb @b
- .loc_ret:
- mov eax,esi ; adler32 = (s2 << 16) + s1
- rol eax,16
- add eax,edi
- pop edi esi edx ecx ebx
- ret
- endp
Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- ...
- somedata db 'Yeah! I like Flat Assembler!',0 ; Исходные данные для хеширования
- ; Сегмент кода
- section '.code' code readable executable
- ...
- ; Расчет длины строки. Для бинарных данных lstrlen лучше не использовать
- invoke lstrlen,somedata
- ; Расчет Adler-32
- stdcall Adler32,somedata,eax
- ; EAX = 82E0095Dh
Читать статью целиком »
Просмотров: 5062 | Комментариев: 0