前言

后门病毒的前缀是:Backdoor。该类病毒的特性是通过网络传播,给系统开后门,给用户电脑带来安全隐患。2004年年初,IRC后门病毒开始在全球网络大规模出现。一方面有潜在的泄漏本地信息的危险,另一方面病毒出现在局域网中使网络阻塞,影响正常工作,从而造成损失。即使管理员通过改变所有密码之类的方法来提高安全性,仍然能再次侵入,使再次侵入被发现的可能性减至最低。

大多数后门设法躲过日志,大多数情况下即使入侵者正在使用系统也无法显示他已在线。摘录于百度百科

此次病毒多次使用隐藏技术,反复转移文件,以及使用Hook技术对抗分析。但是美中不足的是,释放样本的时候没有加密资源,直接获得了payload。

 

一:目录

 

二:IoC

2.1:样本1

2.2:样本2

 

三:行为分析

四:样本分析

4.1 样本1

五:技术总结

技术是招式,编程是内功,所以以后的分析我尽可能总结点编程的东西,而不单单只是分析。这样才能更好的帮助我们理解分析。

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套接字

参考资料:http://c.biancheng.net/cpp/html/3038.html

C++虚函数分析

所谓虚函数,就是在某基类中声明为virtual,并在一个或多个派生类中被重新定义的成员函数。用于实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数。也就是说,在编译的时候并不知道会调用那个函数,确定函数的真实调用过程是动态的。
如下代码,运行结果是fn in A
virtual fn in B
.为什么会产生这样的结果呢,因为A类是基类,B类是派生类。首先创建了A类,当调用fn()这个常规成员函数的时候,直接调用即可。但是调用v_fn的时候,由于v_fn是一个虚函数。会事先判断B类这个派生类的v_fn是否可用,可用的话直接调用B类的v_fn。

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即可。

源链接

Hacking more

...