Pull to refresh

Adobe Acrobat блокирует антивирусам просмотр PDF-файлов

Reading time 3 min
Views 3K
Information Security *Antivirus protection *PDF IT-companies

Исследователи безопасности обнаружили, что Adobe Acrobat пытается заблокировать 30 антивирусов, не давая им просматривать открываемые PDF-файлы. Продукт Adobe проверяет, загружены ли в его процессы компоненты из этих антивирусов, и, вероятно, блокирует их, лишая возможности отслеживать вредоносную активность.

Читать далее
Total votes 5: ↑4 and ↓1 +3
Comments 4

Управление самодельным USB-HID светодиодом, c помощью GUI оболочки на .NET

Reading time 3 min
Views 39K
DIY
image
Подобная вещь, собранная из малого количества деталей, может пригодиться для моддинга или просто для подсветки клавиатуры.

Читать дальше →
Total votes 60: ↑52 and ↓8 +44
Comments 54

.Net и Navision 5.0 — Дружба Навек

Reading time 3 min
Views 1.4K
Lumber room

Завязка.


И так, здравствуйте.
Работая в конторе, которая занимается внедрением такой штуки, как Ms Dynamics Nav пришлось, столкнуться с одной проблемой, решение которой средствами самого Навика (позволю себе столь фамильярное обращение), было невозможным.
Суть проблемы такова:
внедряя систему в предприятие, которое занимается переводом, встала жесткая проблема с названиями файлов, так как требования гласили, что название, которым был наречен исходный файл, должно полностью соответствовать названию, которое получит уже переведенный файл. При всем при этом, заказчик требовал записи файлов в базу данных MS SQL. Так как навик ооочень далек от юникода, то все встроенные функции работы с файлами коверкали название, убирая умляуты, аксанты и прочие элементы европейского алфавита.
Для решения сией проблемы была поставлена задача написать dll-ку, которая будет записывать в базу данных файлы с корректными названиями. А затем, по требованию возвращать эти файлы из базы данных в файловую систему. При всем при этом возникла проблема с загрузкой больших файлов, поэтому, опять-таки, было принято волевое решение об использовании в MS SQL такой вещи, как FILESTREAM.
Читать дальше →
Total votes 14: ↑7 and ↓7 0
Comments 6

C# to Java (вызов C# dll из Java)

Reading time 5 min
Views 18K
Abnormal programming *
Доброго времени суток!
Помучив немного хабра поиск не нашел подобных тем, в связи с чем создал свою.

Немного лирики:
Имеем шарповскую библиотеку, в которой лежат необходимые для работы методы. Необходимо этими методами воспользоваться из Java программы.
Читать дальше →
Total votes 14: ↑11 and ↓3 +8
Comments 11

Обертка для вызова функций по их адресу

Reading time 5 min
Views 7.1K
C++ *
Sandbox
Доброго времени суток!
Было дело — делал я интерфейс для работы с модулями для USB от FTDI. Пришлось изрядно повозиться с подключением DLL-интерфейса. Разочаровавшись в возможностях автоматической линковки Microsoft Visual Studio 2008 (UPD: потом я разобрался с этой темой), я решил это делать вручную. По ходу дела задолбался очень надоело вручную подключать несколько десятков функций. И тогда я обратился к Google, C++ и шаблонам. И если подключение DLL в стиле C++ вопросов не вызвало, то удобный вызов подключенных функций в стиле «Error = FT_Open (Num, &_Handler)», где FT_Open- объект, удался не сразу. Итог (для таких вот функций) — под катом. Если вкратце — я сделал обертку вокруг указателя на функцию.
Читать дальше →
Total votes 15: ↑10 and ↓5 +5
Comments 20

Создание и использование динамических библиотек, написанных на различных языках (C/C++, Pascal)

Reading time 5 min
Views 74K
Programming *
Sandbox

Задача


Передо мной возникла задача написать загрузчик библиотек, имеющий возможность предоставить какие-то интерфейсные функции внешней динамической библиотеке. Решение должно быть максимально кроссплатформенно (как минимум, работать на Linux и Windows). Загружаться должны библиотеки, написанные на различных языках программирования, поддерживающих создание динамических библиотек. В качестве примера были выбраны языки C и Pascal.

Решение


Основной загрузчик библиотек написан на языке C. Для того, чтобы загружаемые библиотеки имели возможность использовать функции основной программы, основная программа разделена на 2 части: на основной и подгружаемый модули. Основной модуль нужен просто для запуска программы, подгружаемый модуль — это также динамическая библиотека, связываемая с основным модулем во время его запуска. В качестве компиляторов были выбраны gcc (MinGW для Windows) и fpc.
Здесь будет приведён упрощённый пример программы, позволяющий разобраться в данном вопросе и учить первокурсников писать модули к своей программе (в школе часто преподают именно Pascal).
Читать дальше →
Total votes 41: ↑35 and ↓6 +29
Comments 9

Создание прокси-dll для запуска DirectDraw игр в окне

Reading time 5 min
Views 18K
C++ *System Programming *Reverse engineering *
В продолжение темы расширения функциональности готовых программ хотелось бы рассказать об ещё одном способе изменения логики работы уже скомпилированной программы, который не требует делать изменений в самом исполняемом файле. Это может пригодиться при распространении вашей модификации в США, где прямое вмешательство в исполняемый файл строго осуждается. Речь пойдёт о создании крошечной прокси-dll (всего ≈4 килобайта) для подмены используемой приложением библиотеки на примере ddraw.dll.
Читать дальше →
Total votes 71: ↑68 and ↓3 +65
Comments 32

Mouse Track — Библиотека MouseTrackAPI

Reading time 2 min
Views 2.2K
Open source *
Здравствуйте! Рад сообщить, что проект MouseTrack не канул в лету, а продолжает свое развитие. Кто не понял о чем речь: Статья №1 и Статья №2.

Со времени публикации проекта на code.google.com было сделано немногое (основное время — это учеба, предстоящая сессия, да и здоровье не позволяло много времени проводить за компьютером), а именно написана библиотека MouseTrackAPI.dll.

Читать дальше →
Total votes 9: ↑7 and ↓2 +5
Comments 2

Использование SCM для управления драйверами в C# реализованной с помощью dll на C++/cli

Reading time 6 min
Views 4.5K
.NET *C++ *C# *
Tutorial
Sandbox

Service Control Manager (SCM)


SCM — это сервер, реализованный в Windows, для удаленного управления сервисами (вызовом процедур).

Для того, чтобы запустить драйвер в Windows, ему в соответствие ставится сервис, который обеспечивает управление этим драйвером. Не путать с устройством, которое создает драйвер в системе, через которое происходит обмен сообщениями с драйвером. Это устройство создается уже после старта драйвера, а вот SCM обеспечивает само внесение драйвера в систему. С помощью SCM можно: добавлять, удалять, запускать или останавливать службы.

Постановка задачи


Написать буферный класс позволяющий упростить работу SCM в C#.
Сам внешний вид этого класса можно обознать очень просто:

public ref class ServiceControlManager : public IDisposable
{
public:
	ServiceControlManager(void);
	void AddDriver(String^ ServiceName, String^ BinaryPathName);
	void DeleteDriver(String^ ServiceName);
	void StartDriver(String^ ServiceName);
	void StopDriver(String^ ServiceName);
protected:
	~ServiceControlManager();
	!ServiceControlManager();
private:
	SC_HANDLE SCMHandle;
};

Конструктор, деструктор, финализатор, основные методы, из атрибутов только HANDLE объекта SCM. Из этого следует, что экземпляр объекта этого класса будет содержать в себе созданный объект SCM, а методы упрощают с ним работу. Класс является буферным, и поскольку он реализован в C++/cli он будет автоматически масштабируем для работы в среде .NET, соответственно и в C#.
Читать дальше →
Total votes 10: ↑8 and ↓2 +6
Comments 3

DynLib: библиотека для создания и работы с DLL

Reading time 11 min
Views 9.2K
C++ *
Sandbox
image Библиотека DynLib предоставляет удобные средства для разработчиков, использующих межмодульное взаимодействие (EXE<->DLL, DLL<->DLL) в своих проектах, и значительно сокращает время и количество кода.
DynLib стала неотъемлемым инструментом разработки. Под катом делимся результатами.
Читать дальше →
Total votes 49: ↑41 and ↓8 +33
Comments 54

Автоматизация создания прокси-dll

Reading time 1 min
Views 6K
Assembler *
Sandbox
Приветствую!

Сегодня на хабре появилась статья, повествующая о том, как можно перехватывать вызовы DLL из программы и обрабатывать их нужным образом — в законных, а может быть, и не совсем, целях. Так или иначе, данная техника может пригодиться в разных случаях.

Для того, чтобы постоянно не совершать одни и те же действия, я решил автоматизировать процесс создания проекта Visual Studio на основе выбранной dll.
Читать дальше →
Total votes 27: ↑24 and ↓3 +21
Comments 7

Пишем чит для GTA San Andreas

Reading time 6 min
Views 29K
Programming *
Каждый геймер рано или поздно задумывается над упрощением прохождения некоторых уровней игры, возможности сжульничать и т. д. Для этого прибегают к специальным программам, типа ArtMoney, но это не всегда возможно и порой бывает утомительно периодически подправлять данные в памяти для достижения поставленных целей. Автоматизировать данный процесс помогают различные читы и трейнеры. О создании чита далее пойдет речь.
Читать дальше →
Total votes 59: ↑35 and ↓24 +11
Comments 38

Внедрение своего кода в адресное пространство процессов

Reading time 5 min
Views 40K
Information Security *
Intro


Внедрение своего кода( динамически ) в чужие процессы — штука достаточно интересная. Это может служить как во благо, так и во зло. Хотя, понятие «зло», местами, весьма абстрактно в информационном мире, я не могу провести точную границу между тем, что «плохо», а что «хорошо», тем более, если это касается внедрения кода…

В данной статье мы займемся созданием своего DLL инжектора. Что это такое, думаю, знают все. Такой способ внедрения стороннего кода достаточно популярен и удобен.

Писать DLL Injector мы будем на C++ в среде Microsoft Visual Studio 2010. Для создания динамически подключаемой библиотеки можно использовать любой инструмент, который вам по душе. Я же для создания библиотеки выбрал CodeGear RAD Studio 2009, язык Delphi( Object Pascal ).

Как же работает DLL Injection ?

Схема работы данного метода проста:
1) поиск и получение дескриптора нужного процесса
2) выделение памяти в процессе и последующая запись пути в DLL`ке по адресу, где произошло выделение памяти
3) создание нового потока в виртуальном пространстве процесса, дескриптор которого был получен.


Читать дальше →
Total votes 9: ↑4 and ↓5 -1
Comments 9

Как обеспечить надлежащее пересечение границ динамической библиотеки, используя пользовательские средства удаления смарт-указателей

Reading time 4 min
Views 9.5K
Website development *Programming *C++ *
Многие эксперты С++ агитируют использовать интеллектуальные указатели, утверждая, что из современного С++, явное использование new должно вообще исчезнуть (ну, по крайней мере, когда в С++14 пофиксят отсутствие std::make_unique). Все динамические выделения памяти должны быть инкапсулированы или в стандартную библиотеку, или контейнеры типа std::vector, или интеллектуальные указатели.

Смарт-указатели стандартной библиотеки могут быть настроены так, чтобы они сами занимались освобождением занимаемой ими памяти. Эта возможность и заложена в основу ответа на вопрос, поставленного в заголовке статьи.

Объект является пересекающим границу динамической библиотеки, если он инициализируется в одном блоке, а используется в другом. Это происходит, когда, например, в dll инициализируется объект и возвращается указатель на него.

Предположим, одна библиотека (или исполнимый модуль) связывается с другой библиотекой, используя фабрику для динамической инициализации объекта и получения указателя на него. Блок, который использует этот указатель, может удалить указатель для освобождения области памяти, на которую он указывает. Если библиотека, которая выделяет память и блок, работающий с указателем, используют различные версии динамического выделения памяти ОС (CRT в Windows), то возникнет ошибка. Пример этой проблемы (в случае с Windows):
Продолжение...
Total votes 14: ↑11 and ↓3 +8
Comments 11

Простая прокси-DLL своими руками

Reading time 8 min
Views 16K
Assembler *Delphi *System Programming *
Sandbox
Понадобилось мне перехватывать вызовы GDS32.DLL. Решил написать прокси-dll.

Пишем исследовательский стенд


Первое, что нам нужно — это получить список всех экспортируемых функций из настоящей dll.
Сделаем это следующим кодом:

1.	program GetFuncsDll;
2.	  {$APPTYPE CONSOLE}
3.	  uses   Windows;
4.	  var
5.	    ImageBase: DWORD;                  //адрес образа dll
6.	    pNtHeaders: PImageNtHeaders;       // PE заголовок dll
7.	    IED: PImageExportDirectory;        // адрес таблицы экспорта
8.	    ExportAddr: TImageDataDirectory;   // таблица экспорта
9.	    I: DWORD;                          // переменная для цикла
10.	    NamesCursor: PDWORD;               // указатель на адрес имени функции
11.	    OrdinalCursor: PWORD;              // указатель на адрес номера функции
12.	    LIB_NAME:AnsiString;               // имя dll
13.	BEGIN
14.	  LIB_NAME:='MiniLib.dll';
15.	  loadlibraryA(PAnsiChar(LIB_NAME));
16.	  ImageBase := GetModuleHandleA(PAnsiChar(LIB_NAME));
17.	  pNtHeaders := Pointer(ImageBase + DWORD(PImageDosHeader(ImageBase)^._lfanew));
18.	  ExportAddr := pNtHeaders.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
19.	  IED := PImageExportDirectory(ImageBase+ExportAddr.VirtualAddress);
20.	  NamesCursor := Pointer(ImageBase + DWORD(IED^.AddressOfNames));
21.	  OrdinalCursor := Pointer(ImageBase + DWORD(IED^.AddressOfNameOrdinals));
22.	  For I:=0 to Integer(IED^.NumberOfNames-1) do begin
23.	    WriteLn(output,PAnsiChar(ImageBase + PDWORD(NamesCursor)^),'=',OrdinalCursor^ + IED^.Base);
24.	    Inc(NamesCursor);
25.	    Inc(OrdinalCursor);
26.	  end;
27.	Readln;
28.	end.
Листинг 1


Здесь трудностей вроде нет. Добираемся последовательно до таблицы экспорта (строка 19) указателей на массив имен(NamesCursor) и массива номеров(OrdinalCursor) и читаем функцию за функцией, имена и номера. Количество функций находится в поле NumberOfNames. Этот код был добыт на просторах интернета, потом доработан и упрощён.
Читать дальше →
Total votes 40: ↑27 and ↓13 +14
Comments 18

Пишем библиотеку DLL для Metastock с нуля. Часть 1

Reading time 9 min
Views 5.9K
C++ *C *
Sandbox
DLL для Metastock
Metastock – наверное, самая известная программа для технического анализа рынка. Данная программа может подключать внешние библиотеки DLL, написанные пользователями для создания своих торговых стратегий, используя полную мощь традиционных языков программирования, таких как C или Паскаль.
Занявшись поиском в интернете, с удивлением обнаружил полное отсутствие информации по данной теме. Единственная статья, которая оказалась достойной внимания: “Что такое Metastock Developer's Kit?” (mdk), где описывается коротенький пример на Delphi, там же можно скачать MDK.
В данной статье я постараюсь заполнить этот пробел и описать процесс создания библиотеки внешних функций Metastock (MSX DLL) по шагам на языке C/C++. Все примеры писались в среде Visual Studio 2010 (часть2, часть3).
Читать дальше →
Total votes 7: ↑6 and ↓1 +5
Comments 0

Пишем библиотеку DLL для Metastock с нуля.Часть2

Reading time 8 min
Views 3.8K
C++ *C *
Tutorial
DLL для Metastock

В этой статье будут подробно рассмотрены наша функция (часть1, часть3), правила получения данных из Metastock’а, их обработки и возврата результата обратно в Metastock. Эта информация поможет избежать ошибок в работе MSX DLL.
Читать дальше →
Total votes 7: ↑5 and ↓2 +3
Comments 2

Пишем библиотеку DLL для Metastock с нуля. Часть 3

Reading time 16 min
Views 2.9K
C++ *C *
Tutorial
DLL для Metastock

В этой статье я объясню, как подключить к нашим индикаторам аргументы (часть1, часть2). За аргументы в динамической библиотеке MSX DLL программы Metastock отвечают две служебные функции: MSXNthArg и MSXNthCustomString.
Читать дальше →
Total votes 4: ↑3 and ↓1 +2
Comments 0

Про компоновку, dependency hell и обратную совместимость

Reading time 11 min
Views 20K
Website development *
Sandbox
В данной статье речь пойдёт о высокоуровневом взгляде на компоновку. Где ищутся разделяемые библиотеки на Linux, BSD*, Mac OS X, Windows, от которых зависят приложения? Что делать с обратной совместимостью? Как бороться с адом зависимостей?

Читать дальше →
Total votes 50: ↑47 and ↓3 +44
Comments 19

Page-кэш, или как связаны между собой оперативная память и файлы

Reading time 8 min
Views 48K
Smart-Soft corporate blog Programming *
Recovery mode
Translation


Ранее мы познакомились с тем, как ядро управляет виртуальной памятью процесса, однако работу с файлами и ввод/вывод мы опустили. В этой статье рассмотрим важный и часто вызывающий заблуждения вопрос о том, какая существует связь между оперативной памятью и файловыми операциями, и как она влияет на производительность системы.
Читать дальше →
Total votes 41: ↑40 and ↓1 +39
Comments 12