Print This Post Windows — автоматизация задач с помощью скриптов. Интересные возможности WSH

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

Пожалуй, многие знают, что Windows начиная с версии 98 имеет по умолчанию в своем составе Windows Script Host (WSH), который позволяет исполнять скрипты на языках VBScript и JScript, но далеко не каждый хотя бы раз пользовался этой возможностью. В этой статье я приведу примеры полезных сниппетов и скриптов для WSH и попробую убедить вас в том, что вещь это действительно стоящая. Я также расскажу об очень занимательных и полезных возможностях WSH, о которых практически никто не знает, и информацию о которых в интернете найти весьма непросто.

Читать дальше »

Print This Post Класс-инжектор на C++

Среда, 13. Июль 2011
Раздел: C/C++, автор:

Давеча наелся всяких плацебо"витаминчиков" и захотелось странного, а именно - выучить 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

Print This Post Пишем на русском в Native Mode

Среда, 26. Январь 2011
Раздел: C/C++, Windows, автор:

Недавно у меня возникла необходимость писать на русском в нативном приложении, но, как оказалось, добиться этого не так-то просто.
Для того, чтобы получить возможность вывода русских букв, нужно разобраться, где и в каком формате хранятся глифы символов, которые отображаются на экране. Если подробнее рассмотреть функцию winx_printf (в своем проекте я использовал ZenWINX и NDK для упрощения разработки приложения), то мы увидим, что она в свою очередь вызывает winx_print, далее вызывается NtDisplayString, которая преобразует входящую строку с помощью RtlUnicodeStringToOemString, далее идет вызов функции InbvDisplayString, которая обращается к VGA Boot Driver (bootvid.dll).
Читать дальше »

Print This Post MASM32: Часть 3 — Брутальная бессердечность

Суббота, 11. Сентябрь 2010
Раздел: Assembler, Windows, автор:

Давно не писал новых статей по MASM, решил наконец-то продолжить цикл. Думаю, вы уже прочитали первые две статьи (эту и эту тоже) и разобрали их содержание. Пришло время поговорить о других возможностях MASM32. Возьмите исходный код из самой первой статьи, из той, в которой мы делали самое первое GUI-приложение, будем его использовать как базу для нового проекта.


В общем, сначала идея была проста... [click]

Но потом...


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