Воскресенье, 1. Апрель 2012
Раздел: .NET, HTML/JS, Perl, Windows, Сниппеты, Это интересно, автор: dx

Пожалуй, многие знают, что Windows начиная с версии 98 имеет по умолчанию в своем составе Windows Script Host (WSH), который позволяет исполнять скрипты на языках VBScript и JScript, но далеко не каждый хотя бы раз пользовался этой возможностью. В этой статье я приведу примеры полезных сниппетов и скриптов для WSH и попробую убедить вас в том, что вещь это действительно стоящая. Я также расскажу об очень занимательных и полезных возможностях WSH, о которых практически никто не знает, и информацию о которых в интернете найти весьма непросто.
Читать дальше »
Комментариев: 7
Среда, 13. Июль 2011
Раздел: C/C++, автор: Kaimi
Давеча наелся всяких плацебо"витаминчиков" и захотелось странного, а именно - выучить C++ за неделю. Начинание примечательно тем, что это первый раз, когда я изучаю что-то, связанное с программированием, по книге (обычно руководствовался примерами из гугла). Да и подобные языки мне до этого не приходилось изучать, в общем-то. Книжку выбрал первую попавшуюся на Amazon - Herbert Schildt "C++: The Complete Reference".
Результат своего непродолжительного изучения оформил в следующий класс, который позволяет грузить DLL или произвольный код в 32- и 64- разрядные процессы. Код, правда, написан не в соответствии с модным стандартом C++0x, и в нем не используется такая мощная вещь как шаблоны (хотя сомневаюсь, что они тут серьезно пригодились бы), но, тем не менее, базовые возможности языка я постарался задействовать.
Использовать класс довольно просто, например:
#include "injector.hpp"
int main()
{
injector a;
a.set_blocking(false);
try
{
a.inject(L"CFF Explorer.exe", L"x64.dll");
}
catch(const injector_exception& e)
{
e.show_error();
}
return 0;
}
Доступные методы:
//Инжект DLL в процесс с указанным именем
void inject(const std::wstring& proc_name, const std::wstring& dll_name);
//Инжект кода в процесс с указанным именем
void inject(const std::wstring& proc_name, const BYTE * code, unsigned long int code_size);
//Инжект DLL в процесс с указанным PID
void inject(unsigned int pid, const std::wstring& dll_name);
//Инжект кода в процесс с указанным PID
void inject(unsigned int pid, const BYTE * code, unsigned long int code_size);
//Снятие/Установка блокирующего режима (вызывать ли WaitForSingleObject и VirtualFreeEx после создания удаленного потока или нет)
void set_blocking(bool active);
Для работы с 64-разрядными процессами достаточно просто скомпилировать класс под соответствующую архитектуру.
Скачать: cpp-injector-class
Комментариев: 15
Среда, 26. Январь 2011
Раздел: C/C++, Windows, автор: Kaimi
Недавно у меня возникла необходимость писать на русском в нативном приложении, но, как оказалось, добиться этого не так-то просто.
Для того, чтобы получить возможность вывода русских букв, нужно разобраться, где и в каком формате хранятся глифы символов, которые отображаются на экране. Если подробнее рассмотреть функцию winx_printf (в своем проекте я использовал ZenWINX и NDK для упрощения разработки приложения), то мы увидим, что она в свою очередь вызывает winx_print, далее вызывается NtDisplayString, которая преобразует входящую строку с помощью RtlUnicodeStringToOemString, далее идет вызов функции InbvDisplayString, которая обращается к VGA Boot Driver (bootvid.dll).
Читать дальше »
Комментариев: 8
Суббота, 11. Сентябрь 2010
Раздел: Assembler, Windows, автор: dx
Давно не писал новых статей по MASM, решил наконец-то продолжить цикл. Думаю, вы уже прочитали первые две статьи (эту и эту тоже) и разобрали их содержание. Пришло время поговорить о других возможностях MASM32. Возьмите исходный код из самой первой статьи, из той, в которой мы делали самое первое GUI-приложение, будем его использовать как базу для нового проекта.
В общем, сначала идея была проста... [click]
Сегодня мы с вами напишем простой сканер портов. Разумеется, с GUI. Я задизайнил его форму примерно так:

Но потом...
Короче говоря, сканер портов получился не совсем простой, но я уверен, вы разберетесь.

Программка будет сканировать все порты из указанного диапазона на заданном ip-адресе и выводить информацию в лог. Многопоточность делать не будем, но один поток всё равно создадим, чтобы при сканировании форма не висела.
Читать дальше »
Комментариев: 18