后门病毒的前缀是:Backdoor。该类病毒的特性是通过网络传播,给系统开后门,给用户电脑带来安全隐患。2004年年初,IRC后门病毒开始在全球网络大规模出现。一方面有潜在的泄漏本地信息的危险,另一方面病毒出现在局域网中使网络阻塞,影响正常工作,从而造成损失。即使管理员通过改变所有密码之类的方法来提高安全性,仍然能再次侵入,使再次侵入被发现的可能性减至最低。
大多数后门设法躲过日志,大多数情况下即使入侵者正在使用系统也无法显示他已在线。摘录于百度百科
此次病毒多次使用隐藏技术,反复转移文件,以及使用Hook技术对抗分析。但是美中不足的是,释放样本的时候没有加密资源,直接获得了payload。
Gh0st Update
,如果不是立即退出进程Gh0st Update
,首先判断添加ACE到指定的ACL,目的用于控制访问数据流量。SYSTEMCurrentControlSetServicesnetsvcs_0x0
的项InstallModule的内容。接下来就开启服务 HMODULE hModule=NULL;
const char ServiceName[]="ServiceName2";
const char *ServiceName3=ServiceName;
typedef int(*Fun)(int, const char**);
hModule = LoadLibrary("netsvcs_0x0ex.dll");
if(hModule==NULL)
printf("Load Dll Fail");
Fun ServiceMain=(Fun)GetProcAddress(hModule,"ServiceMain");
ServiceMain(1,&ServiceName3);
getchar();
return 0;
rqaxva61p72uvaenqaevp6ef
经过Base64以及普通加密运算得到Ipaddress192.168.1.88:8088
192.168.1.88:8088
进行链接,然后利用socket进行信息传输技术是招式,编程是内功,所以以后的分析我尽可能总结点编程的东西,而不单单只是分析。这样才能更好的帮助我们理解分析。
WinSock 编程的第一步就是加载 ws2_32.dll,然后调用 WSAStartup() 函数进行初始化,并指明要使用的版本号。
接下来就是创建套接字的过程,使用socket()函数创建套接字。函数原型如下:int socket( int af, int type, int protocol)
。在windows创建套接字SOCKET sock = socket(AF_INET, SOCK_STREAM, 0); //创建TCP套接字
或者SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0); //创建UDP套接字
int connect(SOCKET sock, const struct sockaddr *serv_addr, int addrlen); //Windows
struct sockaddr_in{
sa_family_t sin_family; //地址族(Address Family),也就是地址类型
uint16_t sin_port; //16位的端口号
struct in_addr sin_addr; //32位IP地址
char sin_zero[8]; //不使用,一般用0填充
};
struct in_addr{
in_addr_t s_addr; //32位的IP地址
};
然后是发送和接收数据,在windows下,使用send发送数据,原型如下:它的原型为:int send(SOCKET sock, const char *buf, int len, int flags);
以及使用recv函数接收数据int recv(SOCKET sock, char *buf, int len, int flags);
要注意客户端和服务端是相对的,也就是说客服端不单单只是发送数据也存在接收数据的函数。
参考资料:http://c.biancheng.net/cpp/html/3038.html
所谓虚函数,就是在某基类中声明为virtual,并在一个或多个派生类中被重新定义的成员函数。用于实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数。也就是说,在编译的时候并不知道会调用那个函数,确定函数的真实调用过程是动态的。
如下代码,运行结果是fn in A
.为什么会产生这样的结果呢,因为A类是基类,B类是派生类。首先创建了A类,当调用fn()这个常规成员函数的时候,直接调用即可。但是调用v_fn的时候,由于v_fn是一个虚函数。会事先判断B类这个派生类的v_fn是否可用,可用的话直接调用B类的v_fn。
virtual fn in B
class A {
public:
void fn() { printf("fn in An"); }
virtual void v_fn() { printf("virtual fn in An"); }
};
class B : public A {
public:
void fn() { printf("fn in Bn"); }
virtual void v_fn() { printf("virtual fn in Bn"); }
};
int main() {
A *a = new B();
a->fn();
a->v_fn();
return 0;
}
如图,虚函数不是一开始就存在的,他是依靠虚函数表指引调用虚函数,每个类如果虚函数大于1都会构建一个虚函数表。事先会使用一个构造函数去动态指向将要调用的虚函数,返回值为函数指针,放入eax中,后期call eax即可。