00D3FA0A C3 RETN ; (39) 跳到这里后,[F8]返回。
.
.
.
00D3E8A8 C3 RETN ; (40) 返回到这里后,[F8]返回。
.
.
.
00D3FA1D E8 1EF4FFFF CALL 00D3EE40 ; (41) 返回到这里,[F8]单步向下走。
00D3FA22 A1 F02BD400 MOV EAX,DWORD PTR DS:[D42BF0]
00D3FA27 8B00 MOV EAX,DWORD PTR DS:[EAX]
00D3FA29 8B70 1C MOV ESI,DWORD PTR DS:[EAX+1C]
00D3FA2C A1 F02BD400 MOV EAX,DWORD PTR DS:[D42BF0]
00D3FA31 8B00 MOV EAX,DWORD PTR DS:[EAX]
00D3FA33 8B38 MOV EDI,DWORD PTR DS:[EAX]
00D3FA35 A1 F02BD400 MOV EAX,DWORD PTR DS:[D42BF0]
00D3FA3A 8B00 MOV EAX,DWORD PTR DS:[EAX]
00D3FA3C 8D58 18 LEA EBX,DWORD PTR DS:[EAX+18]
00D3FA3F 833B 00 CMP DWORD PTR DS:[EBX],0
00D3FA42 75 20 JNZ SHORT 00D3FA64
00D3FA44 83C6 20 ADD ESI,20
00D3FA47 A1 682AD400 MOV EAX,DWORD PTR DS:[D42A68]
00D3FA4C 80B8 2D010000 0>CMP BYTE PTR DS:[EAX+12D],0
00D3FA53 75 0F JNZ SHORT 00D3FA64
00D3FA55 B8 1F000000 MOV EAX,1F
00D3FA5A E8 652EFCFF CALL 00D028C4
00D3FA5F C1E0 02 SHL EAX,2
00D3FA62 2BF0 SUB ESI,EAX
00D3FA64 E8 33EBFFFF CALL 00D3E59C
00D3FA69 833B 00 CMP DWORD PTR DS:[EBX],0
00D3FA6C 74 05 JE SHORT 00D3FA73
00D3FA6E A3 8CB6D400 MOV DWORD PTR DS:[D4B68C],EAX
00D3FA73 8B13 MOV EDX,DWORD PTR DS:[EBX]
00D3FA75 891424 MOV DWORD PTR SS:[ESP],EDX
00D3FA78 897424 08 MOV DWORD PTR SS:[ESP+8],ESI
00D3FA7C 894424 0C MOV DWORD PTR SS:[ESP+C],EAX
00D3FA80 A1 9C2BD400 MOV EAX,DWORD PTR DS:[D42B9C]
00D3FA85 C600 E1 MOV BYTE PTR DS:[EAX],0E1
00D3FA88 A1 58B6D400 MOV EAX,DWORD PTR DS:[D4B658]
00D3FA8D E8 EE5DFFFF CALL 00D35880
00D3FA92 A1 88B6D400 MOV EAX,DWORD PTR DS:[D4B688]
00D3FA97 894424 04 MOV DWORD PTR SS:[ESP+4],EAX
00D3FA9B 897C24 10 MOV DWORD PTR SS:[ESP+10],EDI
00D3FA9F A1 242BD400 MOV EAX,DWORD PTR DS:[D42B24]
00D3FAA4 8B00 MOV EAX,DWORD PTR DS:[EAX]
00D3FAA6 E8 6931FCFF CALL 00D02C14
00D3FAAB A1 58B6D400 MOV EAX,DWORD PTR DS:[D4B658]
00D3FAB0 E8 5F31FCFF CALL 00D02C14
00D3FAB5 A1 9C2BD400 MOV EAX,DWORD PTR DS:[D42B9C]
00D3FABA C600 E3 MOV BYTE PTR DS:[EAX],0E3
00D3FABD 8BD4 MOV EDX,ESP
00D3FABF A1 94B6D400 MOV EAX,DWORD PTR DS:[D4B694]
00D3FAC4 E8 23B9FFFF CALL 00D3B3EC
00D3FAC9 E8 8E3CFFFF CALL 00D3375C
00D3FACE E8 61EDFFFF CALL 00D3E834 ; (42) 这个CALL要[F7]单步步入。
00D3FAD3 83C4 24 ADD ESP,24
00D3FAD6 5F POP EDI
00D3FAD7 5E POP ESI
00D3FAD8 5B POP EBX
00D3FAD9 C3 RETN
.
.
.
; (43) 步入后来到地址“00D3E834”处。地址“00D3E834”处后面的代码(函数“00D3E834”内的代码)都是随机变化的。我们[F8]一直向下走,经过数次小的跳转后,会来到汇编指令“RETN”处,然后[F8]返回。
.
.
.
01EA0000 66:81CB 4DF7 OR BX,0F74D ; (43) 返回到这里,[F8]单步向下走。
01EA0005 E8 07000000 CALL 01EA0011 ; (44) 这个CALL要[F7]单步步入。
01EA000A 1350 49 ADC EDX,DWORD PTR DS:[EAX+49]
01EA000D 4E DEC ESI
01EA000E 6F OUTS DX,DWORD PTR ES:[EDI] ; I/O 命令
01EA000F 7C 05 JL SHORT 01EA0016
01EA0011 68 68B6F00A PUSH 0AF0B668 ; (45) 步入后来到这里。[F8]单步向下走。
01EA0016 E9 0C000000 JMP 01EA0027 ; (46) 跳。
.
.
.
01EA0027 58 POP EAX ; (47) 跳到这里后,[F8]单步向下走。
01EA0028 5F POP EDI
01EA0029 68 5710C331 PUSH 31C31057
01EA002E 0F89 14000000 JNS 01EA0048
01EA0034 E8 0E000000 CALL 01EA0047 ; (48) 这个CALL要[F7]单步步入。
01EA0039 AE SCAS BYTE PTR ES:[EDI]
01EA003A 4F DEC EDI
01EA003B DCE5 FSUBR ST(5),ST
01EA003D BA 6BC86186 MOV EDX,8661C86B
01EA0042 47 INC EDI
01EA0043 - 74 9D JE SHORT 01E9FFE2
01EA0045 12E3 ADC AH,BL
01EA0047 59 POP ECX ; (49) 步入后来到这里。[F8]单步向下走。
01EA0048 59 POP ECX
01EA0049 81C7 DA000000 ADD EDI,0DA
01EA004F 0F8F 10000000 JG 01EA0065 ; (50) 跳。
01EA0055 E9 0B000000 JMP 01EA0065
01EA005A 37 AAA
01EA005B A4 MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
01EA005C 0D C2D31009 OR EAX,910D3C2
01EA0061 0E PUSH CS
01EA0062 2F DAS
01EA0063 3C C5 CMP AL,0C5
01EA0065 BA 00000000 MOV EDX,0 ; (51) 跳到这里后,[F8]单步向下走。
01EA006A 66:B8 276B MOV AX,6B27
01EA006E 8B3417 MOV ESI,DWORD PTR DS:[EDI+EDX]
01EA0071 B4 96 MOV AH,96
01EA0073 81C6 9E9FAE11 ADD ESI,11AE9F9E
01EA0079 0F81 03000000 JNO 01EA0082
01EA007F 0FB7C2 MOVZX EAX,DX
01EA0082 81C6 7F4A304E ADD ESI,4E304A7F
01EA0088 52 PUSH EDX
01EA0089 0FB7C3 MOVZX EAX,BX
01EA008C 5B POP EBX
01EA008D 81EE 4C9A7C5E SUB ESI,5E7C9A4C
01EA0093 80CD 88 OR CH,88
01EA0096 56 PUSH ESI
01EA0097 B9 5D802A31 MOV ECX,312A805D
01EA009C 8F0417 POP DWORD PTR DS:[EDI+EDX]
01EA009F B4 C5 MOV AH,0C5
01EA00A1 66:BB 2AA5 MOV BX,0A52A
01EA00A5 83EA 04 SUB EDX,4
01EA00A8 66:B8 CD3A MOV AX,3ACD
01EA00AC 81FA D4FFFFFF CMP EDX,-2C
01EA00B2 ^ 0F85 B6FFFFFF JNZ 01EA006E ; (52) 这里是用来动态解密后文汇编代码的循环,可以不去重复跟。
01EA00B8 66:B9 EFF8 MOV CX,0F8EF ; (53) 直接[F4]执行到这里。
.
.
.
01EA00B8 66:B9 EFF8 MOV CX,0F8EF ; (54) 解密后的汇编代码如下,[F8]单步向下走。
01EA00BC 83DB 39 SBB EBX,39
01EA00BF BB 6A444700 MOV EBX,47446A
01EA00C4 5B POP EBX
01EA00C5 81F0 3AD8FFCF XOR EAX,CFFFD83A
01EA00CB 58 POP EAX
01EA00CC 8D80 91102CAB LEA EAX,DWORD PTR DS:[EAX+AB2C1091]
01EA00D2 03C3 ADD EAX,EBX
01EA00D4 5C POP ESP
01EA00D5 FFE0 JMP EAX ; (55) “ASProtect”加密壳结束处的跨段跳转。
01EA00D7 B2 66 MOV DL,66
01EA00D9 57 PUSH EDI
01EA00DA 3C 37 CMP AL,37
01EA00DC 82DE AA SBB DH,-56
01EA00DF 99 CDQ
01EA00E0 52 PUSH EDX
01EA00E1 1B88 790A5770 SBB ECX,DWORD PTR DS:[EAX+70570A79]
01EA00E7 49 DEC ECX
01EA00E8 AD LODS DWORD PTR DS:[ESI]
01EA00E9 2D 00000000 SUB EAX,0
01EA00EE 0000 ADD BYTE PTR DS:[EAX],AL
01EA00F0 0000 ADD BYTE PTR DS:[EAX],AL
01EA00F2 0000 ADD BYTE PTR DS:[EAX],AL
01EA00F4 0000 ADD BYTE PTR DS:[EAX],AL
.
.
.
10034050 60 PUSHAD ; (56) 这里也许是另一个新壳的入口,但不知道是什么壳。
10034051 FC CLD
10034052 0FB605 344C0310 MOVZX EAX,BYTE PTR DS:[10034C34]
10034059 85C0 TEST EAX,EAX
1003405B 75 31 JNZ SHORT virus.1003408E
1003405D B8 50400310 MOV EAX,virus.10034050
10034062 2B05 044C0310 SUB EAX,DWORD PTR DS:[10034C04]
10034068 A3 304C0310 MOV DWORD PTR DS:[10034C30],EAX
1003406D A1 004C0310 MOV EAX,DWORD PTR DS:[10034C00]
10034072 0305 304C0310 ADD EAX,DWORD PTR DS:[10034C30]
10034078 A3 384C0310 MOV DWORD PTR DS:[10034C38],EAX
1003407D E8 9A000000 CALL virus.1003411C ; (57) [F8]直接步过,里边是在解密或修复输入表。
10034082 A3 504C0310 MOV DWORD PTR DS:[10034C50],EAX
10034087 C605 344C0310 0>MOV BYTE PTR DS:[10034C34],1
1003408E 833D 504C0310 0>CMP DWORD PTR DS:[10034C50],0
10034095 75 07 JNZ SHORT virus.1003409E
10034097 61 POPAD
10034098 FF25 384C0310 JMP DWORD PTR DS:[10034C38] ; (58) 这里是该壳结束处的跨段跳转。
.
.
.
10001DC1 8B DB 8B ; (59) 跳出壳后,这里就是病毒样本的真实入口地址了。
10001DC2 EC DB EC
10001DC3 83 DB 83
10001DC4 C4 DB C4
10001DC5 F0 DB F0
10001DC6 53 DB 53 ; CHAR 'S'
10001DC7 B8 DB B8
10001DC8 88 DB 88
10001DC9 1D DB 1D
10001DCA 00 DB 00
10001DCB 10 DB 10
10001DCC E8 DB E8
10001DCD C7 DB C7
10001DCE FA DB FA
10001DCF FF DB FF
10001DD0 FF DB FF
10001DD1 6A DB 6A ; CHAR 'j'
10001DD2 0A DB 0A
10001DD3 68 DB 68 ; CHAR 'h'
10001DD4 20 DB 20 ; CHAR ' '
.
.
.
10001DC1 8BEC MOV EBP,ESP ; (60) 把病毒样本入口处的代码进行重新分析,分析后的反汇编代码如下。使用“PEID”中的“核心扫描”功能,显示病毒样本采用的开发编译器名称为“Borland Delphi 6.0 - 7.0”。
10001DC3 83C4 F0 ADD ESP,-10
10001DC6 53 PUSH EBX
10001DC7 B8 881D0010 MOV EAX,virus.10001D88
10001DCC E8 C7FAFFFF CALL virus.10001898
10001DD1 6A 0A PUSH 0A
10001DD3 68 201E0010 PUSH virus.10001E20 ; ASCII "HEART"
10001DD8 A1 14310010 MOV EAX,DWORD PTR DS:[10003114]
10001DDD 50 PUSH EAX
10001DDE E8 71FBFFFF CALL virus.10001954 ; JMP 到 kernel32.FindResourceA
10001DE3 8BD8 MOV EBX,EAX
10001DE5 85DB TEST EBX,EBX
10001DE7 74 2F JE SHORT virus.10001E18
10001DE9 53 PUSH EBX
10001DEA A1 14310010 MOV EAX,DWORD PTR DS:[10003114]
10001DEF 50 PUSH EAX
10001DF0 E8 97FBFFFF CALL virus.1000198C ; JMP 到 kernel32.SizeofResource
10001DF5 85C0 TEST EAX,EAX
10001DF7 74 1F JE SHORT virus.10001E18
10001DF9 53 PUSH EBX
10001DFA A1 14310010 MOV EAX,DWORD PTR DS:[10003114]
10001DFF 50 PUSH EAX
10001E00 E8 5FFBFFFF CALL virus.10001964 ; JMP 到 kernel32.LoadResource
; (61) 脱壳后,使用“ImportREC”工具来修复病毒样本的输入表,简单修复后则可以正常运行。
---------------------------------------------------------------------------------------------