木马是什么?
木马(网络程序) = 客户端程序(控制端) + 服务端(被控端)
服务端程序开启远程后门
客户端使用Telnet进行远程控制
服务端程序需要在每次电脑开机时运行,这就需要在注册表中添加开机启动。
注册表:
木马的自启动,在Windows启动时,自动加载。
注册表编辑器 : RegEdit (一个有关Windows的巨大的数据库)
有关注册表关于开机启动的键值可以自行百度。(除了最基础的3种,其实expleror.exe这个进程所在的键值也是病毒木马经常用来实现自启动的位置)
接下来是Windows关于注册表读写的方法
注册表内部结构:
Key -> subkey -> value -> 名称,类型,数据
读写函数:
RegCreateKey() | RegCreateKeyEx()
RegOpenKey() | RegOpenKeyEx()
RegQueryValue() | RegQueryValueEx()
RegDeleteKey() | RegDeleteKeyEx()
RegCloseKey() |
(分为新旧两种)
读取实例 读取CPU信息 :
1 #include<stdio.h> 2 #include<windows.h> 3 #include<iostream> 4 #include <tchar.h> 5 using namespace std ; 6 7 int main(){ 8 HKEY hkey ; 9 TCHAR p[64] ; 10 long ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\DESCRIPTION\System\CentralProcessor\0"),0,KEY_QUERY_VALUE,&hkey) ; 11 if(ret==ERROR_SUCCESS){ 12 // 打开成功 13 cout << "Open !" << endl ; 14 DWORD size = sizeof(p) ; 15 ret = RegQueryValueEx(hkey,_T("ProcessorNameString"),NULL,NULL,(LPBYTE)p,&size); 16 if(ret==ERROR_SUCCESS){ 17 // 读取成功 18 cout << "Read !" << endl ; 19 cout << p << endl; 20 }else { 21 cout << "Read error !" << endl ; 22 } 23 }else { 24 cout << "Open error !" << endl ; 25 } 26 return 0 ; 27 }
运行结果:
写入实例 :
接上CPU信息读取方法,在同一 subkey 下写入键值 hello : helloRegedit
代码如下:
1 #include<stdio.h> 2 #include<windows.h> 3 #include<iostream> 4 #include <tchar.h> 5 using namespace std ; 6 7 int main(){ 8 HKEY hkey ; 9 TCHAR p[64] ; 10 long ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\DESCRIPTION\System\CentralProcessor\0"),0,KEY_QUERY_VALUE,&hkey) ; 11 if(ret==ERROR_SUCCESS){ 12 // 打开成功 13 cout << "Open !" << endl ; 14 DWORD size = sizeof(p) ; 15 ret = RegQueryValueEx(hkey,_T("ProcessorNameString"),NULL,NULL,(LPBYTE)p,&size); 16 if(ret==ERROR_SUCCESS){ 17 // 读取成功 18 cout << "Read !" << endl ; 19 cout << p << endl; 20 ret = RegCreateKey(HKEY_LOCAL_MACHINE,_T("HARDWARE\DESCRIPTION\System\CentralProcessor\0"),&hkey); 21 if(ret==ERROR_SUCCESS){ 22 ret = RegSetValueEx(hkey,_T("hello"),0,REG_SZ,(const BYTE*)("helloRegedit"),12); 23 if(ret==ERROR_SUCCESS){ 24 // 写入成功 25 cout << "Write Ok !" 26 }else { 27 // 写入失败 28 cout << "Write filed !" 29 } 30 } 31 }else { 32 cout << "Read error !" << endl ; 33 } 34 }else { 35 cout << "Open error !" << endl ; 36 } 37 return 0 ; 38 }
运行结果:
可以发现已经写入了注册表中,利用注册表的读写,可以使木马的自启动,隐藏用户等操作很容易实现