; ; +-------------------------------------------------------------------------+ ; | 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 : 1FAD8069B972EC97BA1C67ADAC74C758 ; File Name : u:\work\1fad8069b972ec97ba1c67adac74c758_unpacked.exe ; Format : Portable executable for 80386 (PE) ; Imagebase : 400000 ; Section 1. (virtual address 00001000) ; Virtual size : 0000648A ( 25738.) ; Section size in file : 00006600 ( 26112.) ; 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 ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_401000(HWND hWnd,UINT hDC,WPARAM wParam,LPARAM ho) sub_401000 proc near ; DATA XREF: sub_405A5A+12Bo Paint = tagPAINTSTRUCT ptr -5Ch rc = tagRECT ptr -1Ch plbrush = LOGBRUSH ptr -0Ch hWnd = dword ptr 8 hDC = dword ptr 0Ch wParam = dword ptr 10h ho = dword ptr 14h push ebp mov ebp, esp sub esp, 5Ch cmp [ebp+hDC], 0Fh jz short loc_401037 cmp [ebp+hDC], 46h mov eax, [ebp+ho] jnz short loc_401022 or dword ptr [eax+18h], 10h mov ecx, dword_4263E0 mov [eax+4], ecx loc_401022: ; CODE XREF: sub_401000+13j push eax ; lParam push [ebp+wParam] ; wParam push [ebp+hDC] ; Msg push [ebp+hWnd] ; hWnd call ds:DefWindowProcA ; DefWindowProcA jmp locret_401179 ; --------------------------------------------------------------------------- loc_401037: ; CODE XREF: sub_401000+Aj push ebx push esi mov esi, dword_4263E8 push edi lea eax, [ebp+Paint] push eax ; lpPaint push [ebp+hWnd] ; hWnd call ds:BeginPaint ; BeginPaint and [ebp+plbrush.lbStyle], 0 mov [ebp+hDC], eax lea eax, [ebp+rc] push eax ; lpRect push [ebp+hWnd] ; hWnd call ds:GetClientRect ; GetClientRect mov edi, [ebp+rc.bottom] and [ebp+rc.bottom], 0 mov ebx, ds:DeleteObject jmp loc_4010F3 ; --------------------------------------------------------------------------- loc_401073: ; CODE XREF: sub_401000+F6j movzx eax, byte ptr [esi+52h] movzx edx, byte ptr [esi+56h] imul edx, [ebp+rc.top] mov ecx, edi sub ecx, [ebp+rc.top] imul eax, ecx add eax, edx cdq idiv edi xor edx, edx mov [ebp+wParam], ecx mov dh, al movzx eax, byte ptr [esi+51h] imul eax, ecx movzx ecx, byte ptr [esi+55h] imul ecx, [ebp+rc.top] add eax, ecx mov ecx, edx cdq idiv edi movzx edx, byte ptr [esi+54h] imul edx, [ebp+rc.top] mov cl, al movzx eax, byte ptr [esi+50h] imul eax, [ebp+wParam] add eax, edx cdq idiv edi shl ecx, 8 movzx eax, al or ecx, eax lea eax, [ebp+plbrush] push eax ; plbrush mov [ebp+plbrush.lbColor], ecx call ds:CreateBrushIndirect ; CreateBrushIndirect add [ebp+rc.bottom], 4 push eax ; hbr mov [ebp+ho], eax lea eax, [ebp+rc] push eax ; lprc push [ebp+hDC] ; hDC call ds:FillRect ; FillRect push [ebp+ho] ; ho call ebx ; DeleteObject add [ebp+rc.top], 4 loc_4010F3: ; CODE XREF: sub_401000+6Ej cmp [ebp+rc.top], edi jl loc_401073 cmp dword ptr [esi+58h], 0FFFFFFFFh jz short loc_401167 push dword ptr [esi+34h] ; lplf call ds:CreateFontIndirectA ; CreateFontIndirectA test eax, eax mov [ebp+ho], eax jz short loc_401167 mov edi, [ebp+hDC] push 1 ; mode push edi ; hdc mov [ebp+rc.left], 10h mov [ebp+rc.top], 8 call ds:SetBkMode ; SetBkMode push dword ptr [esi+58h] ; color push edi ; hdc call ds:SetTextColor ; SetTextColor push [ebp+ho] ; h mov esi, ds:SelectObject push edi ; hdc call esi ; SelectObject push 820h ; format mov [ebp+hDC], eax lea eax, [ebp+rc] push eax ; lprc push 0FFFFFFFFh ; cchText push offset Caption ; lpchText push edi ; hdc call ds:DrawTextA ; DrawTextA push [ebp+hDC] ; h push edi ; hdc call esi ; SelectObject push [ebp+ho] ; ho call ebx ; DeleteObject loc_401167: ; CODE XREF: sub_401000+100j ; sub_401000+110j lea eax, [ebp+Paint] push eax ; lpPaint push [ebp+hWnd] ; hWnd call ds:EndPaint ; EndPaint pop edi pop esi xor eax, eax pop ebx locret_401179: ; CODE XREF: sub_401000+32j leave retn 10h sub_401000 endp ; =============== S U B R O U T I N E ======================================= sub_40117D proc near ; CODE XREF: sub_401610+1B1Dp ; sub_404A94+33Dp arg_0 = dword ptr 4 mov ecx, [esp+arg_0] mov eax, dword_426408 mov edx, ecx imul edx, 418h mov edx, [edx+eax+8] test dl, 2 jz short locret_4011EC push esi push edi lea esi, [ecx+1] xor edi, edi cmp esi, dword_42640C jnb short loc_4011EA mov ecx, esi imul ecx, 418h lea eax, [ecx+eax+8] push ebx loc_4011B3: ; CODE XREF: sub_40117D+6Aj mov ecx, [eax] test cl, 2 jz short loc_4011BD inc edi jmp short loc_4011DB ; --------------------------------------------------------------------------- loc_4011BD: ; CODE XREF: sub_40117D+3Bj test cl, 4 jz short loc_4011CB mov ecx, edi dec edi test ecx, ecx jz short loc_4011E9 jmp short loc_4011DB ; --------------------------------------------------------------------------- loc_4011CB: ; CODE XREF: sub_40117D+43j test cl, 10h jnz short loc_4011DB mov ebx, ecx xor ebx, edx and ebx, 1 xor ebx, ecx mov [eax], ebx loc_4011DB: ; CODE XREF: sub_40117D+3Ej ; sub_40117D+4Cj ... inc esi add eax, 418h cmp esi, dword_42640C jb short loc_4011B3 loc_4011E9: ; CODE XREF: sub_40117D+4Aj pop ebx loc_4011EA: ; CODE XREF: sub_40117D+27j pop edi pop esi locret_4011EC: ; CODE XREF: sub_40117D+18j retn 4 sub_40117D endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_4011EF proc near ; CODE XREF: sub_4011EF+57p ; sub_40129E+4p 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 push ecx push ecx mov edx, [ebp+arg_0] push ebx push esi mov esi, edx imul esi, 418h push edi mov edi, dword_426408 mov eax, [esi+edi+8] xor ecx, ecx test al, 2 mov [ebp+var_4], ecx mov [ebp+var_8], ecx jz short loc_401225 cmp [ebp+arg_4], ecx jnz short loc_401225 and eax, 0FFFFFFBEh mov [esi+edi+8], eax inc edx loc_401225: ; CODE XREF: sub_4011EF+27j ; sub_4011EF+2Cj cmp edx, dword_42640C jnb short loc_401271 loc_40122D: ; CODE XREF: sub_4011EF+80j mov eax, edx imul eax, 418h lea ebx, [eax+edi+8] mov ecx, [ebx] test cl, 2 lea eax, [edx+1] jz short loc_40124D push 0 push edx call sub_4011EF mov ecx, [ebx] loc_40124D: ; CODE XREF: sub_4011EF+52j test cl, 4 jnz short loc_40127A test cl, 40h jz short loc_40125A inc [ebp+var_4] loc_40125A: ; CODE XREF: sub_4011EF+66j test cl, 1 jz short loc_401264 inc [ebp+var_4] jmp short loc_401267 ; --------------------------------------------------------------------------- loc_401264: ; CODE XREF: sub_4011EF+6Ej inc [ebp+var_8] loc_401267: ; CODE XREF: sub_4011EF+73j cmp eax, dword_42640C mov edx, eax jb short loc_40122D loc_401271: ; CODE XREF: sub_4011EF+3Cj xor eax, eax loc_401273: ; CODE XREF: sub_4011EF+8Fj ; sub_4011EF+9Ej ... pop edi pop esi pop ebx leave retn 8 ; --------------------------------------------------------------------------- loc_40127A: ; CODE XREF: sub_4011EF+61j cmp [ebp+var_4], 0 jz short loc_401273 cmp [ebp+var_8], 0 lea ecx, [esi+edi+8] jz short loc_40128F or dword ptr [ecx], 40h jmp short loc_401273 ; --------------------------------------------------------------------------- loc_40128F: ; CODE XREF: sub_4011EF+99j mov edx, [ecx] and edx, 0FFFFFF7Fh or edx, 1 mov [ecx], edx jmp short loc_401273 sub_4011EF endp ; =============== S U B R O U T I N E ======================================= sub_40129E proc near ; CODE XREF: sub_401610+1B49p ; sub_404A94+478p ... push 1 push 0 call sub_4011EF retn sub_40129E endp ; =============== S U B R O U T I N E ======================================= sub_4012A8 proc near ; CODE XREF: sub_401610+1B44p ; sub_404A94+3F9p ... arg_0 = dword ptr 4 mov ecx, [esp+arg_0] mov eax, dword_426408 push esi xor esi, esi cmp ecx, 20h jnb short loc_4012EF cmp dword_42640C, esi jbe short loc_4012EF lea edx, [eax+8] push edi loc_4012C5: ; CODE XREF: sub_4012A8+44j mov eax, [edx] test al, 6 jnz short loc_4012DF xor edi, edi inc edi shl edi, cl test [edx-4], edi jz short loc_4012DA or eax, 1 jmp short loc_4012DD ; --------------------------------------------------------------------------- loc_4012DA: ; CODE XREF: sub_4012A8+2Bj and eax, 0FFFFFFFEh loc_4012DD: ; CODE XREF: sub_4012A8+30j mov [edx], eax loc_4012DF: ; CODE XREF: sub_4012A8+21j inc esi add edx, 418h cmp esi, dword_42640C jb short loc_4012C5 pop edi loc_4012EF: ; CODE XREF: sub_4012A8+Fj ; sub_4012A8+17j pop esi retn 4 sub_4012A8 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_4012F3 proc near ; CODE XREF: sub_401610+1B51p ; sub_404A94+494p var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp sub esp, 0Ch mov eax, dword_4263E8 and [ebp+var_4], 0 push ebx push esi add eax, 94h push edi mov edi, dword_42640C mov [ebp+var_8], eax loc_401313: ; CODE XREF: sub_4012F3+7Fj mov eax, [ebp+var_8] xor ebx, ebx cmp [eax], ebx jz short loc_401367 cmp ebx, edi jnb short loc_401365 mov esi, dword_426408 add esi, 8 loc_401329: ; CODE XREF: sub_4012F3+6Ej mov edx, [esi] test dl, 6 jnz short loc_401358 mov eax, [ebp+arg_0] test eax, eax jz short loc_40133D cmp dword ptr [eax+ebx*4], 0 jz short loc_401358 loc_40133D: ; CODE XREF: sub_4012F3+42j mov ecx, [ebp+var_4] xor eax, eax inc eax shl eax, cl mov ecx, [esi-4] and edx, 1 and ecx, eax mov eax, ecx mov ecx, [ebp+var_4] shl edx, cl cmp eax, edx jnz short loc_401363 loc_401358: ; CODE XREF: sub_4012F3+3Bj ; sub_4012F3+48j inc ebx add esi, 418h cmp ebx, edi jb short loc_401329 loc_401363: ; CODE XREF: sub_4012F3+63j cmp ebx, edi loc_401365: ; CODE XREF: sub_4012F3+2Bj jz short loc_401374 loc_401367: ; CODE XREF: sub_4012F3+27j inc [ebp+var_4] add [ebp+var_8], 4 cmp [ebp+var_4], 20h jb short loc_401313 loc_401374: ; CODE XREF: sub_4012F3:loc_401365j mov eax, [ebp+var_4] pop edi pop esi pop ebx leave retn 4 sub_4012F3 endp ; =============== S U B R O U T I N E ======================================= sub_40137E proc near ; CODE XREF: sub_403756+175p arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch cmp dword_40A084, 0 push esi jnz short loc_4013B5 xor ecx, ecx loc_40138A: ; CODE XREF: sub_40137E+35j push 8 mov eax, ecx pop esi loc_40138F: ; CODE XREF: sub_40137E+25j mov edx, eax and dl, 1 neg dl sbb edx, edx and edx, 0EDB88320h shr eax, 1 xor eax, edx dec esi jnz short loc_40138F mov dword_40A080[ecx*4], eax inc ecx cmp ecx, 100h jl short loc_40138A loc_4013B5: ; CODE XREF: sub_40137E+8j mov esi, [esp+4+arg_8] test esi, esi mov eax, [esp+4+arg_0] not eax jbe short loc_4013E1 mov ecx, [esp+4+arg_4] loc_4013C7: ; CODE XREF: sub_40137E+61j xor edx, edx mov dl, [ecx] xor edx, eax and edx, 0FFh shr eax, 8 xor eax, dword_40A080[edx*4] inc ecx dec esi jnz short loc_4013C7 loc_4013E1: ; CODE XREF: sub_40137E+43j not eax pop esi retn 0Ch sub_40137E endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_4013E7(int,HWND hWnd) sub_4013E7 proc near ; CODE XREF: sub_4014C9+10p ; sub_401610+E4p ... arg_0 = dword ptr 8 hWnd = dword ptr 0Ch push ebp mov ebp, esp push ebx push esi push edi mov edi, [ebp+arg_0] test edi, edi jl loc_4014B9 mov esi, [ebp+hWnd] mov ebx, 400h loc_401400: ; CODE XREF: sub_4013E7+CCj mov ecx, dword_426410 mov eax, edi shl eax, 5 add eax, ecx mov ecx, [eax] cmp ecx, 1 jz loc_4014B9 test dword_426444, ebx jz short loc_40142A cmp ecx, 14h jz short loc_40142A cmp ecx, 3Eh jnz short loc_40145D loc_40142A: ; CODE XREF: sub_4013E7+37j ; sub_4013E7+3Cj push eax ; FilePart call sub_401610 mov esi, eax cmp esi, 7FFFFFFFh jz loc_4014C2 test dword_426444, ebx jnz short loc_40145D test esi, esi jge short loc_40145F inc esi shl esi, 0Ah mov eax, offset dword_427000 sub eax, esi push eax call sub_405F74 mov esi, eax loc_40145D: ; CODE XREF: sub_4013E7+41j ; sub_4013E7+5Dj test esi, esi loc_40145F: ; CODE XREF: sub_4013E7+61j jz short loc_401472 test dword_426444, ebx jnz short loc_401472 dec esi mov eax, edi mov edi, esi sub esi, eax jmp short loc_401474 ; --------------------------------------------------------------------------- loc_401472: ; CODE XREF: sub_4013E7:loc_40145Fj ; sub_4013E7+80j inc esi inc edi loc_401474: ; CODE XREF: sub_4013E7+89j cmp [ebp+hWnd], 0 jz short loc_4014B1 mov eax, dword_425BC4 add nNumber, esi xor ecx, ecx test eax, eax setz cl push 0 ; lParam add ecx, eax push ecx ; nDenominator push 7530h ; nNumerator push nNumber ; nNumber call ds:MulDiv ; MulDiv push eax ; wParam push 402h ; Msg push [ebp+hWnd] ; hWnd call ds:SendMessageA ; SendMessageA loc_4014B1: ; CODE XREF: sub_4013E7+91j test edi, edi jge loc_401400 loc_4014B9: ; CODE XREF: sub_4013E7+Bj ; sub_4013E7+2Bj xor eax, eax loc_4014BB: ; CODE XREF: sub_4013E7+E0j pop edi pop esi pop ebx pop ebp retn 8 ; --------------------------------------------------------------------------- loc_4014C2: ; CODE XREF: sub_4013E7+51j mov eax, 7FFFFFFFh jmp short loc_4014BB sub_4013E7 endp ; =============== S U B R O U T I N E ======================================= sub_4014C9 proc near ; CODE XREF: start+485p sub_4041F2+44p ... arg_0 = dword ptr 4 mov eax, [esp+arg_0] mov ecx, dword_4263E8 push 0 ; hWnd push dword ptr [ecx+eax*4+6Ch] ; int call sub_4013E7 retn 4 sub_4014C9 endp ; =============== S U B R O U T I N E ======================================= sub_4014E1 proc near ; CODE XREF: sub_401610+26Bp ; sub_401610+35Ep ... arg_0 = dword ptr 4 push offset byte_40A888 ; lpString2 push [esp+4+arg_0] ; int call sub_40509F retn 4 sub_4014E1 endp ; =============== S U B R O U T I N E ======================================= sub_4014F2 proc near ; CODE XREF: sub_401610+13Fp ; sub_401610+183p ... mov eax, dword_40C0C4 push dword ptr [eax+ecx*4] ; lpString2 push 0 ; lpString1 call sub_4065B7 push eax call sub_405F74 retn sub_4014F2 endp ; =============== S U B R O U T I N E ======================================= sub_401508 proc near ; CODE XREF: sub_4015C7+2Dp ; sub_401610+79p ... test esi, esi mov eax, esi jge short loc_401510 neg eax loc_401510: ; CODE XREF: sub_401508+4j mov edx, dword_40C0C4 mov ecx, eax sar eax, 4 push edi and ecx, 0Fh push dword ptr [edx+ecx*4] ; lpString2 shl eax, 0Ah add eax, offset Text push eax ; lpString1 call sub_4065B7 test esi, esi mov edi, eax jge short loc_40153C push edi ; lpszCurrent call sub_406009 loc_40153C: ; CODE XREF: sub_401508+2Cj mov eax, edi pop edi retn sub_401508 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_401540(HKEY hKey,LPCSTR lpSubKey,int) sub_401540 proc near ; CODE XREF: sub_401540+42p ; sub_401610+137Cp SubKey = byte ptr -10Ch phkResult = dword ptr -4 hKey = dword ptr 8 lpSubKey = dword ptr 0Ch arg_8 = dword ptr 10h push ebp mov ebp, esp sub esp, 10Ch push ebx push esi push edi lea eax, [ebp+phkResult] push eax ; phkResult push 8 ; samDesired xor ebx, ebx push ebx ; ulOptions push [ebp+lpSubKey] ; lpSubKey push [ebp+hKey] ; hKey call ds:RegOpenKeyExA ; RegOpenKeyExA cmp eax, ebx jnz short loc_4015B2 mov esi, ds:RegEnumKeyA mov edi, 105h jmp short loc_40158B ; --------------------------------------------------------------------------- loc_401572: ; CODE XREF: sub_401540+5Bj cmp [ebp+arg_8], ebx jnz short loc_4015B9 push ebx ; int lea eax, [ebp+SubKey] push eax ; lpSubKey push [ebp+phkResult] ; hKey call sub_401540 test eax, eax jnz short loc_40159D loc_40158B: ; CODE XREF: sub_401540+30j push edi ; cchName lea eax, [ebp+SubKey] push eax ; lpName push ebx ; dwIndex push [ebp+phkResult] ; hKey call esi ; RegEnumKeyA test eax, eax jz short loc_401572 loc_40159D: ; CODE XREF: sub_401540+49j push [ebp+phkResult] ; hKey call ds:RegCloseKey ; RegCloseKey push [ebp+lpSubKey] ; lpSubKey push [ebp+hKey] ; hKey call ds:RegDeleteKeyA ; RegDeleteKeyA loc_4015B2: ; CODE XREF: sub_401540+23j ; sub_401540+85j pop edi pop esi pop ebx leave retn 0Ch ; --------------------------------------------------------------------------- loc_4015B9: ; CODE XREF: sub_401540+35j push [ebp+phkResult] ; hKey call ds:RegCloseKey ; RegCloseKey xor eax, eax inc eax jmp short loc_4015B2 sub_401540 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_4015C7(REGSAM phkResult) sub_4015C7 proc near ; CODE XREF: sub_401610+1305p ; sub_401610+14BCp ... phkResult = dword ptr 8 push ebp mov ebp, esp mov eax, dword_40C0C4 mov eax, [eax+4] test eax, eax push esi push edi jz short loc_4015DC mov edi, eax jmp short loc_4015E8 ; --------------------------------------------------------------------------- loc_4015DC: ; CODE XREF: sub_4015C7+Fj mov edi, dword_426464 add edi, 80000001h loc_4015E8: ; CODE XREF: sub_4015C7+13j lea eax, [ebp+phkResult] push eax ; phkResult push [ebp+phkResult] ; samDesired push 0 ; ulOptions push 22h pop esi call sub_401508 push eax ; lpSubKey push edi ; hKey call ds:RegOpenKeyExA ; RegOpenKeyExA neg eax sbb eax, eax not eax and eax, [ebp+phkResult] pop edi pop esi pop ebp retn 4 sub_4015C7 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_401610(LPCSTR FilePart) sub_401610 proc near ; CODE XREF: sub_4013E7+44p FindFileData = _WIN32_FIND_DATAA ptr -1A4h NumberOfBytesWritten= dword ptr -64h FileOp = MSG ptr -60h lpAppName = dword ptr -40h var_3C = dword ptr -3Ch arglist = dword ptr -38h dwFileAttributes= dword ptr -34h dwBytes = dword ptr -30h nShowCmd = FILETIME ptr -2Ch var_24 = dword ptr -24h Buffer = byte ptr -19h pBlock = dword ptr -18h puLen = dword ptr -14h lpString2 = dword ptr -10h hWndParent = dword ptr -0Ch dwResult = dword ptr -8 var_4 = dword ptr -4 FilePart = dword ptr 8 push ebp mov ebp, esp sub esp, 1A4h mov eax, dword_4263E0 and [ebp+hWndParent], 0 and [ebp+var_4], 0 push ebx push esi mov esi, [ebp+FilePart] push edi push 8 pop ecx lea edi, [ebp+var_3C] rep movsd mov edx, [ebp+dwFileAttributes] mov esi, [ebp+arglist] lea ecx, [ebp+arglist] mov dword_40C0C4, ecx mov ecx, [ebp+var_3C] mov [ebp+lpString2], eax mov ebx, edx shl ebx, 0Ah mov eax, esi shl eax, 0Ah add ecx, 0FFFFFFFEh add ebx, offset dword_427000 cmp ecx, 42h ; switch 67 cases lea edi, dword_427000[eax] ja loc_4031D2 ; default ; jumptable 0040166B cases 64,65 jmp ds:off_4031E4[ecx*4] ; switch jump loc_401672: ; DATA XREF: .text:off_4031E4o push esi ; jumptable 0040166B case 0 push offset aJumpD ; "Jump: %d" call sub_40614C mov eax, [ebp+arglist] pop ecx pop ecx jmp loc_4031DD ; --------------------------------------------------------------------------- loc_401687: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 1 call sub_401508 push eax ; arglist push offset aAbortingS ; "Aborting: \"%s\"" call sub_40614C pop ecx pop ecx push esi ; lpString2 push [ebp+arglist] ; int loc_40169F: ; CODE XREF: sub_401610+63Cj call sub_40509F jmp loc_402E4D ; --------------------------------------------------------------------------- loc_4016A9: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o inc dword_425BB4 ; jumptable 0040166B case 2 cmp [ebp+lpString2], 0 jz loc_402E4D push 0 ; nExitCode call ds:PostQuitMessage ; PostQuitMessage jmp loc_402E4D ; --------------------------------------------------------------------------- loc_4016C6: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o test esi, esi ; jumptable 0040166B case 3 jge short loc_4016DF mov ecx, offset dword_427000 sub ecx, eax sub ecx, 400h push ecx call sub_405F74 jmp short loc_4016E1 ; --------------------------------------------------------------------------- loc_4016DF: ; CODE XREF: sub_401610+B8j mov eax, esi loc_4016E1: ; CODE XREF: sub_401610+CDj lea esi, [eax-1] push esi ; arglist push offset aCallD ; "Call: %d" call sub_40614C pop ecx pop ecx push 0 ; hWnd push esi ; int call sub_4013E7 jmp loc_4031DD ; --------------------------------------------------------------------------- loc_4016FE: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o test edx, edx ; jumptable 0040166B case 4 jz short loc_40172B test dl, 8 jz short loc_401716 mov eax, dword_40A008 mov dword_40A040, eax jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_401716: ; CODE XREF: sub_401610+F5j mov eax, dword_40A040 mov dword_40A008, eax mov dword_40A040, edx jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_40172B: ; CODE XREF: sub_401610+F0j xor esi, esi call sub_401508 push eax ; arglist push offset aDetailprintS ; "detailprint: %s" call sub_40614C pop ecx pop ecx push esi ; lpString2 push [ebp+arglist] ; int call sub_40509F jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_40174D: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor ecx, ecx ; jumptable 0040166B case 5 call sub_4014F2 mov esi, eax push esi ; arglist push offset aSleepD ; "Sleep(%d)" call sub_40614C cmp esi, 1 pop ecx pop ecx jg short loc_40176B xor esi, esi inc esi loc_40176B: ; CODE XREF: sub_401610+156j push esi ; dwMilliseconds call ds:Sleep ; Sleep jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_401777: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push offset aBringtofront ; jumptable 0040166B case 6 call sub_40614C pop ecx push [ebp+lpString2] ; hWnd call ds:SetForegroundWindow ; SetForegroundWindow jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_401790: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor ecx, ecx ; jumptable 0040166B case 11 inc ecx call sub_4014F2 mov ecx, [ebp+arglist] mov dword_426460[ecx*4], eax jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_4017A7: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o mov ecx, [ebp+dwBytes] ; jumptable 0040166B case 12 mov edx, [ebp+nShowCmd.dwLowDateTime] xor eax, eax lea ecx, ds:426460h[ecx*4] cmp [ecx], eax setz al and [ecx], edx mov eax, [ebp+eax*4+arglist] jmp loc_4031DD ; --------------------------------------------------------------------------- loc_4017C6: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push dword_426460[edx*4] ; jumptable 0040166B case 13 loc_4017CD: ; CODE XREF: sub_401610+7AEj ; sub_401610+958j ... push edi jmp loc_403168 ; --------------------------------------------------------------------------- loc_4017D3: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o mov eax, hWnd ; jumptable 0040166B case 7 test eax, eax mov edi, ds:ShowWindow jz short loc_4017E9 push edx ; nCmdShow push eax ; hWnd call edi ; ShowWindow mov esi, [ebp+arglist] loc_4017E9: ; CODE XREF: sub_401610+1D0j mov eax, dword_425BAC test eax, eax jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push esi ; nCmdShow push eax ; hWnd call edi ; ShowWindow jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_4017FF: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 0FFFFFFF0h ; jumptable 0040166B case 8 pop esi call sub_401508 push [ebp+dwFileAttributes] mov esi, eax push esi ; arglist push offset aSetfileattribu ; "SetFileAttributes: \"%s\":%08X" call sub_40614C add esp, 0Ch push [ebp+dwFileAttributes] ; dwFileAttributes push esi ; lpFileName call ds:SetFileAttributesA ; SetFileAttributesA test eax, eax jnz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push offset aSetfileattri_0 ; "SetFileAttributes failed." mov [ebp+var_4], 1 call sub_40614C jmp loc_4030AB ; --------------------------------------------------------------------------- loc_401842: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 0FFFFFFF0h ; jumptable 0040166B case 9 pop esi call sub_401508 push [ebp+dwFileAttributes] mov esi, eax push esi ; arglist push offset aCreatedirector ; "CreateDirectory: \"%s\" (%d)" call sub_40614C add esp, 0Ch cmp byte ptr [esi], 0 jz short loc_401873 push esi ; lpFileName call sub_406301 test eax, eax jnz short loc_401873 mov [ebp+var_4], 1 loc_401873: ; CODE XREF: sub_401610+250j ; sub_401610+25Aj cmp [ebp+dwFileAttributes], 0 jz short loc_401897 push 0FFFFFFE6h call sub_4014E1 push esi ; lpString2 push offset CurrentDirectory ; lpString1 call lstrcpyA ; lstrcpyA push esi ; lpPathName call ds:SetCurrentDirectoryA ; SetCurrentDirectoryA jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_401897: ; CODE XREF: sub_401610+267j push 0FFFFFFF5h jmp loc_40277C ; --------------------------------------------------------------------------- loc_40189E: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 10 call sub_401508 mov esi, eax push esi ; lpFileName call sub_406168 test eax, eax jz short loc_4018C7 push [ebp+dwFileAttributes] push esi ; arglist push offset aIffileexistsFi ; "IfFileExists: file \"%s\" exists, jumping"... call sub_40614C add esp, 0Ch jmp loc_402124 ; --------------------------------------------------------------------------- loc_4018C7: ; CODE XREF: sub_401610+29Fj push [ebp+dwBytes] push esi ; arglist push offset aIffileexists_0 ; "IfFileExists: file \"%s\" does not exist,"... call sub_40614C add esp, 0Ch loc_4018D8: ; CODE XREF: sub_401610+857j ; sub_401610+8AFj ... mov eax, [ebp+dwBytes] jmp loc_4031DD ; --------------------------------------------------------------------------- loc_4018E0: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 0FFFFFFD0h ; jumptable 0040166B case 14 pop esi call sub_401508 push 0FFFFFFDFh pop esi mov [ebp+FilePart], eax call sub_401508 push [ebp+FilePart] ; lpString2 mov ebx, offset byte_40A888 push ebx ; lpString1 mov edi, eax call lstrcpyA ; lstrcpyA push edi ; lpString call lstrlenA ; lstrlenA push [ebp+FilePart] ; lpString mov esi, eax call lstrlenA ; lstrlenA add esi, eax cmp esi, 3FDh jge short loc_40192F mov esi, ds:lstrcatA push offset String2 ; "->" push ebx ; lpString1 call esi ; lstrcatA push edi ; lpString2 push ebx ; lpString1 call esi ; lstrcatA loc_40192F: ; CODE XREF: sub_401610+30Bj push ebx ; arglist push offset aRenameS ; "Rename: %s" call sub_40614C pop ecx pop ecx push edi ; lpNewFileName push [ebp+FilePart] ; lpExistingFileName call ds:MoveFileA ; MoveFileA test eax, eax jz short loc_401951 push 0FFFFFFE3h jmp loc_40277C ; --------------------------------------------------------------------------- loc_401951: ; CODE XREF: sub_401610+338j cmp [ebp+dwBytes], 0 jz short loc_40197E push [ebp+FilePart] ; lpFileName call sub_406168 test eax, eax jz short loc_40197E push edi ; hObject push [ebp+FilePart] ; int call sub_406357 push 0FFFFFFE4h call sub_4014E1 push ebx push offset aRenameOnReboot ; "Rename on reboot: %s" jmp loc_4030A5 ; --------------------------------------------------------------------------- loc_40197E: ; CODE XREF: sub_401610+345j ; sub_401610+351j push ebx mov [ebp+var_4], 1 push offset aRenameFailedS ; "Rename failed: %s" jmp loc_4030A5 ; --------------------------------------------------------------------------- loc_401990: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 15 call sub_401508 mov esi, eax lea eax, [ebp+FilePart] push eax ; lpFilePart push ebx ; lpBuffer mov edi, 400h push edi ; nBufferLength push esi ; lpFileName call ds:GetFullPathNameA ; GetFullPathNameA test eax, eax jz short loc_4019D3 mov eax, [ebp+FilePart] cmp eax, esi jbe short loc_4019DD cmp byte ptr [eax], 0 jz short loc_4019DD push esi ; lpFileName call sub_406168 test eax, eax jz short loc_4019D3 add eax, 2Ch push eax ; lpString2 push [ebp+FilePart] ; lpString1 call lstrcpyA ; lstrcpyA jmp short loc_4019DD ; --------------------------------------------------------------------------- loc_4019D3: ; CODE XREF: sub_401610+39Dj ; sub_401610+3B3j mov [ebp+var_4], 1 mov byte ptr [ebx], 0 loc_4019DD: ; CODE XREF: sub_401610+3A4j ; sub_401610+3A9j ... cmp [ebp+dwBytes], 0 jnz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push edi ; cchBuffer push ebx ; lpszShortPath push ebx ; lpszLongPath call ds:GetShortPathNameA ; GetShortPathNameA jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_4019F5: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o or esi, 0FFFFFFFFh ; jumptable 0040166B case 16 call sub_401508 lea ecx, [ebp+FilePart] push ecx ; lpFilePart push edi ; lpBuffer push 400h ; nBufferLength push 0 ; lpExtension push eax ; lpFileName push 0 ; lpPath call ds:SearchPathA ; SearchPathA test eax, eax loc_401A14: ; CODE XREF: sub_401610+12F8j jnz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 loc_401A1A: ; CODE XREF: sub_401610+172Aj ; sub_401610+1746j mov [ebp+var_4], 1 mov byte ptr [edi], 0 jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_401A29: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 0FFFFFFEFh ; jumptable 0040166B case 17 pop esi call sub_401508 push eax ; lpPathName push edi ; lpTempFileName call sub_405EA9 loc_401A38: ; CODE XREF: sub_401610+12B5j ; sub_401610+1615j test eax, eax loc_401A3A: ; CODE XREF: sub_401610+16D4j jnz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 loc_401A40: ; CODE XREF: sub_401610+75Aj ; sub_401610+9EDj ... mov [ebp+var_4], 1 jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_401A4C: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o and esi, 7 ; jumptable 0040166B case 18 test byte ptr dword_426444+1, 4 mov [ebp+FilePart], esi jnz short loc_401A73 push 31h pop esi call sub_401508 mov ebx, eax push ebx ; lpString mov [ebp+lpString2], ebx call lstrlenA ; lstrlenA jmp loc_401B10 ; --------------------------------------------------------------------------- loc_401A73: ; CODE XREF: sub_401610+449j push 36h pop esi call sub_401508 mov ebx, eax push ebx ; lpString mov [ebp+lpString2], ebx call lstrlenA ; lstrlenA push lpString ; lpString mov esi, eax call lstrlenA ; lstrlenA lea ecx, [eax+esi+1] mov eax, 105h cmp ecx, eax jb short loc_401AAF push lpString ; lpString call lstrlenA ; lstrlenA lea eax, [eax+esi+1] loc_401AAF: ; CODE XREF: sub_401610+48Ej push eax ; dwBytes call sub_405DBB mov edi, eax test edi, edi mov [ebp+hWndParent], edi jz loc_402E4D push lpString ; lpString2 push edi ; lpString1 call lstrcpyA ; lstrcpyA push ebx ; lpString2 push edi ; lpString1 call ds:lstrcatA ; lstrcatA push edi ; lpString call lstrlenA ; lstrlenA lea esi, [eax+edi-1] jmp short loc_401AF1 ; --------------------------------------------------------------------------- loc_401AE2: ; CODE XREF: sub_401610+4E3j cmp byte ptr [esi], 5Ch jz short loc_401AF5 push esi ; lpszCurrent push edi ; lpszStart call ds:CharPrevA ; CharPrevA mov esi, eax loc_401AF1: ; CODE XREF: sub_401610+4D0j cmp esi, edi ja short loc_401AE2 loc_401AF5: ; CODE XREF: sub_401610+4D5j push edi ; lpFileName mov byte ptr [esi], 0 call sub_406301 test eax, eax jz loc_402E4D push edi ; lpString2 push ebx ; lpString1 mov byte ptr [esi], 5Ch call lstrcpyA ; lstrcpyA loc_401B10: ; CODE XREF: sub_401610+45Ej mov eax, [ebp+arglist] sar eax, 3 push ebx and eax, 2 push eax push [ebp+FilePart] ; arglist push offset aFileOverwritef ; "File: overwriteflag=%d, allowskipfilesf"... call sub_40614C add esp, 10h push ebx call sub_405DE6 test eax, eax mov esi, offset Text push ebx ; lpString2 jz short loc_401B43 push esi ; lpString1 call lstrcpyA ; lstrcpyA jmp short loc_401B5B ; --------------------------------------------------------------------------- loc_401B43: ; CODE XREF: sub_401610+529j push offset CurrentDirectory ; lpString2 push esi ; lpString1 call lstrcpyA ; lstrcpyA push eax ; lpString1 call sub_4061A6 push eax ; lpString1 call ds:lstrcatA ; lstrcatA loc_401B5B: ; CODE XREF: sub_401610+531j push esi ; lpszCurrent call sub_406009 mov ebx, offset byte_40A888 mov edi, offset Data loc_401B6B: ; CODE XREF: sub_401610+626j cmp [ebp+FilePart], 3 jl short loc_401BA2 push esi ; lpFileName call sub_406168 xor ecx, ecx test eax, eax jz short loc_401B8D lea ecx, [ebp+nShowCmd] push ecx ; lpFileTime2 add eax, 14h push eax ; lpFileTime1 call ds:CompareFileTime ; CompareFileTime mov ecx, eax loc_401B8D: ; CODE XREF: sub_401610+56Bj mov eax, [ebp+FilePart] add eax, 0FFFFFFFDh or eax, 80000000h and eax, ecx neg eax sbb eax, eax inc eax mov [ebp+FilePart], eax loc_401BA2: ; CODE XREF: sub_401610+55Fj cmp [ebp+FilePart], 0 jnz short loc_401BBA push esi ; lpFileName call ds:GetFileAttributesA ; GetFileAttributesA and eax, 0FFFFFFFEh push eax ; dwFileAttributes push esi ; lpFileName call ds:SetFileAttributesA ; SetFileAttributesA loc_401BBA: ; CODE XREF: sub_401610+596j xor eax, eax cmp [ebp+FilePart], 1 setnz al inc eax push eax ; dwCreationDisposition push 40000000h ; dwDesiredAccess push esi ; lpFileName call sub_405E7A cmp eax, 0FFFFFFFFh mov [ebp+dwResult], eax jnz loc_401C93 cmp [ebp+FilePart], 0 jnz short loc_401C51 push esi ; arglist push offset aFileErrorCreat ; "File: error creating \"%s\"" call sub_40614C pop ecx pop ecx push offset dword_427000 ; lpString2 push edi ; lpString1 call lstrcpyA ; lstrcpyA push esi ; lpString2 push offset dword_427000 ; lpString1 call lstrcpyA ; lstrcpyA push [ebp+var_24] ; lpString2 push ebx ; lpString1 call sub_4065B7 push edi ; lpString2 push offset dword_427000 ; lpString1 call lstrcpyA ; lstrcpyA mov eax, [ebp+arglist] sar eax, 3 push eax ; int push ebx ; lpText call sub_405D79 sub eax, 4 jnz short loc_401C3B push offset aFileErrorUserR ; "File: error, user retry" call sub_40614C pop ecx jmp loc_401B6B ; --------------------------------------------------------------------------- loc_401C3B: ; CODE XREF: sub_401610+619j dec eax jz short loc_401C7D push offset aFileErrorUserA ; "File: error, user abort" call sub_40614C pop ecx push esi push 0FFFFFFFAh jmp loc_40169F ; --------------------------------------------------------------------------- loc_401C51: ; CODE XREF: sub_401610+5D0j push [ebp+lpString2] ; lpString2 push 0FFFFFFE2h ; int call sub_40509F cmp [ebp+FilePart], 2 jnz short loc_401C67 inc dword_426468 loc_401C67: ; CODE XREF: sub_401610+64Fj push [ebp+FilePart] push esi ; arglist push offset aFileSkippedSOv ; "File: skipped: \"%s\" (overwriteflag=%d)" call sub_40614C add esp, 0Ch jmp loc_4031C3 ; --------------------------------------------------------------------------- loc_401C7D: ; CODE XREF: sub_401610+62Cj push offset aFileErrorUserC ; "File: error, user cancel" call sub_40614C inc dword_426468 pop ecx jmp loc_4031DB ; --------------------------------------------------------------------------- loc_401C93: ; CODE XREF: sub_401610+5C6j push [ebp+lpString2] ; lpString2 push 0FFFFFFEAh ; int call sub_40509F inc dword_40A040 xor ebx, ebx push ebx ; NumberOfBytesWritten push ebx ; lpBuffer push [ebp+dwResult] ; hFile push [ebp+dwBytes] ; Buffer call sub_40362B dec dword_40A040 mov edi, eax push esi push edi ; arglist push offset aFileWroteDToS ; "File: wrote %d to \"%s\"" call sub_40614C add esp, 0Ch cmp [ebp+nShowCmd.dwLowDateTime], 0FFFFFFFFh jnz short loc_401CD5 cmp [ebp+nShowCmd.dwHighDateTime], 0FFFFFFFFh jz short loc_401CE4 loc_401CD5: ; CODE XREF: sub_401610+6BDj lea eax, [ebp+nShowCmd] push eax ; lpLastWriteTime push ebx ; lpLastAccessTime push eax ; lpCreationTime push [ebp+dwResult] ; hFile call ds:SetFileTime ; SetFileTime loc_401CE4: ; CODE XREF: sub_401610+6C3j push [ebp+dwResult] ; hObject call ds:CloseHandle ; CloseHandle cmp edi, ebx jge loc_4031C3 cmp edi, 0FFFFFFFEh jnz short loc_401D0E push 0FFFFFFE9h ; lpString2 push esi ; lpString1 call sub_4065B7 push [ebp+lpString2] ; lpString2 push esi ; lpString1 call ds:lstrcatA ; lstrcatA jmp short loc_401D16 ; --------------------------------------------------------------------------- loc_401D0E: ; CODE XREF: sub_401610+6E8j push 0FFFFFFEEh ; lpString2 push esi ; lpString1 call sub_4065B7 loc_401D16: ; CODE XREF: sub_401610+6FCj push esi ; arglist push offset aS ; "%s" call sub_40614C pop ecx pop ecx push 200010h ; int push esi ; lpText loc_401D29: ; CODE XREF: sub_401610+1220j call sub_405D79 jmp loc_402E4D ; --------------------------------------------------------------------------- loc_401D33: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 19 call sub_401508 mov esi, eax push esi push offset aDeleteS ; "Delete: \"%s\"" jmp short loc_401D9A ; --------------------------------------------------------------------------- loc_401D44: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 31h ; jumptable 0040166B case 20 pop esi call sub_401508 mov esi, eax push esi push [ebp+arglist] ; arglist push offset aMessageboxDS ; "MessageBox: %d,\"%s\"" call sub_40614C add esp, 0Ch push [ebp+arglist] ; int push esi ; lpText call sub_405D79 test eax, eax jz loc_401A40 cmp eax, [ebp+dwBytes] jz loc_401ECB cmp eax, [ebp+nShowCmd.dwHighDateTime] jnz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 mov eax, [ebp+var_24] jmp loc_4031DD ; --------------------------------------------------------------------------- loc_401D8A: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 0FFFFFFF0h ; jumptable 0040166B case 21 pop esi call sub_401508 mov esi, eax push esi ; arglist push offset aRmdirS ; "RMDir: \"%s\"" loc_401D9A: ; CODE XREF: sub_401610+732j call sub_40614C pop ecx pop ecx push [ebp+dwFileAttributes] ; int push esi ; lpString1 call sub_4067E6 jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_401DAF: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 22 inc esi call sub_401508 push eax ; lpString call lstrlenA ; lstrlenA loc_401DBD: ; CODE XREF: sub_401610+B34j ; sub_401610+C2Aj ... push eax jmp loc_4017CD ; --------------------------------------------------------------------------- loc_401DC3: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 2 ; jumptable 0040166B case 23 pop ecx call sub_4014F2 push 3 pop ecx mov [ebp+FilePart], eax call sub_4014F2 xor esi, esi inc esi mov ebx, eax call sub_401508 cmp [ebp+dwBytes], 0 mov esi, eax mov byte ptr [edi], 0 jz short loc_401DF5 cmp [ebp+FilePart], 0 jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 loc_401DF5: ; CODE XREF: sub_401610+7D9j push esi ; lpString call lstrlenA ; lstrlenA test ebx, ebx jge short loc_401E07 add ebx, eax js loc_4031D2 ; default ; jumptable 0040166B cases 64,65 loc_401E07: ; CODE XREF: sub_401610+7EDj cmp ebx, eax jle short loc_401E0D mov ebx, eax loc_401E0D: ; CODE XREF: sub_401610+7F9j add esi, ebx push esi ; lpString2 push edi ; lpString1 call lstrcpyA ; lstrcpyA mov esi, [ebp+FilePart] test esi, esi jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 jge short loc_401E34 push edi ; lpString call lstrlenA ; lstrlenA add esi, eax jns short loc_401E34 and [ebp+FilePart], 0 mov esi, [ebp+FilePart] loc_401E34: ; CODE XREF: sub_401610+811j ; sub_401610+81Bj cmp esi, 400h jge loc_4031D2 ; default ; jumptable 0040166B cases 64,65 mov byte ptr [esi+edi], 0 jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_401E49: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 20h ; jumptable 0040166B case 24 pop esi call sub_401508 push 31h pop esi mov edi, eax call sub_401508 push eax ; lpString2 push edi ; lpString1 call ds:lstrcmpiA ; lstrcmpiA test eax, eax jnz short loc_401ECB jmp loc_4018D8 ; --------------------------------------------------------------------------- loc_401E6C: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 25 inc esi call sub_401508 cmp [ebp+dwBytes], 0 push 400h ; nSize push edi ; lpBuffer push eax ; lpName jz short loc_401E92 call ds:GetEnvironmentVariableA ; GetEnvironmentVariableA test eax, eax jnz short loc_401E98 mov [ebp+var_4], esi mov [edi], al jmp short loc_401E98 ; --------------------------------------------------------------------------- loc_401E92: ; CODE XREF: sub_401610+86Fj call ds:ExpandEnvironmentStringsA ; ExpandEnvironmentStringsA loc_401E98: ; CODE XREF: sub_401610+879j ; sub_401610+880j mov byte ptr [edi+3FFh], 0 jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_401EA4: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor ecx, ecx ; jumptable 0040166B case 26 call sub_4014F2 xor ecx, ecx inc ecx mov esi, eax call sub_4014F2 cmp [ebp+var_24], 0 jnz short loc_401EC7 cmp esi, eax jl short loc_401ECB jle loc_4018D8 jmp short loc_401ED9 ; --------------------------------------------------------------------------- loc_401EC7: ; CODE XREF: sub_401610+8A9j cmp esi, eax jnb short loc_401ED3 loc_401ECB: ; CODE XREF: sub_401610+763j ; sub_401610+855j ... mov eax, [ebp+nShowCmd.dwLowDateTime] jmp loc_4031DD ; --------------------------------------------------------------------------- loc_401ED3: ; CODE XREF: sub_401610+8B9j jbe loc_4018D8 loc_401ED9: ; CODE XREF: sub_401610+8B5j mov eax, [ebp+nShowCmd.dwHighDateTime] jmp loc_4031DD ; --------------------------------------------------------------------------- loc_401EE1: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor ebx, ebx ; jumptable 0040166B case 27 inc ebx mov ecx, ebx call sub_4014F2 push 2 pop ecx mov esi, eax call sub_4014F2 mov ecx, eax mov eax, [ebp+nShowCmd.dwLowDateTime] cmp eax, 0Ch ; switch 13 cases ja short loc_401F67 ; default jmp ds:off_4032F0[eax*4] ; switch jump loc_401F06: ; DATA XREF: .text:off_4032F0o add esi, ecx ; jumptable 00401EFF case 0 jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F0A: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o sub esi, ecx ; jumptable 00401EFF case 1 jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F0E: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o imul ecx, esi ; jumptable 00401EFF case 2 mov esi, ecx jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F15: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o test ecx, ecx ; jumptable 00401EFF case 3 jz short loc_401F5A mov eax, esi cdq idiv ecx loc_401F1E: ; CODE XREF: sub_401610+925j mov esi, eax jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F22: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o or esi, ecx ; jumptable 00401EFF case 4 jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F26: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o and esi, ecx ; jumptable 00401EFF case 5 jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F2A: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o xor esi, ecx ; jumptable 00401EFF case 6 jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F2E: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o xor eax, eax ; jumptable 00401EFF case 7 test esi, esi setz al jmp short loc_401F1E ; --------------------------------------------------------------------------- loc_401F37: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o test esi, esi ; jumptable 00401EFF case 8 jnz short loc_401F49 jmp short loc_401F45 ; --------------------------------------------------------------------------- loc_401F3D: ; CODE XREF: sub_401610+933j ; sub_401610+937j xor esi, esi jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F41: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o test esi, esi ; jumptable 00401EFF case 9 jz short loc_401F3D loc_401F45: ; CODE XREF: sub_401610+92Bj test ecx, ecx jz short loc_401F3D loc_401F49: ; CODE XREF: sub_401610+929j mov esi, ebx jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F4D: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o test ecx, ecx ; jumptable 00401EFF case 10 jz short loc_401F5A mov eax, esi cdq idiv ecx mov esi, edx jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F5A: ; CODE XREF: sub_401610+907j ; sub_401610+93Fj xor esi, esi mov [ebp+var_4], ebx jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F61: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o shl esi, cl ; jumptable 00401EFF case 11 jmp short loc_401F67 ; default ; --------------------------------------------------------------------------- loc_401F65: ; CODE XREF: sub_401610+8EFj ; DATA XREF: .text:off_4032F0o sar esi, cl ; jumptable 00401EFF case 12 loc_401F67: ; CODE XREF: sub_401610+8EDj ; sub_401610+8F8j ... push esi ; default jmp loc_4017CD ; --------------------------------------------------------------------------- loc_401F6D: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 28 inc esi call sub_401508 push 2 pop ecx mov esi, eax call sub_4014F2 push eax push esi ; LPCSTR push edi ; LPSTR call ds:wsprintfA ; wsprintfA jmp loc_402ABF ; --------------------------------------------------------------------------- loc_401F8D: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o mov eax, [ebp+dwBytes] ; jumptable 0040166B case 29 test eax, eax mov esi, dword_40A480 jz short loc_401FEA loc_401F9A: ; CODE XREF: sub_401610+993j dec eax test esi, esi jz short loc_401FA9 test eax, eax mov esi, [esi] jnz short loc_401F9A test esi, esi jnz short loc_401FBD loc_401FA9: ; CODE XREF: sub_401610+98Dj push [ebp+dwBytes] ; arglist push offset aExchStackDElem ; "Exch: stack < %d elements" call sub_40614C pop ecx pop ecx jmp loc_402821 ; --------------------------------------------------------------------------- loc_401FBD: ; CODE XREF: sub_401610+997j lea edi, [esi+4] push edi ; lpString2 mov esi, offset Text push esi ; lpString1 call lstrcpyA ; lstrcpyA mov eax, dword_40A480 add eax, 4 push eax ; lpString2 push edi ; lpString1 call lstrcpyA ; lstrcpyA mov eax, dword_40A480 push esi add eax, 4 push eax jmp loc_4030E5 ; --------------------------------------------------------------------------- loc_401FEA: ; CODE XREF: sub_401610+988j test edx, edx jz short loc_402019 test esi, esi jnz short loc_402002 push offset aPopStackEmpty ; "Pop: stack empty" call sub_40614C pop ecx jmp loc_401A40 ; --------------------------------------------------------------------------- loc_402002: ; CODE XREF: sub_401610+9E0j lea eax, [esi+4] push eax ; lpString2 push edi ; lpString1 call lstrcpyA ; lstrcpyA mov eax, [esi] mov dword_40A480, eax push esi jmp loc_4031CC ; --------------------------------------------------------------------------- loc_402019: ; CODE XREF: sub_401610+9DCj push 404h ; dwBytes call sub_405DBB push [ebp+arglist] ; lpString2 mov esi, eax lea eax, [esi+4] push eax ; lpString1 call sub_4065B7 mov eax, dword_40A480 mov [esi], eax mov dword_40A480, esi jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_402043: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 33h ; jumptable 0040166B cases 30,31 pop esi call sub_401508 push 44h pop esi mov [ebp+hWndParent], eax call sub_401508 xor esi, esi inc esi test byte ptr [ebp+var_24], 1 mov [ebp+FilePart], eax jnz short loc_40206D push [ebp+hWndParent] call sub_405F74 mov [ebp+hWndParent], eax loc_40206D: ; CODE XREF: sub_401610+A50j test byte ptr [ebp+var_24], 2 jnz short loc_40207E push [ebp+FilePart] call sub_405F74 mov [ebp+FilePart], eax loc_40207E: ; CODE XREF: sub_401610+A61j cmp [ebp+var_3C], 21h jnz short loc_4020CC mov ecx, esi call sub_4014F2 push 2 pop ecx mov esi, eax call sub_4014F2 mov ecx, [ebp+var_24] sar ecx, 2 jz short loc_4020BC lea edx, [ebp+dwResult] push edx ; lpdwResult push ecx ; uTimeout push 0 ; fuFlags push [ebp+FilePart] ; lParam push [ebp+hWndParent] ; wParam push eax ; Msg push esi ; hWnd call ds:SendMessageTimeoutA ; SendMessageTimeoutA neg eax sbb eax, eax inc eax mov [ebp+var_4], eax jmp short loc_4020FC ; --------------------------------------------------------------------------- loc_4020BC: ; CODE XREF: sub_401610+A8Bj push [ebp+FilePart] ; lParam push [ebp+hWndParent] ; wParam push eax ; Msg push esi ; hWnd call ds:SendMessageA ; SendMessageA jmp short loc_4020F9 ; --------------------------------------------------------------------------- loc_4020CC: ; CODE XREF: sub_401610+A72j call sub_401508 push 12h pop esi mov ebx, eax call sub_401508 mov cl, [eax] neg cl sbb ecx, ecx and ecx, eax mov al, [ebx] neg al push ecx ; lpszWindow sbb eax, eax and eax, ebx push eax ; lpszClass push [ebp+FilePart] ; hWndChildAfter push [ebp+hWndParent] ; hWndParent call ds:FindWindowExA ; FindWindowExA loc_4020F9: ; CODE XREF: sub_401610+ABAj mov [ebp+dwResult], eax loc_4020FC: ; CODE XREF: sub_401610+AAAj cmp [ebp+arglist], 0 jl loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push [ebp+dwResult] jmp loc_4017CD ; --------------------------------------------------------------------------- loc_40210E: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor ecx, ecx ; jumptable 0040166B case 32 call sub_4014F2 push eax ; hWnd call ds:IsWindow ; IsWindow test eax, eax jz loc_4018D8 loc_402124: ; CODE XREF: sub_401610+2B2j mov eax, [ebp+dwFileAttributes] jmp loc_4031DD ; --------------------------------------------------------------------------- loc_40212C: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 2 ; jumptable 0040166B case 33 pop ecx call sub_4014F2 xor ecx, ecx push eax ; nIDDlgItem inc ecx call sub_4014F2 push eax ; hDlg call ds:GetDlgItem ; GetDlgItem jmp loc_401DBD ; --------------------------------------------------------------------------- loc_402149: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o mov eax, dword_426428 ; jumptable 0040166B case 34 add eax, edx push eax ; dwNewLong push 0FFFFFFEBh ; nIndex xor ecx, ecx call sub_4014F2 push eax ; hWnd call ds:SetWindowLongA ; SetWindowLongA jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_402166: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push edx ; jumptable 0040166B case 35 push [ebp+lpString2] ; hDlg call ds:GetDlgItem ; GetDlgItem mov edi, eax lea eax, [ebp+FileOp.lParam] push eax ; lpRect push edi ; hWnd call ds:GetClientRect ; GetClientRect mov eax, [ebp+FileOp.pt.y] imul eax, [ebp+dwBytes] push 10h ; fuLoad push eax ; cy mov eax, [ebp+FileOp.pt.x] imul eax, [ebp+dwBytes] push eax ; cx xor ebx, ebx push ebx ; type xor esi, esi call sub_401508 push eax ; name push ebx ; hInst call ds:LoadImageA ; LoadImageA push eax ; lParam push ebx ; wParam push 172h ; Msg push edi ; hWnd call ds:SendMessageA ; SendMessageA cmp eax, ebx jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push eax ; ho call ds:DeleteObject ; DeleteObject jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_4021C3: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 48h ; jumptable 0040166B case 36 push 5Ah ; index push [ebp+lpString2] ; hWnd call ds:GetDC ; GetDC push eax ; hdc call ds:GetDeviceCaps ; GetDeviceCaps push eax ; nNumerator push 2 pop ecx call sub_4014F2 push eax ; nNumber call ds:MulDiv ; MulDiv push 3 neg eax pop ecx mov lf.lfHeight, eax call sub_4014F2 push [ebp+dwFileAttributes] ; lpString2 mov lf.lfWeight, eax mov al, byte ptr [ebp+nShowCmd.dwHighDateTime] mov cl, al and cl, 1 mov lf.lfItalic, cl mov cl, al and cl, 2 and al, 4 push offset lf.lfFaceName ; lpString1 mov lf.lfUnderline, cl mov lf.lfStrikeOut, al mov lf.lfCharSet, 1 call sub_4065B7 push offset lf ; lplf call ds:CreateFontIndirectA ; CreateFontIndirectA jmp loc_401DBD ; --------------------------------------------------------------------------- loc_40223F: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor ecx, ecx ; jumptable 0040166B case 37 call sub_4014F2 xor ecx, ecx inc ecx mov esi, eax call sub_4014F2 cmp [ebp+dwBytes], 0 mov edi, eax jz short loc_402263 push offset aHidewindow ; "HideWindow" call sub_40614C pop ecx loc_402263: ; CODE XREF: sub_401610+C46j cmp [ebp+nShowCmd.dwLowDateTime], 0 push edi ; nCmdShow push esi ; hWnd jnz short loc_402276 call ds:ShowWindow ; ShowWindow jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_402276: ; CODE XREF: sub_401610+C59j call ds:EnableWindow ; EnableWindow jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_402281: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 38 call sub_401508 push 31h pop esi mov edi, eax call sub_401508 push 22h pop esi mov ebx, eax call sub_401508 push ebx push edi push offset aSS ; "%s %s" push offset byte_40A888 ; LPSTR mov esi, eax call ds:wsprintfA ; wsprintfA add esp, 10h push 0FFFFFFECh call sub_4014E1 mov al, [esi] push [ebp+nShowCmd.dwLowDateTime] ; nShowCmd neg al push offset CurrentDirectory ; lpDirectory sbb eax, eax and eax, esi push eax ; lpParameters mov al, [edi] neg al push ebx ; lpFile sbb eax, eax and eax, edi push eax ; lpOperation push [ebp+lpString2] ; hwnd call ds:ShellExecuteA ; ShellExecuteA cmp eax, 21h jge short loc_4022F9 push eax push esi push ebx push edi ; arglist push offset aExecshellWarni ; "ExecShell: warning: error (\"%s\": file:\""... call sub_40614C add esp, 14h jmp loc_401A40 ; --------------------------------------------------------------------------- loc_4022F9: ; CODE XREF: sub_401610+CD1j push esi push ebx push edi ; arglist push offset aExecshellSucce ; "ExecShell: success (\"%s\": file:\"%s\" par"... call sub_40614C add esp, 10h jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_40230E: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 39 call sub_401508 mov esi, eax push esi ; arglist push offset aExecCommandS ; "Exec: command=\"%s\"" call sub_40614C pop ecx pop ecx push esi ; lpString2 push 0FFFFFFEBh ; int call sub_40509F push offset CurrentDirectory ; lpCurrentDirectory push esi ; lpCommandLine call sub_405D01 test eax, eax mov [ebp+FilePart], eax push esi ; arglist jz loc_4023CF push offset aExecSuccessS ; "Exec: success (\"%s\")" call sub_40614C cmp [ebp+dwBytes], 0 pop ecx pop ecx jz short loc_4023C7 push 64h ; dwMilliseconds push [ebp+FilePart] ; hHandle call ds:WaitForSingleObject ; WaitForSingleObject mov esi, 102h cmp eax, esi jnz short loc_40239C mov edi, ds:PeekMessageA jmp short loc_40237B ; --------------------------------------------------------------------------- loc_402371: ; CODE XREF: sub_401610+D7Bj lea eax, [ebp+FileOp] push eax ; lpMsg call ds:DispatchMessageA ; DispatchMessageA loc_40237B: ; CODE XREF: sub_401610+D5Fj ; sub_401610+D8Aj push 1 ; wRemoveMsg push 0Fh ; wMsgFilterMax push 0Fh ; wMsgFilterMin lea eax, [ebp+FileOp] push 0 ; hWnd push eax ; lpMsg call edi ; PeekMessageA test eax, eax jnz short loc_402371 push 64h ; dwMilliseconds push [ebp+FilePart] ; hHandle call ds:WaitForSingleObject ; WaitForSingleObject cmp eax, esi jz short loc_40237B loc_40239C: ; CODE XREF: sub_401610+D57j lea eax, [ebp+pBlock] push eax ; lpExitCode push [ebp+FilePart] ; hProcess call ds:GetExitCodeProcess ; GetExitCodeProcess cmp [ebp+dwFileAttributes], 0 jl short loc_4023BA push [ebp+pBlock] ; int push ebx ; LPSTR call sub_405F5B jmp short loc_4023C7 ; --------------------------------------------------------------------------- loc_4023BA: ; CODE XREF: sub_401610+D9Dj cmp [ebp+pBlock], 0 jz short loc_4023C7 mov [ebp+var_4], 1 loc_4023C7: ; CODE XREF: sub_401610+D43j ; sub_401610+DA8j ... push [ebp+FilePart] jmp loc_402BAD ; --------------------------------------------------------------------------- loc_4023CF: ; CODE XREF: sub_401610+D2Dj mov [ebp+var_4], 1 push offset aExecFailedCrea ; "Exec: failed createprocess (\"%s\")" jmp loc_4030A5 ; --------------------------------------------------------------------------- loc_4023E0: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 2 ; jumptable 0040166B case 40 pop esi call sub_401508 push eax ; lpFileName call sub_406168 mov esi, eax test esi, esi jz short loc_402405 push dword ptr [esi+14h] ; int push ebx ; LPSTR call sub_405F5B push dword ptr [esi+18h] jmp loc_4017CD ; --------------------------------------------------------------------------- loc_402405: ; CODE XREF: sub_401610+DE2j mov byte ptr [edi], 0 mov byte ptr [ebx], 0 jmp loc_401A40 ; --------------------------------------------------------------------------- loc_402410: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 0FFFFFFEEh ; jumptable 0040166B case 41 lea eax, [ebp+FileOp.lParam] pop esi mov [ebp+FilePart], eax call sub_401508 lea ecx, [ebp+lpAppName] push ecx ; lpdwHandle push eax ; lptstrFilename mov [ebp+puLen], eax call GetFileVersionInfoSizeA mov esi, eax test esi, esi mov byte ptr [edi], 0 mov byte ptr [ebx], 0 mov [ebp+var_4], 1 jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push esi ; dwBytes call sub_405DBB test eax, eax mov [ebp+pBlock], eax jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push eax ; lpData push esi ; dwLen push 0 ; dwHandle push [ebp+puLen] ; lptstrFilename call GetFileVersionInfoA test eax, eax jz short loc_402498 lea eax, [ebp+puLen] push eax ; puLen lea eax, [ebp+FilePart] push eax ; lplpBuffer push offset SubBlock ; "\\" push [ebp+pBlock] ; pBlock call VerQueryValueA test eax, eax jz short loc_402498 mov eax, [ebp+FilePart] push dword ptr [eax+8] ; int push edi ; LPSTR call sub_405F5B mov eax, [ebp+FilePart] push dword ptr [eax+0Ch] ; int push ebx ; LPSTR call sub_405F5B and [ebp+var_4], 0 loc_402498: ; CODE XREF: sub_401610+E51j ; sub_401610+E6Aj push [ebp+pBlock] jmp loc_4031CC ; --------------------------------------------------------------------------- loc_4024A0: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor edi, edi ; jumptable 0040166B case 42 inc edi push 8001h ; uMode mov [ebp+var_4], edi call ds:SetErrorMode ; SetErrorMode cmp dword_426490, 0 jl loc_4025E9 push 0FFFFFFF0h pop esi call sub_401508 mov esi, edi mov [ebp+FilePart], eax call sub_401508 cmp [ebp+nShowCmd.dwHighDateTime], 0 mov [ebp+dwResult], eax jz short loc_4024E9 push [ebp+FilePart] ; lpModuleName call ds:GetModuleHandleA ; GetModuleHandleA test eax, eax mov [ebp+hWndParent], eax jnz short loc_40253E loc_4024E9: ; CODE XREF: sub_401610+EC7j mov esi, ds:GetLastError xor edi, edi push edi ; Arguments push edi ; nSize lea eax, [ebp+puLen] push eax ; lpBuffer push 400h ; dwLanguageId call esi ; GetLastError mov ebx, ds:FormatMessageA push eax ; dwMessageId push edi ; lpSource mov edi, 1300h push edi ; dwFlags call ebx ; FormatMessageA push [ebp+FilePart] ; lpString2 push 0FFFFFFF6h ; int call sub_40509F push [ebp+puLen] push [ebp+FilePart] ; arglist push offset aRegdllCouldNot ; "RegDLL: Could not load '%s' -> '%s'" call sub_40614C add esp, 0Ch push [ebp+FilePart] ; lpLibFileName call ds:LoadLibraryA ; LoadLibraryA test eax, eax mov [ebp+hWndParent], eax jz short loc_4025B8 xor edi, edi inc edi loc_40253E: ; CODE XREF: sub_401610+ED7j push [ebp+dwResult] ; lpProcName push [ebp+hWndParent] ; hModule call ds:GetProcAddress ; GetProcAddress mov esi, eax xor ebx, ebx cmp esi, ebx jz short loc_40258B cmp [ebp+dwBytes], ebx mov [ebp+var_4], ebx jz short loc_40256D push [ebp+dwBytes] call sub_4014E1 call esi test eax, eax jz short loc_4025A8 mov [ebp+var_4], edi jmp short loc_4025A8 ; --------------------------------------------------------------------------- loc_40256D: ; CODE XREF: sub_401610+F48j push offset off_40A000 push offset dword_40A480 push offset dword_427000 push 400h push [ebp+lpString2] call esi add esp, 14h jmp short loc_4025A8 ; --------------------------------------------------------------------------- loc_40258B: ; CODE XREF: sub_401610+F40j push [ebp+dwResult] ; lpString2 push 0FFFFFFF7h ; int call sub_40509F push [ebp+FilePart] push [ebp+dwResult] ; arglist push offset aErrorRegisteri ; "Error registering DLL: %s not found in "... call sub_40614C add esp, 0Ch loc_4025A8: ; CODE XREF: sub_401610+F56j ; sub_401610+F5Bj ... cmp [ebp+nShowCmd.dwLowDateTime], ebx jnz short loc_4025FB push [ebp+hWndParent] ; hLibModule call ds:FreeLibrary ; FreeLibrary jmp short loc_4025FB ; --------------------------------------------------------------------------- loc_4025B8: ; CODE XREF: sub_401610+F29j push 0 ; Arguments push 0 ; nSize lea eax, [ebp+puLen] push eax ; lpBuffer push 400h ; dwLanguageId call esi ; GetLastError push eax ; dwMessageId push 0 ; lpSource push edi ; dwFlags call ebx ; FormatMessageA push 0FFFFFFF6h call sub_4014E1 push [ebp+puLen] push [ebp+FilePart] ; arglist push offset aErrorRegiste_0 ; "Error registering DLL: Could not load '"... call sub_40614C add esp, 0Ch jmp short loc_4025FB ; --------------------------------------------------------------------------- loc_4025E9: ; CODE XREF: sub_401610+EA8j push 0FFFFFFE7h call sub_4014E1 push offset aErrorRegiste_1 ; "Error registering DLL: Could not initia"... call sub_40614C pop ecx loc_4025FB: ; CODE XREF: sub_401610+F9Bj ; sub_401610+FA6j ... push 0 ; uMode call ds:SetErrorMode ; SetErrorMode jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_402608: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 0FFFFFFF0h ; jumptable 0040166B case 43 pop esi call sub_401508 push 0FFFFFFDFh pop esi mov [ebp+dwResult], eax call sub_401508 push 2 pop esi mov edi, eax call sub_401508 push 0FFFFFFCDh pop esi mov [ebp+lpAppName], eax call sub_401508 push 45h pop esi mov [ebp+pBlock], eax call sub_401508 push edi mov [ebp+puLen], eax call sub_405DE6 test eax, eax jnz short loc_402650 push 21h pop esi call sub_401508 loc_402650: ; CODE XREF: sub_401610+1036j mov eax, [ebp+nShowCmd.dwHighDateTime] mov ecx, eax sar ecx, 10h push ecx movzx ecx, ah push ecx mov esi, 0FFh and eax, esi push eax push [ebp+pBlock] push [ebp+lpAppName] push edi push [ebp+dwResult] ; arglist push offset aCreateshortcut ; "CreateShortCut: out: \"%s\", in: \"%s %s\","... call sub_40614C add esp, 20h lea eax, [ebp+FilePart] push eax ; ppv push offset riid ; riid push 1 ; dwClsContext push 0 ; pUnkOuter push offset rclsid ; rclsid call ds:CoCreateInstance test eax, eax jl loc_40276F mov eax, [ebp+FilePart] mov ecx, [eax] lea edx, [ebp+hWndParent] push edx push offset dword_408DFC push eax call dword ptr [ecx] mov ebx, eax test ebx, ebx jl loc_402762 mov eax, [ebp+FilePart] mov ecx, [eax] push edi push eax call dword ptr [ecx+50h] mov ebx, eax mov eax, [ebp+FilePart] mov ecx, [eax] push offset CurrentDirectory push eax call dword ptr [ecx+24h] mov ecx, [ebp+nShowCmd.dwHighDateTime] mov eax, ecx sar eax, 8 and eax, esi jz short loc_4026EA mov ecx, [ebp+FilePart] mov edx, [ecx] push eax push ecx call dword ptr [edx+3Ch] mov ecx, [ebp+nShowCmd.dwHighDateTime] loc_4026EA: ; CODE XREF: sub_401610+10CBj mov eax, [ebp+FilePart] mov edx, [eax] sar ecx, 10h push ecx push eax call dword ptr [edx+34h] mov ecx, [ebp+pBlock] cmp byte ptr [ecx], 0 jz short loc_40270F mov edi, [ebp+nShowCmd.dwHighDateTime] mov eax, [ebp+FilePart] mov edx, [eax] and edi, esi push edi push ecx push eax call dword ptr [edx+44h] loc_40270F: ; CODE XREF: sub_401610+10EDj mov eax, [ebp+FilePart] push [ebp+lpAppName] mov ecx, [eax] push eax call dword ptr [ecx+2Ch] mov eax, [ebp+FilePart] push [ebp+puLen] mov ecx, [eax] push eax call dword ptr [ecx+1Ch] xor eax, eax cmp ebx, eax jl short loc_402759 push 400h ; cchWideChar mov esi, offset WideCharStr push esi ; lpWideCharStr push 0FFFFFFFFh ; cbMultiByte push [ebp+dwResult] ; lpMultiByteStr mov WideCharStr, ax push eax ; dwFlags push eax ; CodePage call ds:MultiByteToWideChar ; MultiByteToWideChar mov eax, [ebp+hWndParent] mov ecx, [eax] push 1 push esi push eax call dword ptr [ecx+18h] mov ebx, eax loc_402759: ; CODE XREF: sub_401610+111Bj mov eax, [ebp+hWndParent] mov ecx, [eax] push eax call dword ptr [ecx+8] loc_402762: ; CODE XREF: sub_401610+10A1j mov eax, [ebp+FilePart] mov ecx, [eax] push eax call dword ptr [ecx+8] test ebx, ebx jge short loc_40277A loc_40276F: ; CODE XREF: sub_401610+1086j mov [ebp+var_4], 1 push 0FFFFFFF0h jmp short loc_40277C ; --------------------------------------------------------------------------- loc_40277A: ; CODE XREF: sub_401610+115Dj push 0FFFFFFF4h loc_40277C: ; CODE XREF: sub_401610+289j ; sub_401610+33Cj ... call sub_4014E1 jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_402786: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 44 call sub_401508 push 11h pop esi mov ebx, eax call sub_401508 mov esi, eax push esi push ebx ; arglist push offset aCopyfilesSS ; "CopyFiles \"%s\"->\"%s\"" call sub_40614C mov eax, [ebp+lpString2] add esp, 0Ch push ebx ; lpString mov [ebp+FileOp.hwnd], eax mov [ebp+FileOp.message], 2 call lstrlenA ; lstrlenA push esi ; lpString mov byte ptr [eax+ebx+1], 0 call lstrlenA ; lstrlenA push 0FFFFFFF8h ; lpString2 mov edi, offset Data push edi ; lpString1 mov byte ptr [eax+esi+1], 0 call sub_4065B7 push esi ; lpString2 push edi ; lpString1 call ds:lstrcatA ; lstrcatA mov ax, word ptr [ebp+dwBytes] push edi ; lpString2 push 0 ; int mov [ebp+FileOp.wParam], ebx mov [ebp+FileOp.lParam], esi mov [ebp+FileOp.pt.y+2], edi mov word ptr [ebp+FileOp.time], ax call sub_40509F lea eax, [ebp+FileOp] push eax ; lpFileOp call ds:SHFileOperationA ; SHFileOperationA test eax, eax jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push 0 ; lpString2 push 0FFFFFFF9h ; int call sub_40509F jmp loc_401A40 ; --------------------------------------------------------------------------- loc_402819: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o cmp esi, 0BADF00Dh ; jumptable 0040166B case 45 jz short loc_402835 loc_402821: ; CODE XREF: sub_401610+9A8j push 200010h push 0FFFFFFE8h ; lpString2 push 0 ; lpString1 call sub_4065B7 push eax jmp loc_401D29 ; --------------------------------------------------------------------------- loc_402835: ; CODE XREF: sub_401610+120Fj inc dword_426474 jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_402840: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 46 push offset aRm ; "<RM>" mov ebx, offset byte_40A888 push ebx ; lpString1 mov [ebp+lpAppName], esi mov [ebp+pBlock], esi mov [ebp+FilePart], esi call lstrcpyA ; lstrcpyA push ebx ; lpString2 mov edi, offset Data push edi ; lpString1 call lstrcpyA ; lstrcpyA cmp [ebp+arglist], esi jz short loc_402874 call sub_401508 mov [ebp+lpAppName], eax loc_402874: ; CODE XREF: sub_401610+125Aj cmp [ebp+dwFileAttributes], 0 jz short loc_402885 push 11h pop esi call sub_401508 mov [ebp+pBlock], eax loc_402885: ; CODE XREF: sub_401610+1268j cmp [ebp+nShowCmd.dwHighDateTime], 0 jz short loc_402896 push 22h pop esi call sub_401508 mov [ebp+FilePart], eax loc_402896: ; CODE XREF: sub_401610+1279j push 0FFFFFFCDh pop esi call sub_401508 mov esi, eax push esi push edi push ebx push offset Text ; arglist push offset aWriteinistrWro ; "WriteINIStr: wrote [%s] %s=%s in %s" call sub_40614C add esp, 14h push esi ; lpFileName push [ebp+FilePart] ; lpString push [ebp+pBlock] ; lpKeyName push [ebp+lpAppName] ; lpAppName call ds:WritePrivateProfileStringA ; WritePrivateProfileStringA jmp loc_401A38 ; --------------------------------------------------------------------------- loc_4028CA: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 47 inc esi mov [ebp+FilePart], 7E4E21h call sub_401508 push 12h pop esi mov ebx, eax call sub_401508 push 0FFFFFFDDh pop esi mov [ebp+puLen], eax call sub_401508 push eax ; lpFileName push 3FFh ; nSize push edi ; lpReturnedString lea eax, [ebp+FilePart] push eax ; lpDefault push [ebp+puLen] ; lpKeyName push ebx ; lpAppName call ds:GetPrivateProfileStringA ; GetPrivateProfileStringA mov eax, [edi] cmp eax, [ebp+FilePart] jmp loc_401A14 ; --------------------------------------------------------------------------- loc_40290D: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o cmp [ebp+nShowCmd.dwHighDateTime], 0 ; jumptable 0040166B case 48 jnz short loc_402957 push 2 ; phkResult call sub_4015C7 mov edi, eax test edi, edi jz loc_401A40 push 33h pop esi call sub_401508 mov esi, eax push esi ; lpValueName push edi ; hKey call ds:RegDeleteValueA ; RegDeleteValueA push esi push offset Data push [ebp+dwFileAttributes] ; arglist mov ebx, eax push offset aDeleteregvalue ; "DeleteRegValue: %d\\%s\\%s" call sub_40614C add esp, 10h push edi ; hKey call ds:RegCloseKey ; RegCloseKey jmp short loc_402993 ; --------------------------------------------------------------------------- loc_402957: ; CODE XREF: sub_401610+1301j push 22h pop esi call sub_401508 mov esi, eax push esi push [ebp+dwFileAttributes] ; arglist push offset aDeleteregkeyDS ; "DeleteRegKey: %d\\%s" call sub_40614C mov eax, [ebp+dwFileAttributes] add esp, 0Ch test eax, eax jnz short loc_402983 mov eax, dword_426464 add eax, 80000001h loc_402983: ; CODE XREF: sub_401610+1367j mov ecx, [ebp+nShowCmd.dwHighDateTime] and ecx, 2 push ecx ; int push esi ; lpSubKey push eax ; hKey call sub_401540 mov ebx, eax loc_402993: ; CODE XREF: sub_401610+1345j test ebx, ebx jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 jmp loc_401A40 ; --------------------------------------------------------------------------- loc_4029A0: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor ebx, ebx ; jumptable 0040166B case 49 cmp esi, ebx jz short loc_4029AB mov [ebp+FilePart], esi jmp short loc_4029B8 ; --------------------------------------------------------------------------- loc_4029AB: ; CODE XREF: sub_401610+1394j mov eax, dword_426464 add eax, 80000001h mov [ebp+FilePart], eax loc_4029B8: ; CODE XREF: sub_401610+1399j mov eax, [ebp+nShowCmd.dwHighDateTime] mov [ebp+dwResult], eax mov eax, [ebp+var_24] push 2 pop esi mov [ebp+puLen], eax call sub_401508 push 11h pop esi mov [ebp+hWndParent], eax call sub_401508 push ebx ; lpdwDisposition lea ecx, [ebp+pBlock] push ecx ; phkResult push ebx ; lpSecurityAttributes push 2 ; samDesired push ebx ; dwOptions push ebx ; lpClass push ebx ; Reserved push eax ; lpSubKey push [ebp+FilePart] ; hKey mov [ebp+lpString2], eax mov [ebp+var_4], 1 call ds:RegCreateKeyExA ; RegCreateKeyExA test eax, eax jnz loc_402AAF xor esi, esi cmp [ebp+dwResult], 1 mov edi, offset Data jnz short loc_402A33 push 23h pop esi call sub_401508 push edi ; lpString call lstrlenA ; lstrlenA push edi push [ebp+hWndParent] mov esi, eax push [ebp+lpString2] inc esi push [ebp+FilePart] ; arglist push offset aWriteregstrSet ; "WriteRegStr: set %d\\%s\\%s to %s" call sub_40614C add esp, 14h loc_402A33: ; CODE XREF: sub_401610+13F9j cmp [ebp+dwResult], 4 jnz short loc_402A60 push 3 pop ecx call sub_4014F2 push 4 pop esi push eax push [ebp+hWndParent] mov Data, eax push [ebp+lpString2] push [ebp+FilePart] ; arglist push offset aWriteregdwordS ; "WriteRegDWORD: set %d\\%s\\%s to %d" call sub_40614C add esp, 14h loc_402A60: ; CODE XREF: sub_401610+1427j cmp [ebp+dwResult], 3 jnz short loc_402A8E push 0C00h ; NumberOfBytesWritten push edi ; lpBuffer push ebx ; hFile push [ebp+nShowCmd.dwLowDateTime] ; Buffer call sub_40362B mov esi, eax push esi push [ebp+hWndParent] push [ebp+lpString2] push [ebp+FilePart] ; arglist push offset aWriteregbinSet ; "WriteRegBin: set %d\\%s\\%s with %d bytes"... call sub_40614C add esp, 14h loc_402A8E: ; CODE XREF: sub_401610+1454j push esi ; cbData push edi ; lpData push [ebp+puLen] ; dwType push ebx ; Reserved push [ebp+hWndParent] ; lpValueName push [ebp+pBlock] ; hKey call ds:RegSetValueExA ; RegSetValueExA test eax, eax jnz short loc_402AA7 mov [ebp+var_4], ebx loc_402AA7: ; CODE XREF: sub_401610+1492j push [ebp+pBlock] jmp loc_402B92 ; --------------------------------------------------------------------------- loc_402AAF: ; CODE XREF: sub_401610+13E8j push [ebp+lpString2] push [ebp+FilePart] ; arglist push offset aWriteregErrorC ; "WriteReg: error creating key %d\\%s" call sub_40614C loc_402ABF: ; CODE XREF: sub_401610+978j add esp, 0Ch jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_402AC7: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 20019h ; jumptable 0040166B case 50 call sub_4015C7 push 33h pop esi mov ebx, eax call sub_401508 xor esi, esi cmp ebx, esi mov byte ptr [edi], 0 jz loc_401A40 lea ecx, [ebp+puLen] push ecx ; lpcbData push edi ; lpData lea ecx, [ebp+FilePart] push ecx ; lpType push esi ; lpReserved push eax ; lpValueName push ebx ; hKey mov [ebp+puLen], 400h call ds:RegQueryValueExA ; RegQueryValueExA xor ecx, ecx inc ecx test eax, eax jnz short loc_402B36 cmp [ebp+FilePart], 4 jz short loc_402B20 cmp [ebp+FilePart], ecx jz short loc_402B19 cmp [ebp+FilePart], 2 jnz short loc_402B36 loc_402B19: ; CODE XREF: sub_401610+1501j cmp [ebp+nShowCmd.dwHighDateTime], esi jz short loc_402B3C jmp short loc_402B39 ; --------------------------------------------------------------------------- loc_402B20: ; CODE XREF: sub_401610+14FCj cmp [ebp+nShowCmd.dwHighDateTime], esi jnz short loc_402B2C mov [ebp+var_4], 1 loc_402B2C: ; CODE XREF: sub_401610+1513j push dword ptr [edi] ; int push edi ; LPSTR call sub_405F5B jmp short loc_402B3C ; --------------------------------------------------------------------------- loc_402B36: ; CODE XREF: sub_401610+14F6j ; sub_401610+1507j mov byte ptr [edi], 0 loc_402B39: ; CODE XREF: sub_401610+150Ej mov [ebp+var_4], ecx loc_402B3C: ; CODE XREF: sub_401610+150Cj ; sub_401610+1524j push ebx jmp short loc_402B92 ; --------------------------------------------------------------------------- loc_402B3F: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 20019h ; jumptable 0040166B case 51 call sub_4015C7 push 3 pop ecx mov esi, eax call sub_4014F2 xor edx, edx cmp esi, edx mov byte ptr [edi], 0 jz loc_401A40 cmp [ebp+nShowCmd.dwHighDateTime], edx mov ecx, 3FFh mov [ebp+FilePart], ecx jz short loc_402B79 push ecx ; cchName push edi ; lpName push eax ; dwIndex push esi ; hKey call ds:RegEnumKeyA ; RegEnumKeyA jmp short loc_402B8A ; --------------------------------------------------------------------------- loc_402B79: ; CODE XREF: sub_401610+155Bj push edx ; lpcbData push edx ; lpData push edx ; lpType push edx ; lpReserved lea ecx, [ebp+FilePart] push ecx ; lpcchValueName push edi ; lpValueName push eax ; dwIndex push esi ; hKey call ds:RegEnumValueA ; RegEnumValueA loc_402B8A: ; CODE XREF: sub_401610+1567j mov byte ptr [edi+3FFh], 0 push esi ; hKey loc_402B92: ; CODE XREF: sub_401610+149Aj ; sub_401610+152Dj call ds:RegCloseKey ; RegCloseKey jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_402B9D: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o cmp byte ptr [edi], 0 ; jumptable 0040166B case 52 jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push edi call sub_405F74 push eax ; hObject loc_402BAD: ; CODE XREF: sub_401610+DBAj call ds:CloseHandle ; CloseHandle jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_402BB8: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 0FFFFFFEDh ; jumptable 0040166B case 53 pop esi call sub_401508 push [ebp+dwBytes] ; dwCreationDisposition push [ebp+dwFileAttributes] ; dwDesiredAccess push eax ; lpFileName call sub_405E7A cmp eax, 0FFFFFFFFh jnz loc_401DBD loc_402BD5: ; CODE XREF: sub_401610+1777j mov byte ptr [edi], 0 jmp loc_401A40 ; --------------------------------------------------------------------------- loc_402BDD: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o cmp [ebp+dwBytes], 0 ; jumptable 0040166B case 54 jz short loc_402BF5 xor ecx, ecx inc ecx call sub_4014F2 mov byte_40A888, al xor eax, eax inc eax jmp short loc_402C03 ; --------------------------------------------------------------------------- loc_402BF5: ; CODE XREF: sub_401610+15D1j push 11h pop esi call sub_401508 push eax ; lpString call lstrlenA ; lstrlenA loc_402C03: ; CODE XREF: sub_401610+15E3j cmp byte ptr [edi], 0 jz loc_401A40 push 0 ; lpOverlapped lea ecx, [ebp+FilePart] push ecx ; lpNumberOfBytesWritten push eax ; nNumberOfBytesToWrite push offset byte_40A888 ; lpBuffer push edi call sub_405F74 push eax ; hFile call ds:WriteFile ; WriteFile jmp loc_401A38 ; --------------------------------------------------------------------------- loc_402C2A: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 2 ; jumptable 0040166B case 55 pop ecx xor esi, esi call sub_4014F2 cmp eax, 1 mov [ebp+dwResult], eax jl loc_4031D2 ; default ; jumptable 0040166B cases 64,65 mov ecx, 3FFh cmp eax, ecx jle short loc_402C4C mov [ebp+dwResult], ecx loc_402C4C: ; CODE XREF: sub_401610+1637j cmp byte ptr [edi], 0 jz loc_402CDE push edi mov byte ptr [ebp+FilePart+3], 0 call sub_405F74 cmp [ebp+dwResult], 0 mov edi, eax jle short loc_402CDE loc_402C67: ; CODE XREF: sub_401610+1697j push 0 ; lpOverlapped lea eax, [ebp+puLen] push eax ; lpNumberOfBytesRead push 1 ; nNumberOfBytesToRead lea eax, [ebp+Buffer] push eax ; lpBuffer push edi ; hFile call ds:ReadFile ; ReadFile test eax, eax jz short loc_402CDE cmp [ebp+puLen], 1 jnz short loc_402CDE cmp [ebp+nShowCmd.dwLowDateTime], 0 jnz short loc_402CAB cmp byte ptr [ebp+FilePart+3], 0Dh jz short loc_402CBB cmp byte ptr [ebp+FilePart+3], 0Ah jz short loc_402CBB mov al, [ebp+Buffer] mov [esi+ebx], al inc esi test al, al mov byte ptr [ebp+FilePart+3], al jz short loc_402CDE cmp esi, [ebp+dwResult] jl short loc_402C67 jmp short loc_402CDE ; --------------------------------------------------------------------------- loc_402CAB: ; CODE XREF: sub_401610+1678j movzx eax, [ebp+Buffer] push eax ; int push ebx ; LPSTR call sub_405F5B jmp loc_4031DB ; --------------------------------------------------------------------------- loc_402CBB: ; CODE XREF: sub_401610+167Ej ; sub_401610+1684j mov al, [ebp+Buffer] cmp byte ptr [ebp+FilePart+3], al jz short loc_402CD1 cmp al, 0Dh jz short loc_402CCB cmp al, 0Ah jnz short loc_402CD1 loc_402CCB: ; CODE XREF: sub_401610+16B5j mov [esi+ebx], al inc esi jmp short loc_402CDE ; --------------------------------------------------------------------------- loc_402CD1: ; CODE XREF: sub_401610+16B1j ; sub_401610+16B9j push 1 ; dwMoveMethod push 0 ; lpDistanceToMoveHigh push 0FFFFFFFFh ; lDistanceToMove push edi ; hFile call ds:SetFilePointer ; SetFilePointer loc_402CDE: ; CODE XREF: sub_401610+163Fj ; sub_401610+1655j ... mov byte ptr [esi+ebx], 0 test esi, esi jmp loc_401A3A ; --------------------------------------------------------------------------- loc_402CE9: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o cmp byte ptr [edi], 0 ; jumptable 0040166B case 56 jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push [ebp+nShowCmd.dwLowDateTime] ; dwMoveMethod push 0 ; lpDistanceToMoveHigh push 2 pop ecx call sub_4014F2 push eax ; lDistanceToMove push edi call sub_405F74 push eax ; hFile call ds:SetFilePointer ; SetFilePointer cmp [ebp+dwFileAttributes], 0 jl loc_4031D2 ; default ; jumptable 0040166B cases 64,65 jmp loc_403166 ; --------------------------------------------------------------------------- loc_402D1C: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o cmp byte ptr [edi], 0 ; jumptable 0040166B case 57 jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push edi call sub_405F74 push eax ; hFindFile call ds:FindClose ; FindClose jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_402D37: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o cmp byte ptr [ebx], 0 ; jumptable 0040166B case 58 jz loc_401A1A lea eax, [ebp+FindFileData] push eax ; lpFindFileData push ebx call sub_405F74 push eax ; hFindFile call ds:FindNextFileA ; FindNextFileA test eax, eax jz loc_401A1A loc_402D5C: ; CODE XREF: sub_401610+1783j lea eax, [ebp+FindFileData.cFileName] push eax push edi jmp loc_4030E5 ; --------------------------------------------------------------------------- loc_402D69: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o push 2 ; jumptable 0040166B case 59 pop esi call sub_401508 lea ecx, [ebp+FindFileData] push ecx ; lpFindFileData push eax ; lpFileName call ds:FindFirstFileA ; FindFirstFileA cmp eax, 0FFFFFFFFh jnz short loc_402D8C mov byte ptr [ebx], 0 jmp loc_402BD5 ; --------------------------------------------------------------------------- loc_402D8C: ; CODE XREF: sub_401610+1772j push eax ; int push ebx ; LPSTR call sub_405F5B jmp short loc_402D5C ; --------------------------------------------------------------------------- loc_402D95: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor esi, esi ; jumptable 0040166B case 60 mov [ebp+lpAppName], 0FFFFFD66h call sub_401508 and [ebp+pBlock], esi test byte ptr dword_426444+1, 4 mov edi, ds:lstrcatA mov [ebp+FilePart], eax jz loc_402E63 push eax ; lpString call lstrlenA ; lstrlenA push lpString ; lpString mov esi, eax call lstrlenA ; lstrlenA lea ecx, [eax+esi+1] mov eax, 105h cmp ecx, eax jb short loc_402DEB push lpString ; lpString call lstrlenA ; lstrlenA lea eax, [eax+esi+1] loc_402DEB: ; CODE XREF: sub_401610+17CAj push eax ; dwBytes call sub_405DBB mov ebx, eax test ebx, ebx mov [ebp+hWndParent], ebx jz short loc_402E4D push lpString ; lpString2 push ebx ; lpString1 call lstrcpyA ; lstrcpyA push 5Ch ; char push [ebp+FilePart] ; lpszStart call sub_4061D3 test eax, eax jz short loc_402E18 inc eax push eax jmp short loc_402E1B ; --------------------------------------------------------------------------- loc_402E18: ; CODE XREF: sub_401610+1802j push [ebp+FilePart] ; lpString2 loc_402E1B: ; CODE XREF: sub_401610+1806j push ebx ; lpString1 call edi ; lstrcatA push ebx ; lpString call lstrlenA ; lstrlenA lea esi, [eax+ebx-1] jmp short loc_402E39 ; --------------------------------------------------------------------------- loc_402E2A: ; CODE XREF: sub_401610+182Ej cmp byte ptr [esi], 5Ch jz short loc_402E40 push esi ; lpszCurrent push ebx ; lpszStart call ds:CharPrevA ; CharPrevA mov esi, eax loc_402E39: ; CODE XREF: sub_401610+1818j cmp esi, ebx mov [ebp+pBlock], esi ja short loc_402E2A loc_402E40: ; CODE XREF: sub_401610+181Dj push ebx ; lpFileName mov byte ptr [esi], 0 call sub_406301 test eax, eax jnz short loc_402E57 loc_402E4D: ; CODE XREF: sub_401610+94j ; sub_401610+A3j ... mov eax, 7FFFFFFFh jmp loc_4031DD ; --------------------------------------------------------------------------- loc_402E57: ; CODE XREF: sub_401610+183Bj push ebx ; lpString2 push [ebp+FilePart] ; lpString1 mov byte ptr [esi], 5Ch call lstrcpyA ; lstrcpyA loc_402E63: ; CODE XREF: sub_401610+17A6j push [ebp+FilePart] call sub_405DE6 test eax, eax push [ebp+FilePart] ; lpString2 mov ebx, offset byte_40A888 jz short loc_402E7F push ebx ; lpString1 call lstrcpyA ; lstrcpyA jmp short loc_402E93 ; --------------------------------------------------------------------------- loc_402E7F: ; CODE XREF: sub_401610+1865j push offset byte_42C400 ; lpString2 push ebx ; lpString1 call lstrcpyA ; lstrcpyA push eax ; lpString1 call sub_4061A6 push eax ; lpString1 call edi ; lstrcatA loc_402E93: ; CODE XREF: sub_401610+186Dj push ebx ; lpszCurrent call sub_406009 push 2 ; dwCreationDisposition push 40000000h ; dwDesiredAccess push ebx ; lpFileName call sub_405E7A cmp eax, 0FFFFFFFFh mov [ebp+dwResult], eax jz loc_402F5E mov eax, dwBytes push eax ; dwBytes mov [ebp+puLen], eax call sub_405DBB test eax, eax mov [ebp+lpString2], eax jz loc_402F55 push 0 ; lDistanceToMove call sub_403409 push [ebp+puLen] ; NumberOfBytesRead push [ebp+lpString2] ; lpBuffer call sub_4033D7 push [ebp+dwBytes] ; dwBytes call sub_405DBB mov esi, eax test esi, esi mov [ebp+lpAppName], esi jz short loc_402F27 push [ebp+dwBytes] ; NumberOfBytesWritten push esi ; lpBuffer push 0 ; hFile push [ebp+dwFileAttributes] ; Buffer call sub_40362B jmp short loc_402F19 ; --------------------------------------------------------------------------- loc_402EFE: ; CODE XREF: sub_401610+190Cj mov ecx, [esi] mov eax, [esi+4] push ecx mov [ebp+FileOp.pt.x], ecx mov ecx, [ebp+lpString2] add esi, 8 push esi add eax, ecx push eax call sub_405E5A add esi, [ebp+FileOp.pt.x] loc_402F19: ; CODE XREF: sub_401610+18ECj cmp byte ptr [esi], 0 jnz short loc_402EFE push [ebp+lpAppName] ; hMem call ds:GlobalFree ; GlobalFree loc_402F27: ; CODE XREF: sub_401610+18DCj xor esi, esi push esi ; lpOverlapped lea eax, [ebp+NumberOfBytesWritten] push eax ; lpNumberOfBytesWritten push [ebp+puLen] ; nNumberOfBytesToWrite push [ebp+lpString2] ; lpBuffer push [ebp+dwResult] ; hFile call ds:WriteFile ; WriteFile push [ebp+lpString2] ; hMem call ds:GlobalFree ; GlobalFree push esi ; NumberOfBytesWritten push esi ; lpBuffer push [ebp+dwResult] ; hFile push 0FFFFFFFFh ; Buffer call sub_40362B mov [ebp+lpAppName], eax loc_402F55: ; CODE XREF: sub_401610+18B5j push [ebp+dwResult] ; hObject call ds:CloseHandle ; CloseHandle loc_402F5E: ; CODE XREF: sub_401610+189Cj push ebx push [ebp+lpAppName] ; arglist push offset aCreatedUninsta ; "created uninstaller: %d, \"%s\"" call sub_40614C add esp, 0Ch cmp [ebp+lpAppName], 0 push 0FFFFFFF3h pop esi jge short loc_402F89 push 0FFFFFFEFh pop esi push ebx ; lpFileName call ds:DeleteFileA ; DeleteFileA mov [ebp+var_4], 1 loc_402F89: ; CODE XREF: sub_401610+1966j push esi call sub_4014E1 test byte ptr dword_426444+1, 4 jz loc_4031C3 mov eax, [ebp+pBlock] mov esi, [ebp+FilePart] push offset asc_408330 ; " /x \"" push esi ; lpString1 mov byte ptr [eax], 0 call edi ; lstrcatA push lpString ; lpString2 push esi ; lpString1 call edi ; lstrcatA push offset a_? ; "\" _?=" push esi ; lpString1 call edi ; lstrcatA push [ebp+hWndParent] ; lpString2 push esi ; lpString1 call edi ; lstrcatA push [ebp+hWndParent] ; lpCurrentDirectory push esi ; lpCommandLine call sub_405D01 test eax, eax mov [ebp+FilePart], eax push esi ; arglist jz short loc_40304A push offset aFileExtraction ; "File Extraction: success (\"%s\")" call sub_40614C mov edi, ds:WaitForSingleObject pop ecx pop ecx push 64h ; dwMilliseconds push [ebp+FilePart] ; hHandle call edi ; WaitForSingleObject mov esi, 102h cmp eax, esi jnz short loc_403026 mov ebx, ds:PeekMessageA jmp short loc_403009 ; --------------------------------------------------------------------------- loc_402FFF: ; CODE XREF: sub_401610+1A09j lea eax, [ebp+FileOp] push eax ; lpMsg call ds:DispatchMessageA ; DispatchMessageA loc_403009: ; CODE XREF: sub_401610+19EDj ; sub_401610+1A14j push 1 ; wRemoveMsg push 0Fh ; wMsgFilterMax push 0Fh ; wMsgFilterMin lea eax, [ebp+FileOp] push 0 ; hWnd push eax ; lpMsg call ebx ; PeekMessageA test eax, eax jnz short loc_402FFF push 64h ; dwMilliseconds push [ebp+FilePart] ; hHandle call edi ; WaitForSingleObject cmp eax, esi jz short loc_403009 loc_403026: ; CODE XREF: sub_401610+19E5j lea eax, [ebp+puLen] push eax ; lpExitCode push [ebp+FilePart] ; hProcess call ds:GetExitCodeProcess ; GetExitCodeProcess cmp [ebp+puLen], 0 jz short loc_40303C inc [ebp+var_4] loc_40303C: ; CODE XREF: sub_401610+1A27j push [ebp+FilePart] ; hObject call ds:CloseHandle ; CloseHandle jmp loc_4031C3 ; --------------------------------------------------------------------------- loc_40304A: ; CODE XREF: sub_401610+19C3j inc [ebp+var_4] push offset aFileExtracti_0 ; "File Extraction: failed createprocess o"... call sub_40614C pop ecx pop ecx jmp loc_4031C3 ; --------------------------------------------------------------------------- loc_40305E: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o test esi, esi ; jumptable 0040166B case 61 jz short loc_403097 push edx ; arglist push offset aSettingsLoggin ; "settings logging to %d" call sub_40614C mov eax, [ebp+dwFileAttributes] push eax ; arglist push offset aLoggingSetToD ; "logging set to %d" mov dword_423F78, eax call sub_40614C add esp, 10h cmp [ebp+dwFileAttributes], 0 jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 call sub_4040E9 jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_403097: ; CODE XREF: sub_401610+1A50j xor esi, esi inc esi call sub_401508 push eax ; arglist push offset aS ; "%s" loc_4030A5: ; CODE XREF: sub_401610+369j ; sub_401610+37Bj ... call sub_40614C pop ecx loc_4030AB: ; CODE XREF: sub_401610+22Dj pop ecx jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_4030B1: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor ecx, ecx ; jumptable 0040166B case 62 call sub_4014F2 mov edi, eax cmp edi, dword_42640C jnb loc_401A40 mov eax, [ebp+dwBytes] mov esi, edi imul esi, 418h add esi, dword_426408 test eax, eax jl short loc_4030F2 mov ecx, [esi+eax*4] jnz short loc_4030EF add esi, 18h push esi ; lpString2 push ebx ; lpString1 loc_4030E5: ; CODE XREF: sub_401610+9D5j ; sub_401610+1754j call lstrcpyA ; lstrcpyA jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_4030EF: ; CODE XREF: sub_401610+1ACEj push ecx jmp short loc_403167 ; --------------------------------------------------------------------------- loc_4030F2: ; CODE XREF: sub_401610+1AC9j or ecx, 0FFFFFFFFh sub ecx, eax mov [ebp+dwBytes], ecx jz short loc_403109 xor ecx, ecx inc ecx call sub_4014F2 mov [ebp+dwFileAttributes], eax jmp short loc_403119 ; --------------------------------------------------------------------------- loc_403109: ; CODE XREF: sub_401610+1AEAj push [ebp+nShowCmd.dwHighDateTime] ; lpString2 lea eax, [esi+18h] push eax ; lpString1 call sub_4065B7 or byte ptr [esi+9], 1 loc_403119: ; CODE XREF: sub_401610+1AF7j mov eax, [ebp+dwBytes] mov ecx, [ebp+dwFileAttributes] mov [esi+eax*4], ecx cmp [ebp+nShowCmd.dwLowDateTime], 0 jz loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push edi call sub_40117D jmp loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_403137: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o xor ecx, ecx ; jumptable 0040166B case 63 call sub_4014F2 cmp eax, 20h jnb loc_401A40 xor ecx, ecx cmp [ebp+nShowCmd.dwLowDateTime], ecx jz short loc_40316F cmp [ebp+dwBytes], ecx jz short loc_403160 push eax call sub_4012A8 call sub_40129E jmp short loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_403160: ; CODE XREF: sub_401610+1B41j push ecx call sub_4012F3 loc_403166: ; CODE XREF: sub_401610+1707j push eax ; int loc_403167: ; CODE XREF: sub_401610+1AE0j push ebx ; LPSTR loc_403168: ; CODE XREF: sub_401610+1BEj call sub_405F5B jmp short loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_40316F: ; CODE XREF: sub_401610+1B3Cj cmp [ebp+dwBytes], ecx jz short loc_403186 mov ecx, [ebp+dwFileAttributes] mov edx, dword_4263E8 mov [edx+eax*4+94h], ecx jmp short loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_403186: ; CODE XREF: sub_401610+1B62j mov ecx, dword_4263E8 push dword ptr [ecx+eax*4+94h] ; lpString2 push ebx ; lpString1 call sub_4065B7 jmp short loc_4031D2 ; default ; jumptable 0040166B cases 64,65 ; --------------------------------------------------------------------------- loc_40319B: ; CODE XREF: sub_401610+5Bj ; DATA XREF: .text:off_4031E4o mov eax, dword_4229E8 ; jumptable 0040166B case 66 push 0 ; lParam and eax, esi push eax ; wParam push 0Bh ; Msg push [ebp+lpString2] ; hWnd call ds:SendMessageA ; SendMessageA cmp [ebp+arglist], 0 jz short loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push 0 ; bErase push 0 ; lpRect push [ebp+lpString2] ; hWnd call ds:InvalidateRect ; InvalidateRect loc_4031C3: ; CODE XREF: sub_401610+668j ; sub_401610+6DFj ... cmp [ebp+hWndParent], 0 jz short loc_4031D2 ; default ; jumptable 0040166B cases 64,65 push [ebp+hWndParent] ; hMem loc_4031CC: ; CODE XREF: sub_401610+A04j ; sub_401610+E8Bj call ds:GlobalFree ; GlobalFree loc_4031D2: ; CODE XREF: sub_401610+55j ; sub_401610+5Bj ... mov eax, [ebp+var_4] ; default ; jumptable 0040166B cases 64,65 add dword_426468, eax loc_4031DB: ; CODE XREF: sub_401610+67Ej ; sub_401610+16A6j xor eax, eax loc_4031DD: ; CODE XREF: sub_401610+72j ; sub_401610+E9j ... pop edi pop esi pop ebx leave retn 4 sub_401610 endp ; --------------------------------------------------------------------------- off_4031E4 dd offset loc_401672, offset loc_401687, offset loc_4016A9 ; DATA XREF: sub_401610+5Br dd offset loc_4016C6, offset loc_4016FE, offset loc_40174D ; jump table for switch statement dd offset loc_401777, offset loc_4017D3, offset loc_4017FF dd offset loc_401842, offset loc_40189E, offset loc_401790 dd offset loc_4017A7, offset loc_4017C6, offset loc_4018E0 dd offset loc_401990, offset loc_4019F5, offset loc_401A29 dd offset loc_401A4C, offset loc_401D33, offset loc_401D44 dd offset loc_401D8A, offset loc_401DAF, offset loc_401DC3 dd offset loc_401E49, offset loc_401E6C, offset loc_401EA4 dd offset loc_401EE1, offset loc_401F6D, offset loc_401F8D dd offset loc_402043, offset loc_402043, offset loc_40210E dd offset loc_40212C, offset loc_402149, offset loc_402166 dd offset loc_4021C3, offset loc_40223F, offset loc_402281 dd offset loc_40230E, offset loc_4023E0, offset loc_402410 dd offset loc_4024A0, offset loc_402608, offset loc_402786 dd offset loc_402819, offset loc_402840, offset loc_4028CA dd offset loc_40290D, offset loc_4029A0, offset loc_402AC7 dd offset loc_402B3F, offset loc_402B9D, offset loc_402BB8 dd offset loc_402BDD, offset loc_402C2A, offset loc_402CE9 dd offset loc_402D1C, offset loc_402D37, offset loc_402D69 dd offset loc_402D95, offset loc_40305E, offset loc_4030B1 dd offset loc_403137, offset loc_4031D2, offset loc_4031D2 dd offset loc_40319B off_4032F0 dd offset loc_401F06 ; DATA XREF: sub_401610+8EFr dd offset loc_401F0A ; jump table for switch statement dd offset loc_401F0E dd offset loc_401F15 dd offset loc_401F22 dd offset loc_401F26 dd offset loc_401F2A dd offset loc_401F2E dd offset loc_401F37 dd offset loc_401F41 dd offset loc_401F4D dd offset loc_401F61 dd offset loc_401F65 ; =============== S U B R O U T I N E ======================================= ; INT_PTR __stdcall DialogFunc(HWND,UINT,WPARAM,LPARAM) DialogFunc proc near ; DATA XREF: sub_403420+10Eo ; sub_403756+14Do hWnd = dword ptr 4 arg_4 = dword ptr 8 arg_C = dword ptr 10h mov eax, [esp+arg_4] cmp eax, 110h push ebp mov ebp, [esp+4+hWnd] push esi mov esi, 113h jnz short loc_403355 push 0 ; lpTimerFunc push 0FAh ; uElapse push 1 ; nIDEvent push ebp ; hWnd call ds:SetTimer ; SetTimer mov eax, [esp+8+arg_C] mov dword_41C194, eax mov eax, esi loc_403355: ; CODE XREF: DialogFunc+14j cmp eax, esi jnz short loc_4033D0 mov ecx, dword_41C190 mov eax, nDenominator cmp ecx, eax jl short loc_40336A mov ecx, eax loc_40336A: ; CODE XREF: DialogFunc+42j push ebx push edi push eax ; nDenominator push 64h ; nNumerator push ecx ; nNumber call ds:MulDiv ; MulDiv mov edi, ds:wsprintfA mov ebx, eax mov eax, dword_41C194 test eax, eax mov esi, offset String jz short loc_4033B1 push ebx push eax ; LPCSTR push esi ; LPSTR call edi ; wsprintfA add esp, 0Ch push esi ; lpString push ebp ; hWnd call ds:SetWindowTextA ; SetWindowTextA push esi ; lpString push 406h ; nIDDlgItem push ebp ; hDlg call SetDlgItemTextA ; SetDlgItemTextA push 5 ; nCmdShow push ebp ; hWnd call ds:ShowWindow ; ShowWindow loc_4033B1: ; CODE XREF: DialogFunc+66j test byte ptr dword_40A040, 1 jz short loc_4033CE push ebx push offset a___D ; "... %d%%" push esi ; LPSTR call edi ; wsprintfA add esp, 0Ch push esi ; lpString2 push 0 ; int call sub_40509F loc_4033CE: ; CODE XREF: DialogFunc+94j pop edi pop ebx loc_4033D0: ; CODE XREF: DialogFunc+33j pop esi xor eax, eax pop ebp retn 10h DialogFunc endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_4033D7(LPVOID lpBuffer,DWORD NumberOfBytesRead) sub_4033D7 proc near ; CODE XREF: sub_401610+18C8p ; sub_403420+7Bp ... lpBuffer = dword ptr 8 NumberOfBytesRead= dword ptr 0Ch push ebp mov ebp, esp push esi mov esi, [ebp+NumberOfBytesRead] push 0 ; lpOverlapped lea eax, [ebp+NumberOfBytesRead] push eax ; lpNumberOfBytesRead push esi ; nNumberOfBytesToRead push [ebp+lpBuffer] ; lpBuffer push hFile ; hFile call ds:ReadFile ; ReadFile test eax, eax jz short loc_403402 cmp [ebp+NumberOfBytesRead], esi jnz short loc_403402 xor eax, eax inc eax jmp short loc_403404 ; --------------------------------------------------------------------------- loc_403402: ; CODE XREF: sub_4033D7+1Fj ; sub_4033D7+24j xor eax, eax loc_403404: ; CODE XREF: sub_4033D7+29j pop esi pop ebp retn 8 sub_4033D7 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_403409(LONG lDistanceToMove) sub_403409 proc near ; CODE XREF: sub_401610+18BDp ; sub_403420+39p ... lDistanceToMove = dword ptr 4 push 0 ; dwMoveMethod push 0 ; lpDistanceToMoveHigh push [esp+8+lDistanceToMove] ; lDistanceToMove push hFile ; hFile call ds:SetFilePointer ; SetFilePointer retn 4 sub_403409 endp ; =============== S U B R O U T I N E ======================================= sub_403420 proc near ; CODE XREF: sub_40362B+30p ; sub_40362B+70p hWnd = dword ptr -24h NumberOfBytesWritten= dword ptr -20h Msg = MSG ptr -1Ch arg_0 = dword ptr 4 sub esp, 24h push ebx push ebp push esi push edi xor edi, edi mov [esp+34h+hWnd], edi call ds:GetTickCount ; GetTickCount mov esi, dword_4201A0 sub esi, lDistanceToMove mov ebx, eax add esi, [esp+34h+arg_0] add ebx, 1F4h cmp esi, edi jle loc_403611 push dword_4201A8 ; lDistanceToMove call sub_403409 push edi ; dwMoveMethod push edi ; lpDistanceToMoveHigh push lDistanceToMove ; lDistanceToMove push dword_40A010 ; hFile call ds:SetFilePointer ; SetFilePointer mov nDenominator, esi mov dword_41C190, edi loc_40347E: ; CODE XREF: sub_403420+1B5j mov eax, dword_4201A4 sub eax, dword_4201A8 mov ebp, 4000h cmp eax, ebp jg short loc_403494 mov ebp, eax loc_403494: ; CODE XREF: sub_403420+70j push ebp ; NumberOfBytesRead mov esi, offset dword_41C1A0 push esi ; lpBuffer call sub_4033D7 test eax, eax jz loc_40361D add dword_4201A8, ebp mov dword_414120, esi mov dword_414124, ebp loc_4034BA: ; CODE XREF: sub_403420+18Ej cmp dword_4263E8, edi jz loc_403546 cmp dword_426480, edi jnz short loc_403546 cmp [esp+34h+hWnd], edi jz short loc_403513 mov eax, nDenominator sub eax, dword_4201A0 mov esi, ds:PeekMessageA sub eax, [esp+34h+arg_0] add eax, lDistanceToMove mov dword_41C190, eax jmp short loc_403501 ; --------------------------------------------------------------------------- loc_4034F6: ; CODE XREF: sub_403420+EFj lea eax, [esp+34h+Msg] push eax ; lpMsg call ds:DispatchMessageA ; DispatchMessageA loc_403501: ; CODE XREF: sub_403420+D4j push 1 ; wRemoveMsg push edi ; wMsgFilterMax push edi ; wMsgFilterMin lea eax, [esp+40h+Msg] push edi ; hWnd push eax ; lpMsg call esi ; PeekMessageA test eax, eax jnz short loc_4034F6 jmp short loc_403546 ; --------------------------------------------------------------------------- loc_403513: ; CODE XREF: sub_403420+B2j call ds:GetTickCount ; GetTickCount cmp eax, ebx jbe short loc_403546 mov eax, dword_4263E0 neg eax sbb eax, eax not eax and eax, offset aUnpackingDataD ; "unpacking data: %d%%" push eax ; dwInitParam push offset DialogFunc ; lpDialogFunc push edi ; hWndParent push 6Fh ; lpTemplateName push hInstance ; hInstance call ds:CreateDialogParamA ; CreateDialogParamA mov [esp+34h+hWnd], eax loc_403546: ; CODE XREF: sub_403420+A0j ; sub_403420+ACj ... push offset PathName mov dword_414128, offset dword_414190 mov dword_41412C, 8000h call sub_4069FF test eax, eax pop ecx jl loc_403626 mov esi, dword_414128 mov eax, offset dword_414190 sub esi, eax jz short loc_4035B6 push edi ; lpOverlapped lea ecx, [esp+38h+NumberOfBytesWritten] push ecx ; lpNumberOfBytesWritten push esi ; nNumberOfBytesToWrite push eax ; lpBuffer push dword_40A010 ; hFile call ds:WriteFile ; WriteFile test eax, eax jz loc_403622 cmp esi, [esp+34h+NumberOfBytesWritten] jnz loc_403622 add lDistanceToMove, esi cmp dword_414124, edi jnz loc_4034BA jmp short loc_4035C2 ; --------------------------------------------------------------------------- loc_4035B6: ; CODE XREF: sub_403420+15Aj cmp dword_414124, edi jnz short loc_403626 cmp ebp, edi jz short loc_403626 loc_4035C2: ; CODE XREF: sub_403420+194j mov eax, dword_4201A0 mov ecx, eax sub ecx, lDistanceToMove add ecx, [esp+34h+arg_0] test ecx, ecx jg loc_40347E push edi ; dwMoveMethod push edi ; lpDistanceToMoveHigh push eax ; lDistanceToMove push dword_40A010 ; hFile call ds:SetFilePointer ; SetFilePointer mov esi, [esp+34h+hWnd] cmp esi, edi jz short loc_403611 mov eax, nDenominator push edi ; lParam push edi ; wParam push 113h ; Msg push esi ; hWnd mov dword_41C190, eax call ds:SendMessageA ; SendMessageA push esi ; hWnd call ds:DestroyWindow ; DestroyWindow loc_403611: ; CODE XREF: sub_403420+2Dj ; sub_403420+1D0j xor eax, eax loc_403613: ; CODE XREF: sub_403420+200j ; sub_403420+209j pop edi pop esi pop ebp pop ebx add esp, 24h retn 4 ; --------------------------------------------------------------------------- loc_40361D: ; CODE XREF: sub_403420+82j or eax, 0FFFFFFFFh jmp short loc_403613 ; --------------------------------------------------------------------------- loc_403622: ; CODE XREF: sub_403420+172j ; sub_403420+17Cj push 0FFFFFFFEh jmp short loc_403628 ; --------------------------------------------------------------------------- loc_403626: ; CODE XREF: sub_403420+147j ; sub_403420+19Cj ... push 0FFFFFFFDh loc_403628: ; CODE XREF: sub_403420+204j pop eax jmp short loc_403613 sub_403420 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_40362B(int Buffer,HANDLE hFile,LPVOID lpBuffer,DWORD NumberOfBytesWritten) sub_40362B proc near ; CODE XREF: sub_401610+69Dp ; sub_401610+1460p ... var_8 = dword ptr -8 NumberOfBytesRead= dword ptr -4 Buffer = dword ptr 8 hFile = dword ptr 0Ch lpBuffer = dword ptr 10h NumberOfBytesWritten= dword ptr 14h push ebp mov ebp, esp push ecx push ecx mov eax, [ebp+Buffer] push esi push edi xor edi, edi cmp eax, edi jl short loc_403657 mov ecx, dword_426438 push edi ; dwMoveMethod add eax, ecx push edi ; lpDistanceToMoveHigh push eax ; lDistanceToMove push dword_40A010 ; hFile mov dword_4201A0, eax call ds:SetFilePointer ; SetFilePointer loc_403657: ; CODE XREF: sub_40362B+Ej push 4 pop esi push esi call sub_403420 cmp eax, edi jl loc_403750 push ebx mov ebx, ds:ReadFile push edi ; lpOverlapped lea eax, [ebp+NumberOfBytesRead] push eax ; lpNumberOfBytesRead push esi ; nNumberOfBytesToRead lea eax, [ebp+Buffer] push eax ; lpBuffer push dword_40A010 ; hFile call ebx ; ReadFile test eax, eax jz loc_40374C cmp [ebp+NumberOfBytesRead], esi jnz loc_40374C push [ebp+Buffer] add dword_4201A0, esi call sub_403420 cmp eax, edi mov [ebp+var_8], eax jl loc_40374F cmp [ebp+lpBuffer], edi jnz short loc_40371B cmp [ebp+Buffer], edi jle loc_403747 mov esi, offset dword_41C1A0 loc_4036BE: ; CODE XREF: sub_40362B+E8j mov edi, 4000h cmp [ebp+Buffer], edi jge short loc_4036CB mov edi, [ebp+Buffer] loc_4036CB: ; CODE XREF: sub_40362B+9Bj push 0 ; lpOverlapped lea eax, [ebp+NumberOfBytesRead] push eax ; lpNumberOfBytesRead push edi ; nNumberOfBytesToRead push esi ; lpBuffer push dword_40A010 ; hFile call ebx ; ReadFile test eax, eax jz short loc_40374C cmp edi, [ebp+NumberOfBytesRead] jnz short loc_40374C push 0 ; lpOverlapped lea eax, [ebp+NumberOfBytesWritten] push eax ; lpNumberOfBytesWritten push [ebp+NumberOfBytesRead] ; nNumberOfBytesToWrite push esi ; lpBuffer push [ebp+hFile] ; hFile call ds:WriteFile ; WriteFile test eax, eax jz short loc_403717 cmp [ebp+NumberOfBytesWritten], edi jnz short loc_403717 mov eax, [ebp+NumberOfBytesRead] add [ebp+var_8], eax sub [ebp+Buffer], eax add dword_4201A0, eax cmp [ebp+Buffer], 0 jg short loc_4036BE jmp short loc_403747 ; --------------------------------------------------------------------------- loc_403717: ; CODE XREF: sub_40362B+CEj ; sub_40362B+D3j push 0FFFFFFFEh jmp short loc_40374E ; --------------------------------------------------------------------------- loc_40371B: ; CODE XREF: sub_40362B+83j mov eax, [ebp+Buffer] cmp eax, [ebp+NumberOfBytesWritten] jl short loc_403726 mov eax, [ebp+NumberOfBytesWritten] loc_403726: ; CODE XREF: sub_40362B+F6j push edi ; lpOverlapped lea ecx, [ebp+NumberOfBytesRead] push ecx ; lpNumberOfBytesRead push eax ; nNumberOfBytesToRead push [ebp+lpBuffer] ; lpBuffer push dword_40A010 ; hFile call ebx ; ReadFile test eax, eax jz short loc_40374C mov eax, [ebp+NumberOfBytesRead] add dword_4201A0, eax mov [ebp+var_8], eax loc_403747: ; CODE XREF: sub_40362B+88j ; sub_40362B+EAj mov eax, [ebp+var_8] jmp short loc_40374F ; --------------------------------------------------------------------------- loc_40374C: ; CODE XREF: sub_40362B+58j ; sub_40362B+61j ... push 0FFFFFFFDh loc_40374E: ; CODE XREF: sub_40362B+EEj pop eax loc_40374F: ; CODE XREF: sub_40362B+7Aj ; sub_40362B+11Fj pop ebx loc_403750: ; CODE XREF: sub_40362B+37j pop edi pop esi leave retn 10h sub_40362B endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_403756 proc near ; CODE XREF: start+1EDp var_15C = dword ptr -15Ch lpTempFileName = byte ptr -14Ch Msg = MSG ptr -48h var_2C = dword ptr -2Ch var_28 = dword ptr -28h var_24 = dword ptr -24h var_20 = dword ptr -20h var_1C = dword ptr -1Ch NumberOfBytesWritten= dword ptr -18h var_14 = dword ptr -14h var_10 = dword ptr -10h var_C = dword ptr -0Ch Buffer = dword ptr -8 hWnd = dword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp sub esp, 14Ch push ebx push esi xor ebx, ebx push edi mov [ebp+hWnd], ebx call ds:GetTickCount ; GetTickCount push 400h ; nSize mov esi, offset szStart push esi ; lpFilename push hInstance ; hModule add eax, 3E8h mov [ebp+Buffer], eax mov [ebp+var_C], ebx mov [ebp+var_10], ebx call ds:GetModuleFileNameA ; GetModuleFileNameA push 3 ; dwCreationDisposition push 80000000h ; dwDesiredAccess push esi ; lpFileName call sub_405E7A mov edi, eax cmp edi, 0FFFFFFFFh mov hFile, edi jnz short loc_4037B6 mov eax, offset aErrorLaunching ; "Error launching installer" jmp loc_403A5B ; --------------------------------------------------------------------------- loc_4037B6: ; CODE XREF: sub_403756+54j push esi ; lpszStart call sub_406207 push ebx ; lpFileSizeHigh push edi ; hFile call ds:GetFileSize ; GetFileSize cmp eax, ebx mov nDenominator, eax mov esi, eax jle loc_4038F1 loc_4037D3: ; CODE XREF: sub_403756+187j mov eax, dwBytes neg eax sbb eax, eax and eax, 7E00h add eax, 200h cmp esi, eax mov edi, esi jl short loc_4037EE mov edi, eax loc_4037EE: ; CODE XREF: sub_403756+94j push edi ; NumberOfBytesRead push offset dword_40C108 ; lpBuffer call sub_4033D7 test eax, eax jz loc_4039A5 cmp dwBytes, ebx jnz short loc_403884 push 1Ch push offset dword_40C108 lea eax, [ebp+var_2C] push eax call sub_405E5A mov ecx, [ebp+var_2C] test ecx, 0FFFFFFE0h jnz loc_4038BA cmp [ebp+var_28], 0DEADBEEFh jnz loc_4038BA cmp [ebp+var_1C], 74736E49h jnz short loc_4038BA cmp [ebp+var_20], 74666F73h jnz short loc_4038BA cmp [ebp+var_24], 6C6C754Eh jnz short loc_4038BA mov eax, [ebp+var_14] cmp eax, esi jg loc_4039F6 or [ebp+arg_0], ecx test byte ptr [ebp+arg_0], 8 mov edx, dword_41C190 mov dwBytes, edx jnz short loc_403876 test byte ptr [ebp+arg_0], 4 jnz short loc_4038E3 loc_403876: ; CODE XREF: sub_403756+118j inc [ebp+var_10] lea esi, [eax-4] cmp edi, esi jbe short loc_4038BA mov edi, esi jmp short loc_4038BA ; --------------------------------------------------------------------------- loc_403884: ; CODE XREF: sub_403756+B1j test byte ptr [ebp+arg_0], 2 jnz short loc_4038BA cmp [ebp+hWnd], ebx jnz loc_40398D call ds:GetTickCount ; GetTickCount cmp eax, [ebp+Buffer] jbe short loc_4038BA push offset aVerifyingInsta ; "verifying installer: %d%%" push offset DialogFunc ; lpDialogFunc push ebx ; hWndParent push 6Fh ; lpTemplateName push hInstance ; hInstance call ds:CreateDialogParamA ; CreateDialogParamA mov [ebp+hWnd], eax loc_4038BA: ; CODE XREF: sub_403756+CCj ; sub_403756+D9j ... cmp esi, nDenominator jge short loc_4038D3 push edi push offset dword_40C108 push [ebp+var_C] call sub_40137E mov [ebp+var_C], eax loc_4038D3: ; CODE XREF: sub_403756+16Aj add dword_41C190, edi sub esi, edi cmp esi, ebx jg loc_4037D3 loc_4038E3: ; CODE XREF: sub_403756+11Ej cmp [ebp+hWnd], ebx jz short loc_4038F1 push [ebp+hWnd] ; hWnd call ds:DestroyWindow ; DestroyWindow loc_4038F1: ; CODE XREF: sub_403756+77j ; sub_403756+190j cmp dwBytes, ebx jz loc_4039F6 cmp [ebp+var_10], ebx jz short loc_40392C push dword_41C190 ; lDistanceToMove call sub_403409 push 4 ; NumberOfBytesRead lea eax, [ebp+Buffer] push eax ; lpBuffer call sub_4033D7 test eax, eax jz loc_4039F6 mov eax, [ebp+var_C] cmp eax, [ebp+Buffer] jnz loc_4039F6 loc_40392C: ; CODE XREF: sub_403756+1AAj push [ebp+NumberOfBytesWritten] ; dwBytes call sub_405DBB push offset PathName ; lpPathName mov esi, eax call sub_4069DB lea eax, [ebp+lpTempFileName] mov [esp+15Ch+var_15C], offset szCurrent push eax ; lpTempFileName call sub_405EA9 push ebx ; hTemplateFile push 4000100h ; dwFlagsAndAttributes push 2 ; dwCreationDisposition push ebx ; lpSecurityAttributes push ebx ; dwShareMode push 0C0000000h ; dwDesiredAccess lea eax, [ebp+lpTempFileName] push eax ; lpFileName call ds:CreateFileA ; CreateFileA cmp eax, 0FFFFFFFFh mov dword_40A010, eax jnz short loc_4039B5 mov eax, offset aErrorWritingTe ; "Error writing temporary file. Make sure"... jmp loc_403A5B ; --------------------------------------------------------------------------- loc_403983: ; CODE XREF: sub_403756+248j lea eax, [ebp+Msg] push eax ; lpMsg call ds:DispatchMessageA ; DispatchMessageA loc_40398D: ; CODE XREF: sub_403756+137j push 1 ; wRemoveMsg push ebx ; wMsgFilterMax push ebx ; wMsgFilterMin lea eax, [ebp+Msg] push ebx ; hWnd push eax ; lpMsg call ds:PeekMessageA ; PeekMessageA test eax, eax jnz short loc_403983 jmp loc_4038BA ; --------------------------------------------------------------------------- loc_4039A5: ; CODE XREF: sub_403756+A5j cmp [ebp+hWnd], ebx jz short loc_4039F6 push [ebp+hWnd] ; hWnd call ds:DestroyWindow ; DestroyWindow jmp short loc_4039F6 ; --------------------------------------------------------------------------- loc_4039B5: ; CODE XREF: sub_403756+221j mov eax, dwBytes add eax, 1Ch push eax ; lDistanceToMove call sub_403409 mov ecx, [ebp+var_2C] push [ebp+NumberOfBytesWritten] ; NumberOfBytesWritten not ecx and ecx, 4 mov dword_4201A8, eax sub eax, ecx mov ecx, [ebp+var_14] push esi ; lpBuffer push ebx ; hFile lea eax, [eax+ecx-1Ch] push 0FFFFFFFFh ; Buffer mov dword_4201A4, eax call sub_40362B cmp eax, [ebp+NumberOfBytesWritten] jz short loc_4039FD push esi ; hMem call ds:GlobalFree ; GlobalFree loc_4039F6: ; CODE XREF: sub_403756+FFj ; sub_403756+1A1j ... mov eax, offset aTheInstallerYo ; "The installer you are trying to use is "... jmp short loc_403A5B ; --------------------------------------------------------------------------- loc_4039FD: ; CODE XREF: sub_403756+297j test byte ptr [ebp+arg_0], 2 mov dword_4263E8, esi jz short loc_403A0C or dword ptr [esi], 8 loc_403A0C: ; CODE XREF: sub_403756+2B1j mov eax, [esi] and eax, 18h test byte ptr [ebp+arg_0], 10h mov dword_426480, eax jz short loc_403A20 or byte ptr [esi+1], 4 loc_403A20: ; CODE XREF: sub_403756+2C4j test byte ptr [ebp+var_2C], 1 mov eax, [esi] mov dword_426444, eax jz short loc_403A33 inc dword_426440 loc_403A33: ; CODE XREF: sub_403756+2D5j push 8 lea eax, [esi+44h] pop ecx loc_403A39: ; CODE XREF: sub_403756+2E9j sub eax, 8 add [eax], esi dec ecx jnz short loc_403A39 mov eax, dword_4201A0 mov [esi+3Ch], eax push 40h add esi, 4 push esi push offset dword_426400 call sub_405E5A xor eax, eax loc_403A5B: ; CODE XREF: sub_403756+5Bj ; sub_403756+228j ... pop edi pop esi pop ebx leave retn 4 sub_403756 endp ; =============== S U B R O U T I N E ======================================= sub_403A62 proc near ; CODE XREF: start+4Ap start+6Bp push esi mov esi, offset szCurrent push esi ; lpszCurrent call sub_406009 push esi call sub_405DE6 test eax, eax jnz short loc_403A7A pop esi retn ; --------------------------------------------------------------------------- loc_403A7A: ; CODE XREF: sub_403A62+14j push esi ; lpString1 call sub_4061A6 push 0 ; lpSecurityAttributes push esi ; lpPathName call ds:CreateDirectoryA ; CreateDirectoryA push esi ; lpPathName push offset byte_42C000 ; lpTempFileName call sub_405EA9 pop esi retn sub_403A62 endp ; =============== S U B R O U T I N E ======================================= sub_403A96 proc near ; CODE XREF: start:loc_403DA4p mov eax, hFile cmp eax, 0FFFFFFFFh push esi mov esi, ds:CloseHandle jz short loc_403AB1 push eax ; hObject call esi ; CloseHandle or hFile, 0FFFFFFFFh loc_403AB1: ; CODE XREF: sub_403A96+Fj mov eax, dword_40A010 cmp eax, 0FFFFFFFFh jz short loc_403AC5 push eax ; hObject call esi ; CloseHandle or dword_40A010, 0FFFFFFFFh loc_403AC5: ; CODE XREF: sub_403A96+23j push 7 ; int push offset dword_42D800 ; lpString1 call sub_4067E6 mov eax, lpString test eax, eax pop esi jz short locret_403AE9 push eax ; hMem call ds:GlobalFree ; GlobalFree and lpString, 0 locret_403AE9: ; CODE XREF: sub_403A96+43j retn sub_403A96 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: noreturn public start start proc near var_20 = byte ptr -20h uExitCode = dword ptr -1Ch lpsz = dword ptr -18h var_14 = dword ptr -14h var_10 = dword ptr -10h var_C = byte ptr -0Ch var_4 = dword ptr -4 sub esp, 20h push ebx push ebp push esi push edi xor edi, edi mov [esp+30h+uExitCode], edi mov ebx, offset aErrorWritingTe ; "Error writing temporary file. Make sure"... mov [esp+30h+var_20], 20h call ds:InitCommonControls ; InitCommonControls push edi ; pvReserved call ds:OleInitialize push offset aNsisError ; "NSIS Error" push offset Caption ; lpString1 mov dword_426490, eax call lstrcpyA ; lstrcpyA mov esi, offset szCurrent push esi ; lpBuffer mov ebp, 400h push ebp ; nBufferLength call ds:GetTempPathA ; GetTempPathA call sub_403A62 test eax, eax jnz short loc_403B62 push 3FBh ; uSize push esi ; lpBuffer call ds:GetWindowsDirectoryA ; GetWindowsDirectoryA push offset aTemp ; "\\Temp" push esi ; lpString1 call ds:lstrcatA ; lstrcatA call sub_403A62 test eax, eax jz loc_403DA4 loc_403B62: ; CODE XREF: start+51j mov esi, offset byte_42C000 push esi ; lpFileName call ds:DeleteFileA ; DeleteFileA push ebp ; iMaxLength call ds:GetCommandLineA ; GetCommandLineA mov ebx, ds:lstrcpynA push eax ; lpString2 push esi ; lpString1 call ebx ; lstrcpynA push 0 ; lpModuleName call ds:GetModuleHandleA ; GetModuleHandleA cmp ds:byte_42C000, 22h mov hInstance, eax jnz short loc_403B9F mov [esp+30h+var_20], 22h mov esi, offset byte_42C001 loc_403B9F: ; CODE XREF: start+A9j push dword ptr [esp+30h+var_20] ; char push esi ; lpsz call sub_405DCA push eax ; lpsz call ds:CharNextA ; CharNextA mov esi, eax mov [esp+30h+lpsz], esi jmp loc_403CCC ; --------------------------------------------------------------------------- loc_403BBB: ; CODE XREF: start+1E6j cmp al, 20h jnz short loc_403BC5 loc_403BBF: ; CODE XREF: start+D9j inc esi cmp byte ptr [esi], 20h jz short loc_403BBF loc_403BC5: ; CODE XREF: start+D3j cmp byte ptr [esi], 22h mov [esp+30h+var_20], 20h jnz short loc_403BD5 inc esi mov [esp+30h+var_20], 22h loc_403BD5: ; CODE XREF: start+E3j cmp byte ptr [esi], 2Fh jnz loc_403CBA inc esi mov al, [esi] cmp al, 53h jnz short loc_403BF3 mov cl, [esi+1] or cl, 20h cmp cl, 20h jnz short loc_403BF3 or edi, 2 loc_403BF3: ; CODE XREF: start+F9j start+104j cmp dword ptr [esi], 4352434Eh jnz short loc_403C09 mov cl, [esi+4] or cl, 20h cmp cl, 20h jnz short loc_403C09 or edi, 4 loc_403C09: ; CODE XREF: start+10Fj start+11Aj cmp dword ptr [esi-2], 3D442F20h jz loc_403D2D cmp al, 58h jz short loc_403C22 cmp al, 78h jnz loc_403CBA loc_403C22: ; CODE XREF: start+12Ej mov al, [esi+1] or al, 20h cmp al, 20h jnz loc_403CBA lea eax, [esi+2] mov cl, [eax] or edi, 12h cmp cl, 22h mov [esp+30h+var_14], edi jnz short loc_403C49 mov [esp+30h+var_20], cl add esi, 3 jmp short loc_403C61 ; --------------------------------------------------------------------------- loc_403C49: ; CODE XREF: start+154j cmp cl, 20h jz loc_403D03 test cl, cl jz loc_403D03 mov [esp+30h+var_20], 20h mov esi, eax loc_403C61: ; CODE XREF: start+15Dj push dword ptr [esp+30h+var_20] ; char push esi ; lpsz call sub_405DCA test eax, eax jz loc_403D41 sub eax, esi inc eax inc eax push ebp ; dwBytes mov edi, eax call sub_405DBB test eax, eax mov lpString, eax jz loc_403D48 cmp edi, ebp jbe short loc_403C92 mov edi, ebp loc_403C92: ; CODE XREF: start+1A4j dec edi push edi ; iMaxLength push esi ; lpString2 push eax ; lpString1 call ebx ; lstrcpynA push lpString ; lpString1 call sub_4061A6 push 0 ; lpSecurityAttributes push lpString ; lpPathName call ds:CreateDirectoryA ; CreateDirectoryA mov edi, [esp+30h+var_14] mov [esp+30h+var_20], 2Fh loc_403CBA: ; CODE XREF: start+EEj start+132j ... push dword ptr [esp+30h+var_20] ; char push esi ; lpsz call sub_405DCA mov esi, eax cmp byte ptr [esi], 22h jnz short loc_403CCC inc esi loc_403CCC: ; CODE XREF: start+CCj start+1DFj ... mov al, [esi] test al, al jnz loc_403BBB loc_403CD6: ; CODE XREF: start+255j push edi call sub_403756 mov ebx, eax xor ebp, ebp cmp ebx, ebp jnz loc_403DA4 cmp dword_426440, ebp jz loc_403D8D mov edi, [esp+30h+lpsz] push ebp ; char push edi ; lpsz call sub_405DCA mov esi, eax jmp short loc_403D58 ; --------------------------------------------------------------------------- loc_403D03: ; CODE XREF: start+162j start+16Aj push ebp ; dwBytes call sub_405DBB test eax, eax mov lpString, eax jz short loc_403D22 push offset aCNsis_extractf ; "C:\\NSIS_ExtractFiles\\" push eax ; lpString1 call lstrcpyA ; lstrcpyA mov eax, lpString loc_403D22: ; CODE XREF: start+226j push 0 ; lpSecurityAttributes push eax ; lpPathName call ds:CreateDirectoryA ; CreateDirectoryA jmp short loc_403CCC ; --------------------------------------------------------------------------- loc_403D2D: ; CODE XREF: start+126j mov byte ptr [esi-2], 0 add esi, 2 push esi ; lpString2 push offset byte_42C400 ; lpString1 call lstrcpyA ; lstrcpyA jmp short loc_403CD6 ; --------------------------------------------------------------------------- loc_403D41: ; CODE XREF: start+183j mov ebx, offset aExtractionPath ; "Extraction pathname not properly delimi"... jmp short loc_403DA4 ; --------------------------------------------------------------------------- loc_403D48: ; CODE XREF: start+19Cj mov ebx, offset aOutOfMemory ; "Out of Memory" jmp short loc_403DA4 ; --------------------------------------------------------------------------- loc_403D4F: ; CODE XREF: start+270j cmp dword ptr [esi], 3D3F5F20h jz short loc_403D5C dec esi loc_403D58: ; CODE XREF: start+217j cmp esi, edi jnb short loc_403D4F loc_403D5C: ; CODE XREF: start+26Bj cmp esi, edi mov ebx, offset aErrorLaunching ; "Error launching installer" jb short loc_403DC9 mov byte ptr [esi], 0 add esi, 4 push esi ; lpString2 call sub_40622D test eax, eax jz short loc_403DA4 push esi ; lpString2 push offset byte_42C400 ; lpString1 call lstrcpyA ; lstrcpyA push esi ; lpString2 push offset CurrentDirectory ; lpString1 call lstrcpyA ; lstrcpyA xor ebx, ebx loc_403D8D: ; CODE XREF: start+204j or dword_42648C, 0FFFFFFFFh call sub_405A5A push 1 ; NumberOfBytesWritten mov [esp+34h+uExitCode], eax call sub_4060AD loc_403DA4: ; CODE XREF: start+72j start+1F8j ... call sub_403A96 call ds:OleUninitialize test ebx, ebx jz loc_403ECA push 200010h ; int push ebx ; lpText call sub_405D79 push 2 jmp loc_403F86 ; --------------------------------------------------------------------------- loc_403DC9: ; CODE XREF: start+279j mov dword ptr [esp+30h+var_20], ebp mov edi, offset NewFileName mov esi, offset byte_4201B8 mov ebp, offset ExistingFileName loc_403DDC: ; CODE XREF: start+3D5j push offset szCurrent ; lpString2 push edi ; lpString1 mov byte_4201B8, 22h call lstrcpyA ; lstrcpyA push offset aANsisu__exe ; "A~NSISu_.exe" push esi ; lpString1 call ds:lstrcatA ; lstrcatA push edi ; lpFileName call ds:DeleteFileA ; DeleteFileA test ebx, ebx jz loc_403EB0 push 400h ; nSize push ebp ; lpFilename push hInstance ; hModule call ds:GetModuleFileNameA ; GetModuleFileNameA push (offset aANsisu__exe+1) ; lpString2 lea eax, dword_4209AD[eax] push eax ; lpString1 call ds:lstrcmpiA ; lstrcmpiA test eax, eax jz loc_403DA4 push 0 ; bFailIfExists push edi ; lpNewFileName push ebp ; lpExistingFileName call ds:CopyFileA ; CopyFileA test eax, eax jz short loc_403EB0 push 0 ; hObject push edi ; int call sub_406357 cmp ds:byte_42C400, 0 jz short loc_403E61 push offset byte_42C400 ; lpString2 push ebp ; lpString1 call lstrcpyA ; lstrcpyA jmp short loc_403E67 ; --------------------------------------------------------------------------- loc_403E61: ; CODE XREF: start+368j push ebp ; lpszStart call sub_406207 loc_403E67: ; CODE XREF: start+375j push offset asc_408B0C ; "\" " push esi ; lpString1 call ds:lstrcatA ; lstrcatA push [esp+30h+lpsz] ; lpString2 push esi ; lpString1 call ds:lstrcatA ; lstrcatA push offset a_?_0 ; " _?=" push esi ; lpString1 call ds:lstrcatA ; lstrcatA push ebp ; lpString2 push esi ; lpString1 call ds:lstrcatA ; lstrcatA push esi ; lpString1 call sub_4061A6 push offset szCurrent ; lpCurrentDirectory push esi ; lpCommandLine call sub_405D01 test eax, eax jz short loc_403EB0 push eax ; hObject call ds:CloseHandle ; CloseHandle xor ebx, ebx loc_403EB0: ; CODE XREF: start+319j start+357j ... inc byte ptr aANsisu__exe ; "A~NSISu_.exe" inc dword ptr [esp+30h+var_20] cmp dword ptr [esp+30h+var_20], 1Ah jl loc_403DDC jmp loc_403DA4 ; --------------------------------------------------------------------------- loc_403ECA: ; CODE XREF: start+2C7j cmp dword_426474, 0 jz loc_403F74 push offset ModuleName ; "ADVAPI32.dll" call ds:GetModuleHandleA ; GetModuleHandleA mov edi, eax xor ebx, ebx cmp edi, ebx jz short loc_403F60 mov esi, ds:GetProcAddress push offset ProcName ; "OpenProcessToken" push edi ; hModule call esi ; GetProcAddress push offset aLookupprivileg ; "LookupPrivilegeValueA" push edi ; hModule mov [esp+38h+lpsz], eax call esi ; GetProcAddress push offset aAdjusttokenpri ; "AdjustTokenPrivileges" push edi ; hModule mov ebp, eax call esi ; GetProcAddress cmp [esp+30h+lpsz], ebx mov esi, eax jz short loc_403F60 cmp ebp, ebx jz short loc_403F60 cmp esi, ebx jz short loc_403F60 lea eax, [esp+30h+var_14] push eax push 28h call ds:GetCurrentProcess ; GetCurrentProcess push eax call [esp+3Ch+lpsz] test eax, eax jz short loc_403F60 lea eax, [esp+30h+var_C] push eax push offset aSeshutdownpriv ; "SeShutdownPrivilege" push ebx call ebp push ebx push ebx push ebx lea eax, [esp+3Ch+var_10] push eax push ebx push [esp+44h+var_14] mov [esp+48h+var_10], 1 mov [esp+48h+var_4], 2 call esi loc_403F60: ; CODE XREF: start+3FEj start+42Aj ... push ebx ; dwReason push 2 ; uFlags call ds:ExitWindowsEx ; ExitWindowsEx test eax, eax jnz short loc_403F74 push 9 call sub_4014C9 loc_403F74: ; CODE XREF: start+3E7j start+481j mov eax, dword_42648C cmp eax, 0FFFFFFFFh jz short loc_403F82 mov [esp+30h+uExitCode], eax loc_403F82: ; CODE XREF: start+492j push [esp+30h+uExitCode] ; uExitCode loc_403F86: ; CODE XREF: start+2DAj call ds:ExitProcess ; ExitProcess start endp ; --------------------------------------------------------------------------- db 0CCh ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_403F8D(WPARAM wParam) sub_403F8D proc near ; CODE XREF: sub_405202+234p ; sub_405202+270p ... wParam = dword ptr 4 cmp [esp+wParam], 78h jnz short loc_403F9A inc dword_425BB4 loc_403F9A: ; CODE XREF: sub_403F8D+5j push 0 ; lParam push [esp+4+wParam] ; wParam push 408h ; Msg push dword_4263E0 ; hWnd call ds:SendMessageA ; SendMessageA retn 4 sub_403F8D endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_403FB4(HWND hDlg,int,LPCSTR lpString2) sub_403FB4 proc near ; CODE XREF: sub_40428C+64p ; sub_40428C+71p ... hDlg = dword ptr 4 arg_4 = dword ptr 8 lpString2 = dword ptr 0Ch push [esp+lpString2] ; lpString2 push 0 ; lpString1 call sub_4065B7 push eax ; lpString mov eax, [esp+4+arg_4] add eax, 3E8h push eax ; nIDDlgItem push [esp+8+hDlg] ; hDlg call SetDlgItemTextA ; SetDlgItemTextA retn 0Ch sub_403FB4 endp ; =============== S U B R O U T I N E ======================================= sub_403FD6 proc near ; CODE XREF: sub_40428C+18Ap ; sub_40463C+305p ... cmp dword_42646C, 0 mov eax, dword_4211C8 jnz short loc_403FE9 mov eax, dword_4229D8 loc_403FE9: ; CODE XREF: sub_403FD6+Cj push 1 ; lParam push 1 ; wParam push 0F4h ; Msg push eax ; hWnd call ds:SendMessageA ; SendMessageA retn sub_403FD6 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_403FFA(BOOL bEnable) sub_403FFA proc near ; CODE XREF: sub_40428C+8Fp ; sub_40428C+185p ... bEnable = dword ptr 4 push [esp+bEnable] ; bEnable push dword_4229D8 ; hWnd call ds:EnableWindow ; EnableWindow retn 4 sub_403FFA endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_40400D(WPARAM wParam) sub_40400D proc near ; CODE XREF: sub_40428C+A5p ; sub_40463C+E4p ... wParam = dword ptr 4 push 1 ; lParam push [esp+4+wParam] ; wParam push 28h ; Msg push dword_4263E0 ; hWnd call ds:SendMessageA ; SendMessageA retn 4 sub_40400D endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_404024(UINT Msg) sub_404024 proc near ; CODE XREF: sub_4049AD+20p ; StartAddress+76p ... Msg = dword ptr 4 mov eax, dword_425BA8 test eax, eax jz short locret_40403C push 0 ; lParam push 0 ; wParam push [esp+8+Msg] ; Msg push eax ; hWnd call ds:SendMessageA ; SendMessageA locret_40403C: ; CODE XREF: sub_404024+7j retn 4 sub_404024 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_40403F(HDC hdc,HWND hWnd) sub_40403F proc near ; CODE XREF: sub_40428C+299p ; sub_404531+3Dp ... plbrush = LOGBRUSH ptr -0Ch hdc = dword ptr 8 hWnd = dword ptr 0Ch push ebp mov ebp, esp sub esp, 0Ch add eax, 0FFFFFECDh cmp eax, 5 push esi ja loc_4040E2 push 0FFFFFFEBh ; nIndex push [ebp+hWnd] ; hWnd call ds:GetWindowLongA ; GetWindowLongA mov esi, eax test esi, esi jz short loc_4040E2 test byte ptr [esi+14h], 2 mov eax, [esi] push edi mov edi, ds:GetSysColor jz short loc_404077 push eax ; nIndex call edi ; GetSysColor loc_404077: ; CODE XREF: sub_40403F+33j test byte ptr [esi+14h], 1 jz short loc_404087 push eax ; color push [ebp+hdc] ; hdc call ds:SetTextColor ; SetTextColor loc_404087: ; CODE XREF: sub_40403F+3Cj push dword ptr [esi+10h] ; mode push [ebp+hdc] ; hdc call ds:SetBkMode ; SetBkMode test byte ptr [esi+14h], 8 mov eax, [esi+4] mov [ebp+plbrush.lbColor], eax jz short loc_4040A5 push eax ; nIndex call edi ; GetSysColor mov [ebp+plbrush.lbColor], eax loc_4040A5: ; CODE XREF: sub_40403F+5Ej test byte ptr [esi+14h], 4 pop edi jz short loc_4040B6 push eax ; color push [ebp+hdc] ; hdc call ds:SetBkColor ; SetBkColor loc_4040B6: ; CODE XREF: sub_40403F+6Bj test byte ptr [esi+14h], 10h jz short loc_4040DD mov eax, [esi+8] mov [ebp+plbrush.lbStyle], eax mov eax, [esi+0Ch] test eax, eax jz short loc_4040D0 push eax ; ho call ds:DeleteObject ; DeleteObject loc_4040D0: ; CODE XREF: sub_40403F+88j lea eax, [ebp+plbrush] push eax ; plbrush call ds:CreateBrushIndirect ; CreateBrushIndirect mov [esi+0Ch], eax loc_4040DD: ; CODE XREF: sub_40403F+7Bj mov eax, [esi+0Ch] jmp short loc_4040E4 ; --------------------------------------------------------------------------- loc_4040E2: ; CODE XREF: sub_40403F+Fj ; sub_40403F+24j xor eax, eax loc_4040E4: ; CODE XREF: sub_40403F+A1j pop esi leave retn 8 sub_40403F endp ; =============== S U B R O U T I N E ======================================= sub_4040E9 proc near ; CODE XREF: sub_401610+1A7Dp ; sub_40463C+3Ep ... push offset aInstall_log ; "install.log" push offset byte_42C400 ; lpString2 push offset byte_425780 ; lpString1 call lstrcpyA ; lstrcpyA push eax ; lpString1 call sub_4061A6 push eax ; lpString1 call ds:lstrcatA ; lstrcatA retn sub_4040E9 endp ; =============== S U B R O U T I N E ======================================= sub_40410B proc near ; CODE XREF: sub_405A5A+1Ap ; sub_405A5A:loc_405C08p cmp ds:byte_42D000, 0 push ebx push ebp push esi push edi mov edi, 0FFFFh mov ebx, offset byte_42D000 jz short loc_40412A push ebx call sub_405F74 jmp short loc_404130 ; --------------------------------------------------------------------------- loc_40412A: ; CODE XREF: sub_40410B+15j call ds:GetUserDefaultLangID ; GetUserDefaultLangID loc_404130: ; CODE XREF: sub_40410B+1Dj xor ecx, ecx loc_404132: ; CODE XREF: sub_40410B+8Fj ; sub_40410B+93j mov esi, dword_426424 test esi, esi jz short loc_404185 mov ecx, dword_4263E8 mov ecx, [ecx+64h] mov edx, ecx imul ecx, esi neg edx add ecx, dword_426420 loc_404152: ; CODE XREF: sub_40410B+5Bj xor ebp, ebp add ecx, edx mov bp, [ecx] xor bp, ax dec esi and ebp, edi test bp, bp jz short loc_40416A test esi, esi jnz short loc_404152 jmp short loc_404185 ; --------------------------------------------------------------------------- loc_40416A: ; CODE XREF: sub_40410B+57j mov edx, [ecx+2] mov dword_425BBC, edx mov edx, [ecx+6] mov dword_426488, edx lea edx, [ecx+0Ah] mov dword_425BC8, edx loc_404185: ; CODE XREF: sub_40410B+2Fj ; sub_40410B+5Dj cmp dword_425BC8, 0 jnz short loc_4041A0 cmp di, 0FFFFh jnz short loc_40419C mov edi, 3FFh jmp short loc_404132 ; --------------------------------------------------------------------------- loc_40419C: ; CODE XREF: sub_40410B+88j xor edi, edi jmp short loc_404132 ; --------------------------------------------------------------------------- loc_4041A0: ; CODE XREF: sub_40410B+81j movzx eax, word ptr [ecx] push eax ; int push ebx ; LPSTR call sub_405F5B push 0FFFFFFFEh ; lpString2 push offset Caption ; lpString1 call sub_4065B7 push eax ; lpString push dword_4211D4 ; hWnd call ds:SetWindowTextA ; SetWindowTextA mov eax, dword_42640C test eax, eax mov esi, dword_426408 jz short loc_4041ED mov edi, eax loc_4041D4: ; CODE XREF: sub_40410B+E0j mov eax, [esi] test eax, eax jz short loc_4041E4 push eax ; lpString2 lea eax, [esi+18h] push eax ; lpString1 call sub_4065B7 loc_4041E4: ; CODE XREF: sub_40410B+CDj add esi, 418h dec edi jnz short loc_4041D4 loc_4041ED: ; CODE XREF: sub_40410B+C5j pop edi pop esi pop ebp pop ebx retn sub_40410B endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_4041F2(HWND hWnd,int,LPCITEMIDLIST pidl,LPARAM pszPath) sub_4041F2 proc near ; DATA XREF: sub_40463C+13Eo hWnd = dword ptr 8 arg_4 = dword ptr 0Ch pidl = dword ptr 10h pszPath = dword ptr 14h push ebp mov ebp, esp cmp [ebp+arg_4], 1 push esi mov esi, ds:SendMessageA jnz short loc_40421E push [ebp+pszPath] ; lpString push 3FBh ; nIDDlgItem call sub_405D5D push [ebp+pszPath] ; lParam push 1 ; wParam push 466h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA loc_40421E: ; CODE XREF: sub_4041F2+Ej cmp [ebp+arg_4], 2 jnz short loc_404251 push [ebp+pszPath] ; pszPath push [ebp+pidl] ; pidl call ds:SHGetPathFromIDListA ; SHGetPathFromIDListA test eax, eax jz short loc_404242 push 7 call sub_4014C9 test eax, eax jnz short loc_404242 inc eax jmp short loc_404244 ; --------------------------------------------------------------------------- loc_404242: ; CODE XREF: sub_4041F2+40j ; sub_4041F2+4Bj xor eax, eax loc_404244: ; CODE XREF: sub_4041F2+4Ej push eax ; lParam push 0 ; wParam push 465h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA loc_404251: ; CODE XREF: sub_4041F2+30j xor eax, eax pop esi pop ebp retn 10h sub_4041F2 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_404258(int,LPSTR lpString,int iMaxLength,int) sub_404258 proc near ; DATA XREF: sub_40428C+5Ao arg_0 = dword ptr 8 lpString = dword ptr 0Ch iMaxLength = dword ptr 10h arg_C = dword ptr 14h push ebp mov ebp, esp push [ebp+iMaxLength] ; iMaxLength mov eax, [ebp+arg_0] mov ecx, dword_420DB8 add ecx, eax push ecx ; lpString2 push [ebp+lpString] ; lpString1 call ds:lstrcpynA ; lstrcpynA push [ebp+lpString] ; lpString call lstrlenA ; lstrlenA mov ecx, [ebp+arg_C] add dword_420DB8, eax mov [ecx], eax xor eax, eax pop ebp retn 10h sub_404258 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_40428C(HWND hDlg,int,HDC hdc,WPARAM hWnd) sub_40428C proc near ; DATA XREF: .data:lpDialogFunco lParam = dword ptr -0Ch var_8 = dword ptr -8 lpFile = dword ptr -4 hDlg = dword ptr 8 arg_4 = dword ptr 0Ch hdc = dword ptr 10h hWnd = dword ptr 14h push ebp mov ebp, esp sub esp, 0Ch cmp [ebp+arg_4], 110h push ebx push esi push edi jnz loc_4043AC mov ebx, [ebp+hWnd] mov edi, [ebx+30h] test edi, edi jge short loc_4042BD mov ecx, dword_425BC8 lea eax, ds:4[edi*4] sub ecx, eax mov edi, [ecx] loc_4042BD: ; CODE XREF: sub_40428C+1Ej mov eax, dword_426418 push dword ptr [ebx+34h] ; lpString2 add edi, eax movsx eax, byte ptr [edi] and [ebp+var_8], 0 mov [ebp+hWnd], eax mov eax, [ebx+14h] mov esi, eax shr esi, 5 not esi push 22h ; int push [ebp+hDlg] ; hDlg or esi, eax inc edi mov [ebp+lParam], edi mov [ebp+lpFile], offset sub_404258 and esi, 1 call sub_403FB4 push dword ptr [ebx+38h] ; lpString2 push 23h ; int push [ebp+hDlg] ; hDlg call sub_403FB4 xor eax, eax test esi, esi setz al push 1 ; uCheck add eax, 40Ah push eax ; nIDButton push [ebp+hDlg] ; hDlg call ds:CheckDlgButton ; CheckDlgButton push esi ; bEnable call sub_403FFA push 3E8h ; nIDDlgItem push [ebp+hDlg] ; hDlg call ds:GetDlgItem ; GetDlgItem mov ebx, eax push ebx ; wParam call sub_40400D mov esi, ds:SendMessageA push 0 ; lParam push 1 ; wParam push 45Bh ; Msg push ebx ; hWnd call esi ; SendMessageA mov eax, dword_4263E8 mov eax, [eax+68h] test eax, eax jge short loc_40435D neg eax push eax ; nIndex call ds:GetSysColor ; GetSysColor loc_40435D: ; CODE XREF: sub_40428C+C6j push eax ; lParam push 0 ; wParam push 443h ; Msg push ebx ; hWnd call esi ; SendMessageA push 4010000h ; lParam push 0 ; wParam push 445h ; Msg push ebx ; hWnd call esi ; SendMessageA and dword_420DB8, 0 push edi ; lpString call lstrlenA ; lstrlenA push eax ; lParam push 0 ; wParam push 435h ; Msg push ebx ; hWnd call esi ; SendMessageA lea eax, [ebp+lParam] push eax ; lParam push [ebp+hWnd] ; wParam push 449h ; Msg push ebx ; hWnd call esi ; SendMessageA and dword_4229E4, 0 xor eax, eax jmp loc_40452A ; --------------------------------------------------------------------------- loc_4043AC: ; CODE XREF: sub_40428C+10j cmp [ebp+arg_4], 111h mov edi, ds:GetDlgItem mov ebx, ds:SendMessageA jnz short loc_40441B mov eax, [ebp+hdc] shr eax, 10h test ax, ax jnz loc_40451B xor eax, eax cmp dword_4229E4, eax jnz loc_40451B mov esi, dword_4229DC add esi, 14h test byte ptr [esi], 20h jz loc_40451B push eax ; lParam push eax ; wParam push 0F0h ; Msg push 40Ah ; nIDDlgItem push [ebp+hDlg] ; hDlg call edi ; GetDlgItem push eax ; hWnd call ebx ; SendMessageA mov ecx, [esi] and eax, 1 and ecx, 0FFFFFFFEh or ecx, eax push eax ; bEnable mov [esi], ecx call sub_403FFA call sub_403FD6 loc_40441B: ; CODE XREF: sub_40428C+133j cmp [ebp+arg_4], 4Eh jnz loc_40450C push 3E8h ; nIDDlgItem push [ebp+hDlg] ; hDlg call edi ; GetDlgItem mov ecx, [ebp+hWnd] cmp dword ptr [ecx+8], 70Bh jnz loc_4044C7 cmp dword ptr [ecx+0Ch], 201h mov esi, ds:SetCursor mov edi, ds:LoadCursorA jnz short loc_4044B2 mov edx, [ecx+18h] mov [ebp+lParam], edx mov edx, [ecx+1Ch] mov [ebp+var_8], edx sub edx, [ebp+lParam] mov [ebp+lpFile], offset byte_424F80 cmp edx, 800h jnb short loc_4044B2 lea ecx, [ebp+lParam] push ecx ; lParam push 0 ; wParam push 44Bh ; Msg push eax ; hWnd call ebx ; SendMessageA push 7F02h ; lpCursorName push 0 ; hInstance call edi ; LoadCursorA push eax ; hCursor call esi ; SetCursor push 1 ; nShowCmd push 0 ; lpDirectory push 0 ; lpParameters push [ebp+lpFile] ; lpFile push offset Operation ; "open" push [ebp+hDlg] ; hwnd call ds:ShellExecuteA ; ShellExecuteA push 7F00h ; lpCursorName push 0 ; hInstance call edi ; LoadCursorA push eax ; hCursor call esi ; SetCursor mov ecx, [ebp+hWnd] loc_4044B2: ; CODE XREF: sub_40428C+1C6j ; sub_40428C+1E4j cmp dword ptr [ecx+0Ch], 20h jnz short loc_4044C7 push 7F89h ; lpCursorName push 0 ; hInstance call edi ; LoadCursorA push eax ; hCursor call esi ; SetCursor mov ecx, [ebp+hWnd] loc_4044C7: ; CODE XREF: sub_40428C+1ADj ; sub_40428C+22Aj cmp dword ptr [ecx+8], 700h jnz short loc_40451E cmp dword ptr [ecx+0Ch], 100h jnz short loc_40451E cmp dword ptr [ecx+10h], 0Dh jnz short loc_4044F3 push 0 ; lParam push 1 ; wParam push 111h ; Msg push dword_4263E0 ; hWnd call ebx ; SendMessageA mov ecx, [ebp+hWnd] loc_4044F3: ; CODE XREF: sub_40428C+251j cmp dword ptr [ecx+10h], 1Bh jnz short loc_404507 push 0 ; lParam push 0 ; wParam push 10h ; Msg push dword_4263E0 ; hWnd call ebx ; SendMessageA loc_404507: ; CODE XREF: sub_40428C+26Bj xor eax, eax inc eax jmp short loc_40452A ; --------------------------------------------------------------------------- loc_40450C: ; CODE XREF: sub_40428C+193j cmp [ebp+arg_4], 40Bh jnz short loc_40451B inc dword_4229E4 loc_40451B: ; CODE XREF: sub_40428C+13Ej ; sub_40428C+14Cj ... mov ecx, [ebp+hWnd] loc_40451E: ; CODE XREF: sub_40428C+242j ; sub_40428C+24Bj mov eax, [ebp+arg_4] push ecx ; hWnd push [ebp+hdc] ; hdc call sub_40403F loc_40452A: ; CODE XREF: sub_40428C+11Bj ; sub_40428C+27Ej pop edi pop esi pop ebx leave retn 10h sub_40428C endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_404531(HWND hDlg,int,HDC hdc,HWND hWnd) sub_404531 proc near ; DATA XREF: .data:0040A038o hDlg = dword ptr 8 arg_4 = dword ptr 0Ch hdc = dword ptr 10h hWnd = dword ptr 14h push ebp mov ebp, esp cmp [ebp+arg_4], 110h push esi mov esi, [ebp+hWnd] jnz short loc_404567 push dword ptr [esi+30h] ; lpString2 push 1Dh ; int push [ebp+hDlg] ; hDlg call sub_403FB4 mov eax, [esi+3Ch] shl eax, 0Ah add eax, offset dword_427000 push eax ; lpString push 3E8h ; nIDDlgItem push [ebp+hDlg] ; hDlg call SetDlgItemTextA ; SetDlgItemTextA loc_404567: ; CODE XREF: sub_404531+Ej mov eax, [ebp+arg_4] push esi ; hWnd push [ebp+hdc] ; hdc call sub_40403F pop esi pop ebp retn 10h sub_404531 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_404578(int nIDDlgItem,LPCSTR lpString2) sub_404578 proc near ; CODE XREF: sub_40463C+2A5p ; sub_40463C+2B4p ... var_40 = byte ptr -40h String1 = byte ptr -20h nIDDlgItem = dword ptr 8 lpString2 = dword ptr 0Ch push ebp mov ebp, esp sub esp, 40h push ebx push esi push edi push 14h pop edi mov esi, eax cmp esi, 400h push 0FFFFFFDCh pop ebx jnb short loc_404597 xor edi, edi push 0FFFFFFDEh jmp short loc_4045A4 ; --------------------------------------------------------------------------- loc_404597: ; CODE XREF: sub_404578+17j cmp esi, 100000h jnb short loc_4045A5 push 0Ah pop edi push 0FFFFFFDDh loc_4045A4: ; CODE XREF: sub_404578+1Dj pop ebx loc_4045A5: ; CODE XREF: sub_404578+25j push 0FFFFFFDFh ; lpString2 lea eax, [ebp+String1] push eax ; lpString1 call sub_4065B7 push eax push ebx ; lpString2 lea eax, [ebp+var_40] push eax ; lpString1 call sub_4065B7 push eax lea eax, [esi+esi*4] push 0Ah shl eax, 1 mov ecx, edi shr eax, cl pop ecx xor edx, edx div ecx mov ecx, edi shr esi, cl push edx push esi push offset aU_USS ; "%u.%u%s%s" push [ebp+lpString2] ; lpString2 mov esi, offset byte_4219D8 push esi ; lpString1 call sub_4065B7 push esi ; lpString mov edi, eax call lstrlenA ; lstrlenA add edi, eax push edi ; LPSTR call ds:wsprintfA ; wsprintfA add esp, 18h push esi ; lpString push [ebp+nIDDlgItem] ; nIDDlgItem push dword_425BA8 ; hDlg call SetDlgItemTextA ; SetDlgItemTextA pop edi pop esi pop ebx leave retn 8 sub_404578 endp ; =============== S U B R O U T I N E ======================================= sub_40460F proc near ; CODE XREF: sub_40463C+281p ; sub_404A94+5A7p ... arg_0 = dword ptr 4 mov edx, dword_42640C mov ecx, dword_426408 xor eax, eax test edx, edx jz short locret_404639 push esi loc_404622: ; CODE XREF: sub_40460F+27j test byte ptr [ecx+8], 1 jz short loc_40462F mov esi, [esp+4+arg_0] add eax, [ecx+esi*4] loc_40462F: ; CODE XREF: sub_40460F+17j add ecx, 418h dec edx jnz short loc_404622 pop esi locret_404639: ; CODE XREF: sub_40460F+10j retn 4 sub_40460F endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_40463C(HWND hDlg,int,HDC hdc,int) sub_40463C proc near ; DATA XREF: .data:0040A030o bi = _browseinfoA ptr -48h var_28 = dword ptr -28h TotalNumberOfClusters= dword ptr -24h var_20 = dword ptr -20h var_1C = byte ptr -1Ch BytesPerSector = dword ptr -18h var_14 = byte ptr -14h SectorsPerCluster= dword ptr -10h nNumerator = dword ptr -0Ch hWnd = dword ptr -8 lpString2 = dword ptr -4 hDlg = dword ptr 8 arg_4 = dword ptr 0Ch hdc = dword ptr 10h arg_C = dword ptr 14h push ebp mov ebp, esp sub esp, 48h mov eax, dword_4229DC push ebx push esi mov esi, [eax+3Ch] shl esi, 0Ah mov [ebp+var_20], eax mov eax, [eax+38h] add esi, offset dword_427000 cmp [ebp+arg_4], 40Bh push edi mov [ebp+lpString2], eax mov ebx, 3FBh jnz short loc_404692 push esi ; lpString push ebx ; nIDDlgItem call sub_405D5D push esi ; lpszCurrent call sub_406009 call sub_4040E9 push 3F0h ; nIDButton push [ebp+hDlg] ; hDlg call ds:IsDlgButtonChecked ; IsDlgButtonChecked mov dword_423F78, eax loc_404692: ; CODE XREF: sub_40463C+2Fj cmp [ebp+arg_4], 110h jnz loc_404725 push 10h ; vKey call ds:GetAsyncKeyState ; GetAsyncKeyState test ah, ah mov edi, ds:GetDlgItem jns short loc_4046D5 push 3F0h ; nIDDlgItem push [ebp+hDlg] ; hDlg call edi ; GetDlgItem push 0FFFFFFE0h ; lpString2 push 8 ; int push [ebp+hDlg] ; hDlg mov [ebp+hWnd], eax call sub_403FB4 push 8 ; nCmdShow push [ebp+hWnd] ; hWnd call ds:ShowWindow ; ShowWindow loc_4046D5: ; CODE XREF: sub_40463C+73j push esi call sub_405DE6 test eax, eax jz short loc_4046EF push esi ; lpsz call sub_405E0D test eax, eax jnz short loc_4046EF push esi ; lpString1 call sub_4061A6 loc_4046EF: ; CODE XREF: sub_40463C+A1j ; sub_40463C+ABj push esi ; lpString push ebx ; nIDDlgItem push [ebp+hDlg] ; hDlg call SetDlgItemTextA ; SetDlgItemTextA mov eax, [ebp+arg_C] push dword ptr [eax+34h] ; lpString2 push 1 ; int push [ebp+hDlg] ; hDlg call sub_403FB4 mov eax, [ebp+arg_C] push dword ptr [eax+30h] ; lpString2 push 14h ; int push [ebp+hDlg] ; hDlg call sub_403FB4 push ebx ; nIDDlgItem push [ebp+hDlg] ; hDlg call edi ; GetDlgItem push eax ; wParam call sub_40400D loc_404725: ; CODE XREF: sub_40463C+5Dj cmp [ebp+arg_4], 111h jnz loc_4047ED movzx eax, word ptr [ebp+hdc] cmp eax, ebx jnz short loc_404752 mov ecx, [ebp+hdc] shr ecx, 10h cmp cx, 300h jnz loc_40494C mov [ebp+arg_4], 40Fh loc_404752: ; CODE XREF: sub_40463C+FCj cmp eax, 3E9h jnz loc_4047ED push 7 pop ecx push [ebp+lpString2] ; lpString2 xor eax, eax lea edi, [ebp+bi.pidlRoot] rep stosd mov eax, [ebp+hDlg] mov edi, offset byte_4219D8 push 0 ; lpString1 mov [ebp+bi.hwndOwner], eax mov [ebp+bi.pszDisplayName], edi mov [ebp+bi.lpfn], offset sub_4041F2 mov [ebp+bi.lParam], esi call sub_4065B7 mov [ebp+bi.lpszTitle], eax lea eax, [ebp+bi] push eax ; lpbi mov [ebp+bi.ulFlags], 41h call ds:SHBrowseForFolderA ; SHBrowseForFolderA test eax, eax jz short loc_4047ED push eax call sub_405CD6 mov eax, dword_4263E8 mov eax, [eax+11Ch] test eax, eax jz short loc_4047DD push eax ; lpString2 push 0 ; lpString1 call sub_4065B7 push edi ; lpString2 mov edi, offset byte_424F80 push edi ; lpString1 call ds:lstrcmpiA ; lstrcmpiA test eax, eax jz short loc_4047DD push edi ; lpString2 push esi ; lpString1 call sub_4061A6 push eax ; lpString1 call ds:lstrcatA ; lstrcatA loc_4047DD: ; CODE XREF: sub_40463C+178j ; sub_40463C+191j inc dword_420DC4 push esi ; lpString push ebx ; nIDDlgItem push [ebp+hDlg] ; hDlg call SetDlgItemTextA ; SetDlgItemTextA loc_4047ED: ; CODE XREF: sub_40463C+F0j ; sub_40463C+11Bj ... cmp [ebp+arg_4], 40Fh jz short loc_404803 cmp [ebp+arg_4], 405h jnz loc_40494C loc_404803: ; CODE XREF: sub_40463C+1B8j and [ebp+lpString2], 0 and [ebp+hWnd], 0 push esi ; lpString push ebx ; nIDDlgItem or edi, 0FFFFFFFFh call sub_405D5D push esi ; lpString2 call sub_40622D test eax, eax jnz short loc_404826 mov [ebp+lpString2], 1 loc_404826: ; CODE XREF: sub_40463C+1E1j push esi ; lpString2 mov esi, offset RootPathName push esi ; lpString1 call lstrcpyA ; lstrcpyA push esi ; lpsz call sub_405E0D test eax, eax jz short loc_40483F mov byte ptr [eax], 0 loc_40483F: ; CODE XREF: sub_40463C+1FEj push offset aKernel32_dll ; "KERNEL32.dll" call ds:GetModuleHandleA ; GetModuleHandleA test eax, eax mov ebx, 400h jz short loc_404885 push offset aGetdiskfreespa ; "GetDiskFreeSpaceExA" push eax ; hModule call ds:GetProcAddress ; GetProcAddress test eax, eax jz short loc_404885 lea ecx, [ebp+var_1C] push ecx lea ecx, [ebp+var_14] push ecx lea ecx, [ebp+var_28] push ecx push esi call eax test eax, eax jz short loc_404885 mov edi, [ebp+var_28] mov eax, [ebp+TotalNumberOfClusters] shrd edi, eax, 0Ah shr eax, 0Ah jmp short loc_4048B4 ; --------------------------------------------------------------------------- loc_404885: ; CODE XREF: sub_40463C+215j ; sub_40463C+225j ... lea eax, [ebp+TotalNumberOfClusters] push eax ; lpTotalNumberOfClusters lea eax, [ebp+nNumerator] push eax ; lpNumberOfFreeClusters lea eax, [ebp+BytesPerSector] push eax ; lpBytesPerSector lea eax, [ebp+SectorsPerCluster] push eax ; lpSectorsPerCluster push esi ; lpRootPathName call ds:GetDiskFreeSpaceA ; GetDiskFreeSpaceA test eax, eax jz short loc_4048BB mov eax, [ebp+SectorsPerCluster] imul eax, [ebp+BytesPerSector] push ebx ; nDenominator push [ebp+nNumerator] ; nNumerator push eax ; nNumber call ds:MulDiv ; MulDiv mov edi, eax loc_4048B4: ; CODE XREF: sub_40463C+247j mov [ebp+hWnd], 1 loc_4048BB: ; CODE XREF: sub_40463C+262j push 5 call sub_40460F cmp edi, eax jnb short loc_4048CD mov [ebp+lpString2], 2 loc_4048CD: ; CODE XREF: sub_40463C+288j mov ecx, dword_425BC8 xor esi, esi cmp [ecx+10h], esi jz short loc_404905 push 0FFFFFFFBh ; lpString2 push 3FFh ; nIDDlgItem call sub_404578 cmp [ebp+hWnd], esi jz short loc_4048F7 push 0FFFFFFFCh ; lpString2 push ebx ; nIDDlgItem mov eax, edi call sub_404578 jmp short loc_404905 ; --------------------------------------------------------------------------- loc_4048F7: ; CODE XREF: sub_40463C+2ADj push offset word_408BBE ; lpString push ebx ; nIDDlgItem push [ebp+hDlg] ; hDlg call SetDlgItemTextA ; SetDlgItemTextA loc_404905: ; CODE XREF: sub_40463C+29Cj ; sub_40463C+2B9j mov eax, [ebp+lpString2] cmp eax, esi mov dword_426484, eax jnz short loc_40491B push 7 call sub_4014C9 mov [ebp+lpString2], eax loc_40491B: ; CODE XREF: sub_40463C+2D3j mov eax, [ebp+var_20] test [eax+14h], ebx jz short loc_404926 mov [ebp+lpString2], esi loc_404926: ; CODE XREF: sub_40463C+2E5j xor eax, eax cmp [ebp+lpString2], esi setz al push eax ; bEnable call sub_403FFA cmp [ebp+lpString2], esi jnz short loc_404946 cmp dword_420DC4, esi jnz short loc_404946 call sub_403FD6 loc_404946: ; CODE XREF: sub_40463C+2FBj ; sub_40463C+303j mov dword_420DC4, esi loc_40494C: ; CODE XREF: sub_40463C+109j ; sub_40463C+1C1j push [ebp+arg_C] ; hWnd mov eax, [ebp+arg_4] push [ebp+hdc] ; hdc call sub_40403F pop edi pop esi pop ebx leave retn 10h sub_40463C endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_404961(HWND hWnd) sub_404961 proc near ; CODE XREF: sub_4049AD+59p ; sub_404A94+2D3p lParam = tagPOINT ptr -10h var_8 = byte ptr -8 var_4 = dword ptr -4 hWnd = dword ptr 8 push ebp mov ebp, esp sub esp, 10h call ds:GetMessagePos ; GetMessagePos movsx ecx, ax shr eax, 10h movsx eax, ax mov [ebp+lParam.y], eax lea eax, [ebp+lParam] push eax ; lpPoint push [ebp+hWnd] ; hWnd mov [ebp+lParam.x], ecx call ds:ScreenToClient ; ScreenToClient lea eax, [ebp+lParam] push eax ; lParam push 0 ; wParam push 1111h ; Msg push [ebp+hWnd] ; hWnd call ds:SendMessageA ; SendMessageA mov al, [ebp+var_8] and al, 66h neg al sbb eax, eax and eax, [ebp+var_4] leave retn 4 sub_404961 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_4049AD(HWND hWnd,UINT Msg,WPARAM wParam,int) sub_4049AD proc near ; DATA XREF: sub_404A94+89o lParam = dword ptr -28h var_24 = dword ptr -24h var_4 = dword ptr -4 hWnd = dword ptr 8 Msg = dword ptr 0Ch wParam = dword ptr 10h arg_C = dword ptr 14h push ebp mov ebp, esp sub esp, 28h cmp [ebp+Msg], 102h push esi push edi jnz short loc_4049D9 cmp [ebp+wParam], 20h jnz loc_404A75 push 413h ; Msg call sub_404024 xor eax, eax jmp loc_404A8E ; --------------------------------------------------------------------------- loc_4049D9: ; CODE XREF: sub_4049AD+Fj or edi, 0FFFFFFFFh cmp [ebp+Msg], 2 jnz short loc_4049E8 mov dword_40A03C, edi loc_4049E8: ; CODE XREF: sub_4049AD+33j cmp [ebp+Msg], 200h mov esi, 419h jnz short loc_404A35 push [ebp+hWnd] ; hWnd call ds:IsWindowVisible ; IsWindowVisible test eax, eax jz short loc_404A75 push [ebp+hWnd] ; hWnd call sub_404961 test eax, eax mov [ebp+var_24], eax jz short loc_404A30 lea eax, [ebp+lParam] push eax ; lParam push 0 ; wParam push 110Ch ; Msg push [ebp+hWnd] ; hWnd mov [ebp+lParam], 4 call ds:SendMessageA ; SendMessageA mov edi, [ebp+var_4] loc_404A30: ; CODE XREF: sub_4049AD+63j mov [ebp+Msg], esi jmp short loc_404A38 ; --------------------------------------------------------------------------- loc_404A35: ; CODE XREF: sub_4049AD+47j mov edi, [ebp+arg_C] loc_404A38: ; CODE XREF: sub_4049AD+86j cmp [ebp+Msg], esi jnz short loc_404A78 cmp dword_40A03C, edi jz short loc_404A78 push ebx mov esi, offset dword_427000 push esi ; lpString2 mov ebx, offset byte_4219D8 push ebx ; lpString1 mov dword_40A03C, edi call lstrcpyA ; lstrcpyA push edi ; int push esi ; LPSTR call sub_405F5B push 6 call sub_4014C9 push ebx ; lpString2 push esi ; lpString1 call lstrcpyA ; lstrcpyA pop ebx jmp short loc_404A78 ; --------------------------------------------------------------------------- loc_404A75: ; CODE XREF: sub_4049AD+15j ; sub_4049AD+54j mov edi, [ebp+arg_C] loc_404A78: ; CODE XREF: sub_4049AD+8Ej ; sub_4049AD+96j ... push edi ; lParam push [ebp+wParam] ; wParam push [ebp+Msg] ; Msg push [ebp+hWnd] ; hWnd push lpPrevWndFunc ; lpPrevWndFunc call ds:CallWindowProcA ; CallWindowProcA loc_404A8E: ; CODE XREF: sub_4049AD+27j pop edi pop esi leave retn 10h sub_4049AD endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_404A94(HWND hDlg,int,HDC hdc,int) sub_404A94 proc near ; DATA XREF: .data:0040A02Co lParam = dword ptr -54h var_50 = dword ptr -50h var_4C = dword ptr -4Ch var_48 = dword ptr -48h var_44 = dword ptr -44h var_40 = dword ptr -40h var_3C = dword ptr -3Ch var_38 = dword ptr -38h var_2C = dword ptr -2Ch var_28 = dword ptr -28h 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 ho = dword ptr -10h var_C = dword ptr -0Ch wParam = dword ptr -8 hWnd = dword ptr -4 hDlg = dword ptr 8 arg_4 = dword ptr 0Ch hdc = dword ptr 10h arg_C = dword ptr 14h push ebp mov ebp, esp sub esp, 54h push ebx push esi mov esi, ds:GetDlgItem push edi push 3F9h ; nIDDlgItem push [ebp+hDlg] ; hDlg call esi ; GetDlgItem push 408h ; nIDDlgItem push [ebp+hDlg] ; hDlg mov [ebp+wParam], eax call esi ; GetDlgItem mov esi, ds:SendMessageA mov [ebp+hWnd], eax mov eax, dword_426408 mov [ebp+var_18], eax mov eax, dword_4263E8 add eax, 94h xor ebx, ebx cmp [ebp+arg_4], 110h push 10h mov [ebp+var_1C], eax pop edi jnz loc_404D04 mov eax, [ebp+hDlg] mov dword_42644C, eax mov eax, dword_42640C shl eax, 2 push eax ; dwBytes mov [ebp+var_20], ebx mov [ebp+var_14], 2 call sub_405DBB push 6Eh ; lpBitmapName push hInstance ; hInstance mov hMem, eax call ds:LoadBitmapA ; LoadBitmapA push offset sub_4049AD ; dwNewLong push 0FFFFFFFCh ; nIndex push [ebp+hWnd] ; hWnd mov [ebp+ho], eax call ds:SetWindowLongA ; SetWindowLongA push ebx ; cGrow push 6 ; cInitial push 21h ; flags push edi ; cy push edi ; cx mov lpPrevWndFunc, eax call ds:ImageList_Create ; ImageList_Create push 0FF00FFh ; crMask push [ebp+ho] ; hbmImage mov lParam, eax push eax ; himl call ds:ImageList_AddMasked ; ImageList_AddMasked push lParam ; lParam push 2 ; wParam push 1109h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA push ebx ; lParam push ebx ; wParam push 111Ch ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA cmp eax, edi jge short loc_404B84 push ebx ; lParam push edi ; wParam push 111Bh ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA loc_404B84: ; CODE XREF: sub_404A94+E2j push [ebp+ho] ; ho call ds:DeleteObject ; DeleteObject xor edi, edi loc_404B8F: ; CODE XREF: sub_404A94+130j mov eax, [ebp+var_1C] mov eax, [eax+edi*4] cmp eax, ebx jz short loc_404BC0 cmp edi, 20h jz short loc_404BA1 mov [ebp+var_14], ebx loc_404BA1: ; CODE XREF: sub_404A94+108j push eax ; lpString2 push ebx ; lpString1 call sub_4065B7 push eax ; lParam push ebx ; wParam push 143h ; Msg push [ebp+wParam] ; hWnd call esi ; SendMessageA push edi ; lParam push eax ; wParam push 151h ; Msg push [ebp+wParam] ; hWnd call esi ; SendMessageA loc_404BC0: ; CODE XREF: sub_404A94+103j inc edi cmp edi, 21h jl short loc_404B8F mov eax, [ebp+var_14] mov edi, [ebp+arg_C] push dword ptr [edi+eax*4+30h] ; lpString2 push 15h ; int push [ebp+hDlg] ; hDlg call sub_403FB4 mov eax, [ebp+var_14] push dword ptr [edi+eax*4+34h] ; lpString2 push 16h ; int push [ebp+hDlg] ; hDlg call sub_403FB4 xor edi, edi cmp dword_42640C, ebx mov [ebp+var_C], ebx jle loc_404CB8 mov eax, [ebp+var_18] add eax, 8 mov [ebp+ho], eax mov ebx, 1100h loc_404C0A: ; CODE XREF: sub_404A94+217j mov edx, [ebp+ho] lea eax, [edx+10h] cmp byte ptr [eax], 0 jz loc_404C9D mov ecx, [ebp+var_C] mov [ebp+var_3C], eax mov eax, [edx] push 20h mov [ebp+lParam], ecx pop ecx mov edx, eax and edx, ecx test al, 2 mov [ebp+var_50], 0FFFF0002h mov [ebp+var_4C], 0Dh mov [ebp+var_40], ecx mov [ebp+var_28], edi mov [ebp+var_44], edx jz short loc_404C6C lea eax, [ebp+lParam] push eax ; lParam push 0 ; wParam push ebx ; Msg push [ebp+hWnd] ; hWnd mov [ebp+var_4C], 4Dh mov [ebp+var_2C], 1 call esi ; SendMessageA mov [ebp+var_C], eax mov [ebp+var_20], 1 jmp short loc_404C94 ; --------------------------------------------------------------------------- loc_404C6C: ; CODE XREF: sub_404A94+1B0j mov eax, [ebp+ho] test byte ptr [eax], 4 jz short loc_404C88 push [ebp+var_C] ; lParam push 3 ; wParam push 110Ah ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA mov [ebp+var_C], eax jmp short loc_404C9D ; --------------------------------------------------------------------------- loc_404C88: ; CODE XREF: sub_404A94+1DEj lea eax, [ebp+lParam] push eax ; lParam push 0 ; wParam push ebx ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA loc_404C94: ; CODE XREF: sub_404A94+1D6j mov ecx, hMem mov [ecx+edi*4], eax loc_404C9D: ; CODE XREF: sub_404A94+17Fj ; sub_404A94+1F2j add [ebp+ho], 418h inc edi cmp edi, dword_42640C jl loc_404C0A xor ebx, ebx cmp [ebp+var_20], ebx jnz short loc_404CD2 loc_404CB8: ; CODE XREF: sub_404A94+162j push 0FFFFFFF0h ; nIndex push [ebp+hWnd] ; hWnd call ds:GetWindowLongA ; GetWindowLongA and eax, 0FFFFFFFBh push eax ; dwNewLong push 0FFFFFFF0h ; nIndex push [ebp+hWnd] ; hWnd call ds:SetWindowLongA ; SetWindowLongA loc_404CD2: ; CODE XREF: sub_404A94+222j push ebx ; lParam push 6 ; wParam push 115h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA cmp [ebp+var_14], ebx jnz short loc_404CFC push 5 ; nCmdShow push [ebp+wParam] ; hWnd call ds:ShowWindow ; ShowWindow push [ebp+wParam] ; wParam call sub_40400D jmp loc_40508A ; --------------------------------------------------------------------------- loc_404CFC: ; CODE XREF: sub_404A94+24Ej push [ebp+hWnd] ; wParam call sub_40400D loc_404D04: ; CODE XREF: sub_404A94+50j cmp [ebp+arg_4], 405h jnz short loc_404D1F xor edi, edi inc edi mov [ebp+hdc], ebx mov [ebp+arg_C], edi mov [ebp+arg_4], 40Fh jmp short loc_404D22 ; --------------------------------------------------------------------------- loc_404D1F: ; CODE XREF: sub_404A94+277j mov edi, [ebp+arg_C] loc_404D22: ; CODE XREF: sub_404A94+289j cmp [ebp+arg_4], 4Eh mov eax, 413h jz short loc_404D36 cmp [ebp+arg_4], eax jnz loc_404E34 loc_404D36: ; CODE XREF: sub_404A94+297j cmp [ebp+arg_4], eax jz short loc_404D48 cmp dword ptr [edi+4], 408h jnz loc_404E34 loc_404D48: ; CODE XREF: sub_404A94+2A5j test byte ptr dword_426444+1, 2 jnz loc_404DF2 cmp [ebp+arg_4], eax jz short loc_404D6E cmp dword ptr [edi+8], 0FFFFFFFEh jnz loc_404DF2 push [ebp+hWnd] ; hWnd call sub_404961 jmp short loc_404D7B ; --------------------------------------------------------------------------- loc_404D6E: ; CODE XREF: sub_404A94+2C4j push ebx ; lParam push 9 ; wParam push 110Ah ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA loc_404D7B: ; CODE XREF: sub_404A94+2D8j cmp eax, ebx mov [ebp+var_44], eax jz short loc_404DF2 lea eax, [ebp+var_48] push eax ; lParam push ebx ; wParam push 110Ch ; Msg push [ebp+hWnd] ; hWnd mov [ebp+var_48], 4 call esi ; SendMessageA test eax, eax jz short loc_404DF2 mov eax, [ebp+var_24] mov ecx, [ebp+var_18] imul eax, 418h lea ecx, [eax+ecx+8] mov eax, [ecx] test al, 10h jnz short loc_404DF2 test al, 40h jz short loc_404DC9 xor eax, 80h test al, al jns short loc_404DC4 or eax, 1 jmp short loc_404DCC ; --------------------------------------------------------------------------- loc_404DC4: ; CODE XREF: sub_404A94+329j and eax, 0FFFFFFFEh jmp short loc_404DCC ; --------------------------------------------------------------------------- loc_404DC9: ; CODE XREF: sub_404A94+320j xor eax, 1 loc_404DCC: ; CODE XREF: sub_404A94+32Ej ; sub_404A94+333j mov [ecx], eax push [ebp+var_24] call sub_40117D mov eax, dword_426444 xor ecx, ecx shr eax, 8 inc ecx not eax and eax, ecx mov [ebp+hdc], ecx mov [ebp+arg_C], eax mov [ebp+arg_4], 40Fh loc_404DF2: ; CODE XREF: sub_404A94+2BBj ; sub_404A94+2CAj ... cmp edi, ebx jz short loc_404E34 cmp dword ptr [edi+8], 0FFFFFE6Eh jnz short loc_404E0D push dword ptr [edi+5Ch] ; lParam push ebx ; wParam push 419h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA loc_404E0D: ; CODE XREF: sub_404A94+369j cmp dword ptr [edi+8], 0FFFFFE6Ah jnz short loc_404E34 mov eax, [edi+5Ch] mov ecx, [ebp+var_18] imul eax, 418h cmp dword ptr [edi+0Ch], 2 lea eax, [eax+ecx+8] jnz short loc_404E31 or dword ptr [eax], 20h jmp short loc_404E34 ; --------------------------------------------------------------------------- loc_404E31: ; CODE XREF: sub_404A94+396j and dword ptr [eax], 0FFFFFFDFh loc_404E34: ; CODE XREF: sub_404A94+29Cj ; sub_404A94+2AEj ... cmp [ebp+arg_4], 111h jnz short loc_404EAF cmp word ptr [ebp+hdc], 3F9h jnz loc_40508A mov eax, [ebp+hdc] shr eax, 10h cmp ax, 1 jnz loc_40508A push ebx ; lParam push ebx ; wParam push 147h ; Msg push [ebp+wParam] ; hWnd call esi ; SendMessageA cmp eax, 0FFFFFFFFh jz loc_40508A push ebx ; lParam push eax ; wParam push 150h ; Msg push [ebp+wParam] ; hWnd call esi ; SendMessageA mov edi, eax cmp edi, 0FFFFFFFFh jz short loc_404E89 mov eax, [ebp+var_1C] cmp [eax+edi*4], ebx jnz short loc_404E8C loc_404E89: ; CODE XREF: sub_404A94+3EBj push 20h pop edi loc_404E8C: ; CODE XREF: sub_404A94+3F3j push edi call sub_4012A8 push edi ; lParam push ebx ; wParam push 420h ; Msg push [ebp+hDlg] ; hWnd call esi ; SendMessageA mov [ebp+hdc], 1 mov [ebp+arg_C], ebx mov [ebp+arg_4], 40Fh loc_404EAF: ; CODE XREF: sub_404A94+3A7j cmp [ebp+arg_4], 200h jnz short loc_404EC4 push ebx ; lParam push ebx ; wParam push 200h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA loc_404EC4: ; CODE XREF: sub_404A94+422j cmp [ebp+arg_4], 40Bh jnz short loc_404EFF mov eax, lParam cmp eax, ebx jz short loc_404EDD push eax ; himl call ds:ImageList_Destroy ; ImageList_Destroy loc_404EDD: ; CODE XREF: sub_404A94+440j mov eax, hMem cmp eax, ebx jz short loc_404EED push eax ; hMem call ds:GlobalFree ; GlobalFree loc_404EED: ; CODE XREF: sub_404A94+450j mov lParam, ebx mov hMem, ebx mov dword_42644C, ebx loc_404EFF: ; CODE XREF: sub_404A94+437j cmp [ebp+arg_4], 40Fh jnz loc_40504C call sub_40129E cmp [ebp+hdc], ebx jz short loc_404F1D push 8 call sub_4014C9 loc_404F1D: ; CODE XREF: sub_404A94+480j cmp [ebp+arg_C], ebx jz short loc_404F61 push hMem call sub_4012F3 mov edi, eax push edi call sub_4012A8 xor eax, eax xor ecx, ecx cmp edi, ebx jle short loc_404F4B loc_404F3D: ; CODE XREF: sub_404A94+4B5j mov edx, [ebp+var_1C] cmp [edx+eax*4], ebx jz short loc_404F46 inc ecx loc_404F46: ; CODE XREF: sub_404A94+4AFj inc eax cmp eax, edi jl short loc_404F3D loc_404F4B: ; CODE XREF: sub_404A94+4A7j push ebx ; lParam push ecx ; wParam push 14Eh ; Msg push [ebp+wParam] ; hWnd call esi ; SendMessageA mov [ebp+arg_C], edi mov [ebp+arg_4], 420h loc_404F61: ; CODE XREF: sub_404A94+48Cj call sub_40129E cmp dword_42640C, ebx mov eax, hMem mov edi, dword_426408 mov [ebp+var_20], eax mov [ebp+var_3C], 0F030h mov [ebp+var_14], ebx jle loc_40502F add edi, 8 loc_404F8D: ; CODE XREF: sub_404A94+595j mov eax, [ebp+var_20] mov ecx, [ebp+var_14] mov eax, [eax+ecx*4] cmp eax, ebx jz short loc_405017 mov edx, [edi] push 8 mov [ebp+var_44], eax pop eax mov ecx, edx and ecx, eax mov [ebp+var_18], edx and [ebp+var_18], 20h shl ecx, 1 or ecx, [ebp+var_18] test dh, 1 mov [ebp+var_48], eax mov [ebp+var_40], ecx jz short loc_404FD1 lea eax, [edi+10h] mov [ebp+var_48], 9 mov [ebp+var_38], eax and byte ptr [edi+1], 0FEh mov ecx, [ebp+var_40] loc_404FD1: ; CODE XREF: sub_404A94+527j test dl, 40h jz short loc_404FDB push 3 pop eax jmp short loc_404FE9 ; --------------------------------------------------------------------------- loc_404FDB: ; CODE XREF: sub_404A94+540j mov eax, edx and eax, 1 inc eax test dl, 10h jz short loc_404FE9 add eax, 3 loc_404FE9: ; CODE XREF: sub_404A94+545j ; sub_404A94+550j push [ebp+var_44] ; lParam shl eax, 0Ch or ecx, eax xor eax, eax cmp [ebp+var_18], ebx mov [ebp+var_40], ecx setnz al inc eax push eax ; wParam push 1102h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA lea eax, [ebp+var_48] push eax ; lParam push ebx ; wParam push 110Dh ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA loc_405017: ; CODE XREF: sub_404A94+504j inc [ebp+var_14] mov eax, [ebp+var_14] add edi, 418h cmp eax, dword_42640C jl loc_404F8D loc_40502F: ; CODE XREF: sub_404A94+4F0j mov eax, dword_425BC8 cmp [eax+10h], ebx jz short loc_40504C push 5 call sub_40460F push 0FFFFFFFBh ; lpString2 push 3FFh ; nIDDlgItem call sub_404578 loc_40504C: ; CODE XREF: sub_404A94+472j ; sub_404A94+5A3j cmp [ebp+arg_4], 420h jnz short loc_40508A test byte ptr dword_426444+1, 1 jz short loc_40508A mov esi, ds:ShowWindow xor eax, eax cmp [ebp+arg_C], 20h setz al shl eax, 3 mov edi, eax push edi ; nCmdShow push [ebp+hWnd] ; hWnd call esi ; ShowWindow push edi ; nCmdShow push 3FEh ; nIDDlgItem push [ebp+hDlg] ; hDlg call ds:GetDlgItem ; GetDlgItem push eax ; hWnd call esi ; ShowWindow loc_40508A: ; CODE XREF: sub_404A94+263j ; sub_404A94+3AFj ... push [ebp+arg_C] ; hWnd mov eax, [ebp+arg_4] push [ebp+hdc] ; hdc call sub_40403F pop edi pop esi pop ebx leave retn 10h sub_404A94 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_40509F(int,LPCSTR lpString2) sub_40509F proc near ; CODE XREF: sub_4014E1+9p ; sub_401610:loc_40169Fp ... lParam = dword ptr -30h wParam = dword ptr -2Ch var_28 = dword ptr -28h var_1C = dword ptr -1Ch hWnd = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 8 lpString2 = dword ptr 0Ch push ebp mov ebp, esp sub esp, 30h mov eax, dword_425BAC push edi xor edi, edi cmp eax, edi mov [ebp+hWnd], eax jz loc_405172 push ebx mov ebx, dword_40A040 mov [ebp+var_4], ebx and [ebp+var_4], 1 push esi mov esi, offset byte_4211D8 jnz short loc_4050D7 push [ebp+arg_0] ; lpString2 push esi ; lpString1 call sub_4065B7 loc_4050D7: ; CODE XREF: sub_40509F+2Dj push esi ; lpString call lstrlenA ; lstrlenA cmp [ebp+lpString2], edi mov [ebp+arg_0], eax jz short loc_405101 push [ebp+lpString2] ; lpString call lstrlenA ; lstrlenA add eax, [ebp+arg_0] cmp eax, 800h jnb short loc_405170 push [ebp+lpString2] ; lpString2 push esi ; lpString1 call ds:lstrcatA ; lstrcatA loc_405101: ; CODE XREF: sub_40509F+44j test bl, 4 jz short loc_405113 push esi ; lpString push dword_425BB8 ; hWnd call ds:SetWindowTextA ; SetWindowTextA loc_405113: ; CODE XREF: sub_40509F+65j test bl, 2 jz short loc_405161 push edi ; lParam push edi ; wParam push 1004h ; Msg push [ebp+hWnd] ; hWnd mov [ebp+var_1C], esi mov esi, ds:SendMessageA mov [ebp+lParam], 1 call esi ; SendMessageA sub eax, [ebp+var_4] not ebx mov [ebp+wParam], eax lea eax, [ebp+lParam] push eax ; lParam push edi ; wParam and ebx, 1 or ebx, 1006h push ebx ; Msg push [ebp+hWnd] ; hWnd mov [ebp+var_28], edi call esi ; SendMessageA push edi ; lParam push [ebp+wParam] ; wParam push 1013h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA loc_405161: ; CODE XREF: sub_40509F+77j cmp [ebp+var_4], edi jz short loc_405170 mov eax, [ebp+arg_0] mov byte_4211D8[eax], 0 loc_405170: ; CODE XREF: sub_40509F+56j ; sub_40509F+C5j pop esi pop ebx loc_405172: ; CODE XREF: sub_40509F+13j pop edi leave retn 8 sub_40509F endp ; =============== S U B R O U T I N E ======================================= ; DWORD __stdcall StartAddress(LPVOID) StartAddress proc near ; CODE XREF: sub_405A5A+24Bp ; DATA XREF: sub_405202+1D9o hWnd = dword ptr 4 push esi mov esi, dword_426408 push edi mov edi, dword_42640C push 0 ; pvReserved call ds:OleInitialize or dword_426490, eax test edi, edi jz short loc_4051E8 add esi, 18h loc_40519A: ; CODE XREF: StartAddress+67j dec edi test byte ptr [esi-10h], 1 jnz short loc_4051B9 test byte ptr dword_426444+1, 4 jnz short loc_4051B9 push esi ; arglist push offset aSkippingSectio ; "Skipping section: \"%s\"" call sub_40614C pop ecx pop ecx jmp short loc_4051D6 ; --------------------------------------------------------------------------- loc_4051B9: ; CODE XREF: StartAddress+28j ; StartAddress+31j push esi ; arglist push offset aSectionS ; "Section: \"%s\"" call sub_40614C pop ecx pop ecx push [esp+8+hWnd] ; hWnd push dword ptr [esi-0Ch] ; int call sub_4013E7 test eax, eax jnz short loc_4051E2 loc_4051D6: ; CODE XREF: StartAddress+40j add esi, 418h test edi, edi jnz short loc_40519A jmp short loc_4051E8 ; --------------------------------------------------------------------------- loc_4051E2: ; CODE XREF: StartAddress+5Dj inc dword_42646C loc_4051E8: ; CODE XREF: StartAddress+1Ej ; StartAddress+69j push 404h ; Msg call sub_404024 call ds:OleUninitialize mov eax, dword_42646C pop edi pop esi retn 4 StartAddress endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_405202(HWND ThreadId,HGLOBAL hMem,HDC hdc,int) sub_405202 proc near ; DATA XREF: .data:0040A034o var_3C = byte ptr -3Ch lParam = dword ptr -34h var_30 = dword ptr -30h var_2C = dword ptr -2Ch var_28 = dword ptr -28h var_24 = dword ptr -24h var_20 = dword ptr -20h var_1C = byte ptr -1Ch x = tagRECT ptr -14h hWnd = dword ptr -4 ThreadId = dword ptr 8 hMem = dword ptr 0Ch hdc = dword ptr 10h arg_C = dword ptr 14h push ebp mov ebp, esp sub esp, 3Ch push ebx push esi mov esi, dword_425BAC xor ebx, ebx cmp [ebp+hMem], 110h push edi mov [ebp+hWnd], esi jnz loc_4053BE or [ebp+var_2C], 0FFFFFFFFh or [ebp+var_20], 0FFFFFFFFh mov [ebp+lParam], 2 mov [ebp+var_30], ebx mov [ebp+var_28], ebx mov [ebp+var_24], ebx xor eax, eax lea edi, [ebp+var_1C] stosd stosd mov eax, dword_4263E8 mov ecx, [eax+5Ch] mov eax, [eax+60h] mov edi, ds:GetDlgItem push 403h ; nIDDlgItem push [ebp+ThreadId] ; hDlg mov [ebp+hMem], ecx mov [ebp+hdc], eax call edi ; GetDlgItem push 3EEh ; nIDDlgItem push [ebp+ThreadId] ; hDlg mov hWnd, eax call edi ; GetDlgItem push 3F8h ; nIDDlgItem push [ebp+ThreadId] ; hDlg mov dword_425BB8, eax call edi ; GetDlgItem push hWnd ; wParam mov dword_425BAC, eax mov [ebp+hWnd], eax call sub_40400D push 4 call sub_40460F push offset byte_42C400 push 0FFFFFFFDh ; lpString2 push ebx ; lpString1 mov dword_425BC4, eax mov nNumber, ebx call sub_4065B7 push eax ; arglist push offset aNewInstallOfST ; "New install of \"%s\" to \"%s\"" call sub_40614C add esp, 0Ch lea eax, [ebp+x] push eax ; lpRect push [ebp+hWnd] ; hWnd call ds:GetClientRect ; GetClientRect push 15h ; nIndex call ds:GetSystemMetrics ; GetSystemMetrics mov ecx, [ebp+x.right] mov esi, ds:SendMessageA sub ecx, eax lea eax, [ebp+lParam] push eax ; lParam push ebx ; wParam push 101Bh ; Msg push [ebp+hWnd] ; hWnd mov [ebp+var_2C], ecx call esi ; SendMessageA mov eax, 4000h push eax ; lParam push eax ; wParam push 1036h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA cmp [ebp+hMem], ebx jl short loc_405325 push [ebp+hMem] ; lParam push ebx ; wParam push 1001h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA push [ebp+hMem] ; lParam push ebx ; wParam push 1026h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA loc_405325: ; CODE XREF: sub_405202+105j cmp [ebp+hdc], ebx jl short loc_405338 push [ebp+hdc] ; lParam push ebx ; wParam push 1024h ; Msg push [ebp+hWnd] ; hWnd call esi ; SendMessageA loc_405338: ; CODE XREF: sub_405202+126j mov eax, [ebp+arg_C] push dword ptr [eax+30h] ; lpString2 push 1Bh ; int push [ebp+ThreadId] ; hDlg call sub_403FB4 test byte ptr dword_426444, 3 jz short loc_40537A push ebx ; nCmdShow push hWnd ; hWnd call ds:ShowWindow ; ShowWindow test byte ptr dword_426444, 2 jnz short loc_405374 push 8 ; nCmdShow push [ebp+hWnd] ; hWnd call ds:ShowWindow ; ShowWindow jmp short loc_40537A ; --------------------------------------------------------------------------- loc_405374: ; CODE XREF: sub_405202+163j mov hWnd, ebx loc_40537A: ; CODE XREF: sub_405202+14Dj ; sub_405202+170j push 3ECh ; nIDDlgItem push [ebp+ThreadId] ; hDlg call edi ; GetDlgItem push 75300000h ; lParam push ebx ; wParam mov edi, eax push 401h ; Msg push edi ; hWnd call esi ; SendMessageA test byte ptr dword_426444, 4 jz loc_405590 push [ebp+hdc] ; lParam push ebx ; wParam push 409h ; Msg push edi ; hWnd call esi ; SendMessageA push [ebp+hMem] ; lParam push ebx ; wParam push 2001h ; Msg push edi ; hWnd call esi ; SendMessageA jmp loc_405590 ; --------------------------------------------------------------------------- loc_4053BE: ; CODE XREF: sub_405202+1Bj cmp [ebp+hMem], 405h jnz short loc_4053EF lea eax, [ebp+ThreadId] push eax ; lpThreadId push ebx ; dwCreationFlags push 3ECh ; nIDDlgItem push [ebp+ThreadId] ; hDlg call ds:GetDlgItem ; GetDlgItem push eax ; lpParameter push offset StartAddress ; lpStartAddress push ebx ; dwStackSize push ebx ; lpThreadAttributes call ds:CreateThread ; CreateThread push eax ; hObject call ds:CloseHandle ; CloseHandle loc_4053EF: ; CODE XREF: sub_405202+1C3j cmp [ebp+hMem], 111h mov edi, ds:ShowWindow jnz short loc_405419 cmp word ptr [ebp+hdc], 403h jnz short loc_40543B push ebx ; nCmdShow push hWnd ; hWnd call edi ; ShowWindow push 8 ; nCmdShow push esi ; hWnd call edi ; ShowWindow call sub_403FD6 loc_405419: ; CODE XREF: sub_405202+1FAj cmp [ebp+hMem], 404h jnz short loc_405477 cmp dword_425BB4, ebx jz short loc_405450 push 78h ; wParam mov nResult, 2 call sub_403F8D loc_40543B: ; CODE XREF: sub_405202+202j ; sub_405202+279j ... push [ebp+arg_C] ; hWnd mov eax, [ebp+hMem] push [ebp+hdc] ; hdc call sub_40403F loc_405449: ; CODE XREF: sub_405202+390j pop edi pop esi pop ebx leave retn 10h ; --------------------------------------------------------------------------- loc_405450: ; CODE XREF: sub_405202+226j push 8 ; nCmdShow push dword_4263E0 ; hWnd call edi ; ShowWindow cmp dword_42646C, ebx jnz short loc_405470 mov eax, dword_4229DC push ebx ; lpString2 push dword ptr [eax+34h] ; int call sub_40509F loc_405470: ; CODE XREF: sub_405202+25Ej push 1 ; wParam call sub_403F8D loc_405477: ; CODE XREF: sub_405202+21Ej cmp [ebp+hMem], 7Bh jnz short loc_40543B cmp [ebp+hdc], esi jnz short loc_40543B push ebx ; lParam push ebx ; wParam push 1004h ; Msg push esi ; hWnd call ds:SendMessageA ; SendMessageA cmp eax, ebx mov [ebp+ThreadId], eax jle loc_405590 call ds:CreatePopupMenu ; CreatePopupMenu push 0FFFFFFE1h ; lpString2 push ebx ; lpString1 mov edi, eax call sub_4065B7 push eax ; lpNewItem push 1 ; uIDNewItem push ebx ; uFlags push edi ; hMenu call ds:AppendMenuA ; AppendMenuA mov eax, [ebp+arg_C] cmp eax, 0FFFFFFFFh jnz short loc_4054D1 lea eax, [ebp+x] push eax ; lpRect push esi ; hWnd call ds:GetWindowRect ; GetWindowRect mov ecx, [ebp+x.left] mov eax, [ebp+x.top] jmp short loc_4054DA ; --------------------------------------------------------------------------- loc_4054D1: ; CODE XREF: sub_405202+2BAj movsx ecx, ax shr eax, 10h movsx eax, ax loc_4054DA: ; CODE XREF: sub_405202+2CDj push ebx ; prcRect push esi ; hWnd push ebx ; nReserved push eax ; y push ecx ; x push 180h ; uFlags push edi ; hMenu call ds:TrackPopupMenu ; TrackPopupMenu xor edi, edi inc edi cmp eax, edi jnz loc_405590 mov esi, [ebp+ThreadId] mov [ebp+lParam], ebx mov [ebp+var_28], offset byte_4219D8 mov [ebp+var_24], 0FFFh loc_40550A: ; CODE XREF: sub_405202+322j lea eax, [ebp+var_3C] push eax ; lParam dec esi push esi ; wParam push 102Dh ; Msg push [ebp+hWnd] ; hWnd call ds:SendMessageA ; SendMessageA cmp esi, ebx lea edi, [edi+eax+2] jnz short loc_40550A push ebx ; hWndNewOwner call ds:OpenClipboard ; OpenClipboard call ds:EmptyClipboard ; EmptyClipboard push edi ; dwBytes push 42h ; uFlags call ds:GlobalAlloc ; GlobalAlloc push eax ; hMem mov [ebp+hMem], eax call ds:GlobalLock ; GlobalLock mov esi, eax loc_405548: ; CODE XREF: sub_405202+372j lea eax, [ebp+var_3C] push eax ; lParam push ebx ; wParam push 102Dh ; Msg push [ebp+hWnd] ; hWnd mov [ebp+var_28], esi mov [ebp+var_24], edi call ds:SendMessageA ; SendMessageA push esi ; lpString call lstrlenA ; lstrlenA add esi, eax mov word ptr [esi], 0A0Dh inc esi inc esi inc ebx cmp ebx, [ebp+ThreadId] jl short loc_405548 push [ebp+hMem] ; hMem call ds:GlobalUnlock ; GlobalUnlock push [ebp+hMem] ; hMem push 1 ; uFormat call ds:SetClipboardData ; SetClipboardData call ds:CloseClipboard ; CloseClipboard loc_405590: ; CODE XREF: sub_405202+199j ; sub_405202+1B7j ... xor eax, eax jmp loc_405449 sub_405202 endp ; =============== S U B R O U T I N E ======================================= ; INT_PTR __stdcall sub_405597(HWND,UINT,WPARAM,LPARAM) sub_405597 proc near ; DATA XREF: sub_405A5A+224o Point = tagRECT ptr -10h hDlg = dword ptr 4 arg_4 = dword ptr 8 hdc = dword ptr 0Ch hWnd = dword ptr 10h sub esp, 10h push ebx push ebp mov ebp, [esp+18h+arg_4] mov ecx, 110h cmp ebp, ecx push esi push edi jz loc_405723 cmp ebp, 408h jz loc_405723 cmp ebp, 47h mov ebx, [esp+20h+hDlg] jnz short loc_4055D9 push 13h ; uFlags xor eax, eax push eax ; cy push eax ; cx push eax ; Y push eax ; X push ebx ; hWndInsertAfter push dword_4211D4 ; hWnd call ds:SetWindowPos ; SetWindowPos loc_4055D9: ; CODE XREF: sub_405597+2Bj cmp ebp, 5 jnz short loc_4055F6 mov eax, [esp+20h+hdc] dec eax neg eax sbb eax, eax and eax, ebp push eax ; nCmdShow push dword_4211D4 ; hWnd call ds:ShowWindow ; ShowWindow loc_4055F6: ; CODE XREF: sub_405597+45j cmp ebp, 40Dh jnz short loc_405618 push dword_425BA8 ; hWnd call ds:DestroyWindow ; DestroyWindow mov eax, [esp+20h+hdc] mov dword_425BA8, eax jmp loc_405A29 ; --------------------------------------------------------------------------- loc_405618: ; CODE XREF: sub_405597+65j cmp ebp, 11h jnz short loc_405630 push 0 ; dwNewLong push 0 ; nIndex push ebx ; hWnd call ds:SetWindowLongA ; SetWindowLongA xor eax, eax inc eax jmp loc_405A50 ; --------------------------------------------------------------------------- loc_405630: ; CODE XREF: sub_405597+84j cmp ebp, 10h jnz short loc_405668 mov eax, dword_426404 dec eax cmp dword_40A024, eax jnz loc_40570F push dword_4211C8 ; hWnd call ds:IsWindowEnabled ; IsWindowEnabled test eax, eax jnz loc_40570F mov ebp, 111h mov [esp+20h+hdc], 1 loc_405668: ; CODE XREF: sub_405597+9Cj cmp ebp, 111h jnz loc_40570F movzx esi, word ptr [esp+20h+hdc] push esi ; nIDDlgItem push ebx ; hDlg call ds:GetDlgItem ; GetDlgItem mov ebx, ds:SendMessageA mov edi, eax test edi, edi jz short loc_4056A8 push 0 ; lParam push 0 ; wParam push 0F3h ; Msg push edi ; hWnd call ebx ; SendMessageA push edi ; hWnd call ds:IsWindowEnabled ; IsWindowEnabled test eax, eax jz loc_405A4E loc_4056A8: ; CODE XREF: sub_405597+F4j xor edi, edi inc edi cmp esi, edi jnz short loc_4056B2 push edi jmp short loc_4056F3 ; --------------------------------------------------------------------------- loc_4056B2: ; CODE XREF: sub_405597+116j cmp esi, 3 jnz short loc_4056C4 cmp dword_40A024, 0 jle short loc_4056FA push 0FFFFFFFFh jmp short loc_4056F3 ; --------------------------------------------------------------------------- loc_4056C4: ; CODE XREF: sub_405597+11Ej cmp esi, 2 jnz short loc_4056FA cmp dword_42646C, 0 jz short loc_4056E0 push esi call sub_4014C9 mov nResult, esi jmp short loc_4056F1 ; --------------------------------------------------------------------------- loc_4056E0: ; CODE XREF: sub_405597+139j push 3 call sub_4014C9 test eax, eax jnz short loc_40570F mov nResult, edi loc_4056F1: ; CODE XREF: sub_405597+147j push 78h ; wParam loc_4056F3: ; CODE XREF: sub_405597+119j ; sub_405597+12Bj call sub_403F8D jmp short loc_40570F ; --------------------------------------------------------------------------- loc_4056FA: ; CODE XREF: sub_405597+127j ; sub_405597+130j push [esp+20h+hWnd] ; lParam push [esp+24h+hdc] ; wParam push 111h ; Msg push dword_425BA8 ; hWnd call ebx ; SendMessageA loc_40570F: ; CODE XREF: sub_405597+AAj ; sub_405597+BEj ... push [esp+20h+hWnd] ; hWnd mov eax, ebp push [esp+24h+hdc] ; hdc call sub_40403F jmp loc_405A50 ; --------------------------------------------------------------------------- loc_405723: ; CODE XREF: sub_405597+12j ; sub_405597+1Ej cmp ebp, ecx mov eax, [esp+20h+hdc] mov ebx, [esp+20h+hDlg] mov dword_420DBC, eax jnz short loc_405781 mov esi, ds:GetDlgItem push 1 ; nIDDlgItem push ebx ; hDlg mov dword_4263E0, ebx call esi ; GetDlgItem push 2 ; nIDDlgItem push ebx ; hDlg mov dword_4229D8, eax call esi ; GetDlgItem push 0FFFFFFFFh ; lpString2 push 1Ch ; int push ebx ; hDlg mov dword_4211C8, eax call sub_403FB4 push dwNewLong ; dwNewLong push 0FFFFFFF2h ; nIndex push ebx ; hWnd call ds:SetClassLongA ; SetClassLongA push 4 call sub_4014C9 mov dword_425BB4, eax xor eax, eax inc eax mov dword_420DBC, eax loc_405781: ; CODE XREF: sub_405597+19Bj mov ecx, dword_40A024 mov esi, ecx shl esi, 6 add esi, dword_426400 xor edi, edi cmp ecx, edi jl short loc_4057D6 cmp eax, 1 jnz short loc_4057CE push edi ; hWnd push dword ptr [esi+10h] ; int call sub_4013E7 test eax, eax jz short loc_4057CE push 1 ; lParam push edi ; wParam push 40Fh ; Msg push dword_425BA8 ; hWnd call ds:SendMessageA ; SendMessageA xor eax, eax cmp dword_425BB4, edi setz al jmp loc_405A50 ; --------------------------------------------------------------------------- loc_4057CE: ; CODE XREF: sub_405597+204j ; sub_405597+211j cmp [esi], edi jz loc_405A4E loc_4057D6: ; CODE XREF: sub_405597+1FFj push 40Bh ; Msg call sub_404024 loc_4057E0: ; CODE XREF: sub_405597+386j ; sub_405597+38Ej ... mov eax, dword_420DBC add dword_40A024, eax shl eax, 6 add esi, eax mov eax, dword_40A024 cmp eax, dword_426404 jnz short loc_405804 push 1 call sub_4014C9 loc_405804: ; CODE XREF: sub_405597+264j cmp dword_425BB4, 0 jnz loc_405A09 mov eax, dword_426404 cmp dword_40A024, eax jnb loc_405A09 push dword ptr [esi+24h] ; lpString2 mov edi, [esi+14h] push offset dword_42E000 ; lpString1 call sub_4065B7 push dword ptr [esi+20h] ; lpString2 push 0FFFFFC19h ; int push ebx ; hDlg call sub_403FB4 push dword ptr [esi+1Ch] ; lpString2 push 0FFFFFC1Bh ; int push ebx ; hDlg call sub_403FB4 push dword ptr [esi+28h] ; lpString2 push 0FFFFFC1Ah ; int push ebx ; hDlg call sub_403FB4 push 3 ; nIDDlgItem push ebx ; hDlg call ds:GetDlgItem ; GetDlgItem cmp dword_42646C, 0 mov ebp, eax jz short loc_405879 and edi, 0FFFFFEFDh or edi, 4 loc_405879: ; CODE XREF: sub_405597+2D7j mov eax, edi and eax, 8 push eax ; nCmdShow push ebp ; hWnd call ds:ShowWindow ; ShowWindow mov eax, edi and eax, 100h push eax ; bEnable push ebp ; hWnd call ds:EnableWindow ; EnableWindow mov eax, edi and eax, 2 push eax ; bEnable call sub_403FFA and edi, 4 push edi ; bEnable push dword_4211C8 ; hWnd call ds:EnableWindow ; EnableWindow push 1 ; lParam xor edi, edi push edi ; wParam push 0F4h ; Msg push ebp ; hWnd mov ebp, ds:SendMessageA call ebp ; SendMessageA cmp dword_42646C, edi jz short loc_4058DE push edi ; lParam push 2 ; wParam push 401h ; Msg push ebx ; hWnd call ebp ; SendMessageA push dword_4211C8 jmp short loc_4058E4 ; --------------------------------------------------------------------------- loc_4058DE: ; CODE XREF: sub_405597+332j push dword_4229D8 ; wParam loc_4058E4: ; CODE XREF: sub_405597+345j call sub_40400D push offset Caption ; lpString2 mov ebp, offset byte_4219D8 push ebp ; lpString1 call lstrcpyA ; lstrcpyA push dword ptr [esi+18h] ; lpString2 push ebp ; lpString call lstrlenA ; lstrlenA add eax, ebp push eax ; lpString1 call sub_4065B7 push ebp ; lpString push ebx ; hWnd call ds:SetWindowTextA ; SetWindowTextA push edi ; hWnd push dword ptr [esi+8] ; int call sub_4013E7 test eax, eax jnz loc_4057E0 cmp [esi], eax jz loc_4057E0 cmp dword ptr [esi+4], 5 jnz short loc_40594E cmp dword_42646C, eax jnz loc_405A4E cmp dword_426460, eax jnz loc_4057E0 jmp loc_405A4E ; --------------------------------------------------------------------------- loc_40594E: ; CODE XREF: sub_405597+398j push dword_425BA8 ; hWnd call ds:DestroyWindow ; DestroyWindow cmp dword ptr [esi], 0 mov dword_4229DC, esi jle loc_405A29 mov eax, [esi+4] push esi ; dwInitParam push lpDialogFunc[eax*4] ; lpDialogFunc mov ax, [esi] add ax, word ptr dword_425BBC push ebx ; hWndParent movzx eax, ax push eax ; lpTemplateName push hInstance ; hInstance call ds:CreateDialogParamA ; CreateDialogParamA test eax, eax mov dword_425BA8, eax jz loc_405A29 push dword ptr [esi+2Ch] ; lpString2 push 6 ; int push eax ; hDlg call sub_403FB4 lea eax, [esp+20h+Point] push eax ; lpRect push 3FAh ; nIDDlgItem push ebx ; hDlg call ds:GetDlgItem ; GetDlgItem push eax ; hWnd call ds:GetWindowRect ; GetWindowRect lea eax, [esp+20h+Point] push eax ; lpPoint push ebx ; hWnd call ds:ScreenToClient ; ScreenToClient push 15h ; uFlags xor edi, edi push edi ; cy push edi ; cx push [esp+2Ch+Point.top] ; Y push [esp+30h+Point.left] ; X push edi ; hWndInsertAfter push dword_425BA8 ; hWnd call ds:SetWindowPos ; SetWindowPos push edi ; hWnd push dword ptr [esi+0Ch] ; int call sub_4013E7 push 8 ; nCmdShow push dword_425BA8 ; hWnd call ds:ShowWindow ; ShowWindow push 405h ; Msg call sub_404024 jmp short loc_405A29 ; --------------------------------------------------------------------------- loc_405A09: ; CODE XREF: sub_405597+274j ; sub_405597+285j push dword_425BA8 ; hWnd call ds:DestroyWindow ; DestroyWindow push nResult ; nResult and dword_4263E0, 0 push ebx ; hDlg call ds:EndDialog ; EndDialog loc_405A29: ; CODE XREF: sub_405597+7Cj ; sub_405597+3CCj ... cmp dword_4229E8, 0 jnz short loc_405A4E cmp dword_425BA8, 0 jz short loc_405A4E push 0Ah ; nCmdShow push ebx ; hWnd call ds:ShowWindow ; ShowWindow mov dword_4229E8, 1 loc_405A4E: ; CODE XREF: sub_405597+10Bj ; sub_405597+239j ... xor eax, eax loc_405A50: ; CODE XREF: sub_405597+94j ; sub_405597+187j ... pop edi pop esi pop ebp pop ebx add esp, 10h retn 10h sub_405597 endp ; =============== S U B R O U T I N E ======================================= sub_405A5A proc near ; CODE XREF: start+2AAp ClassName = byte ptr -14h pvParam = dword ptr -10h Y = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 mov eax, dword_426444 sub esp, 14h push ebx push ebp push esi mov esi, dword_4263E8 and eax, 20h push edi mov dword_426460, eax call sub_40410B mov ebp, offset byte_42C400 push ebp ; lpString2 call sub_40622D xor ebx, ebx test eax, eax jnz loc_405B0E mov ecx, [esi+48h] cmp ecx, ebx jz short loc_405B0E mov eax, dword_426418 mov edx, [esi+4Ch] mov edi, offset byte_424F80 push edi ; lpData add edx, eax push edx ; lpValueName add ecx, eax push ecx ; phkResult push dword ptr [esi+44h] ; cbData call sub_405EF1 mov al, byte_424F80 cmp al, bl jz short loc_405B0E cmp al, 22h jnz short loc_405ACD push 22h ; char mov edi, offset sz push edi ; lpsz call sub_405DCA mov [eax], bl loc_405ACD: ; CODE XREF: sub_405A5A+62j push edi ; lpString call lstrlenA ; lstrlenA lea eax, [eax+edi-4] cmp eax, edi jbe short loc_405B01 push offset a_exe ; ".exe" push eax ; lpString1 call ds:lstrcmpiA ; lstrcmpiA test eax, eax jnz short loc_405B01 push edi ; lpFileName call ds:GetFileAttributesA ; GetFileAttributesA cmp eax, 0FFFFFFFFh jz short loc_405AFB test al, 10h jnz short loc_405B01 loc_405AFB: ; CODE XREF: sub_405A5A+9Bj push edi ; lpszStart call sub_406207 loc_405B01: ; CODE XREF: sub_405A5A+7Fj ; sub_405A5A+8Fj ... push edi ; lpString1 call sub_4061A6 push eax ; lpString2 push ebp ; lpString1 call lstrcpyA ; lstrcpyA loc_405B0E: ; CODE XREF: sub_405A5A+2Ej ; sub_405A5A+39j ... push ebp ; lpString2 call sub_40622D test eax, eax jnz short loc_405B24 push dword ptr [esi+118h] ; lpString2 push ebp ; lpString1 call sub_4065B7 loc_405B24: ; CODE XREF: sub_405A5A+BCj xor ebp, ebp inc ebp test byte ptr dword_426444, 10h jz short loc_405B43 cmp dword_426440, ebx jnz short loc_405B43 call sub_4040E9 mov dword_423F78, ebp loc_405B43: ; CODE XREF: sub_405A5A+D4j ; sub_405A5A+DCj push 8040h ; fuLoad push ebx ; cy push ebx ; cx push ebp ; type push 67h ; name push hInstance ; hInst call ds:LoadImageA ; LoadImageA mov dwNewLong, eax cmp dword ptr [esi+50h], 0FFFFFFFFh mov edi, offset WndClass jz loc_405BF6 mov ecx, hInstance mov WndClass.hIcon, eax lea eax, [esp+24h+ClassName] push edi ; lpWndClass mov dword ptr [esp+28h+ClassName], 624E5Fh mov WndClass.lpfnWndProc, offset sub_401000 mov WndClass.hInstance, ecx mov WndClass.lpszClassName, eax call ds:RegisterClassA ; RegisterClassA test ax, ax jz loc_405CCC push ebx ; fWinIni lea eax, [esp+28h+pvParam] push eax ; pvParam push ebx ; uiParam push 30h ; uiAction call ds:SystemParametersInfoA ; SystemParametersInfoA mov eax, [esp+24h+var_4] sub eax, [esp+24h+Y] push ebx ; lpParam push hInstance ; hInstance push ebx ; hMenu push ebx ; hWndParent push eax ; nHeight mov eax, [esp+38h+var_8] sub eax, [esp+38h+pvParam] push eax ; nWidth push [esp+3Ch+Y] ; Y lea eax, [esp+40h+ClassName] push [esp+40h+pvParam] ; X push 80000000h ; dwStyle push ebx ; lpWindowName push eax ; lpClassName push 80h ; dwExStyle call ds:CreateWindowExA ; CreateWindowExA mov dword_4211D4, eax loc_405BF6: ; CODE XREF: sub_405A5A+10Dj push ebx call sub_4014C9 test eax, eax jz short loc_405C08 loc_405C00: ; CODE XREF: sub_405A5A+25Aj ; sub_405A5A+267j push 2 pop eax jmp loc_405CCE ; --------------------------------------------------------------------------- loc_405C08: ; CODE XREF: sub_405A5A+1A4j call sub_40410B cmp dword_426480, ebx jnz loc_405CA4 push 5 ; nCmdShow push dword_4211D4 ; hWnd call ds:ShowWindow ; ShowWindow mov esi, ds:LoadLibraryA mov ebp, offset LibFileName ; "RichEd20.dll" push ebp ; lpLibFileName call esi ; LoadLibraryA test eax, eax jnz short loc_405C45 push ebp ; lpLibFileName mov word ptr LibFileName+6, 3233h call esi ; LoadLibraryA loc_405C45: ; CODE XREF: sub_405A5A+1DDj mov ebp, ds:GetClassInfoA push edi ; lpWndClass mov esi, offset ClassName ; "RichEdit20A" push esi ; lpClassName push ebx ; hInstance call ebp ; GetClassInfoA test eax, eax jnz short loc_405C78 push edi ; lpWndClass push esi ; lpClassName push ebx ; hInstance mov byte ptr ClassName+8, bl call ebp ; GetClassInfoA push edi ; lpWndClass mov WndClass.lpszClassName, esi mov byte ptr ClassName+8, 32h call ds:RegisterClassA ; RegisterClassA loc_405C78: ; CODE XREF: sub_405A5A+1FDj mov eax, dword_425BBC push ebx ; dwInitParam push offset sub_405597 ; lpDialogFunc add eax, 69h movzx eax, ax push ebx ; hWndParent push eax ; lpTemplateName push hInstance ; hInstance call ds:DialogBoxParamA ; DialogBoxParamA push 5 mov esi, eax call sub_4014C9 mov eax, esi jmp short loc_405CCE ; --------------------------------------------------------------------------- loc_405CA4: ; CODE XREF: sub_405A5A+1B9j push ebx ; LPVOID call StartAddress test eax, eax jz short loc_405CC6 cmp dword_425BB4, ebx jnz loc_405C00 push 2 call sub_4014C9 jmp loc_405C00 ; --------------------------------------------------------------------------- loc_405CC6: ; CODE XREF: sub_405A5A+252j push ebp call sub_4014C9 loc_405CCC: ; CODE XREF: sub_405A5A+149j xor eax, eax loc_405CCE: ; CODE XREF: sub_405A5A+1A9j ; sub_405A5A+248j pop edi pop esi pop ebp pop ebx add esp, 14h retn sub_405A5A endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_405CD6 proc near ; CODE XREF: sub_40463C+166p ; sub_4065B7+16Cp ppMalloc = dword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp push ecx lea eax, [ebp+ppMalloc] push eax ; ppMalloc call ds:SHGetMalloc ; SHGetMalloc mov eax, [ebp+ppMalloc] test eax, eax jz short locret_405CFD push [ebp+arg_0] mov ecx, [eax] push eax call dword ptr [ecx+14h] mov eax, [ebp+ppMalloc] mov ecx, [eax] push eax call dword ptr [ecx+8] locret_405CFD: ; CODE XREF: sub_405CD6+13j leave retn 4 sub_405CD6 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_405D01(LPSTR lpCommandLine,LPCSTR lpCurrentDirectory) sub_405D01 proc near ; CODE XREF: sub_401610+D22p ; sub_401610+19B8p ... hObject = _PROCESS_INFORMATION ptr -10h lpCommandLine = dword ptr 8 lpCurrentDirectory= dword ptr 0Ch push ebp mov ebp, esp sub esp, 10h push [ebp+lpCurrentDirectory] ; lpFileName mov StartupInfo.cb, 44h call ds:GetFileAttributesA ; GetFileAttributesA xor ecx, ecx cmp eax, 0FFFFFFFFh jz short loc_405D25 test al, 10h jnz short loc_405D28 loc_405D25: ; CODE XREF: sub_405D01+1Ej mov [ebp+lpCurrentDirectory], ecx loc_405D28: ; CODE XREF: sub_405D01+22j lea eax, [ebp+hObject] push eax ; lpProcessInformation push offset StartupInfo ; lpStartupInfo push [ebp+lpCurrentDirectory] ; lpCurrentDirectory push ecx ; lpEnvironment push ecx ; dwCreationFlags push ecx ; bInheritHandles push ecx ; lpThreadAttributes push ecx ; lpProcessAttributes push [ebp+lpCommandLine] ; lpCommandLine push ecx ; lpApplicationName call ds:CreateProcessA ; CreateProcessA test eax, eax jz short locret_405D53 push [ebp+hObject.hThread] ; hObject call ds:CloseHandle ; CloseHandle mov eax, [ebp+hObject.hProcess] locret_405D53: ; CODE XREF: sub_405D01+44j leave retn 8 sub_405D01 endp ; [00000006 BYTES: COLLAPSED FUNCTION SetDlgItemTextA. PRESS KEYPAD "+" TO EXPAND] ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_405D5D(int nIDDlgItem,LPSTR lpString) sub_405D5D proc near ; CODE XREF: sub_4041F2+18p ; sub_40463C+33p ... nIDDlgItem = dword ptr 4 lpString = dword ptr 8 push 400h ; cchMax push [esp+4+lpString] ; lpString push [esp+8+nIDDlgItem] ; nIDDlgItem push dword_425BA8 ; hDlg call ds:GetDlgItemTextA ; GetDlgItemTextA retn 8 sub_405D5D endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_405D79(LPCSTR lpText,int) sub_405D79 proc near ; CODE XREF: sub_401610+611p ; sub_401610:loc_401D29p ... lpText = dword ptr 4 arg_4 = dword ptr 8 mov eax, [esp+arg_4] mov ecx, eax and ecx, 1FFFFFh cmp dword_426480, 0 jz short loc_405D93 shr eax, 15h jnz short locret_405DB8 loc_405D93: ; CODE XREF: sub_405D79+13j cmp dword_426488, 0 jz short loc_405DA2 xor ecx, 180000h loc_405DA2: ; CODE XREF: sub_405D79+21j push ecx ; uType push offset Caption ; lpCaption push [esp+8+lpText] ; lpText push dword_4263E0 ; hWnd call ds:MessageBoxA ; MessageBoxA locret_405DB8: ; CODE XREF: sub_405D79+18j retn 8 sub_405D79 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_405DBB(SIZE_T dwBytes) sub_405DBB proc near ; CODE XREF: sub_401610+4A0p ; sub_401610+A0Ep ... dwBytes = dword ptr 4 push [esp+dwBytes] ; dwBytes push 40h ; uFlags call ds:GlobalAlloc ; GlobalAlloc retn 4 sub_405DBB endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_405DCA(LPCSTR lpsz,char) sub_405DCA proc near ; CODE XREF: start+BAp start+17Cp ... lpsz = dword ptr 4 arg_4 = byte ptr 8 mov eax, [esp+lpsz] jmp short loc_405DDD ; --------------------------------------------------------------------------- loc_405DD0: ; CODE XREF: sub_405DCA+17j cmp cl, [esp+arg_4] jz short locret_405DE3 push eax ; lpsz call ds:CharNextA ; CharNextA loc_405DDD: ; CODE XREF: sub_405DCA+4j mov cl, [eax] test cl, cl jnz short loc_405DD0 locret_405DE3: ; CODE XREF: sub_405DCA+Aj retn 8 sub_405DCA endp ; =============== S U B R O U T I N E ======================================= sub_405DE6 proc near ; CODE XREF: sub_401610+51Cp ; sub_401610+102Fp ... arg_0 = dword ptr 4 mov ecx, [esp+arg_0] mov al, [ecx] or al, 20h cmp word ptr [ecx], 5C5Ch jz short loc_405E07 cmp al, 61h jl short loc_405E03 cmp al, 7Ah jg short loc_405E03 cmp byte ptr [ecx+1], 3Ah jz short loc_405E07 loc_405E03: ; CODE XREF: sub_405DE6+11j ; sub_405DE6+15j xor eax, eax jmp short locret_405E0A ; --------------------------------------------------------------------------- loc_405E07: ; CODE XREF: sub_405DE6+Dj ; sub_405DE6+1Bj xor eax, eax inc eax locret_405E0A: ; CODE XREF: sub_405DE6+1Fj retn 4 sub_405DE6 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_405E0D(LPCSTR lpsz) sub_405E0D proc near ; CODE XREF: sub_40463C+A4p ; sub_40463C+1F7p ... lpsz = dword ptr 4 push ebx push esi mov esi, ds:CharNextA push edi mov edi, [esp+0Ch+lpsz] push edi ; lpsz call esi ; CharNextA mov ebx, eax push ebx ; lpsz call esi ; CharNextA cmp byte ptr [edi], 0 jz short loc_405E33 cmp word ptr [ebx], 5C3Ah jnz short loc_405E33 push eax ; lpsz call esi ; CharNextA jmp short loc_405E54 ; --------------------------------------------------------------------------- loc_405E33: ; CODE XREF: sub_405E0D+18j ; sub_405E0D+1Fj cmp word ptr [edi], 5C5Ch jnz short loc_405E52 push 2 pop esi loc_405E3D: ; CODE XREF: sub_405E0D+41j push 5Ch ; char push eax ; lpsz dec esi call sub_405DCA cmp byte ptr [eax], 0 jz short loc_405E52 inc eax test esi, esi jnz short loc_405E3D jmp short loc_405E54 ; --------------------------------------------------------------------------- loc_405E52: ; CODE XREF: sub_405E0D+2Bj ; sub_405E0D+3Cj xor eax, eax loc_405E54: ; CODE XREF: sub_405E0D+24j ; sub_405E0D+43j pop edi pop esi pop ebx retn 4 sub_405E0D endp ; =============== S U B R O U T I N E ======================================= sub_405E5A proc near ; CODE XREF: sub_401610+1901p ; sub_403756+BEp ... arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch mov ecx, [esp+arg_0] push esi mov esi, [esp+4+arg_8] test esi, esi jle short loc_405E76 mov eax, [esp+4+arg_4] sub eax, ecx loc_405E6D: ; CODE XREF: sub_405E5A+1Aj mov dl, [eax+ecx] mov [ecx], dl inc ecx dec esi jnz short loc_405E6D loc_405E76: ; CODE XREF: sub_405E5A+Bj pop esi retn 0Ch sub_405E5A endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_405E7A(LPCSTR lpFileName,DWORD dwDesiredAccess,DWORD dwCreationDisposition) sub_405E7A proc near ; CODE XREF: sub_401610+5BBp ; sub_401610+15B7p ... lpFileName = dword ptr 4 dwDesiredAccess = dword ptr 8 dwCreationDisposition= dword ptr 0Ch push [esp+lpFileName] ; lpFileName call ds:GetFileAttributesA ; GetFileAttributesA mov ecx, eax inc ecx push 0 ; hTemplateFile neg ecx sbb ecx, ecx and ecx, eax push ecx ; dwFlagsAndAttributes push [esp+8+dwCreationDisposition] ; dwCreationDisposition push 0 ; lpSecurityAttributes push 1 ; dwShareMode push [esp+14h+dwDesiredAccess] ; dwDesiredAccess push [esp+18h+lpFileName] ; lpFileName call ds:CreateFileA ; CreateFileA retn 0Ch sub_405E7A endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_405EA9(const CHAR lpTempFileName,LPCSTR lpPathName) sub_405EA9 proc near ; CODE XREF: sub_401610+423p ; sub_403756+1F8p ... lpTempFileName = byte ptr 8 lpPathName = dword ptr 0Ch push ebp mov ebp, esp push esi mov esi, dword ptr [ebp+lpTempFileName] push edi push 64h pop edi loc_405EB4: ; CODE XREF: sub_405EA9+39j dec edi mov dword ptr [ebp+lpTempFileName], 61736Eh call ds:GetTickCount ; GetTickCount push 1Ah pop ecx xor edx, edx div ecx push esi ; lpTempFileName push 0 ; uUnique lea eax, [ebp+lpTempFileName] push eax ; lpPrefixString push [ebp+lpPathName] ; lpPathName add [ebp+0Ah], dl call ds:GetTempFileNameA ; GetTempFileNameA test eax, eax jnz short loc_405EED test edi, edi jnz short loc_405EB4 mov byte ptr [esi], 0 loc_405EE7: ; CODE XREF: sub_405EA9+46j pop edi pop esi pop ebp retn 8 ; --------------------------------------------------------------------------- loc_405EED: ; CODE XREF: sub_405EA9+35j mov eax, esi jmp short loc_405EE7 sub_405EA9 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_405EF1(HKEY cbData,LPCSTR phkResult,LPCSTR lpValueName,DWORD lpData) sub_405EF1 proc near ; CODE XREF: sub_405A5A+52p ; sub_4065B7+D9p ... cbData = dword ptr 8 phkResult = dword ptr 0Ch lpValueName = dword ptr 10h lpData = dword ptr 14h push ebp mov ebp, esp push ebx push esi mov esi, [ebp+lpData] lea eax, [ebp+phkResult] push eax ; phkResult push 20019h ; samDesired xor ebx, ebx push ebx ; ulOptions push [ebp+phkResult] ; lpSubKey mov [esi], bl push [ebp+cbData] ; hKey call ds:RegOpenKeyExA ; RegOpenKeyExA test eax, eax jnz short loc_405F55 lea eax, [ebp+cbData] push eax ; lpcbData push esi ; lpData lea eax, [ebp+lpData] push eax ; lpType push ebx ; lpReserved push [ebp+lpValueName] ; lpValueName mov [ebp+cbData], 400h push [ebp+phkResult] ; hKey call ds:RegQueryValueExA ; RegQueryValueExA test eax, eax jnz short loc_405F44 cmp [ebp+lpData], 1 jz short loc_405F46 cmp [ebp+lpData], 2 jz short loc_405F46 loc_405F44: ; CODE XREF: sub_405EF1+45j mov [esi], bl loc_405F46: ; CODE XREF: sub_405EF1+4Bj ; sub_405EF1+51j push [ebp+phkResult] ; hKey mov [esi+3FFh], bl call ds:RegCloseKey ; RegCloseKey loc_405F55: ; CODE XREF: sub_405EF1+24j pop esi pop ebx pop ebp retn 10h sub_405EF1 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_405F5B(LPSTR,int) sub_405F5B proc near ; CODE XREF: sub_401610+DA3p ; sub_401610+DE8p ... arg_0 = dword ptr 4 arg_4 = dword ptr 8 push [esp+arg_4] push offset aD ; "%d" push [esp+8+arg_0] ; LPSTR call ds:wsprintfA ; wsprintfA add esp, 0Ch retn 8 sub_405F5B endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_405F74 proc near ; CODE XREF: sub_4013E7+6Fp ; sub_4014F2+10p ... var_4 = dword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp push ecx mov ecx, [ebp+arg_0] push ebx push esi push edi xor edi, edi cmp byte ptr [ecx], 2Dh mov [ebp+var_4], 1 mov al, 0Ah mov bl, 39h jnz short loc_405F95 inc ecx or [ebp+var_4], 0FFFFFFFFh loc_405F95: ; CODE XREF: sub_405F74+1Aj cmp byte ptr [ecx], 30h jnz short loc_405FB6 inc ecx mov dl, [ecx] cmp dl, 30h jl short loc_405FAB cmp dl, 37h jg short loc_405FAB mov al, 8 mov bl, 37h loc_405FAB: ; CODE XREF: sub_405F74+2Cj ; sub_405F74+31j and dl, 0DFh cmp dl, 58h jnz short loc_405FB6 mov al, 10h inc ecx loc_405FB6: ; CODE XREF: sub_405F74+24j ; sub_405F74+3Dj ... movsx edx, byte ptr [ecx] inc ecx cmp edx, 30h jl short loc_405FCB movsx esi, bl cmp edx, esi jg short loc_405FCB sub edx, 30h jmp short loc_405FE4 ; --------------------------------------------------------------------------- loc_405FCB: ; CODE XREF: sub_405F74+49j ; sub_405F74+50j cmp al, 10h jnz short loc_405FF0 mov esi, edx and esi, 0FFFFFFDFh cmp esi, 41h jl short loc_405FF0 cmp esi, 46h jg short loc_405FF0 and edx, 7 add edx, 9 loc_405FE4: ; CODE XREF: sub_405F74+55j movsx esi, al imul esi, edi add esi, edx mov edi, esi jmp short loc_405FB6 ; --------------------------------------------------------------------------- loc_405FF0: ; CODE XREF: sub_405F74+59j ; sub_405F74+63j ... mov eax, [ebp+var_4] imul eax, edi pop edi pop esi pop ebx leave retn 4 sub_405F74 endp ; [00000006 BYTES: COLLAPSED FUNCTION lstrcpyA. PRESS KEYPAD "+" TO EXPAND] ; [00000006 BYTES: COLLAPSED FUNCTION lstrlenA. PRESS KEYPAD "+" TO EXPAND] ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_406009(LPCSTR lpszCurrent) sub_406009 proc near ; CODE XREF: sub_401508+2Fp ; sub_401610+54Cp ... lpszCurrent = dword ptr 4 push ebx push ebp mov ebp, ds:CharNextA push esi mov esi, [esp+0Ch+lpszCurrent] push edi jmp short loc_40601E ; --------------------------------------------------------------------------- loc_406019: ; CODE XREF: sub_406009+18j push esi ; lpsz call ebp ; CharNextA mov esi, eax loc_40601E: ; CODE XREF: sub_406009+Ej cmp byte ptr [esi], 20h jz short loc_406019 cmp byte ptr [esi], 5Ch jnz short loc_40603D cmp byte ptr [esi+1], 5Ch jnz short loc_40603D cmp byte ptr [esi+2], 3Fh jnz short loc_40603D cmp byte ptr [esi+3], 5Ch jnz short loc_40603D add esi, 4 loc_40603D: ; CODE XREF: sub_406009+1Dj ; sub_406009+23j ... cmp byte ptr [esi], 0 jz short loc_40604E push esi call sub_405DE6 test eax, eax jz short loc_40604E inc esi inc esi loc_40604E: ; CODE XREF: sub_406009+37j ; sub_406009+41j mov ebx, esi mov edi, esi xor eax, eax jmp short loc_406081 ; --------------------------------------------------------------------------- loc_406056: ; CODE XREF: sub_406009+7Cj cmp al, 1Fh jbe short loc_40607C push eax ; char push offset a? ; "*?|<>/\":" call sub_405DCA cmp byte ptr [eax], 0 jnz short loc_40607C push esi ; lpsz call ebp ; CharNextA sub eax, esi push eax push esi push edi call sub_405E5A push edi ; lpsz call ebp ; CharNextA mov edi, eax loc_40607C: ; CODE XREF: sub_406009+4Fj ; sub_406009+5Fj push esi ; lpsz call ebp ; CharNextA mov esi, eax loc_406081: ; CODE XREF: sub_406009+4Bj mov al, [esi] test al, al jnz short loc_406056 mov [edi], al loc_406089: ; CODE XREF: sub_406009+99j push edi ; lpszCurrent push ebx ; lpszStart call ds:CharPrevA ; CharPrevA mov edi, eax mov al, [edi] cmp al, 20h jz short loc_40609D cmp al, 5Ch jnz short loc_4060A4 loc_40609D: ; CODE XREF: sub_406009+8Ej cmp ebx, edi mov byte ptr [edi], 0 jb short loc_406089 loc_4060A4: ; CODE XREF: sub_406009+92j pop edi pop esi pop ebp mov eax, ebx pop ebx retn 4 sub_406009 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_4060AD(DWORD NumberOfBytesWritten) sub_4060AD proc near ; CODE XREF: start+2B5p sub_40614C+16p NumberOfBytesWritten= dword ptr 8 push ebp mov ebp, esp push ebx xor ebx, ebx cmp [ebp+NumberOfBytesWritten], ebx jz short loc_4060D2 mov eax, hObject cmp eax, 0FFFFFFFFh jz short loc_4060C9 push eax ; hObject call ds:CloseHandle ; CloseHandle loc_4060C9: ; CODE XREF: sub_4060AD+13j or hObject, 0FFFFFFFFh jmp short loc_406147 ; --------------------------------------------------------------------------- loc_4060D2: ; CODE XREF: sub_4060AD+9j cmp dword_423F78, ebx jz short loc_406147 cmp byte_425780, bl jz short loc_406111 cmp hObject, 0FFFFFFFFh jnz short loc_40611A push 4 ; dwCreationDisposition push 40000000h ; dwDesiredAccess push offset byte_425780 ; lpFileName call sub_405E7A cmp eax, 0FFFFFFFFh mov hObject, eax jz short loc_406147 push 2 ; dwMoveMethod push ebx ; lpDistanceToMoveHigh push ebx ; lDistanceToMove push eax ; hFile call ds:SetFilePointer ; SetFilePointer loc_406111: ; CODE XREF: sub_4060AD+33j cmp hObject, 0FFFFFFFFh jz short loc_406147 loc_40611A: ; CODE XREF: sub_4060AD+3Cj push esi push offset asc_408C40 ; "\r\n" mov esi, offset String1 push esi ; lpString1 call ds:lstrcatA ; lstrcatA push ebx ; lpOverlapped lea eax, [ebp+NumberOfBytesWritten] push eax ; lpNumberOfBytesWritten push esi ; lpString call ds:__imp_lstrlenA push eax ; nNumberOfBytesToWrite push esi ; lpBuffer push hObject ; hFile call ds:WriteFile ; WriteFile pop esi loc_406147: ; CODE XREF: sub_4060AD+23j ; sub_4060AD+2Bj ... pop ebx pop ebp retn 4 sub_4060AD endp ; =============== S U B R O U T I N E ======================================= ; int __cdecl sub_40614C(LPCSTR,char arglist) sub_40614C proc near ; CODE XREF: sub_401610+68p ; sub_401610+84p ... arg_0 = dword ptr 4 arglist = byte ptr 8 lea eax, [esp+arglist] push eax ; arglist push [esp+4+arg_0] ; LPCSTR push offset String1 ; LPSTR call ds:wvsprintfA ; wvsprintfA push 0 ; NumberOfBytesWritten call sub_4060AD retn sub_40614C endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_406168(LPCSTR lpFileName) sub_406168 proc near ; CODE XREF: sub_401610+298p ; sub_401610+34Ap ... lpFileName = dword ptr 4 push ebx push esi mov esi, ds:SetErrorMode push edi push 8001h ; uMode call esi ; SetErrorMode mov edi, offset FindFileData push edi ; lpFindFileData push [esp+10h+lpFileName] ; lpFileName call ds:FindFirstFileA ; FindFirstFileA push 0 ; uMode mov ebx, eax call esi ; SetErrorMode cmp ebx, 0FFFFFFFFh jz short loc_40619E push ebx ; hFindFile call ds:FindClose ; FindClose mov eax, edi jmp short loc_4061A0 ; --------------------------------------------------------------------------- loc_40619E: ; CODE XREF: sub_406168+29j xor eax, eax loc_4061A0: ; CODE XREF: sub_406168+34j pop edi pop esi pop ebx retn 4 sub_406168 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_4061A6(LPCSTR lpString1) sub_4061A6 proc near ; CODE XREF: sub_401610+53Fp ; sub_401610+187Bp ... lpString1 = dword ptr 4 push esi mov esi, [esp+4+lpString1] push esi ; lpString call ds:__imp_lstrlenA add eax, esi push eax ; lpszCurrent push esi ; lpszStart call ds:CharPrevA ; CharPrevA cmp byte ptr [eax], 5Ch jz short loc_4061CD push offset SubBlock ; "\\" push esi ; lpString1 call ds:lstrcatA ; lstrcatA loc_4061CD: ; CODE XREF: sub_4061A6+19j mov eax, esi pop esi retn 4 sub_4061A6 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_4061D3(LPCSTR lpszStart,char) sub_4061D3 proc near ; CODE XREF: sub_401610+17FBp lpszStart = dword ptr 4 arg_4 = byte ptr 8 push esi push edi mov edi, [esp+8+lpszStart] push edi ; lpString call ds:__imp_lstrlenA mov esi, ds:CharPrevA add eax, edi push eax ; lpszCurrent push edi ; lpszStart call esi ; CharPrevA test edi, edi jz short loc_406202 loc_4061F0: ; CODE XREF: sub_4061D3+2Dj cmp eax, edi jbe short loc_406202 mov cl, [eax] cmp cl, [esp+8+arg_4] jz short loc_406202 push eax ; lpszCurrent push edi ; lpszStart call esi ; CharPrevA jmp short loc_4061F0 ; --------------------------------------------------------------------------- loc_406202: ; CODE XREF: sub_4061D3+1Bj ; sub_4061D3+1Fj ... pop edi pop esi retn 8 sub_4061D3 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_406207(LPCSTR lpszStart) sub_406207 proc near ; CODE XREF: sub_403756+61p start+378p ... lpszStart = dword ptr 4 push esi mov esi, [esp+4+lpszStart] push esi ; lpString call ds:__imp_lstrlenA add eax, esi loc_406215: ; CODE XREF: sub_406207+1Dj cmp byte ptr [eax], 5Ch jz short loc_406226 push eax ; lpszCurrent push esi ; lpszStart call ds:CharPrevA ; CharPrevA cmp eax, esi ja short loc_406215 loc_406226: ; CODE XREF: sub_406207+11j mov byte ptr [eax], 0 pop esi retn 4 sub_406207 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_40622D(LPCSTR lpString2) sub_40622D proc near ; CODE XREF: start+282p ; sub_40463C+1DAp ... lpString2 = dword ptr 4 push esi push [esp+4+lpString2] ; lpString2 mov esi, offset FileName push esi ; lpString1 call ds:__imp_lstrcpyA push esi ; lpsz call sub_405E0D test eax, eax jnz short loc_40624C loc_406248: ; CODE XREF: sub_40622D+2Cj ; sub_40622D+31j xor eax, eax jmp short loc_4062A3 ; --------------------------------------------------------------------------- loc_40624C: ; CODE XREF: sub_40622D+19j test byte ptr dword_426444, 80h jz short loc_406260 mov cl, [eax] test cl, cl jz short loc_406248 cmp cl, 5Ch jz short loc_406248 loc_406260: ; CODE XREF: sub_40622D+26j push ebx mov ebx, ds:__imp_lstrlenA push edi mov edi, eax sub edi, esi jmp short loc_406283 ; --------------------------------------------------------------------------- loc_40626E: ; CODE XREF: sub_40622D+5Bj push esi ; lpFileName call sub_406168 test eax, eax jz short loc_40627D test byte ptr [eax], 10h jz short loc_4062A7 loc_40627D: ; CODE XREF: sub_40622D+49j push esi ; lpszStart call sub_406207 loc_406283: ; CODE XREF: sub_40622D+3Fj push esi ; lpString call ebx ; __imp_lstrlenA cmp eax, edi jg short loc_40626E push esi ; lpString1 call sub_4061A6 push esi ; lpFileName call ds:GetFileAttributesA ; GetFileAttributesA xor ecx, ecx cmp eax, 0FFFFFFFFh setnz cl mov eax, ecx loc_4062A1: ; CODE XREF: sub_40622D+7Cj pop edi pop ebx loc_4062A3: ; CODE XREF: sub_40622D+1Dj pop esi retn 4 ; --------------------------------------------------------------------------- loc_4062A7: ; CODE XREF: sub_40622D+4Ej xor eax, eax jmp short loc_4062A1 sub_40622D endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_4062AB(LPCSTR lpString,LPCSTR lpString2) sub_4062AB proc near ; CODE XREF: sub_406357+155p ; sub_406357+18Fp var_4 = dword ptr -4 lpString = dword ptr 8 lpString2 = dword ptr 0Ch push ebp mov ebp, esp push ecx push ebx push esi push edi push [ebp+lpString2] ; lpString mov edi, ds:__imp_lstrlenA call edi ; __imp_lstrlenA mov esi, [ebp+lpString] mov [ebp+var_4], eax jmp short loc_4062EC ; --------------------------------------------------------------------------- loc_4062C5: ; CODE XREF: sub_4062AB+47j mov eax, [ebp+var_4] push [ebp+lpString2] ; lpString2 mov bl, [eax+esi] push esi ; lpString1 mov byte ptr [eax+esi], 0 call ds:lstrcmpiA ; lstrcmpiA test eax, eax mov eax, [ebp+var_4] mov [eax+esi], bl jz short loc_4062FD push esi ; lpsz call ds:CharNextA ; CharNextA mov esi, eax loc_4062EC: ; CODE XREF: sub_4062AB+18j push esi ; lpString call edi ; __imp_lstrlenA cmp eax, [ebp+var_4] jge short loc_4062C5 xor eax, eax loc_4062F6: ; CODE XREF: sub_4062AB+54j pop edi pop esi pop ebx leave retn 8 ; --------------------------------------------------------------------------- loc_4062FD: ; CODE XREF: sub_4062AB+36j mov eax, esi jmp short loc_4062F6 sub_4062AB endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_406301(LPCSTR lpFileName) sub_406301 proc near ; CODE XREF: sub_401610+253p ; sub_401610+4E9p ... lpFileName = dword ptr 4 push ebp push esi push edi mov edi, [esp+0Ch+lpFileName] push edi ; lpsz call sub_405E0D mov esi, eax xor ebp, ebp test esi, esi jz short loc_40634A push ebx loc_406317: ; CODE XREF: sub_406301+46j push 5Ch ; char push esi ; lpsz call sub_405DCA mov esi, eax mov bl, [esi] push edi ; lpFileName mov byte ptr [esi], 0 call sub_406168 test eax, eax jnz short loc_40633C push eax ; lpSecurityAttributes push edi ; lpPathName call ds:CreateDirectoryA ; CreateDirectoryA test eax, eax jmp short loc_40633F ; --------------------------------------------------------------------------- loc_40633C: ; CODE XREF: sub_406301+2Dj test byte ptr [eax], 10h loc_40633F: ; CODE XREF: sub_406301+39j jnz short loc_406342 inc ebp loc_406342: ; CODE XREF: sub_406301:loc_40633Fj mov [esi], bl inc esi test bl, bl jnz short loc_406317 pop ebx loc_40634A: ; CODE XREF: sub_406301+13j pop edi xor eax, eax test ebp, ebp pop esi setz al pop ebp retn 4 sub_406301 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_406357(int,LPCSTR hObject) sub_406357 proc near ; CODE XREF: sub_401610+357p ; start+35Cp ... var_10 = dword ptr -10h dwBytes = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 4 hObject = dword ptr 8 sub esp, 10h push ebx push ebp push esi push edi push offset aKernel32_dll ; "KERNEL32.dll" call ds:GetModuleHandleA ; GetModuleHandleA test eax, eax mov esi, [esp+20h+hObject] jz short loc_406392 push offset aMovefileexa ; "MoveFileExA" push eax ; hModule call ds:GetProcAddress ; GetProcAddress test eax, eax jz short loc_406392 push 5 push esi push [esp+28h+arg_0] call eax test eax, eax jnz loc_4065A7 loc_406392: ; CODE XREF: sub_406357+18j ; sub_406357+28j test esi, esi mov ebp, ds:GetShortPathNameA mov szShortPath, 4C554Eh mov edi, 400h jz short loc_4063D7 push 1 ; dwCreationDisposition push 0 ; dwDesiredAccess push esi ; lpFileName call sub_405E7A push eax ; hObject call ds:CloseHandle ; CloseHandle push edi ; cchBuffer mov ebx, offset szShortPath push ebx ; lpszShortPath push esi ; lpszLongPath call ebp ; GetShortPathNameA test eax, eax jz loc_4065AD cmp eax, edi jle short loc_4063E8 jmp loc_4065AD ; --------------------------------------------------------------------------- loc_4063D7: ; CODE XREF: sub_406357+52j push offset aNul ; "NUL" mov ebx, offset szShortPath push ebx ; lpString1 call ds:__imp_lstrcpyA loc_4063E8: ; CODE XREF: sub_406357+79j push edi ; cchBuffer mov esi, offset byte_422DF0 push esi ; lpszShortPath push [esp+28h+arg_0] ; lpszLongPath call ebp ; GetShortPathNameA xor ebp, ebp cmp eax, ebp jz loc_4065AD cmp eax, edi jg loc_4065AD push esi push ebx push offset aSS_0 ; "%s=%s\r\n" push offset byte_4229F0 ; LPSTR call ds:wsprintfA ; wsprintfA add esp, 10h push 3F0h ; uSize push esi ; lpBuffer mov ebx, eax call ds:GetWindowsDirectoryA ; GetWindowsDirectoryA push offset aWininit_ini ; "\\wininit.ini" push esi ; lpString1 call ds:lstrcatA ; lstrcatA push ebp ; hTemplateFile push 8000080h ; dwFlagsAndAttributes push 4 ; dwCreationDisposition push ebp ; lpSecurityAttributes push ebp ; dwShareMode push 0C0000000h ; dwDesiredAccess push esi ; lpFileName call ds:CreateFileA ; CreateFileA mov edi, eax cmp edi, 0FFFFFFFFh mov [esp+20h+var_10], edi jz loc_4065A7 push ebp ; lpFileSizeHigh push edi ; hFile call ds:GetFileSize ; GetFileSize mov esi, eax xor ecx, ecx push ecx ; lpName lea ebp, [esi+ebx] lea eax, [ebp+0Ah] push eax ; dwMaximumSizeLow push ecx ; dwMaximumSizeHigh push 4 ; flProtect push ecx ; lpFileMappingAttributes push edi ; hFile mov [esp+38h+var_4], ebp mov [esp+38h+dwBytes], eax call ds:CreateFileMappingA ; CreateFileMappingA xor ecx, ecx cmp eax, ecx mov [esp+20h+hObject], eax jz loc_40658F push ecx ; dwNumberOfBytesToMap push ecx ; dwFileOffsetLow push ecx ; dwFileOffsetHigh push 2 ; dwDesiredAccess push eax ; hFileMappingObject call ds:MapViewOfFile ; MapViewOfFile mov edi, eax test edi, edi jz loc_40657F push offset aRename ; "[Rename]\r\n" push edi ; lpString call sub_4062AB test eax, eax jnz short loc_4064DD push offset aRename ; "[Rename]\r\n" lea eax, [edi+esi] push eax ; lpString1 call ds:__imp_lstrcpyA push ebx add esi, 0Ah push offset byte_4229F0 lea eax, [edi+esi] push eax call sub_405E5A add esi, ebx jmp loc_406578 ; --------------------------------------------------------------------------- loc_4064DD: ; CODE XREF: sub_406357+15Cj push offset asc_408C44 ; "\n[" add eax, 0Ah push eax ; lpString call sub_4062AB test eax, eax jz short loc_406567 push [esp+20h+dwBytes] ; dwBytes inc eax push 40h ; uFlags mov [esp+28h+var_8], eax mov [esp+28h+arg_0], eax call ds:GlobalAlloc ; GlobalAlloc mov ebp, eax test ebp, ebp jz short loc_40654C push offset byte_4229F0 ; lpString2 push ebp ; lpString1 call ds:__imp_lstrcpyA lea ecx, [edi+esi] mov esi, [esp+20h+var_8] add ebx, ebp sub ebx, esi loc_406521: ; CODE XREF: sub_406357+1DCj mov eax, [esp+20h+arg_0] cmp eax, ecx jnb short loc_406535 mov dl, [eax] mov [ebx+eax], dl inc eax mov [esp+20h+arg_0], eax jmp short loc_406521 ; --------------------------------------------------------------------------- loc_406535: ; CODE XREF: sub_406357+1D0j sub eax, esi push eax push ebp push esi call sub_405E5A mov esi, [esp+20h+var_4] push ebp ; hMem call ds:GlobalFree ; GlobalFree jmp short loc_406578 ; --------------------------------------------------------------------------- loc_40654C: ; CODE XREF: sub_406357+1B1j push edi ; lpBaseAddress call ds:UnmapViewOfFile ; UnmapViewOfFile push [esp+20h+hObject] ; hObject mov esi, ds:CloseHandle call esi ; CloseHandle push [esp+20h+var_10] ; hObject call esi ; CloseHandle jmp short loc_4065AD ; --------------------------------------------------------------------------- loc_406567: ; CODE XREF: sub_406357+196j push ebx push offset byte_4229F0 lea eax, [edi+esi] push eax call sub_405E5A mov esi, ebp loc_406578: ; CODE XREF: sub_406357+181j ; sub_406357+1F3j push edi ; lpBaseAddress call ds:UnmapViewOfFile ; UnmapViewOfFile loc_40657F: ; CODE XREF: sub_406357+149j push [esp+20h+hObject] ; hObject call ds:CloseHandle ; CloseHandle mov edi, [esp+20h+var_10] xor ecx, ecx loc_40658F: ; CODE XREF: sub_406357+133j push ecx ; dwMoveMethod push ecx ; lpDistanceToMoveHigh push esi ; lDistanceToMove push edi ; hFile call ds:SetFilePointer ; SetFilePointer push edi ; hFile call ds:SetEndOfFile ; SetEndOfFile push edi ; hObject call ds:CloseHandle ; CloseHandle loc_4065A7: ; CODE XREF: sub_406357+35j ; sub_406357+FEj inc dword_426470 loc_4065AD: ; CODE XREF: sub_406357+71j ; sub_406357+7Bj ... pop edi pop esi pop ebp pop ebx add esp, 10h retn 8 sub_406357 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_4065B7(LPSTR lpString1,LPCSTR lpString2) sub_4065B7 proc near ; CODE XREF: sub_4014F2+Ap ; sub_401508+23p ... ppidl = dword ptr -14h var_10 = dword ptr -10h var_C = dword ptr -0Ch var_8 = dword ptr -8 var_4 = dword ptr -4 lpString1 = dword ptr 4 lpString2 = dword ptr 8 sub esp, 14h push ebp mov ebp, [esp+18h+lpString2] test ebp, ebp push esi jge short loc_4065D5 mov ecx, dword_425BC8 lea eax, ds:4[ebp*4] sub ecx, eax mov ebp, [ecx] loc_4065D5: ; CODE XREF: sub_4065B7+Bj mov eax, dword_426418 mov ecx, [esp+1Ch+lpString1] add ebp, eax mov eax, offset byte_424F80 sub ecx, eax cmp ecx, 800h mov esi, eax jnb short loc_4065FA mov esi, [esp+1Ch+lpString1] and [esp+1Ch+lpString1], 0 loc_4065FA: ; CODE XREF: sub_4065B7+38j mov dl, [ebp+0] test dl, dl jz loc_4067C4 push ebx push edi loc_406607: ; CODE XREF: sub_4065B7+205j mov ecx, esi sub ecx, eax cmp ecx, 400h jge loc_4067C2 inc ebp cmp dl, 0FCh jbe loc_4067A4 movsx eax, byte ptr [ebp+1] movsx ecx, byte ptr [ebp+0] mov edi, eax and edi, 7Fh mov ebx, ecx and ebx, 7Fh shl edi, 7 or edi, ebx mov ebx, 8000h mov [esp+24h+var_10], ecx or ecx, ebx mov [esp+24h+var_8], eax or eax, ebx inc ebp inc ebp cmp dl, 0FEh mov [esp+24h+var_C], ecx mov [esp+24h+var_4], eax jnz loc_40674E xor edi, edi cmp [esp+24h+var_8], 4 mov [esp+24h+lpString2], edi mov byte ptr [esi], 0 jnz short loc_406677 push 2 mov [esp+28h+lpString2], offset aMicrosoftInter ; "\\Microsoft\\Internet Explorer\\Quick Laun"... pop edi loc_406677: ; CODE XREF: sub_4065B7+B3j mov ebx, [esp+24h+var_10] cmp ebx, 2Bh jnz short loc_406695 push esi ; lpData push offset ValueName ; "CommonFilesDir" push offset phkResult ; "Software\\Microsoft\\Windows\\CurrentVersi"... push 80000002h ; cbData call sub_405EF1 loc_406695: ; CODE XREF: sub_4065B7+C7j cmp ebx, 26h jnz short loc_4066C0 push esi ; lpData push offset aProgramfilesdi ; "ProgramFilesDir" push offset phkResult ; "Software\\Microsoft\\Windows\\CurrentVersi"... push 80000002h ; cbData call sub_405EF1 cmp byte ptr [esi], 0 jnz short loc_406731 push offset aCProgramFiles ; "C:\\Program Files" push esi ; lpString1 call ds:__imp_lstrcpyA loc_4066C0: ; CODE XREF: sub_4065B7+E1j cmp ebx, 25h jnz short loc_4066D1 push 400h ; uSize push esi ; lpBuffer call ds:GetSystemDirectoryA ; GetSystemDirectoryA loc_4066D1: ; CODE XREF: sub_4065B7+10Cj cmp ebx, 24h jnz short loc_4066E2 push 400h ; uSize push esi ; lpBuffer call ds:GetWindowsDirectoryA ; GetWindowsDirectoryA loc_4066E2: ; CODE XREF: sub_4065B7+11Dj cmp byte ptr [esi], 0 jnz short loc_406731 cmp dword_426464, 0 push 4 pop edi jnz short loc_4066F8 push 2 pop edi jmp short loc_406731 ; --------------------------------------------------------------------------- loc_4066F8: ; CODE XREF: sub_4065B7+13Aj ; sub_4065B7+17Cj lea eax, [esp+24h+ppidl] push eax ; ppidl push [esp+edi*4+28h+ppidl] ; csidl dec edi push dword_4263E0 ; hwnd call ds:SHGetSpecialFolderLocation ; SHGetSpecialFolderLocation test eax, eax jnz short loc_40672E push esi ; pszPath push [esp+28h+ppidl] ; pidl call ds:SHGetPathFromIDListA ; SHGetPathFromIDListA push [esp+24h+ppidl] mov ebx, eax call sub_405CD6 test ebx, ebx jnz short loc_406735 jmp short loc_406731 ; --------------------------------------------------------------------------- loc_40672E: ; CODE XREF: sub_4065B7+159j mov byte ptr [esi], 0 loc_406731: ; CODE XREF: sub_4065B7+FBj ; sub_4065B7+12Ej ... test edi, edi jnz short loc_4066F8 loc_406735: ; CODE XREF: sub_4065B7+173j cmp byte ptr [esi], 0 jz short loc_406780 cmp [esp+24h+lpString2], 0 jz short loc_406780 push [esp+24h+lpString2] ; lpString2 push esi ; lpString1 call ds:lstrcatA ; lstrcatA jmp short loc_406780 ; --------------------------------------------------------------------------- loc_40674E: ; CODE XREF: sub_4065B7+9Fj cmp dl, 0FDh jnz short loc_406791 cmp edi, 1Bh jnz short loc_406766 push dword_4263E0 ; int push esi ; LPSTR call sub_405F5B jmp short loc_406778 ; --------------------------------------------------------------------------- loc_406766: ; CODE XREF: sub_4065B7+19Fj mov eax, edi shl eax, 0Ah add eax, offset dword_427000 push eax ; lpString2 push esi ; lpString1 call ds:__imp_lstrcpyA loc_406778: ; CODE XREF: sub_4065B7+1ADj add edi, 0FFFFFFEBh cmp edi, 6 jnb short loc_406786 loc_406780: ; CODE XREF: sub_4065B7+181j ; sub_4065B7+188j ... push esi ; lpszCurrent call sub_406009 loc_406786: ; CODE XREF: sub_4065B7+1C7j ; sub_4065B7+1EBj push esi ; lpString call ds:__imp_lstrlenA add esi, eax jmp short loc_4067B2 ; --------------------------------------------------------------------------- loc_406791: ; CODE XREF: sub_4065B7+19Aj cmp dl, 0FFh jnz short loc_4067B2 or eax, 0FFFFFFFFh sub eax, edi push eax ; lpString2 push esi ; lpString1 call sub_4065B7 jmp short loc_406786 ; --------------------------------------------------------------------------- loc_4067A4: ; CODE XREF: sub_4065B7+64j jnz short loc_4067AF mov al, [ebp+0] mov [esi], al inc esi inc ebp jmp short loc_4067B2 ; --------------------------------------------------------------------------- loc_4067AF: ; CODE XREF: sub_4065B7:loc_4067A4j mov [esi], dl inc esi loc_4067B2: ; CODE XREF: sub_4065B7+1D8j ; sub_4065B7+1DDj ... mov dl, [ebp+0] test dl, dl mov eax, offset byte_424F80 jnz loc_406607 loc_4067C2: ; CODE XREF: sub_4065B7+5Aj pop edi pop ebx loc_4067C4: ; CODE XREF: sub_4065B7+48j cmp [esp+1Ch+lpString1], 0 mov byte ptr [esi], 0 pop esi pop ebp jz short loc_4067E0 push 400h ; iMaxLength push eax ; lpString2 push [esp+1Ch+lpString1] ; lpString1 call ds:lstrcpynA ; lstrcpynA loc_4067E0: ; CODE XREF: sub_4065B7+217j add esp, 14h retn 8 sub_4065B7 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_4067E6(LPCSTR lpString1,int) sub_4067E6 proc near ; CODE XREF: sub_401610+795p ; sub_403A96+36p ... String2 = _WIN32_FIND_DATAA ptr -144h var_4 = dword ptr -4 lpString1 = dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp sub esp, 144h push ebx mov ebx, [ebp+lpString1] push ebx ; lpString2 call sub_40622D mov ecx, [ebp+arg_4] test cl, 8 mov [ebp+var_4], eax jz short loc_40681B push ebx ; lpFileName call ds:DeleteFileA ; DeleteFileA neg eax sbb eax, eax inc eax add dword_426468, eax jmp loc_4069D6 ; --------------------------------------------------------------------------- loc_40681B: ; CODE XREF: sub_4067E6+1Cj mov [ebp+lpString1], ecx and [ebp+lpString1], 1 push esi jz short loc_406836 test eax, eax jz loc_4069D5 test cl, 2 jz loc_40696C loc_406836: ; CODE XREF: sub_4067E6+3Dj push edi push ebx ; lpString2 mov esi, offset byte_423B78 push esi ; lpString1 call ds:__imp_lstrcpyA cmp [ebp+lpString1], 0 mov edi, ds:lstrcatA jz short loc_40685A push offset a_ ; "\\*.*" push esi ; lpString1 call edi ; lstrcatA jmp short loc_406860 ; --------------------------------------------------------------------------- loc_40685A: ; CODE XREF: sub_4067E6+68j push ebx ; lpszStart call sub_406207 loc_406860: ; CODE XREF: sub_4067E6+72j push offset SubBlock ; "\\" push ebx ; lpString1 call edi ; lstrcatA push ebx ; lpString call ds:__imp_lstrlenA mov edi, eax lea eax, [ebp+String2] push eax ; lpFindFileData push esi ; lpFileName add edi, ebx call ds:FindFirstFileA ; FindFirstFileA mov esi, eax cmp esi, 0FFFFFFFFh jz loc_406961 loc_40688C: ; CODE XREF: sub_4067E6+16Ej cmp [ebp+String2.cFileName], 2Eh jnz short loc_4068AF cmp [ebp+String2.cFileName+1], 2Eh jz loc_406944 cmp [ebp+String2.cFileName+1], 0 jz loc_406944 loc_4068AF: ; CODE XREF: sub_4067E6+ADj lea eax, [ebp+String2.cFileName] push eax ; lpString2 push edi ; lpString1 call ds:__imp_lstrcpyA test byte ptr [ebp+String2.dwFileAttributes], 10h jz short loc_4068DB mov eax, [ebp+arg_4] and eax, 3 cmp al, 3 jnz short loc_406944 push [ebp+arg_4] ; int push ebx ; lpString1 call sub_4067E6 jmp short loc_406944 ; --------------------------------------------------------------------------- loc_4068DB: ; CODE XREF: sub_4067E6+DEj push ebx ; arglist push offset aDeleteDeletefi ; "Delete: DeleteFile(\"%s\")" call sub_40614C mov eax, [ebp+String2.dwFileAttributes] pop ecx pop ecx and eax, 0FFFFFFFEh push eax ; dwFileAttributes push ebx ; lpFileName call ds:SetFileAttributesA ; SetFileAttributesA push ebx ; lpFileName call ds:DeleteFileA ; DeleteFileA test eax, eax push ebx ; arglist jnz short loc_40693D test byte ptr [ebp+arg_4], 4 jz short loc_406929 push offset aDeleteDelete_0 ; "Delete: DeleteFile on Reboot(\"%s\")" call sub_40614C pop ecx pop ecx push ebx ; lpString2 push 0FFFFFFF1h ; int call sub_40509F push 0 ; hObject push ebx ; int call sub_406357 jmp short loc_406944 ; --------------------------------------------------------------------------- loc_406929: ; CODE XREF: sub_4067E6+123j push offset aDeleteDelete_1 ; "Delete: DeleteFile failed(\"%s\")" call sub_40614C inc dword_426468 pop ecx pop ecx jmp short loc_406944 ; --------------------------------------------------------------------------- loc_40693D: ; CODE XREF: sub_4067E6+11Dj push 0FFFFFFF2h ; int call sub_40509F loc_406944: ; CODE XREF: sub_4067E6+B6j ; sub_4067E6+C3j ... lea eax, [ebp+String2] push eax ; lpFindFileData push esi ; hFindFile call ds:FindNextFileA ; FindNextFileA test eax, eax jnz loc_40688C push esi ; hFindFile call ds:FindClose ; FindClose loc_406961: ; CODE XREF: sub_4067E6+A0j cmp [ebp+lpString1], 0 jz short loc_40696B mov byte ptr [edi-1], 0 loc_40696B: ; CODE XREF: sub_4067E6+17Fj pop edi loc_40696C: ; CODE XREF: sub_4067E6+4Aj xor esi, esi cmp [ebp+var_4], esi jz short loc_4069D5 cmp [ebp+lpString1], esi jz short loc_4069D5 push ebx ; lpString1 call sub_4061A6 push ebx ; arglist push offset aRmdirRemovedir ; "RMDir: RemoveDirectory(\"%s\")" call sub_40614C pop ecx pop ecx push ebx ; lpPathName call ds:RemoveDirectoryA ; RemoveDirectoryA test eax, eax push ebx ; arglist jnz short loc_4069CE test byte ptr [ebp+arg_4], 4 jz short loc_4069BA push offset aRmdirRemoved_0 ; "RMDir: RemoveDirectory on Reboot(\"%s\")" call sub_40614C pop ecx pop ecx push ebx ; lpString2 push 0FFFFFFF1h ; int call sub_40509F push esi ; hObject push ebx ; int call sub_406357 jmp short loc_4069D5 ; --------------------------------------------------------------------------- loc_4069BA: ; CODE XREF: sub_4067E6+1B5j push offset aRmdirRemoved_1 ; "RMDir: RemoveDirectory failed(\"%s\")" call sub_40614C inc dword_426468 pop ecx pop ecx jmp short loc_4069D5 ; --------------------------------------------------------------------------- loc_4069CE: ; CODE XREF: sub_4067E6+1AFj push 0FFFFFFE5h ; int call sub_40509F loc_4069D5: ; CODE XREF: sub_4067E6+41j ; sub_4067E6+18Bj ... pop esi loc_4069D6: ; CODE XREF: sub_4067E6+30j pop ebx leave retn 8 sub_4067E6 endp ; =============== S U B R O U T I N E ======================================= sub_4069DB proc near ; CODE XREF: sub_403756+1E5p arg_0 = dword ptr 4 mov eax, [esp+arg_0] mov ecx, 80h loc_4069E4: ; CODE XREF: sub_4069DB+Ej dec ecx mov byte ptr [ecx+eax], 0 jnz short loc_4069E4 or dword ptr [eax+78h], 0FFFFFFFFh xor ecx, ecx inc ecx mov [eax+68h], ecx mov [eax+64h], ecx mov [eax+60h], ecx mov [eax+5Ch], ecx retn sub_4069DB endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame fpd=74h sub_4069FF proc near ; CODE XREF: sub_403420+13Fp var_88 = dword ptr -88h var_84 = dword ptr -84h var_80 = dword ptr -80h var_7C = dword ptr -7Ch var_78 = dword ptr -78h var_74 = dword ptr -74h var_70 = dword ptr -70h var_6C = dword ptr -6Ch var_68 = dword ptr -68h var_64 = dword ptr -64h var_60 = dword ptr -60h var_5C = byte ptr -5Ch var_5B = byte ptr -5Bh var_58 = dword ptr -58h var_54 = dword ptr -54h var_50 = dword ptr -50h var_4C = dword ptr -4Ch var_48 = dword ptr -48h var_44 = dword ptr -44h dwBytes = dword ptr -40h var_3C = dword ptr -3Ch var_38 = dword ptr -38h var_34 = dword ptr -34h var_30 = dword ptr -30h var_2C = dword ptr -2Ch var_28 = dword ptr -28h 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 hMem = dword ptr -4 arg_0 = dword ptr 8 push ebp lea ebp, [esp-74h] sub esp, 8Ch push esi mov esi, [ebp+74h+arg_0] push edi push 22h pop ecx lea edi, [ebp+74h+var_88] rep movsd cmp [ebp+74h+var_30], 0FFFFFFFFh jnz short loc_406A25 xor eax, eax inc eax jmp loc_4073FD ; --------------------------------------------------------------------------- loc_406A25: ; CODE XREF: sub_4069FF+1Cj mov esi, [ebp+74h+var_54] push ebx mov ebx, [ebp+74h+var_44] loc_406A2C: ; CODE XREF: sub_4069FF+54Aj ; sub_4069FF+879j mov eax, [ebp+74h+var_88] cmp eax, 1Ch ; switch 29 cases ja loc_4073F9 ; default jmp ds:off_407404[eax*4] ; switch jump loc_406A3F: ; DATA XREF: .text:off_407404o cmp [ebp+74h+var_6C], 0 ; jumptable 00406A38 case 0 jz loc_4073EA mov eax, [ebp+74h+var_70] dec [ebp+74h+var_6C] mov al, [eax] inc [ebp+74h+var_70] cmp al, 0E1h ja loc_4073F9 ; default movzx eax, al cdq push 2Dh pop ecx idiv ecx push 9 pop ecx mov esi, eax movzx eax, dl cdq idiv ecx mov ecx, esi movzx edi, dl xor edx, edx inc edx shl edx, cl mov ecx, eax mov [ebp+74h+var_3C], edi dec edx mov [ebp+74h+var_1C], edx xor edx, edx inc edx shl edx, cl lea ecx, [edi+esi] mov esi, 300h shl esi, cl dec edx mov [ebp+74h+var_18], edx add esi, 736h lea edi, [esi+esi] cmp edi, [ebp+74h+var_78] jz short loc_406AC7 cmp [ebp+74h+hMem], 0 jz short loc_406AB3 push [ebp+74h+hMem] ; hMem call ds:GlobalFree ; GlobalFree loc_406AB3: ; CODE XREF: sub_4069FF+A9j push edi ; dwBytes call sub_405DBB test eax, eax mov [ebp+74h+hMem], eax jz loc_4073F9 ; default mov [ebp+74h+var_78], edi loc_406AC7: ; CODE XREF: sub_4069FF+A3j test esi, esi jz short loc_406AD7 loc_406ACB: ; CODE XREF: sub_4069FF+D6j mov eax, [ebp+74h+hMem] dec esi mov word ptr [eax+esi*2], 400h jnz short loc_406ACB loc_406AD7: ; CODE XREF: sub_4069FF+CAj and [ebp+74h+var_48], 0 and [ebp+74h+dwBytes], 0 jmp short loc_406B05 ; --------------------------------------------------------------------------- loc_406AE1: ; CODE XREF: sub_4069FF+39j ; sub_4069FF+10Aj ; DATA XREF: ... cmp [ebp+74h+var_6C], 0 ; jumptable 00406A38 case 1 jz loc_40737A mov eax, [ebp+74h+var_70] mov ecx, [ebp+74h+var_48] movzx eax, byte ptr [eax] dec [ebp+74h+var_6C] shl ecx, 3 shl eax, cl or [ebp+74h+dwBytes], eax inc [ebp+74h+var_70] inc [ebp+74h+var_48] loc_406B05: ; CODE XREF: sub_4069FF+E0j cmp [ebp+74h+var_48], 4 jl short loc_406AE1 ; jumptable 00406A38 case 1 mov eax, [ebp+74h+dwBytes] cmp eax, [ebp+74h+var_74] jz short loc_406B38 cmp [ebp+74h+var_8], 0 mov [ebp+74h+var_74], eax jz short loc_406B25 push [ebp+74h+var_8] ; hMem call ds:GlobalFree ; GlobalFree loc_406B25: ; CODE XREF: sub_4069FF+11Bj push [ebp+74h+dwBytes] ; dwBytes call sub_405DBB test eax, eax mov [ebp+74h+var_8], eax jz loc_4073F9 ; default loc_406B38: ; CODE XREF: sub_4069FF+112j mov eax, [ebp+74h+var_8] mov ecx, [ebp+74h+var_74] mov byte ptr [eax+ecx-1], 0 mov [ebp+74h+var_48], 5 jmp short loc_406B6D ; --------------------------------------------------------------------------- loc_406B4C: ; CODE XREF: sub_4069FF+39j ; sub_4069FF+176j ; DATA XREF: ... cmp [ebp+74h+var_6C], 0 ; jumptable 00406A38 case 3 jz loc_407383 mov ecx, [ebp+74h+var_70] mov eax, [ebp+74h+var_C] movzx ecx, byte ptr [ecx] dec [ebp+74h+var_6C] shl eax, 8 or eax, ecx inc [ebp+74h+var_70] mov [ebp+74h+var_C], eax loc_406B6D: ; CODE XREF: sub_4069FF+14Bj mov eax, [ebp+74h+var_48] dec [ebp+74h+var_48] test eax, eax jnz short loc_406B4C ; jumptable 00406A38 case 3 loc_406B77: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o mov eax, [ebp+74h+var_60] ; jumptable 00406A38 case 2 and eax, [ebp+74h+var_1C] mov ecx, [ebp+74h+var_38] shl ecx, 4 add ecx, eax mov [ebp+74h+var_4C], eax mov eax, [ebp+74h+hMem] lea esi, [eax+ecx*2] mov [ebp+74h+var_84], 6 jmp loc_4071FA ; --------------------------------------------------------------------------- loc_406B9A: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o xor edx, edx ; jumptable 00406A38 case 6 cmp [ebp+74h+dwBytes], edx jnz short loc_406C12 movzx eax, [ebp+74h+var_5C] mov esi, [ebp+74h+var_60] and esi, [ebp+74h+var_18] xor ecx, ecx mov cl, 8 sub cl, byte ptr [ebp+74h+var_3C] shr eax, cl mov ecx, [ebp+74h+var_3C] shl esi, cl mov ecx, [ebp+74h+hMem] add eax, esi lea eax, [eax+eax*2] shl eax, 9 cmp [ebp+74h+var_38], 4 lea eax, [eax+ecx+0E6Ch] mov [ebp+74h+var_58], eax jge short loc_406BD9 mov [ebp+74h+var_38], edx jmp short loc_406BE9 ; --------------------------------------------------------------------------- loc_406BD9: ; CODE XREF: sub_4069FF+1D3j cmp [ebp+74h+var_38], 0Ah jge short loc_406BE5 sub [ebp+74h+var_38], 3 jmp short loc_406BE9 ; --------------------------------------------------------------------------- loc_406BE5: ; CODE XREF: sub_4069FF+1DEj sub [ebp+74h+var_38], 6 loc_406BE9: ; CODE XREF: sub_4069FF+1D8j ; sub_4069FF+1E4j cmp [ebp+74h+var_34], edx jz short loc_406C0A mov eax, [ebp+74h+var_14] sub eax, [ebp+74h+var_2C] cmp eax, [ebp+74h+var_74] jb short loc_406BFC add eax, [ebp+74h+var_74] loc_406BFC: ; CODE XREF: sub_4069FF+1F8j mov ecx, [ebp+74h+var_8] mov al, [eax+ecx] xor ebx, ebx mov [ebp+74h+var_5B], al inc ebx jmp short loc_406C6F ; --------------------------------------------------------------------------- loc_406C0A: ; CODE XREF: sub_4069FF+1EDj xor ebx, ebx inc ebx jmp loc_406DE0 ; --------------------------------------------------------------------------- loc_406C12: ; CODE XREF: sub_4069FF+1A0j mov eax, [ebp+74h+hMem] mov ecx, [ebp+74h+var_38] mov [ebp+74h+var_34], 1 lea esi, [eax+ecx*2+180h] mov [ebp+74h+var_84], 7 jmp loc_4071FA ; --------------------------------------------------------------------------- loc_406C32: ; CODE XREF: sub_4069FF+39j ; sub_4069FF+2E9j ; DATA XREF: ... cmp [ebp+74h+var_6C], 0 ; jumptable 00406A38 case 13 jz loc_40738C mov ecx, [ebp+74h+var_70] mov eax, [ebp+74h+var_C] movzx ecx, byte ptr [ecx] shl [ebp+74h+var_10], 8 dec [ebp+74h+var_6C] shl eax, 8 or eax, ecx inc [ebp+74h+var_70] mov [ebp+74h+var_C], eax loc_406C57: ; CODE XREF: sub_4069FF+2E3j mov eax, [ebp+74h+dwBytes] cmp [ebp+74h+var_48], eax jnz loc_406D12 cmp ebx, 100h jge loc_406D78 loc_406C6F: ; CODE XREF: sub_4069FF+209j movzx eax, [ebp+74h+var_5B] shl [ebp+74h+var_5B], 1 mov ecx, [ebp+74h+var_58] shr eax, 7 mov [ebp+74h+var_48], eax inc eax shl eax, 8 add eax, ebx lea esi, [ecx+eax*2] mov ax, [esi] mov ecx, [ebp+74h+var_10] movzx edx, ax shr ecx, 0Bh imul ecx, edx cmp [ebp+74h+var_C], ecx mov [ebp+74h+var_54], esi jnb short loc_406CB9 and [ebp+74h+dwBytes], 0 mov [ebp+74h+var_10], ecx mov ecx, 800h sub ecx, edx sar ecx, 5 add ecx, eax mov [esi], cx shl ebx, 1 jmp short loc_406CD8 ; --------------------------------------------------------------------------- loc_406CB9: ; CODE XREF: sub_4069FF+29Ej sub [ebp+74h+var_10], ecx sub [ebp+74h+var_C], ecx xor ecx, ecx mov cx, ax shr cx, 5 mov [ebp+74h+dwBytes], 1 lea ebx, [ebx+ebx+1] sub eax, ecx mov [esi], ax loc_406CD8: ; CODE XREF: sub_4069FF+2B8j cmp [ebp+74h+var_10], 1000000h mov [ebp+74h+var_44], ebx jnb loc_406C57 jmp loc_406C32 ; jumptable 00406A38 case 13 ; --------------------------------------------------------------------------- loc_406CED: ; CODE XREF: sub_4069FF+39j ; sub_4069FF+374j ; DATA XREF: ... cmp [ebp+74h+var_6C], 0 ; jumptable 00406A38 case 14 jz loc_407395 mov ecx, [ebp+74h+var_70] mov eax, [ebp+74h+var_C] movzx ecx, byte ptr [ecx] shl [ebp+74h+var_10], 8 dec [ebp+74h+var_6C] shl eax, 8 or eax, ecx inc [ebp+74h+var_70] mov [ebp+74h+var_C], eax loc_406D12: ; CODE XREF: sub_4069FF+25Ej ; sub_4069FF+372j cmp ebx, 100h jge short loc_406D78 mov eax, [ebp+74h+var_58] mov ecx, [ebp+74h+var_10] lea edx, [ebx+ebx] lea esi, [edx+eax] mov ax, [esi] movzx edi, ax shr ecx, 0Bh imul ecx, edi cmp [ebp+74h+var_C], ecx mov [ebp+74h+var_54], esi jnb short loc_406D50 mov [ebp+74h+var_10], ecx mov ecx, 800h sub ecx, edi sar ecx, 5 add ecx, eax mov [esi], cx shl ebx, 1 jmp short loc_406D67 ; --------------------------------------------------------------------------- loc_406D50: ; CODE XREF: sub_4069FF+339j sub [ebp+74h+var_10], ecx sub [ebp+74h+var_C], ecx xor ecx, ecx mov cx, ax shr cx, 5 lea ebx, [edx+1] sub eax, ecx mov [esi], ax loc_406D67: ; CODE XREF: sub_4069FF+34Fj cmp [ebp+74h+var_10], 1000000h mov [ebp+74h+var_44], ebx jnb short loc_406D12 jmp loc_406CED ; jumptable 00406A38 case 14 ; --------------------------------------------------------------------------- loc_406D78: ; CODE XREF: sub_4069FF+26Aj ; sub_4069FF+319j and [ebp+74h+var_34], 0 loc_406D7C: ; CODE XREF: sub_4069FF+3DFj mov al, byte ptr [ebp+74h+var_44] mov [ebp+74h+var_5C], al loc_406D82: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o cmp [ebp+74h+var_64], 0 ; jumptable 00406A38 case 26 jz loc_4073A7 mov al, [ebp+74h+var_5C] mov ecx, [ebp+74h+var_68] mov edx, [ebp+74h+var_8] inc [ebp+74h+var_60] inc [ebp+74h+var_68] dec [ebp+74h+var_64] mov [ecx], al mov ecx, [ebp+74h+var_14] mov [ecx+edx], al lea eax, [ecx+1] xor edx, edx div [ebp+74h+var_74] jmp loc_406F3F ; --------------------------------------------------------------------------- loc_406DB3: ; CODE XREF: sub_4069FF+39j ; sub_4069FF+43Aj ; DATA XREF: ... cmp [ebp+74h+var_6C], 0 ; jumptable 00406A38 case 15 jz loc_40739E mov ecx, [ebp+74h+var_70] mov eax, [ebp+74h+var_C] movzx ecx, byte ptr [ecx] shl [ebp+74h+var_10], 8 dec [ebp+74h+var_6C] shl eax, 8 or eax, ecx inc [ebp+74h+var_70] mov [ebp+74h+var_C], eax loc_406DD8: ; CODE XREF: sub_4069FF+438j cmp ebx, 100h jge short loc_406D7C loc_406DE0: ; CODE XREF: sub_4069FF+20Ej mov eax, [ebp+74h+var_58] mov ecx, [ebp+74h+var_10] lea edx, [ebx+ebx] lea esi, [edx+eax] mov ax, [esi] movzx edi, ax shr ecx, 0Bh imul ecx, edi cmp [ebp+74h+var_C], ecx mov [ebp+74h+var_54], esi jnb short loc_406E16 mov [ebp+74h+var_10], ecx mov ecx, 800h sub ecx, edi sar ecx, 5 add ecx, eax mov [esi], cx shl ebx, 1 jmp short loc_406E2D ; --------------------------------------------------------------------------- loc_406E16: ; CODE XREF: sub_4069FF+3FFj sub [ebp+74h+var_10], ecx sub [ebp+74h+var_C], ecx xor ecx, ecx mov cx, ax shr cx, 5 lea ebx, [edx+1] sub eax, ecx mov [esi], ax loc_406E2D: ; CODE XREF: sub_4069FF+415j cmp [ebp+74h+var_10], 1000000h mov [ebp+74h+var_44], ebx jnb short loc_406DD8 jmp loc_406DB3 ; jumptable 00406A38 case 15 ; --------------------------------------------------------------------------- loc_406E3E: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o cmp [ebp+74h+dwBytes], 1 ; jumptable 00406A38 case 7 jnz short loc_406E5D mov eax, [ebp+74h+hMem] mov ecx, [ebp+74h+var_38] lea esi, [eax+ecx*2+198h] mov [ebp+74h+var_84], 8 jmp loc_4071FA ; --------------------------------------------------------------------------- loc_406E5D: ; CODE XREF: sub_4069FF+443j mov eax, [ebp+74h+var_24] mov [ebp+74h+var_20], eax mov eax, [ebp+74h+var_28] mov [ebp+74h+var_24], eax mov eax, [ebp+74h+var_2C] mov [ebp+74h+var_28], eax xor eax, eax cmp [ebp+74h+var_38], 7 mov [ebp+74h+var_80], 16h setnl al dec eax and eax, 0FFFFFFFDh add eax, 0Ah mov [ebp+74h+var_38], eax mov eax, [ebp+74h+hMem] add eax, 664h mov [ebp+74h+var_58], eax loc_406E94: ; CODE XREF: sub_4069FF+39j ; sub_4069FF+5A8j ; DATA XREF: ... mov esi, [ebp+74h+var_58] ; jumptable 00406A38 case 17 mov [ebp+74h+var_84], 12h jmp loc_4071FA ; --------------------------------------------------------------------------- loc_406EA3: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o cmp [ebp+74h+dwBytes], 0 ; jumptable 00406A38 case 8 jnz short loc_406EC7 mov eax, [ebp+74h+var_38] mov ecx, [ebp+74h+hMem] add eax, 0Fh shl eax, 4 add eax, [ebp+74h+var_4C] mov [ebp+74h+var_84], 9 lea esi, [ecx+eax*2] jmp loc_4071FA ; --------------------------------------------------------------------------- loc_406EC7: ; CODE XREF: sub_4069FF+4A8j mov eax, [ebp+74h+hMem] mov ecx, [ebp+74h+var_38] lea esi, [eax+ecx*2+1B0h] mov [ebp+74h+var_84], 0Ah jmp loc_4071FA ; --------------------------------------------------------------------------- loc_406EE0: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o cmp [ebp+74h+dwBytes], 0 ; jumptable 00406A38 case 9 jnz loc_406F95 cmp [ebp+74h+var_60], 0 jz loc_4073F9 ; default xor eax, eax cmp [ebp+74h+var_38], 7 setnl al lea eax, [eax+eax+9] mov [ebp+74h+var_38], eax loc_406F04: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o cmp [ebp+74h+var_64], 0 ; jumptable 00406A38 case 27 jz loc_4073B0 mov eax, [ebp+74h+var_14] sub eax, [ebp+74h+var_2C] cmp eax, [ebp+74h+var_74] jb short loc_406F1C add eax, [ebp+74h+var_74] loc_406F1C: ; CODE XREF: sub_4069FF+518j mov edx, [ebp+74h+var_8] mov cl, [eax+edx] mov eax, [ebp+74h+var_14] mov [eax+edx], cl inc eax xor edx, edx div [ebp+74h+var_74] inc [ebp+74h+var_60] mov eax, [ebp+74h+var_68] inc [ebp+74h+var_68] dec [ebp+74h+var_64] mov [ebp+74h+var_5C], cl mov [eax], cl loc_406F3F: ; CODE XREF: sub_4069FF+3AFj mov [ebp+74h+var_14], edx loc_406F42: ; CODE XREF: sub_4069FF+7C3j mov [ebp+74h+var_88], 2 jmp loc_406A2C ; --------------------------------------------------------------------------- loc_406F4E: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o cmp [ebp+74h+dwBytes], 0 ; jumptable 00406A38 case 10 jnz short loc_406F59 mov eax, [ebp+74h+var_28] jmp short loc_406F8C ; --------------------------------------------------------------------------- loc_406F59: ; CODE XREF: sub_4069FF+553j mov eax, [ebp+74h+hMem] mov ecx, [ebp+74h+var_38] lea esi, [eax+ecx*2+1C8h] mov [ebp+74h+var_84], 0Bh jmp loc_4071FA ; --------------------------------------------------------------------------- loc_406F72: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o cmp [ebp+74h+dwBytes], 0 ; jumptable 00406A38 case 11 jnz short loc_406F7D mov eax, [ebp+74h+var_24] jmp short loc_406F86 ; --------------------------------------------------------------------------- loc_406F7D: ; CODE XREF: sub_4069FF+577j mov ecx, [ebp+74h+var_24] mov eax, [ebp+74h+var_20] mov [ebp+74h+var_20], ecx loc_406F86: ; CODE XREF: sub_4069FF+57Cj mov ecx, [ebp+74h+var_28] mov [ebp+74h+var_24], ecx loc_406F8C: ; CODE XREF: sub_4069FF+558j mov ecx, [ebp+74h+var_2C] mov [ebp+74h+var_28], ecx mov [ebp+74h+var_2C], eax loc_406F95: ; CODE XREF: sub_4069FF+4E5j mov eax, [ebp+74h+hMem] add eax, 0A68h mov [ebp+74h+var_58], eax mov [ebp+74h+var_80], 15h jmp loc_406E94 ; jumptable 00406A38 case 17 ; --------------------------------------------------------------------------- loc_406FAC: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o xor eax, eax ; jumptable 00406A38 case 21 cmp [ebp+74h+var_38], 7 setnl al dec eax and eax, 0FFFFFFFDh add eax, 0Bh mov [ebp+74h+var_38], eax jmp loc_407160 ; --------------------------------------------------------------------------- loc_406FC4: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o mov eax, [ebp+74h+var_30] ; jumptable 00406A38 case 22 cmp eax, 4 jl short loc_406FCF push 3 pop eax loc_406FCF: ; CODE XREF: sub_4069FF+5CBj mov ecx, [ebp+74h+hMem] shl eax, 7 lea eax, [eax+ecx+360h] mov [ebp+74h+var_58], eax mov [ebp+74h+dwBytes], 6 mov [ebp+74h+var_7C], 19h jmp loc_4072BB ; jumptable 00406A38 case 23 ; --------------------------------------------------------------------------- loc_406FF2: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o cmp ebx, 4 ; jumptable 00406A38 case 25 jl short loc_40702C mov ecx, ebx mov eax, ebx and eax, 1 sar ecx, 1 dec ecx or eax, 2 shl eax, cl cmp ebx, 0Eh mov [ebp+74h+var_2C], eax jge short loc_407022 mov edx, [ebp+74h+hMem] sub eax, ebx lea eax, [edx+eax*2+55Eh] mov [ebp+74h+dwBytes], ecx jmp loc_4070A3 ; --------------------------------------------------------------------------- loc_407022: ; CODE XREF: sub_4069FF+60Dj xor ebx, ebx add ecx, 0FFFFFFFCh mov [ebp+74h+var_48], ecx jmp short loc_40705F ; --------------------------------------------------------------------------- loc_40702C: ; CODE XREF: sub_4069FF+5F6j mov [ebp+74h+var_2C], ebx jmp loc_40715D ; --------------------------------------------------------------------------- loc_407034: ; CODE XREF: sub_4069FF+39j ; sub_4069FF+68Bj ; DATA XREF: ... cmp [ebp+74h+var_6C], 0 ; jumptable 00406A38 case 12 jz loc_4073B9 mov ecx, [ebp+74h+var_70] mov eax, [ebp+74h+var_C] movzx ecx, byte ptr [ecx] shl [ebp+74h+var_10], 8 dec [ebp+74h+var_6C] shl eax, 8 or eax, ecx inc [ebp+74h+var_70] mov [ebp+74h+var_C], eax mov eax, [ebp+74h+var_2C] loc_40705C: ; CODE XREF: sub_4069FF+689j dec [ebp+74h+var_48] loc_40705F: ; CODE XREF: sub_4069FF+62Bj cmp [ebp+74h+var_48], 0 jle short loc_40708C mov ecx, [ebp+74h+var_C] shr [ebp+74h+var_10], 1 shl ebx, 1 cmp ecx, [ebp+74h+var_10] mov [ebp+74h+var_44], ebx jb short loc_407081 mov ecx, [ebp+74h+var_10] sub [ebp+74h+var_C], ecx or ebx, 1 mov [ebp+74h+var_44], ebx loc_407081: ; CODE XREF: sub_4069FF+674j cmp [ebp+74h+var_10], 1000000h jnb short loc_40705C jmp short loc_407034 ; jumptable 00406A38 case 12 ; --------------------------------------------------------------------------- loc_40708C: ; CODE XREF: sub_4069FF+664j shl ebx, 4 add eax, ebx mov [ebp+74h+var_2C], eax mov eax, [ebp+74h+hMem] add eax, 644h mov [ebp+74h+dwBytes], 4 loc_4070A3: ; CODE XREF: sub_4069FF+61Ej xor ebx, ebx mov [ebp+74h+var_58], eax mov [ebp+74h+var_50], 1 mov [ebp+74h+var_44], ebx mov [ebp+74h+var_48], ebx jmp short loc_4070DF ; --------------------------------------------------------------------------- loc_4070B7: ; CODE XREF: sub_4069FF+39j ; sub_4069FF+756j ; DATA XREF: ... cmp [ebp+74h+var_6C], 0 ; jumptable 00406A38 case 16 jz loc_4073C2 mov ecx, [ebp+74h+var_70] mov eax, [ebp+74h+var_C] movzx ecx, byte ptr [ecx] shl [ebp+74h+var_10], 8 dec [ebp+74h+var_6C] shl eax, 8 or eax, ecx inc [ebp+74h+var_70] mov [ebp+74h+var_C], eax loc_4070DC: ; CODE XREF: sub_4069FF+754j inc [ebp+74h+var_48] loc_4070DF: ; CODE XREF: sub_4069FF+6B6j mov eax, [ebp+74h+dwBytes] cmp [ebp+74h+var_48], eax jge short loc_40715A mov edi, [ebp+74h+var_50] mov eax, [ebp+74h+var_58] mov edx, [ebp+74h+var_10] add edi, edi lea esi, [edi+eax] mov ax, [esi] movzx ecx, ax shr edx, 0Bh imul edx, ecx cmp [ebp+74h+var_C], edx mov [ebp+74h+var_54], esi jnb short loc_407120 mov [ebp+74h+var_10], edx mov edx, 800h sub edx, ecx sar edx, 5 add edx, eax shl [ebp+74h+var_50], 1 mov [esi], dx jmp short loc_40714C ; --------------------------------------------------------------------------- loc_407120: ; CODE XREF: sub_4069FF+708j xor ecx, ecx inc ecx sub [ebp+74h+var_10], edx sub [ebp+74h+var_C], edx mov ebx, ecx mov ecx, [ebp+74h+var_48] shl ebx, cl mov ecx, ebx mov ebx, [ebp+74h+var_44] or ebx, ecx xor ecx, ecx mov cx, ax shr cx, 5 mov [ebp+74h+var_44], ebx sub eax, ecx inc edi mov [esi], ax mov [ebp+74h+var_50], edi loc_40714C: ; CODE XREF: sub_4069FF+71Fj cmp [ebp+74h+var_10], 1000000h jnb short loc_4070DC jmp loc_4070B7 ; jumptable 00406A38 case 16 ; --------------------------------------------------------------------------- loc_40715A: ; CODE XREF: sub_4069FF+6E6j add [ebp+74h+var_2C], ebx loc_40715D: ; CODE XREF: sub_4069FF+630j inc [ebp+74h+var_2C] loc_407160: ; CODE XREF: sub_4069FF+5C0j mov eax, [ebp+74h+var_2C] test eax, eax jz loc_4073CB cmp eax, [ebp+74h+var_60] ja loc_4073F9 ; default add [ebp+74h+var_30], 2 mov eax, [ebp+74h+var_30] add [ebp+74h+var_60], eax loc_40717E: ; CODE XREF: sub_4069FF+39j ; sub_4069FF+7C1j ; DATA XREF: ... cmp [ebp+74h+var_64], 0 ; jumptable 00406A38 case 28 jz loc_4073D1 mov eax, [ebp+74h+var_14] sub eax, [ebp+74h+var_2C] cmp eax, [ebp+74h+var_74] jb short loc_407196 add eax, [ebp+74h+var_74] loc_407196: ; CODE XREF: sub_4069FF+792j mov edx, [ebp+74h+var_8] mov cl, [eax+edx] mov eax, [ebp+74h+var_14] mov [eax+edx], cl inc eax xor edx, edx div [ebp+74h+var_74] mov eax, [ebp+74h+var_68] inc [ebp+74h+var_68] dec [ebp+74h+var_64] dec [ebp+74h+var_30] cmp [ebp+74h+var_30], 0 mov [ebp+74h+var_5C], cl mov [eax], cl mov [ebp+74h+var_14], edx jg short loc_40717E ; jumptable 00406A38 case 28 jmp loc_406F42 ; --------------------------------------------------------------------------- loc_4071C7: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o cmp [ebp+74h+dwBytes], 0 ; jumptable 00406A38 case 18 jnz short loc_4071ED mov eax, [ebp+74h+var_4C] and [ebp+74h+var_30], 0 mov ecx, [ebp+74h+var_58] shl eax, 4 lea eax, [ecx+eax+4] loc_4071DE: ; CODE XREF: sub_4069FF+89Bj mov [ebp+74h+var_58], eax mov [ebp+74h+dwBytes], 3 jmp loc_4072B4 ; --------------------------------------------------------------------------- loc_4071ED: ; CODE XREF: sub_4069FF+7CCj mov esi, [ebp+74h+var_58] add esi, 2 mov [ebp+74h+var_84], 13h loc_4071FA: ; CODE XREF: sub_4069FF+196j ; sub_4069FF+22Ej ... mov [ebp+74h+var_54], esi loc_4071FD: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o mov ax, [esi] ; jumptable 00406A38 case 4 mov ecx, [ebp+74h+var_10] movzx edx, ax shr ecx, 0Bh imul ecx, edx cmp [ebp+74h+var_C], ecx jnb short loc_407229 mov [ebp+74h+var_10], ecx mov ecx, 800h sub ecx, edx sar ecx, 5 add ecx, eax and [ebp+74h+dwBytes], 0 mov [esi], cx jmp short loc_407244 ; --------------------------------------------------------------------------- loc_407229: ; CODE XREF: sub_4069FF+810j sub [ebp+74h+var_10], ecx sub [ebp+74h+var_C], ecx xor ecx, ecx mov cx, ax shr cx, 5 mov [ebp+74h+dwBytes], 1 sub eax, ecx mov [esi], ax loc_407244: ; CODE XREF: sub_4069FF+828j cmp [ebp+74h+var_10], 1000000h jnb short loc_407272 loc_40724D: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o cmp [ebp+74h+var_6C], 0 ; jumptable 00406A38 case 5 jz loc_4073DA mov ecx, [ebp+74h+var_70] mov eax, [ebp+74h+var_C] movzx ecx, byte ptr [ecx] shl [ebp+74h+var_10], 8 dec [ebp+74h+var_6C] shl eax, 8 or eax, ecx inc [ebp+74h+var_70] mov [ebp+74h+var_C], eax loc_407272: ; CODE XREF: sub_4069FF+84Cj mov eax, [ebp+74h+var_84] loc_407275: ; CODE XREF: sub_4069FF+96Bj ; sub_4069FF+976j mov [ebp+74h+var_88], eax jmp loc_406A2C ; --------------------------------------------------------------------------- loc_40727D: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o cmp [ebp+74h+dwBytes], 0 ; jumptable 00406A38 case 19 jnz short loc_40729F mov eax, [ebp+74h+var_4C] mov ecx, [ebp+74h+var_58] shl eax, 4 mov [ebp+74h+var_30], 8 lea eax, [ecx+eax+104h] jmp loc_4071DE ; --------------------------------------------------------------------------- loc_40729F: ; CODE XREF: sub_4069FF+882j add [ebp+74h+var_58], 204h mov [ebp+74h+var_30], 10h mov [ebp+74h+dwBytes], 8 loc_4072B4: ; CODE XREF: sub_4069FF+7E9j mov [ebp+74h+var_7C], 14h loc_4072BB: ; CODE XREF: sub_4069FF+39j ; sub_4069FF+5EEj ; DATA XREF: ... mov eax, [ebp+74h+dwBytes] ; jumptable 00406A38 case 23 mov [ebp+74h+var_50], 1 mov [ebp+74h+var_48], eax jmp short loc_4072F2 ; --------------------------------------------------------------------------- loc_4072CA: ; CODE XREF: sub_4069FF+39j ; sub_4069FF+953j ; DATA XREF: ... cmp [ebp+74h+var_6C], 0 ; jumptable 00406A38 case 24 jz loc_4073E3 mov ecx, [ebp+74h+var_70] mov eax, [ebp+74h+var_C] movzx ecx, byte ptr [ecx] shl [ebp+74h+var_10], 8 dec [ebp+74h+var_6C] shl eax, 8 or eax, ecx inc [ebp+74h+var_70] mov [ebp+74h+var_C], eax loc_4072EF: ; CODE XREF: sub_4069FF+951j dec [ebp+74h+var_48] loc_4072F2: ; CODE XREF: sub_4069FF+8C9j cmp [ebp+74h+var_48], 0 jle short loc_407357 mov edx, [ebp+74h+var_50] mov eax, [ebp+74h+var_58] mov ecx, [ebp+74h+var_10] add edx, edx lea esi, [edx+eax] mov ax, [esi] movzx edi, ax shr ecx, 0Bh imul ecx, edi cmp [ebp+74h+var_C], ecx mov [ebp+74h+var_54], esi jnb short loc_407331 mov [ebp+74h+var_10], ecx mov ecx, 800h sub ecx, edi sar ecx, 5 add ecx, eax shl [ebp+74h+var_50], 1 mov [esi], cx jmp short loc_407349 ; --------------------------------------------------------------------------- loc_407331: ; CODE XREF: sub_4069FF+919j sub [ebp+74h+var_10], ecx sub [ebp+74h+var_C], ecx xor ecx, ecx mov cx, ax shr cx, 5 sub eax, ecx inc edx mov [esi], ax mov [ebp+74h+var_50], edx loc_407349: ; CODE XREF: sub_4069FF+930j cmp [ebp+74h+var_10], 1000000h jnb short loc_4072EF jmp loc_4072CA ; jumptable 00406A38 case 24 ; --------------------------------------------------------------------------- loc_407357: ; CODE XREF: sub_4069FF+8F7j mov ecx, [ebp+74h+dwBytes] mov ebx, [ebp+74h+var_50] xor eax, eax inc eax shl eax, cl sub ebx, eax mov eax, [ebp+74h+var_7C] mov [ebp+74h+var_44], ebx jmp loc_407275 ; --------------------------------------------------------------------------- loc_40736F: ; CODE XREF: sub_4069FF+39j ; DATA XREF: .text:off_407404o add [ebp+74h+var_30], ebx ; jumptable 00406A38 case 20 mov eax, [ebp+74h+var_80] jmp loc_407275 ; --------------------------------------------------------------------------- loc_40737A: ; CODE XREF: sub_4069FF+E6j mov [ebp+74h+var_88], 1 jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_407383: ; CODE XREF: sub_4069FF+151j mov [ebp+74h+var_88], 3 jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_40738C: ; CODE XREF: sub_4069FF+237j mov [ebp+74h+var_88], 0Dh jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_407395: ; CODE XREF: sub_4069FF+2F2j mov [ebp+74h+var_88], 0Eh jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_40739E: ; CODE XREF: sub_4069FF+3B8j mov [ebp+74h+var_88], 0Fh jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_4073A7: ; CODE XREF: sub_4069FF+387j mov [ebp+74h+var_88], 1Ah jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_4073B0: ; CODE XREF: sub_4069FF+509j mov [ebp+74h+var_88], 1Bh jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_4073B9: ; CODE XREF: sub_4069FF+639j mov [ebp+74h+var_88], 0Ch jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_4073C2: ; CODE XREF: sub_4069FF+6BCj mov [ebp+74h+var_88], 10h jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_4073CB: ; CODE XREF: sub_4069FF+766j or [ebp+74h+var_30], 0FFFFFFFFh jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_4073D1: ; CODE XREF: sub_4069FF+783j mov [ebp+74h+var_88], 1Ch jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_4073DA: ; CODE XREF: sub_4069FF+852j mov [ebp+74h+var_88], 5 jmp short loc_4073EA ; --------------------------------------------------------------------------- loc_4073E3: ; CODE XREF: sub_4069FF+8CFj mov [ebp+74h+var_88], 18h loc_4073EA: ; CODE XREF: sub_4069FF+44j ; sub_4069FF+982j ... mov edi, [ebp+74h+arg_0] push 22h pop ecx lea esi, [ebp+74h+var_88] rep movsd xor eax, eax jmp short loc_4073FC ; --------------------------------------------------------------------------- loc_4073F9: ; CODE XREF: sub_4069FF+33j ; sub_4069FF+57j ... or eax, 0FFFFFFFFh ; default loc_4073FC: ; CODE XREF: sub_4069FF+9F8j pop ebx loc_4073FD: ; CODE XREF: sub_4069FF+21j pop edi pop esi add ebp, 74h leave retn sub_4069FF endp ; --------------------------------------------------------------------------- off_407404 dd offset loc_406A3F ; DATA XREF: sub_4069FF+39r dd offset loc_406AE1 ; jump table for switch statement dd offset loc_406B77 dd offset loc_406B4C dd offset loc_4071FD dd offset loc_40724D dd offset loc_406B9A dd offset loc_406E3E dd offset loc_406EA3 dd offset loc_406EE0 dd offset loc_406F4E dd offset loc_406F72 dd offset loc_407034 dd offset loc_406C32 dd offset loc_406CED dd offset loc_406DB3 dd offset loc_4070B7 dd offset loc_406E94 dd offset loc_4071C7 dd offset loc_40727D dd offset loc_40736F dd offset loc_406FAC dd offset loc_406FC4 dd offset loc_4072BB dd offset loc_4072CA dd offset loc_406FF2 dd offset loc_406D82 dd offset loc_406F04 dd offset loc_40717E ; [00000006 BYTES: COLLAPSED FUNCTION VerQueryValueA. PRESS KEYPAD "+" TO EXPAND] ; [00000006 BYTES: COLLAPSED FUNCTION GetFileVersionInfoA. PRESS KEYPAD "+" TO EXPAND] ; [00000006 BYTES: COLLAPSED FUNCTION GetFileVersionInfoSizeA. PRESS KEYPAD "+" TO EXPAND] align 200h _text ends ; Section 2. (virtual address 00008000) ; Virtual size : 00001C72 ( 7282.) ; Section size in file : 00001E00 ( 7680.) ; Offset to raw data for section: 00006A00 ; Flags 40000040: Data Readable ; Alignment : default ; ; Imports from ADVAPI32.dll ; ; =========================================================================== ; Segment type: Externs ; _idata ; LSTATUS __stdcall RegDeleteKeyA(HKEY hKey,LPCSTR lpSubKey) extrn RegDeleteKeyA:dword ; CODE XREF: sub_401540+6Cp ; DATA XREF: sub_401540+6Cr ; LSTATUS __stdcall RegEnumKeyA(HKEY hKey,DWORD dwIndex,LPSTR lpName,DWORD cchName) extrn RegEnumKeyA:dword ; CODE XREF: sub_401540+57p ; sub_401610+1561p ; DATA XREF: ... ; LSTATUS __stdcall RegOpenKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD ulOptions,REGSAM samDesired,PHKEY phkResult) extrn RegOpenKeyExA:dword ; CODE XREF: sub_401540+1Bp ; sub_4015C7+34p ... ; LSTATUS __stdcall RegEnumValueA(HKEY hKey,DWORD dwIndex,LPSTR lpValueName,LPDWORD lpcchValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData) extrn RegEnumValueA:dword ; CODE XREF: sub_401610+1574p ; DATA XREF: sub_401610+1574r ; LSTATUS __stdcall RegDeleteValueA(HKEY hKey,LPCSTR lpValueName) extrn RegDeleteValueA:dword ; CODE XREF: sub_401610+1320p ; DATA XREF: sub_401610+1320r ; LSTATUS __stdcall RegCreateKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD Reserved,LPSTR lpClass,DWORD dwOptions,REGSAM samDesired,const LPSECURITY_ATTRIBUTES lpSecurityAttributes,PHKEY phkResult,LPDWORD lpdwDisposition) extrn RegCreateKeyExA:dword ; CODE XREF: sub_401610+13E0p ; DATA XREF: sub_401610+13E0r ; LSTATUS __stdcall RegSetValueExA(HKEY hKey,LPCSTR lpValueName,DWORD Reserved,DWORD dwType,const BYTE *lpData,DWORD cbData) extrn RegSetValueExA:dword ; CODE XREF: sub_401610+148Ap ; DATA XREF: sub_401610+148Ar ; LSTATUS __stdcall RegQueryValueExA(HKEY hKey,LPCSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData) extrn RegQueryValueExA:dword ; CODE XREF: sub_401610+14EBp ; sub_405EF1+3Dp ; DATA XREF: ... ; LSTATUS __stdcall RegCloseKey(HKEY hKey) extrn RegCloseKey:dword ; CODE XREF: sub_401540+60p ; sub_401540+7Cp ... ; ; Imports from COMCTL32.dll ; ; void __stdcall InitCommonControls() extrn InitCommonControls:dword ; CODE XREF: start+17p ; DATA XREF: start+17r ; int __stdcall ImageList_AddMasked(HIMAGELIST himl,HBITMAP hbmImage,COLORREF crMask) extrn ImageList_AddMasked:dword ; CODE XREF: sub_404A94+BCp ; DATA XREF: sub_404A94+BCr ; BOOL __stdcall ImageList_Destroy(HIMAGELIST himl) extrn ImageList_Destroy:dword ; CODE XREF: sub_404A94+443p ; DATA XREF: sub_404A94+443r ; HIMAGELIST __stdcall ImageList_Create(int cx,int cy,UINT flags,int cInitial,int cGrow) extrn ImageList_Create:dword ; CODE XREF: sub_404A94+A8p ; DATA XREF: sub_404A94+A8r ; ; Imports from GDI32.dll ; ; int __stdcall GetDeviceCaps(HDC hdc,int index) extrn GetDeviceCaps:dword ; CODE XREF: sub_401610+BC1p ; DATA XREF: sub_401610+BC1r ; BOOL __stdcall DeleteObject(HGDIOBJ ho) extrn DeleteObject:dword ; CODE XREF: sub_401000+EDp ; sub_401000+165p ... ; HBRUSH __stdcall CreateBrushIndirect(const LOGBRUSH *plbrush) extrn CreateBrushIndirect:dword ; CODE XREF: sub_401000+CFp ; sub_40403F+95p ; DATA XREF: ... ; HFONT __stdcall CreateFontIndirectA(const LOGFONTA *lplf) extrn CreateFontIndirectA:dword ; CODE XREF: sub_401000+105p ; sub_401610+C24p ; DATA XREF: ... ; int __stdcall SetBkMode(HDC hdc,int mode) extrn SetBkMode:dword ; CODE XREF: sub_401000+126p ; sub_40403F+4Ep ; DATA XREF: ... ; COLORREF __stdcall SetTextColor(HDC hdc,COLORREF color) extrn SetTextColor:dword ; CODE XREF: sub_401000+130p ; sub_40403F+42p ; DATA XREF: ... ; COLORREF __stdcall SetBkColor(HDC hdc,COLORREF color) extrn SetBkColor:dword ; CODE XREF: sub_40403F+71p ; DATA XREF: sub_40403F+71r ; HGDIOBJ __stdcall SelectObject(HDC hdc,HGDIOBJ h) extrn SelectObject:dword ; CODE XREF: sub_401000+140p ; sub_401000+160p ; DATA XREF: ... ; ; Imports from KERNEL32.dll ; ; DWORD __stdcall FormatMessageA(DWORD dwFlags,LPCVOID lpSource,DWORD dwMessageId,DWORD dwLanguageId,LPSTR lpBuffer,DWORD nSize,va_list *Arguments) extrn FormatMessageA:dword ; CODE XREF: sub_401610+EFCp ; sub_401610+FBBp ; DATA XREF: ... ; DWORD __stdcall GetLastError() extrn GetLastError:dword ; CODE XREF: sub_401610+EECp ; sub_401610+FB5p ; DATA XREF: ... ; HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName) extrn GetModuleHandleA:dword ; CODE XREF: sub_401610+ECCp ; start+97p ... ; UINT __stdcall SetErrorMode(UINT uMode) extrn SetErrorMode:dword ; CODE XREF: sub_401610+E9Bp ; sub_401610+FEDp ... ; BOOL __stdcall GetExitCodeProcess(HANDLE hProcess,LPDWORD lpExitCode) extrn GetExitCodeProcess:dword ; CODE XREF: sub_401610+D93p ; sub_401610+1A1Dp ; DATA XREF: ... ; DWORD __stdcall WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds) extrn WaitForSingleObject:dword ; CODE XREF: sub_401610+D4Ap ; sub_401610+D82p ... ; DWORD __stdcall ExpandEnvironmentStringsA(LPCSTR lpSrc,LPSTR lpDst,DWORD nSize) extrn ExpandEnvironmentStringsA:dword ; CODE XREF: sub_401610:loc_401E92p ; DATA XREF: sub_401610:loc_401E92r ; DWORD __stdcall GetEnvironmentVariableA(LPCSTR lpName,LPSTR lpBuffer,DWORD nSize) extrn GetEnvironmentVariableA:dword ; CODE XREF: sub_401610+871p ; DATA XREF: sub_401610+871r ; int __stdcall lstrcmpiA(LPCSTR lpString1,LPCSTR lpString2) extrn lstrcmpiA:dword ; CODE XREF: sub_401610+84Dp ; start+33Dp ... ; BOOL __stdcall CloseHandle(HANDLE hObject) extrn CloseHandle:dword ; CODE XREF: sub_401610+6D7p ; sub_401610:loc_402BADp ... ; BOOL __stdcall SetFileTime(HANDLE hFile,const FILETIME *lpCreationTime,const FILETIME *lpLastAccessTime,const FILETIME *lpLastWriteTime) extrn SetFileTime:dword ; CODE XREF: sub_401610+6CEp ; DATA XREF: sub_401610+6CEr ; DWORD __stdcall GetFileAttributesA(LPCSTR lpFileName) extrn GetFileAttributesA:dword ; CODE XREF: sub_401610+599p ; sub_405A5A+92p ... ; LONG __stdcall CompareFileTime(const FILETIME *lpFileTime1,const FILETIME *lpFileTime2) extrn CompareFileTime:dword ; CODE XREF: sub_401610+575p ; DATA XREF: sub_401610+575r ; DWORD __stdcall SearchPathA(LPCSTR lpPath,LPCSTR lpFileName,LPCSTR lpExtension,DWORD nBufferLength,LPSTR lpBuffer,LPSTR *lpFilePart) extrn SearchPathA:dword ; CODE XREF: sub_401610+3FCp ; DATA XREF: sub_401610+3FCr ; DWORD __stdcall GetShortPathNameA(LPCSTR lpszLongPath,LPSTR lpszShortPath,DWORD cchBuffer) extrn GetShortPathNameA:dword ; CODE XREF: sub_401610+3DAp ; sub_406357+6Dp ... ; DWORD __stdcall GetFullPathNameA(LPCSTR lpFileName,DWORD nBufferLength,LPSTR lpBuffer,LPSTR *lpFilePart) extrn GetFullPathNameA:dword ; CODE XREF: sub_401610+395p ; DATA XREF: sub_401610+395r ; BOOL __stdcall MoveFileA(LPCSTR lpExistingFileName,LPCSTR lpNewFileName) extrn MoveFileA:dword ; CODE XREF: sub_401610+330p ; DATA XREF: sub_401610+330r ; LPSTR __stdcall lstrcatA(LPSTR lpString1,LPCSTR lpString2) extrn lstrcatA:dword ; CODE XREF: sub_401610+319p ; sub_401610+31Dp ... ; BOOL __stdcall SetCurrentDirectoryA(LPCSTR lpPathName) extrn SetCurrentDirectoryA:dword ; CODE XREF: sub_401610+27Cp ; DATA XREF: sub_401610+27Cr ; BOOL __stdcall SetFileAttributesA(LPCSTR lpFileName,DWORD dwFileAttributes) extrn SetFileAttributesA:dword ; CODE XREF: sub_401610+20Ep ; sub_401610+5A4p ... ; void __stdcall Sleep(DWORD dwMilliseconds) extrn Sleep:dword ; CODE XREF: sub_401610+15Cp ; DATA XREF: sub_401610+15Cr ; DWORD __stdcall GetTickCount() extrn GetTickCount:dword ; CODE XREF: sub_403420+Dp ; sub_403420:loc_403513p ... ; HANDLE __stdcall CreateFileA(LPCSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD dwCreationDisposition,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile) extrn CreateFileA:dword ; CODE XREF: sub_403756+213p ; sub_405E7A+26p ... ; DWORD __stdcall GetFileSize(HANDLE hFile,LPDWORD lpFileSizeHigh) extrn GetFileSize:dword ; CODE XREF: sub_403756+68p ; sub_406357+106p ; DATA XREF: ... ; HMODULE __stdcall LoadLibraryA(LPCSTR lpLibFileName) extrn LoadLibraryA:dword ; CODE XREF: sub_401610+F1Ep ; sub_405A5A+1D9p ... ; BOOL __stdcall CreateDirectoryA(LPCSTR lpPathName,LPSECURITY_ATTRIBUTES lpSecurityAttributes) extrn CreateDirectoryA:dword ; CODE XREF: sub_403A62+21p ; start+1C1p ... ; void __stdcall ExitProcess(UINT uExitCode) extrn ExitProcess:dword ; CODE XREF: start:loc_403F86p ; DATA XREF: start:loc_403F86r ; HANDLE __stdcall GetCurrentProcess() extrn GetCurrentProcess:dword ; CODE XREF: start+43Bp ; DATA XREF: start+43Br ; BOOL __stdcall CopyFileA(LPCSTR lpExistingFileName,LPCSTR lpNewFileName,BOOL bFailIfExists) extrn CopyFileA:dword ; CODE XREF: start+34Fp ; DATA XREF: start+34Fr ; LPSTR __stdcall lstrcpynA(LPSTR lpString1,LPCSTR lpString2,int iMaxLength) extrn lstrcpynA:dword ; CODE XREF: start+93p start+1ACp ... ; LPSTR __stdcall GetCommandLineA() extrn GetCommandLineA:dword ; CODE XREF: start+85p ; DATA XREF: start+85r ; UINT __stdcall GetWindowsDirectoryA(LPSTR lpBuffer,UINT uSize) extrn GetWindowsDirectoryA:dword ; CODE XREF: start+59p ; sub_406357+CDp ... ; DWORD __stdcall GetTempPathA(DWORD nBufferLength,LPSTR lpBuffer) extrn GetTempPathA:dword ; CODE XREF: start+44p ; DATA XREF: start+44r ; LANGID __stdcall GetUserDefaultLangID() extrn GetUserDefaultLangID:dword ; CODE XREF: sub_40410B:loc_40412Ap ; DATA XREF: sub_40410B:loc_40412Ar ; BOOL __stdcall GetDiskFreeSpaceA(LPCSTR lpRootPathName,LPDWORD lpSectorsPerCluster,LPDWORD lpBytesPerSector,LPDWORD lpNumberOfFreeClusters,LPDWORD lpTotalNumberOfClusters) extrn GetDiskFreeSpaceA:dword ; CODE XREF: sub_40463C+25Ap ; DATA XREF: sub_40463C+25Ar ; BOOL __stdcall GlobalUnlock(HGLOBAL hMem) extrn GlobalUnlock:dword ; CODE XREF: sub_405202+377p ; DATA XREF: sub_405202+377r ; LPVOID __stdcall GlobalLock(HGLOBAL hMem) extrn GlobalLock:dword ; CODE XREF: sub_405202+33Ep ; DATA XREF: sub_405202+33Er ; HGLOBAL __stdcall GlobalAlloc(UINT uFlags,SIZE_T dwBytes) extrn GlobalAlloc:dword ; CODE XREF: sub_405202+334p ; sub_405DBB+6p ... ; HANDLE __stdcall CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId) extrn CreateThread:dword ; CODE XREF: sub_405202+1E0p ; DATA XREF: sub_405202+1E0r ; BOOL __stdcall CreateProcessA(LPCSTR lpApplicationName,LPSTR lpCommandLine,LPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,BOOL bInheritHandles,DWORD dwCreationFlags,LPVOID lpEnvironment,LPCSTR lpCurrentDirectory,LPSTARTUPINFOA lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation) extrn CreateProcessA:dword ; CODE XREF: sub_405D01+3Cp ; DATA XREF: sub_405D01+3Cr ; UINT __stdcall GetTempFileNameA(LPCSTR lpPathName,LPCSTR lpPrefixString,UINT uUnique,LPSTR lpTempFileName) extrn GetTempFileNameA:dword ; CODE XREF: sub_405EA9+2Dp ; DATA XREF: sub_405EA9+2Dr ; LPSTR __stdcall lstrcpyA(LPSTR lpString1,LPCSTR lpString2) extrn __imp_lstrcpyA:dword ; CODE XREF: sub_40622D+Bp ; sub_406357+8Bp ... ; int __stdcall lstrlenA(LPCSTR lpString) extrn __imp_lstrlenA:dword ; CODE XREF: sub_4060AD+85p ; sub_4061A6+6p ... ; BOOL __stdcall SetEndOfFile(HANDLE hFile) extrn SetEndOfFile:dword ; CODE XREF: sub_406357+243p ; DATA XREF: sub_406357+243r ; BOOL __stdcall UnmapViewOfFile(LPCVOID lpBaseAddress) extrn UnmapViewOfFile:dword ; CODE XREF: sub_406357+1F6p ; sub_406357+222p ; DATA XREF: ... ; LPVOID __stdcall MapViewOfFile(HANDLE hFileMappingObject,DWORD dwDesiredAccess,DWORD dwFileOffsetHigh,DWORD dwFileOffsetLow,SIZE_T dwNumberOfBytesToMap) extrn MapViewOfFile:dword ; CODE XREF: sub_406357+13Fp ; DATA XREF: sub_406357+13Fr ; HANDLE __stdcall CreateFileMappingA(HANDLE hFile,LPSECURITY_ATTRIBUTES lpFileMappingAttributes,DWORD flProtect,DWORD dwMaximumSizeHigh,DWORD dwMaximumSizeLow,LPCSTR lpName) extrn CreateFileMappingA:dword ; CODE XREF: sub_406357+125p ; DATA XREF: sub_406357+125r ; UINT __stdcall GetSystemDirectoryA(LPSTR lpBuffer,UINT uSize) extrn GetSystemDirectoryA:dword ; CODE XREF: sub_4065B7+114p ; DATA XREF: sub_4065B7+114r ; BOOL __stdcall RemoveDirectoryA(LPCSTR lpPathName) extrn RemoveDirectoryA:dword ; CODE XREF: sub_4067E6+1A6p ; DATA XREF: sub_4067E6+1A6r ; int __stdcall MulDiv(int nNumber,int nNumerator,int nDenominator) extrn MulDiv:dword ; CODE XREF: sub_4013E7+B5p ; sub_401610+BD1p ... ; BOOL __stdcall DeleteFileA(LPCSTR lpFileName) extrn DeleteFileA:dword ; CODE XREF: sub_401610+196Cp ; start+7Ep ... ; FARPROC __stdcall GetProcAddress(HMODULE hModule,LPCSTR lpProcName) extrn GetProcAddress:dword ; CODE XREF: sub_401610+F34p ; start+40Cp ... ; BOOL __stdcall FreeLibrary(HMODULE hLibModule) extrn FreeLibrary:dword ; CODE XREF: sub_401610+FA0p ; DATA XREF: sub_401610+FA0r ; int __stdcall MultiByteToWideChar(UINT CodePage,DWORD dwFlags,LPCSTR lpMultiByteStr,int cbMultiByte,LPWSTR lpWideCharStr,int cchWideChar) extrn MultiByteToWideChar:dword ; CODE XREF: sub_401610+1135p ; DATA XREF: sub_401610+1135r ; BOOL __stdcall WritePrivateProfileStringA(LPCSTR lpAppName,LPCSTR lpKeyName,LPCSTR lpString,LPCSTR lpFileName) extrn WritePrivateProfileStringA:dword ; CODE XREF: sub_401610+12AFp ; DATA XREF: sub_401610+12AFr ; HGLOBAL __stdcall GlobalFree(HGLOBAL hMem) extrn GlobalFree:dword ; CODE XREF: sub_401610+1911p ; sub_401610+1930p ... ; DWORD __stdcall GetPrivateProfileStringA(LPCSTR lpAppName,LPCSTR lpKeyName,LPCSTR lpDefault,LPSTR lpReturnedString,DWORD nSize,LPCSTR lpFileName) extrn GetPrivateProfileStringA:dword ; CODE XREF: sub_401610+12EDp ; DATA XREF: sub_401610+12EDr ; BOOL __stdcall WriteFile(HANDLE hFile,LPCVOID lpBuffer,DWORD nNumberOfBytesToWrite,LPDWORD lpNumberOfBytesWritten,LPOVERLAPPED lpOverlapped) extrn WriteFile:dword ; CODE XREF: sub_401610+160Fp ; sub_401610+1927p ... ; BOOL __stdcall ReadFile(HANDLE hFile,LPVOID lpBuffer,DWORD nNumberOfBytesToRead,LPDWORD lpNumberOfBytesRead,LPOVERLAPPED lpOverlapped) extrn ReadFile:dword ; CODE XREF: sub_401610+1664p ; sub_4033D7+17p ... ; DWORD __stdcall SetFilePointer(HANDLE hFile,LONG lDistanceToMove,PLONG lpDistanceToMoveHigh,DWORD dwMoveMethod) extrn SetFilePointer:dword ; CODE XREF: sub_401610+16C8p ; sub_401610+16F7p ... ; BOOL __stdcall FindClose(HANDLE hFindFile) extrn FindClose:dword ; CODE XREF: sub_401610+171Cp ; sub_406168+2Cp ... ; BOOL __stdcall FindNextFileA(HANDLE hFindFile,LPWIN32_FIND_DATAA lpFindFileData) extrn FindNextFileA:dword ; CODE XREF: sub_401610+173Ep ; sub_4067E6+166p ; DATA XREF: ... ; HANDLE __stdcall FindFirstFileA(LPCSTR lpFileName,LPWIN32_FIND_DATAA lpFindFileData) extrn FindFirstFileA:dword ; CODE XREF: sub_401610+1769p ; sub_406168+1Ap ... ; DWORD __stdcall GetModuleFileNameA(HMODULE hModule,LPCH lpFilename,DWORD nSize) extrn GetModuleFileNameA:dword ; CODE XREF: sub_403756+36p ; start+32Bp ; DATA XREF: ... ; ; Imports from SHELL32.dll ; ; HINSTANCE __stdcall ShellExecuteA(HWND hwnd,LPCSTR lpOperation,LPCSTR lpFile,LPCSTR lpParameters,LPCSTR lpDirectory,INT nShowCmd) extrn ShellExecuteA:dword ; CODE XREF: sub_401610+CC8p ; sub_40428C+211p ; DATA XREF: ... ; LPITEMIDLIST __stdcall SHBrowseForFolderA(LPBROWSEINFOA lpbi) extrn SHBrowseForFolderA:dword ; CODE XREF: sub_40463C+15Bp ; DATA XREF: sub_40463C+15Br ; HRESULT __stdcall SHGetMalloc(IMalloc **ppMalloc) extrn SHGetMalloc:dword ; CODE XREF: sub_405CD6+8p ; DATA XREF: sub_405CD6+8r ; HRESULT __stdcall SHGetSpecialFolderLocation(HWND hwnd,int csidl,LPITEMIDLIST *ppidl) extrn SHGetSpecialFolderLocation:dword ; CODE XREF: sub_4065B7+151p ; DATA XREF: sub_4065B7+151r ; int __stdcall SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp) extrn SHFileOperationA:dword ; CODE XREF: sub_401610+11EDp ; DATA XREF: sub_401610+11EDr ; BOOL __stdcall SHGetPathFromIDListA(LPCITEMIDLIST pidl,LPSTR pszPath) extrn SHGetPathFromIDListA:dword ; CODE XREF: sub_4041F2+38p ; sub_4065B7+160p ; DATA XREF: ... ; ; Imports from USER32.dll ; ; void __stdcall PostQuitMessage(int nExitCode) extrn PostQuitMessage:dword ; CODE XREF: sub_401610+ABp ; DATA XREF: sub_401610+ABr ; BOOL __stdcall SetWindowTextA(HWND hWnd,LPCSTR lpString) extrn SetWindowTextA:dword ; CODE XREF: DialogFunc+72p ; sub_40410B+B2p ... ; UINT_PTR __stdcall SetTimer(HWND hWnd,UINT_PTR nIDEvent,UINT uElapse,TIMERPROC lpTimerFunc) extrn SetTimer:dword ; CODE XREF: DialogFunc+20p ; DATA XREF: DialogFunc+20r ; BOOL __stdcall DestroyWindow(HWND hWnd) extrn DestroyWindow:dword ; CODE XREF: sub_403420+1EBp ; sub_403756+195p ... ; HWND __stdcall CreateDialogParamA(HINSTANCE hInstance,LPCSTR lpTemplateName,HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam) extrn CreateDialogParamA:dword ; CODE XREF: sub_403420+11Cp ; sub_403756+15Bp ... ; BOOL __stdcall ExitWindowsEx(UINT uFlags,DWORD dwReason) extrn ExitWindowsEx:dword ; CODE XREF: start+479p ; DATA XREF: start+479r ; LPSTR __stdcall CharNextA(LPCSTR lpsz) extrn CharNextA:dword ; CODE XREF: start+C0p sub_405DCA+Dp ... ; DWORD __stdcall GetSysColor(int nIndex) extrn GetSysColor:dword ; CODE XREF: sub_40403F+36p ; sub_40403F+61p ... ; LONG __stdcall GetWindowLongA(HWND hWnd,int nIndex) extrn GetWindowLongA:dword ; CODE XREF: sub_40403F+1Ap ; sub_404A94+229p ; DATA XREF: ... ; HCURSOR __stdcall LoadCursorA(HINSTANCE hInstance,LPCSTR lpCursorName) extrn LoadCursorA:dword ; CODE XREF: sub_40428C+1FBp ; sub_40428C+21Ep ... ; HCURSOR __stdcall SetCursor(HCURSOR hCursor) extrn SetCursor:dword ; CODE XREF: sub_40428C+1FEp ; sub_40428C+221p ... ; BOOL __stdcall CheckDlgButton(HWND hDlg,int nIDButton,UINT uCheck) extrn CheckDlgButton:dword ; CODE XREF: sub_40428C+88p ; DATA XREF: sub_40428C+88r ; SHORT __stdcall GetAsyncKeyState(int vKey) extrn GetAsyncKeyState:dword ; CODE XREF: sub_40463C+65p ; DATA XREF: sub_40463C+65r ; UINT __stdcall IsDlgButtonChecked(HWND hDlg,int nIDButton) extrn IsDlgButtonChecked:dword ; CODE XREF: sub_40463C+4Bp ; DATA XREF: sub_40463C+4Br ; BOOL __stdcall ScreenToClient(HWND hWnd,LPPOINT lpPoint) extrn ScreenToClient:dword ; CODE XREF: sub_404961+22p ; sub_405597+42Ep ; DATA XREF: ... ; DWORD __stdcall GetMessagePos() extrn GetMessagePos:dword ; CODE XREF: sub_404961+6p ; DATA XREF: sub_404961+6r ; LRESULT __stdcall CallWindowProcA(WNDPROC lpPrevWndFunc,HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam) extrn CallWindowProcA:dword ; CODE XREF: sub_4049AD+DBp ; DATA XREF: sub_4049AD+DBr ; BOOL __stdcall IsWindowVisible(HWND hWnd) extrn IsWindowVisible:dword ; CODE XREF: sub_4049AD+4Cp ; DATA XREF: sub_4049AD+4Cr ; HBITMAP __stdcall LoadBitmapA(HINSTANCE hInstance,LPCSTR lpBitmapName) extrn LoadBitmapA:dword ; CODE XREF: sub_404A94+83p ; DATA XREF: sub_404A94+83r ; BOOL __stdcall CloseClipboard() extrn CloseClipboard:dword ; CODE XREF: sub_405202+388p ; DATA XREF: sub_405202+388r ; HANDLE __stdcall SetClipboardData(UINT uFormat,HANDLE hMem) extrn SetClipboardData:dword ; CODE XREF: sub_405202+382p ; DATA XREF: sub_405202+382r ; BOOL __stdcall EmptyClipboard() extrn EmptyClipboard:dword ; CODE XREF: sub_405202+32Bp ; DATA XREF: sub_405202+32Br ; BOOL __stdcall OpenClipboard(HWND hWndNewOwner) extrn OpenClipboard:dword ; CODE XREF: sub_405202+325p ; DATA XREF: sub_405202+325r ; BOOL __stdcall TrackPopupMenu(HMENU hMenu,UINT uFlags,int x,int y,int nReserved,HWND hWnd,const RECT *prcRect) extrn TrackPopupMenu:dword ; CODE XREF: sub_405202+2E3p ; DATA XREF: sub_405202+2E3r ; BOOL __stdcall GetWindowRect(HWND hWnd,LPRECT lpRect) extrn GetWindowRect:dword ; CODE XREF: sub_405202+2C1p ; sub_405597+422p ; DATA XREF: ... ; BOOL __stdcall AppendMenuA(HMENU hMenu,UINT uFlags,UINT_PTR uIDNewItem,LPCSTR lpNewItem) extrn AppendMenuA:dword ; CODE XREF: sub_405202+2AEp ; DATA XREF: sub_405202+2AEr ; HMENU __stdcall CreatePopupMenu() extrn CreatePopupMenu:dword ; CODE XREF: sub_405202+299p ; DATA XREF: sub_405202+299r ; int __stdcall GetSystemMetrics(int nIndex) extrn GetSystemMetrics:dword ; CODE XREF: sub_405202+CEp ; DATA XREF: sub_405202+CEr ; BOOL __stdcall EndDialog(HWND hDlg,INT_PTR nResult) extrn EndDialog:dword ; CODE XREF: sub_405597+48Cp ; DATA XREF: sub_405597+48Cr ; DWORD __stdcall SetClassLongA(HWND hWnd,int nIndex,LONG dwNewLong) extrn SetClassLongA:dword ; CODE XREF: sub_405597+1D0p ; DATA XREF: sub_405597+1D0r ; BOOL __stdcall IsWindowEnabled(HWND hWnd) extrn IsWindowEnabled:dword ; CODE XREF: sub_405597+B6p ; sub_405597+103p ; DATA XREF: ... ; BOOL __stdcall SetWindowPos(HWND hWnd,HWND hWndInsertAfter,int X,int Y,int cx,int cy,UINT uFlags) extrn SetWindowPos:dword ; CODE XREF: sub_405597+3Cp ; sub_405597+449p ; DATA XREF: ... ; INT_PTR __stdcall DialogBoxParamA(HINSTANCE hInstance,LPCSTR lpTemplateName,HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam) extrn DialogBoxParamA:dword ; CODE XREF: sub_405A5A+237p ; DATA XREF: sub_405A5A+237r ; BOOL __stdcall GetClassInfoA(HINSTANCE hInstance,LPCSTR lpClassName,LPWNDCLASSA lpWndClass) extrn GetClassInfoA:dword ; CODE XREF: sub_405A5A+1F9p ; sub_405A5A+208p ; DATA XREF: ... ; HWND __stdcall CreateWindowExA(DWORD dwExStyle,LPCSTR lpClassName,LPCSTR lpWindowName,DWORD dwStyle,int X,int Y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HINSTANCE hInstance,LPVOID lpParam) extrn CreateWindowExA:dword ; CODE XREF: sub_405A5A+191p ; DATA XREF: sub_405A5A+191r ; BOOL __stdcall SystemParametersInfoA(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinIni) extrn SystemParametersInfoA:dword ; CODE XREF: sub_405A5A+158p ; DATA XREF: sub_405A5A+158r ; ATOM __stdcall RegisterClassA(const WNDCLASSA *lpWndClass) extrn RegisterClassA:dword ; CODE XREF: sub_405A5A+140p ; sub_405A5A+218p ; DATA XREF: ... ; BOOL __stdcall SetDlgItemTextA(HWND hDlg,int nIDDlgItem,LPCSTR lpString) extrn __imp_SetDlgItemTextA:dword ; DATA XREF: SetDlgItemTextAr ; UINT __stdcall GetDlgItemTextA(HWND hDlg,int nIDDlgItem,LPSTR lpString,int cchMax) extrn GetDlgItemTextA:dword ; CODE XREF: sub_405D5D+13p ; DATA XREF: sub_405D5D+13r ; int __stdcall MessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType) extrn MessageBoxA:dword ; CODE XREF: sub_405D79+39p ; DATA XREF: sub_405D79+39r ; int __stdcall wvsprintfA(LPSTR,LPCSTR,va_list arglist) extrn wvsprintfA:dword ; CODE XREF: sub_40614C+Ep ; DATA XREF: sub_40614C+Er ; BOOL __stdcall SetForegroundWindow(HWND hWnd) extrn SetForegroundWindow:dword ; CODE XREF: sub_401610+175p ; DATA XREF: sub_401610+175r ; BOOL __stdcall ShowWindow(HWND hWnd,int nCmdShow) extrn ShowWindow:dword ; CODE XREF: sub_401610+1D4p ; sub_401610+1E8p ... ; LPSTR __stdcall CharPrevA(LPCSTR lpszStart,LPCSTR lpszCurrent) extrn CharPrevA:dword ; CODE XREF: sub_401610+4D9p ; sub_401610+1821p ... ; int wsprintfA(LPSTR,LPCSTR,...) extrn wsprintfA:dword ; CODE XREF: sub_401610+972p ; sub_401610+C9Ap ... ; LRESULT __stdcall SendMessageTimeoutA(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam,UINT fuFlags,UINT uTimeout,PDWORD_PTR lpdwResult) extrn SendMessageTimeoutA:dword ; CODE XREF: sub_401610+A9Cp ; DATA XREF: sub_401610+A9Cr ; HWND __stdcall FindWindowExA(HWND hWndParent,HWND hWndChildAfter,LPCSTR lpszClass,LPCSTR lpszWindow) extrn FindWindowExA:dword ; CODE XREF: sub_401610+AE3p ; DATA XREF: sub_401610+AE3r ; BOOL __stdcall IsWindow(HWND hWnd) extrn IsWindow:dword ; CODE XREF: sub_401610+B06p ; DATA XREF: sub_401610+B06r ; HWND __stdcall GetDlgItem(HWND hDlg,int nIDDlgItem) extrn GetDlgItem:dword ; CODE XREF: sub_401610+B2Ep ; sub_401610+B5Ap ... ; LONG __stdcall SetWindowLongA(HWND hWnd,int nIndex,LONG dwNewLong) extrn SetWindowLongA:dword ; CODE XREF: sub_401610+B4Bp ; sub_404A94+96p ... ; HANDLE __stdcall LoadImageA(HINSTANCE hInst,LPCSTR name,UINT type,int cx,int cy,UINT fuLoad) extrn LoadImageA:dword ; CODE XREF: sub_401610+B8Bp ; sub_405A5A+F9p ; DATA XREF: ... ; HDC __stdcall GetDC(HWND hWnd) extrn GetDC:dword ; CODE XREF: sub_401610+BBAp ; DATA XREF: sub_401610+BBAr ; BOOL __stdcall EnableWindow(HWND hWnd,BOOL bEnable) extrn EnableWindow:dword ; CODE XREF: sub_401610:loc_402276p ; sub_403FFA+Ap ... ; BOOL __stdcall PeekMessageA(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax,UINT wRemoveMsg) extrn PeekMessageA:dword ; CODE XREF: sub_401610+D77p ; sub_401610+1A05p ... ; LRESULT __stdcall DispatchMessageA(const MSG *lpMsg) extrn DispatchMessageA:dword ; CODE XREF: sub_401610+D65p ; sub_401610+19F3p ... ; BOOL __stdcall InvalidateRect(HWND hWnd,const RECT *lpRect,BOOL bErase) extrn InvalidateRect:dword ; CODE XREF: sub_401610+1BADp ; DATA XREF: sub_401610+1BADr ; LRESULT __stdcall DefWindowProcA(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam) extrn DefWindowProcA:dword ; CODE XREF: sub_401000+2Cp ; DATA XREF: sub_401000+2Cr ; HDC __stdcall BeginPaint(HWND hWnd,LPPAINTSTRUCT lpPaint) extrn BeginPaint:dword ; CODE XREF: sub_401000+47p ; DATA XREF: sub_401000+47r ; BOOL __stdcall GetClientRect(HWND hWnd,LPRECT lpRect) extrn GetClientRect:dword ; CODE XREF: sub_401000+5Bp ; sub_401610+B67p ... ; int __stdcall FillRect(HDC hDC,const RECT *lprc,HBRUSH hbr) extrn FillRect:dword ; CODE XREF: sub_401000+E4p ; DATA XREF: sub_401000+E4r ; int __stdcall DrawTextA(HDC hdc,LPCSTR lpchText,int cchText,LPRECT lprc,UINT format) extrn DrawTextA:dword ; CODE XREF: sub_401000+156p ; DATA XREF: sub_401000+156r ; BOOL __stdcall EndPaint(HWND hWnd,const PAINTSTRUCT *lpPaint) extrn EndPaint:dword ; CODE XREF: sub_401000+16Ep ; DATA XREF: sub_401000+16Er ; LRESULT __stdcall SendMessageA(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam) extrn SendMessageA:dword ; CODE XREF: sub_4013E7+C4p ; sub_401610+AB4p ... ; ; Imports from VERSION.dll ; ; DWORD __stdcall GetFileVersionInfoSizeA(LPCSTR lptstrFilename,LPDWORD lpdwHandle) extrn __imp_GetFileVersionInfoSizeA:dword ; DATA XREF: GetFileVersionInfoSizeAr ; BOOL __stdcall GetFileVersionInfoA(LPCSTR lptstrFilename,DWORD dwHandle,DWORD dwLen,LPVOID lpData) extrn __imp_GetFileVersionInfoA:dword ; DATA XREF: GetFileVersionInfoAr ; BOOL __stdcall VerQueryValueA(LPCVOID pBlock,LPCSTR lpSubBlock,LPVOID *lplpBuffer,PUINT puLen) extrn __imp_VerQueryValueA:dword ; DATA XREF: VerQueryValueAr ; ; Imports from ole32.dll ; ; void __stdcall OleUninitialize() extrn OleUninitialize:dword ; CODE XREF: start+2BFp ; StartAddress+7Bp ; DATA XREF: ... ; HRESULT __stdcall OleInitialize(LPVOID pvReserved) extrn OleInitialize:dword ; CODE XREF: start+1Ep ; StartAddress+10p ; DATA XREF: ... ; HRESULT __stdcall CoCreateInstance(const IID *const rclsid,LPUNKNOWN pUnkOuter,DWORD dwClsContext,const IID *const riid,LPVOID *ppv) extrn CoCreateInstance:dword ; CODE XREF: sub_401610+107Ep ; DATA XREF: sub_401610+107Er ; =========================================================================== ; Segment type: Pure data ; Segment permissions: Read _rdata segment para public 'DATA' use32 assume cs:_rdata ;org 4082A0h ; char aLoggingSetToD[] aLoggingSetToD db 'logging set to %d',0 ; DATA XREF: sub_401610+1A61o align 4 ; char aSettingsLoggin[] aSettingsLoggin db 'settings logging to %d',0 ; DATA XREF: sub_401610+1A53o align 4 ; char aFileExtracti_0[] aFileExtracti_0 db 'File Extraction: failed createprocess on uninstaller ("%s")',0 ; DATA XREF: sub_401610+1A3Do ; char aFileExtraction[] aFileExtraction db 'File Extraction: success ("%s")',0 ; DATA XREF: sub_401610+19C5o ; char a_?[] a_? db '" _?=',0 ; DATA XREF: sub_401610+19A6o align 10h ; char asc_408330[] asc_408330 db ' /x "',0 ; DATA XREF: sub_401610+1992o align 4 ; char aCreatedUninsta[] aCreatedUninsta db 'created uninstaller: %d, "%s"',0 ; DATA XREF: sub_401610+1952o align 4 ; char aWriteregErrorC[] aWriteregErrorC db 'WriteReg: error creating key %d\%s',0 ; DATA XREF: sub_401610+14A5o align 4 ; char aWriteregbinSet[] aWriteregbinSet db 'WriteRegBin: set %d\%s\%s with %d bytes',0 ; DATA XREF: sub_401610+1471o ; char aWriteregdwordS[] aWriteregdwordS db 'WriteRegDWORD: set %d\%s\%s to %d',0 ; DATA XREF: sub_401610+1443o align 4 ; char aWriteregstrSet[] aWriteregstrSet db 'WriteRegStr: set %d\%s\%s to %s',0 ; DATA XREF: sub_401610+1416o ; char aDeleteregkeyDS[] aDeleteregkeyDS db 'DeleteRegKey: %d\%s',0 ; DATA XREF: sub_401610+1355o ; char aDeleteregvalue[] aDeleteregvalue db 'DeleteRegValue: %d\%s\%s',0 ; DATA XREF: sub_401610+1331o align 4 ; char aWriteinistrWro[] aWriteinistrWro db 'WriteINIStr: wrote [%s] %s=%s in %s',0 ; DATA XREF: sub_401610+1298o ; char aRm[] aRm db '<RM>',0 ; DATA XREF: sub_401610+1232o align 4 ; char aCopyfilesSS[] aCopyfilesSS db 'CopyFiles "%s"->"%s"',0 ; DATA XREF: sub_401610+118Bo align 10h ; char aCreateshortcut[] aCreateshortcut db 'CreateShortCut: out: "%s", in: "%s %s", icon: %s,%d, sw=%d, hk=%d' ; DATA XREF: sub_401610+105Fo db 0 align 4 ; char aErrorRegiste_1[] aErrorRegiste_1 db 'Error registering DLL: Could not initialize OLE',0 ; DATA XREF: sub_401610+FE0o ; char aErrorRegiste_0[] aErrorRegiste_0 db 'Error registering DLL: Could not load ',27h,'%s',27h,' -> ',27h,'%s',27h,0 ; DATA XREF: sub_401610+FCAo align 4 ; char aErrorRegisteri[] aErrorRegisteri db 'Error registering DLL: %s not found in %s',0 ; DATA XREF: sub_401610+F8Bo align 4 ; char aRegdllCouldNot[] aRegdllCouldNot db 'RegDLL: Could not load ',27h,'%s',27h,' -> ',27h,'%s',27h,0 ; DATA XREF: sub_401610+F0Eo ; char SubBlock[] SubBlock: ; DATA XREF: sub_401610+E5Bo ; sub_4061A6+1Bo ... unicode 0, <\>,0 aExecFailedCrea db 'Exec: failed createprocess ("%s")',0 ; DATA XREF: sub_401610+DC6o align 10h ; char aExecSuccessS[] aExecSuccessS db 'Exec: success ("%s")',0 ; DATA XREF: sub_401610+D33o align 4 ; char aExecCommandS[] aExecCommandS db 'Exec: command="%s"',0 ; DATA XREF: sub_401610+D08o align 4 ; char aExecshellSucce[] aExecshellSucce db 'ExecShell: success ("%s": file:"%s" params:"%s")',0 ; DATA XREF: sub_401610+CECo align 10h ; char aExecshellWarni[] aExecshellWarni db 'ExecShell: warning: error ("%s": file:"%s" params:"%s")=%d',0 ; DATA XREF: sub_401610+CD7o align 4 ; char aSS[] aSS db '%s %s',0 ; DATA XREF: sub_401610+C8Eo align 4 ; char aHidewindow[] aHidewindow db 'HideWindow',0 ; DATA XREF: sub_401610+C48o align 10h ; char aPopStackEmpty[] aPopStackEmpty db 'Pop: stack empty',0 ; DATA XREF: sub_401610+9E2o align 4 ; char aExchStackDElem[] aExchStackDElem db 'Exch: stack < %d elements',0 ; DATA XREF: sub_401610+99Co align 10h ; char aRmdirS[] aRmdirS db 'RMDir: "%s"',0 ; DATA XREF: sub_401610+785o ; char aMessageboxDS[] aMessageboxDS db 'MessageBox: %d,"%s"',0 ; DATA XREF: sub_401610+742o aDeleteS db 'Delete: "%s"',0 ; DATA XREF: sub_401610+72Do align 10h ; char aS[] aS db '%s',0 ; DATA XREF: sub_401610+707o ; sub_401610+1A90o align 4 ; char aFileWroteDToS[] aFileWroteDToS db 'File: wrote %d to "%s"',0 ; DATA XREF: sub_401610+6ACo align 4 ; char aFileErrorUserC[] aFileErrorUserC db 'File: error, user cancel',0 ; DATA XREF: sub_401610:loc_401C7Do align 4 ; char aFileSkippedSOv[] aFileSkippedSOv db 'File: skipped: "%s" (overwriteflag=%d)',0 ; DATA XREF: sub_401610+65Bo align 10h ; char aFileErrorUserA[] aFileErrorUserA db 'File: error, user abort',0 ; DATA XREF: sub_401610+62Eo ; char aFileErrorUserR[] aFileErrorUserR db 'File: error, user retry',0 ; DATA XREF: sub_401610+61Bo ; char aFileErrorCreat[] aFileErrorCreat db 'File: error creating "%s"',0 ; DATA XREF: sub_401610+5D3o align 4 ; char aFileOverwritef[] aFileOverwritef db 'File: overwriteflag=%d, allowskipfilesflag=%d, name="%s"',0 ; DATA XREF: sub_401610+50Eo align 4 aRenameFailedS db 'Rename failed: %s',0 ; DATA XREF: sub_401610+376o align 4 aRenameOnReboot db 'Rename on reboot: %s',0 ; DATA XREF: sub_401610+364o align 4 ; char aRenameS[] aRenameS db 'Rename: %s',0 ; DATA XREF: sub_401610+320o align 10h ; char String2[] String2 db '->',0 ; DATA XREF: sub_401610+313o align 4 ; char aIffileexists_0[] aIffileexists_0 db 'IfFileExists: file "%s" does not exist, jumping %d',0 ; DATA XREF: sub_401610+2BBo align 4 ; char aIffileexistsFi[] aIffileexistsFi db 'IfFileExists: file "%s" exists, jumping %d',0 ; DATA XREF: sub_401610+2A5o align 4 ; char aCreatedirector[] aCreatedirector db 'CreateDirectory: "%s" (%d)',0 ; DATA XREF: sub_401610+240o align 10h ; char aSetfileattri_0[] aSetfileattri_0 db 'SetFileAttributes failed.',0 ; DATA XREF: sub_401610+21Co align 4 ; char aSetfileattribu[] aSetfileattribu db 'SetFileAttributes: "%s":%08X',0 ; DATA XREF: sub_401610+1FDo align 4 ; char aBringtofront[] aBringtofront db 'BringToFront',0 ; DATA XREF: sub_401610:loc_401777o align 4 ; char aSleepD[] aSleepD db 'Sleep(%d)',0 ; DATA XREF: sub_401610+147o align 4 ; char aDetailprintS[] aDetailprintS db 'detailprint: %s',0 ; DATA XREF: sub_401610+123o ; char aCallD[] aCallD db 'Call: %d',0 ; DATA XREF: sub_401610+D5o align 4 ; char aAbortingS[] aAbortingS db 'Aborting: "%s"',0 ; DATA XREF: sub_401610+7Fo align 4 ; char aJumpD[] aJumpD db 'Jump: %d',0 ; DATA XREF: sub_401610+63o align 10h ; char a___D[] a___D db '... %d%%',0 ; DATA XREF: DialogFunc+97o align 4 aUnpackingDataD db 'unpacking data: %d%%',0 ; DATA XREF: sub_403420+108o align 8 aTheInstallerYo db 'The installer you are trying to use is corrupted or incomplete.',0Ah ; DATA XREF: sub_403756:loc_4039F6o db 'This could be the result of a damaged disk, a failed download or ' db 'a virus.',0Ah db 0Ah db 'You may want to contact the author of this installer to obtain a ' db 'new copy.',0Ah db 0Ah db 'It may be possible to skip this check using the /NCRC command lin' db 'e switch',0Ah db '(NOT RECOMMENDED).',0 align 10h ; char aErrorWritingTe[] aErrorWritingTe db 'Error writing temporary file. Make sure your temp folder is valid' ; DATA XREF: sub_403756+223o start+Do db '.',0 align 4 aVerifyingInsta db 'verifying installer: %d%%',0 ; DATA XREF: sub_403756+148o align 10h aErrorLaunching db 'Error launching installer',0 ; DATA XREF: sub_403756+56o ; start+274o align 4 aSeshutdownpriv db 'SeShutdownPrivilege',0 ; DATA XREF: start+44Fo ; char aAdjusttokenpri[] aAdjusttokenpri db 'AdjustTokenPrivileges',0 ; DATA XREF: start+41Ao align 4 ; char aLookupprivileg[] aLookupprivileg db 'LookupPrivilegeValueA',0 ; DATA XREF: start+40Eo align 10h ; char ProcName[] ProcName db 'OpenProcessToken',0 ; DATA XREF: start+406o align 4 ; char ModuleName[] ModuleName db 'ADVAPI32.dll',0 ; DATA XREF: start+3EDo align 4 ; char a_?_0[] a_?_0 db ' _?=',0 ; DATA XREF: start+394o align 4 ; char asc_408B0C[] asc_408B0C db '" ',0 ; DATA XREF: start:loc_403E67o align 10h aOutOfMemory db 'Out of Memory',0 ; DATA XREF: start:loc_403D48o align 10h aExtractionPath db 'Extraction pathname not properly delimited.',0Ah ; DATA XREF: start:loc_403D41o db 0Ah db 'Try using quotes or a shorter path.',0 align 4 ; char aCNsis_extractf[] aCNsis_extractf db 'C:\NSIS_ExtractFiles\',0 ; DATA XREF: start+228o align 4 ; char aTemp[] aTemp db '\Temp',0 ; DATA XREF: start+5Fo align 4 ; char aNsisError[] aNsisError db 'NSIS Error',0 ; DATA XREF: start+24o align 10h ; char aInstall_log[] aInstall_log db 'install.log',0 ; DATA XREF: sub_4040E9o ; char Operation[] Operation db 'open',0 ; DATA XREF: sub_40428C+209o align 4 ; char aU_USS[] aU_USS db '%u.%u%s%s',0 ; DATA XREF: sub_404578+5Ao ; char word_408BBE[] word_408BBE dw 0 ; DATA XREF: sub_40463C:loc_4048F7o ; char aGetdiskfreespa[] aGetdiskfreespa db 'GetDiskFreeSpaceExA',0 ; DATA XREF: sub_40463C+217o ; char aKernel32_dll[] aKernel32_dll db 'KERNEL32.dll',0 ; DATA XREF: sub_40463C:loc_40483Fo ; sub_406357+7o align 4 ; char aSectionS[] aSectionS db 'Section: "%s"',0 ; DATA XREF: StartAddress+43o align 4 ; char aSkippingSectio[] aSkippingSectio db 'Skipping section: "%s"',0 ; DATA XREF: StartAddress+34o align 4 ; char aNewInstallOfST[] aNewInstallOfST db 'New install of "%s" to "%s"',0 ; DATA XREF: sub_405202+B2o ; char a_exe[] a_exe db '.exe',0 ; DATA XREF: sub_405A5A+81o align 10h ; char aD[] aD db '%d',0 ; DATA XREF: sub_405F5B+4o align 4 ; char a?[] a? db '*?|<>/":',0 ; DATA XREF: sub_406009+52o align 10h ; char asc_408C40[] asc_408C40 db 0Dh,0Ah,0 ; DATA XREF: sub_4060AD+6Eo align 4 ; char asc_408C44[] asc_408C44 db 0Ah ; DATA XREF: sub_406357:loc_4064DDo db '[',0 align 4 ; char aRename[] aRename db '[Rename]',0Dh,0Ah,0 ; DATA XREF: sub_406357+14Fo ; sub_406357+15Eo align 4 ; char aWininit_ini[] aWininit_ini db '\wininit.ini',0 ; DATA XREF: sub_406357+D3o align 4 ; char aSS_0[] aSS_0 db '%s=%s',0Dh,0Ah,0 ; DATA XREF: sub_406357+B2o ; char aNul[] aNul db 'NUL',0 ; DATA XREF: sub_406357:loc_4063D7o ; char aMovefileexa[] aMovefileexa db 'MoveFileExA',0 ; DATA XREF: sub_406357+1Ao ; char aCProgramFiles[] aCProgramFiles db 'C:\Program Files',0 ; DATA XREF: sub_4065B7+FDo align 10h ; char aProgramfilesdi[] aProgramfilesdi db 'ProgramFilesDir',0 ; DATA XREF: sub_4065B7+E4o ; char phkResult[] phkResult db 'Software\Microsoft\Windows\CurrentVersion',0 ; DATA XREF: sub_4065B7+CFo ; sub_4065B7+E9o align 4 ; char ValueName[] ValueName db 'CommonFilesDir',0 ; DATA XREF: sub_4065B7+CAo align 4 aMicrosoftInter db '\Microsoft\Internet Explorer\Quick Launch',0 ; DATA XREF: sub_4065B7+B7o align 4 ; char aRmdirRemoved_1[] aRmdirRemoved_1 db 'RMDir: RemoveDirectory failed("%s")',0 ; DATA XREF: sub_4067E6:loc_4069BAo ; char aRmdirRemoved_0[] aRmdirRemoved_0 db 'RMDir: RemoveDirectory on Reboot("%s")',0 ; DATA XREF: sub_4067E6+1B7o align 4 ; char aRmdirRemovedir[] aRmdirRemovedir db 'RMDir: RemoveDirectory("%s")',0 ; DATA XREF: sub_4067E6+199o align 4 ; char aDeleteDelete_1[] aDeleteDelete_1 db 'Delete: DeleteFile failed("%s")',0 ; DATA XREF: sub_4067E6:loc_406929o ; char aDeleteDelete_0[] aDeleteDelete_0 db 'Delete: DeleteFile on Reboot("%s")',0 ; DATA XREF: sub_4067E6+125o align 4 ; char aDeleteDeletefi[] aDeleteDeletefi db 'Delete: DeleteFile("%s")',0 ; DATA XREF: sub_4067E6+F6o align 4 ; char a_[] a_ db '\*.*',0 ; DATA XREF: sub_4067E6+6Ao align 4 ; IID riid riid dd 214EEh ; Data1 ; DATA XREF: sub_401610+1070o dw 0 ; Data2 dw 0 ; Data3 db 0C0h, 6 dup(0), 46h ; Data4 ; IID rclsid rclsid dd 21401h ; Data1 ; DATA XREF: sub_401610+1079o dw 0 ; Data2 dw 0 ; Data3 db 0C0h, 6 dup(0), 46h ; Data4 dword_408DFC dd 10Bh, 0 ; DATA XREF: sub_401610+1095o dd 0C0h, 46000000h, 8EE8h, 2 dup(0) dd 919Eh, 8028h, 9140h, 2 dup(0) dd 91EEh, 8280h, 8F20h, 2 dup(0) dd 9656h, 8060h, 9040h, 2 dup(0) dd 9A68h, 8180h, 8EFCh, 2 dup(0) dd 9AFAh, 803Ch, 8EC0h, 2 dup(0) dd 9B9Ah, 8000h, 9024h, 2 dup(0) dd 9C26h, 8164h, 9150h, 2 dup(0) dd 9C68h, 8290h, 5 dup(0) dd 9B04h, 9B22h, 9B30h, 9B40h, 9B88h, 9B76h, 9B64h, 9B50h dd 9B14h, 0 dd 80000011h, 9174h, 9160h, 918Ah, 0 dd 9ADCh, 9ACCh, 9AB6h, 9AA0h, 9A94h, 9A84h, 9AECh, 9A74h dd 0 dd 92F8h, 930Ah, 931Ah, 932Eh, 933Eh, 9354h, 936Ah, 9386h dd 93A0h, 93ACh, 93BAh, 93C8h, 93DEh, 93F0h, 93FEh, 9412h dd 9426h, 9432h, 943Eh, 9456h, 946Ch, 9474h, 9484h, 9492h dd 92E8h, 94B6h, 94CAh, 94D8h, 94ECh, 94F8h, 9504h, 9516h dd 952Eh, 953Eh, 9556h, 956Ah, 957Ah, 9588h, 9596h, 95A6h dd 95B8h, 95CCh, 95D8h, 95E4h, 95F4h, 9606h, 9616h, 962Ch dd 9642h, 91FAh, 9204h, 92D6h, 92C8h, 92B2h, 9294h, 9212h dd 9278h, 926Ch, 9260h, 924Eh, 9242h, 9232h, 9220h, 94A0h dd 0 dd 9BBCh, 9BE4h, 9BFAh, 9C08h, 9BA8h, 9BCCh, 0 dd 97B2h, 97C4h, 97D6h, 97E2h, 97F2h, 9808h, 9818h, 9824h dd 9832h, 9844h, 9852h, 985Eh, 9870h, 9884h, 989Ah, 98ACh dd 98BCh, 98CEh, 98E0h, 98EEh, 9900h, 9914h, 9926h, 9936h dd 9948h, 9958h, 9966h, 9978h, 998Ch, 9998h, 99A8h, 99BAh dd 99CAh, 99DCh, 99ECh, 99FEh, 9A16h, 9A28h, 9A3Ah, 9A4Ch dd 9A5Ah, 979Ch, 978Eh, 9782h, 9776h, 9760h, 9750h, 9744h dd 9736h, 9724h, 9716h, 970Eh, 96FEh, 96EEh, 96DAh, 96C8h dd 96A6h, 9698h, 9688h, 967Ch, 9670h, 9664h, 96B8h, 0 dd 91D4h, 91BEh, 91ACh, 0 dd 9C46h, 9C58h, 9C32h, 0 dd 6D490038h, 4C656761h, 5F747369h, 74736544h, 796F72h dd 6D490034h, 4C656761h, 5F747369h, 4D646441h, 656B7361h dd 370064h, 67616D49h, 73694C65h, 72435F74h, 65746165h dd 4F430000h, 4C54434Dh, 642E3233h, 6C6Ch, 6556000Ah, 65755172h dd 61567972h, 4165756Ch, 0 aGetfileversion db 'GetFileVersionInfoA',0 db 1 align 2 aGetfileversi_0 db 'GetFileVersionInfoSizeA',0 aVersion_dll db 'VERSION.dll',0 dw 26Ah aMuldiv db 'MulDiv',0 align 4 db '|',0 aDeletefilea db 'DeleteFileA',0 dw 1F5h aGlobalfree db 'GlobalFree',0 align 10h db '',0 aFindfirstfilea db 'FindFirstFileA',0 align 2 db '',0 aFindnextfilea db 'FindNextFileA',0 db '',0 aFindclose db 'FindClose',0 dw 30Eh aSetfilepointer db 'SetFilePointer',0 align 10h db 0A9h ; db 2, 52h, 65h aAdfile db 'adFile',0 align 4 db 94h ; db 3, 57h, 72h aItefile db 'iteFile',0 db 94h ; db 1, 47h, 65h aTprivateprofil db 'tPrivateProfileStringA',0 align 4 db 99h ; db 3, 57h, 72h aIteprivateprof db 'itePrivateProfileStringA',0 align 2 dw 26Bh aMultibytetowid db 'MultiByteToWideChar',0 aQ db '',0 aFreelibrary db 'FreeLibrary',0 dw 198h aGetprocaddress db 'GetProcAddress',0 align 4 dd 6F4C0248h, 694C6461h, 72617262h, 4179h, 6F4600EAh, 74616D72h dd 7373654Dh, 41656761h, 1690000h, 4C746547h, 45747361h dd 726F7272h, 1770000h, 4D746547h, 6C75646Fh, 6E614865h dd 41656C64h, 3080000h, 45746553h, 726F7272h, 65646F4Dh dd 1520000h aGetexitcodepro db 'GetExitCodeProcess',0 align 4 db 83h ; db 3, 57h, 61h aItforsingleobj db 'itForSingleObject',0 db '',0 aExpandenvironm db 'ExpandEnvironmentStringsA',0 dw 150h aGetenvironment db 'GetEnvironmentVariableA',0 db 0B3h ; db 3, 6Ch, 73h aTrcmpia db 'trcmpiA',0 a__0 db '.',0 aClosehandle db 'CloseHandle',0 dw 312h aSetfiletime db 'SetFileTime',0 db 56h ; V db 1, 47h, 65h aTfileattribute db 'tFileAttributesA',0 align 2 a3 db '3',0 aComparefiletim db 'CompareFileTime',0 dd 655302CEh, 68637261h, 68746150h, 1AD0041h aGetshortpathna db 'GetShortPathNameA',0 dw 161h aGetfullpathnam db 'GetFullPathNameA',0 align 2 dw 264h aMovefilea db 'MoveFileA',0 dw 3ADh aLstrcata db 'lstrcatA',0 align 2 dw 2FDh aSetcurrentdire db 'SetCurrentDirectoryA',0 align 2 dw 30Ch aSetfileattri_1 db 'SetFileAttributesA',0 align 4 db 47h ; G db 3, 53h, 6Ch db 65h ; e db 65h, 70h, 0 db 0D5h ; db 1, 47h, 65h aTtickcount db 'tTickCount',0 align 4 aM db 'M',0 aCreatefilea db 'CreateFileA',0 dw 15Bh aGetfilesize db 'GetFileSize',0 db 75h ; u db 1, 47h, 65h aTmodulefilenam db 'tModuleFileNameA',0 align 2 aE db 'E',0 aCreatedirect_0 db 'CreateDirectoryA',0 align 2 aP db '',0 aExitprocess db 'ExitProcess',0 db 3Ah ; : db 1, 47h, 65h aTcurrentproces db 'tCurrentProcess',0 db '=',0 aCopyfilea db 'CopyFileA',0 dd 736C03B9h, 70637274h, 416E79h, 65470108h, 6D6F4374h dd 646E616Dh, 656E694Ch, 1E90041h aGetwindowsdire db 'GetWindowsDirectoryA',0 align 2 dw 1CBh aGettemppatha db 'GetTempPathA',0 align 2 dw 1DAh aGetuserdefault db 'GetUserDefaultLangID',0 align 2 dw 145h aGetdiskfrees_0 db 'GetDiskFreeSpaceA',0 dw 200h aGlobalunlock db 'GlobalUnlock',0 align 2 dw 1F9h aGloballock db 'GlobalLock',0 align 4 dd 6C4701EEh, 6C61626Fh, 6F6C6C41h, 690063h, 61657243h dd 68546574h, 64616572h, 600000h, 61657243h, 72506574h dd 7365636Fh, 4173h, 654701C9h, 6D655474h, 6C694670h, 6D614E65h dd 4165h, 736C03B6h, 70637274h, 4179h, 736C03BCh, 656C7274h dd 416Eh, 65530303h, 646E4574h, 6946664Fh, 656Ch, 6E550363h dd 5670616Dh, 4F776569h, 6C694666h, 25E0065h, 5670614Dh dd 4F776569h, 6C694666h, 4E0065h aCreatefilemapp db 'CreateFileMappingA',0 align 4 db 0B9h ; db 1, 47h, 65h aTsystemdirecto db 'tSystemDirectoryA',0 dw 2B8h aRemovedirector db 'RemoveDirectoryA',0 align 2 aKernel32_dll_0 db 'KERNEL32.dll',0 align 4 db '',0 aEndpaint db 'EndPaint',0 align 10h db '',0 aDrawtexta db 'DrawTextA',0 aT db '',0 aFillrect db 'FillRect',0 align 4 db 0FFh align 2 aGetclientrect db 'GetClientRect',0 db 0Dh,0 aBeginpaint db 'BeginPaint',0 align 2 aO db '',0 aDefwindowproca db 'DefWindowProcA',0 align 4 db 3Bh ; ; db 2, 53h, 65h aNdmessagea db 'ndMessageA',0 align 4 db 93h ; db 1, 49h, 6Eh aValidaterect db 'validateRect',0 align 2 aB db '',0 aDispatchmessag db 'DispatchMessageA',0 align 2 dw 1FFh aPeekmessagea db 'PeekMessageA',0 align 2 db '',0 aEnablewindow db 'EnableWindow',0 align 2 dw 10Ch aGetdc db 'GetDC',0 dw 1BFh aLoadimagea db 'LoadImageA',0 align 4 db 80h ; db 2, 53h, 65h aTwindowlonga db 'tWindowLongA',0 align 2 dw 111h aGetdlgitem db 'GetDlgItem',0 align 4 db 0ADh ; db 1, 49h, 73h aWindow db 'Window',0 align 10h aF db '',0 aFindwindowexa db 'FindWindowExA',0 db 3Eh ; > db 2, 53h, 65h aNdmessagetimeo db 'ndMessageTimeoutA',0 dw 2D6h aWsprintfa db 'wsprintfA',0 db '-',0 aCharpreva db 'CharPrevA',0 dw 292h aShowwindow db 'ShowWindow',0 align 4 db 57h ; W db 2, 53h, 65h aTforegroundwin db 'tForegroundWindow',0 dw 203h aPostquitmessag db 'PostQuitMessage',0 dd 65530286h, 6E695774h, 54776F64h, 41747865h, 27A0000h dd 54746553h, 72656D69h, 990000h, 74736544h, 57796F72h dd 6F646E69h, 550077h aCreatedialogpa db 'CreateDialogParamA',0 align 4 aS_0 db '',0 aExitwindowsex db 'ExitWindowsEx',0 db '*',0 aCharnexta db 'CharNextA',0 db 5Ah ; Z db 1, 47h, 65h aTsyscolor db 'tSysColor',0 dw 16Eh aGetwindowlonga db 'GetWindowLongA',0 align 4 db 0B9h ; db 1, 4Ch, 6Fh aAdcursora db 'adCursorA',0 dw 24Dh aSetcursor db 'SetCursor',0 a8 db '8',0 aCheckdlgbutton db 'CheckDlgButton',0 align 10h db 0F2h ; align 2 aGetasynckeysta db 'GetAsyncKeyState',0 align 4 db 0A3h ; db 1, 49h, 73h aDlgbuttoncheck db 'DlgButtonChecked',0 align 2 dw 231h aScreentoclient db 'ScreenToClient',0 align 4 dd 6547013Ch, 73654D74h, 65676173h, 736F50h, 6143001Bh dd 69576C6Ch, 776F646Eh, 636F7250h, 1B10041h, 69577349h dd 776F646Eh, 69736956h, 656C62h, 6F4C01B7h, 69426461h dd 70616D74h, 420041h, 736F6C43h, 696C4365h, 616F6270h dd 6472h, 6553024Ah, 696C4374h, 616F6270h, 61446472h, 6174h dd 6D4500C1h, 43797470h, 6270696Ch, 6472616Fh, 1F50000h dd 6E65704Fh, 70696C43h, 72616F62h, 2A40064h, 63617254h dd 706F506Bh, 654D7075h, 756Eh, 65470174h, 6E695774h, 52776F64h dd 746365h, 70410008h, 646E6570h, 756E654Dh, 5E0041h, 61657243h dd 6F506574h, 4D707570h, 756E65h, 6547015Dh, 73795374h dd 4D6D6574h, 69727465h, 7363h, 6E4500C6h, 61694464h, 676F6Ch dd 65530247h, 616C4374h, 6F4C7373h, 41676Eh, 734901AEh dd 646E6957h, 6E45776Fh, 656C6261h, 2830064h, 57746553h dd 6F646E69h, 736F5077h, 9E0000h, 6C616944h, 6F42676Fh dd 72615078h, 416D61h, 654700F6h, 616C4374h, 6E497373h dd 416F66h, 72430060h, 65746165h, 646E6957h, 7845776Fh dd 2990041h aSystemparamete db 'SystemParametersInfoA',0 dw 216h aRegisterclassa db 'RegisterClassA',0 align 4 db 53h ; S db 2, 53h, 65h aTdlgitemtexta db 'tDlgItemTextA',0 dw 113h aGetdlgitemtext db 'GetDlgItemTextA',0 db 0DEh ; db 1, 4Dh, 65h aSsageboxa db 'ssageBoxA',0 dw 2D8h aWvsprintfa db 'wvsprintfA',0 align 4 aUser32_dll db 'USER32.dll',0 align 4 db 0Eh db 2, 53h, 65h aLectobject db 'lectObject',0 align 4 db 3Ch ; < db 2, 53h, 65h aTtextcolor db 'tTextColor',0 align 4 db 16h db 2, 53h, 65h aTbkmode db 'tBkMode',0 db ':',0 aCreatefontindi db 'CreateFontIndirectA',0 db ')',0 aCreatebrushind db 'CreateBrushIndirect',0 aP_0 db '',0 aDeleteobject db 'DeleteObject',0 align 4 db 6Bh ; k db 1, 47h, 65h aTdevicecaps db 'tDeviceCaps',0 db 15h db 2, 53h, 65h aTbkcolor db 'tBkColor',0 align 2 aGdi32_dll db 'GDI32.dll',0 db 0D0h ; db 1, 52h, 65h aGdeletekeya db 'gDeleteKeyA',0 db 0C9h ; db 1, 52h, 65h aGclosekey db 'gCloseKey',0 dw 1D5h aRegenumkeya db 'RegEnumKeyA',0 db 0E2h ; db 1, 52h, 65h aGopenkeyexa db 'gOpenKeyExA',0 db 0D9h ; db 1, 52h, 65h aGenumvaluea db 'gEnumValueA',0 db 0ECh ; db 1, 52h, 65h aGqueryvalueexa db 'gQueryValueExA',0 align 4 db 0F9h ; db 1, 52h, 65h aGsetvalueexa db 'gSetValueExA',0 align 2 dw 1CDh aRegcreatekeyex db 'RegCreateKeyExA',0 db 0D2h ; db 1, 52h, 65h aGdeletevaluea db 'gDeleteValueA',0 aAdvapi32_dll db 'ADVAPI32.dll',0 align 4 db '',0 aShfileoperatio db 'SHFileOperationA',0 align 4 db 6 db 1, 53h, 68h aEllexecutea db 'ellExecuteA',0 db '',0 aShgetpathfromi db 'SHGetPathFromIDListA',0 align 4 aY db 'y',0 aShbrowseforfol db 'SHBrowseForFolderA',0 align 2 db '',0 aShgetmalloc db 'SHGetMalloc',0 db '',0 aShgetspecialfo db 'SHGetSpecialFolderLocation',0 align 2 aShell32_dll db 'SHELL32.dll',0 dw 10h aCocreateinstan db 'CoCreateInstance',0 align 2 dw 104h aOleuninitializ db 'OleUninitialize',0 aA db '',0 aOleinitialize db 'OleInitialize',0 aOle32_dll db 'ole32.dll',0 align 200h _rdata ends ; Section 3. (virtual address 0000A000) ; Virtual size : 0001C494 ( 115860.) ; Section size in file : 00000200 ( 512.) ; Offset to raw data for section: 00008800 ; 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 40A000h off_40A000 dd offset dword_426460 ; DATA XREF: sub_401610:loc_40256Do dd offset sub_4013E7 dword_40A008 dd 6 ; DATA XREF: sub_401610+F7r ; sub_401610+10Bw ; HANDLE hFile hFile dd 0FFFFFFFFh ; DATA XREF: sub_4033D7+11r ; sub_403409+8r ... ; HANDLE dword_40A010 dword_40A010 dd 0FFFFFFFFh ; DATA XREF: sub_403420+46r ; sub_403420+164r ... ; char aANsisu__exe[] aANsisu__exe db 'A~NSISu_.exe',0 ; DATA XREF: start+304o ; start:loc_403EB0w ... align 4 dword_40A024 dd 0FFFFFFFFh ; DATA XREF: sub_405597+A4r ; sub_405597+120r ... ; DLGPROC lpDialogFunc lpDialogFunc dd offset sub_40428C ; DATA XREF: sub_405597+3D6r dd offset sub_404A94 dd offset sub_40463C dd offset sub_405202 dd offset sub_404531 dword_40A03C dd 0FFFFFFFFh ; DATA XREF: sub_4049AD+35w ; sub_4049AD+90r ... dword_40A040 dd 6 ; DATA XREF: sub_401610+FCw ; sub_401610:loc_401716r ... ; char ClassName[] ClassName db 'RichEdit20A',0 ; DATA XREF: sub_405A5A+1F2o ; sub_405A5A+202w ... ; char LibFileName[] LibFileName db 'RichEd20.dll',0 ; DATA XREF: sub_405A5A+1D3o ; sub_405A5A+1E0w align 10h ; HANDLE hObject hObject dd 0FFFFFFFFh ; DATA XREF: sub_4060AD+Br ; sub_4060AD:loc_4060C9w ... dd 7 dup(0) dword_40A080 dd 0 ; DATA XREF: sub_40137E+27w ; sub_40137E+58r dword_40A084 dd 0 ; DATA XREF: sub_40137Er dd 5Eh dup(0) dd 0A0h dup(?) dword_40A480 dd ? ; DATA XREF: sub_401610+982r ; sub_401610+9BCr ... align 8 ; char Text[] Text db 400h dup(?) ; DATA XREF: sub_401508+1Do ; sub_401610+523o ... ; CHAR byte_40A888 byte_40A888 db ? ; DATA XREF: sub_4014E1o ; sub_401610+2E6o ... align 4 dd 0FFh dup(?) ; BYTE Data Data dd ? ; DATA XREF: sub_401610+556o ; sub_401610+11B8o ... dd 2FFh dup(?) ; WCHAR WideCharStr WideCharStr dw ? ; DATA XREF: sub_401610+1122o ; sub_401610+112Dw align 4 dd 1FFh dup(?) ; LOGFONTA lf lf LOGFONTA <?> ; DATA XREF: sub_401610+BDCw ; sub_401610+C1Fo dword_40C0C4 dd ? ; DATA XREF: sub_4014F2r ; sub_401508:loc_401510r ... ; char String[] String db 40h dup(?) ; DATA XREF: DialogFunc+61o dword_40C108 dd 2000h dup(?) ; DATA XREF: sub_403756+99o ; sub_403756+B5o ... ; char PathName[] PathName dd 6 dup(?) ; DATA XREF: sub_403420:loc_403546o ; sub_403756+1DEo dword_414120 dd ? ; DATA XREF: sub_403420+8Ew dword_414124 dd ? ; DATA XREF: sub_403420+94w ; sub_403420+188r ... dword_414128 dd ? ; DATA XREF: sub_403420+12Bw ; sub_403420+14Dr dword_41412C dd ? ; DATA XREF: sub_403420+135w dd 18h dup(?) dword_414190 dd 2000h dup(?) ; DATA XREF: sub_403420+12Bo ; sub_403420+153o ; LONG dword_41C190 dword_41C190 dd ? ; DATA XREF: DialogFunc+35r ; sub_403420+58w ... ; LPCSTR dword_41C194 dword_41C194 dd ? ; DATA XREF: DialogFunc+2Aw ; DialogFunc+5Ar ; int nDenominator nDenominator dd ? ; DATA XREF: DialogFunc+3Br ; sub_403420+52w ... align 10h dword_41C1A0 dd 1000h dup(?) ; DATA XREF: sub_403420+75o ; sub_40362B+8Eo ; LONG dword_4201A0 dword_4201A0 dd ? ; DATA XREF: sub_403420+13r ; sub_403420+B9r ... dword_4201A4 dd ? ; DATA XREF: sub_403420:loc_40347Er ; sub_403756+28Aw ; LONG dword_4201A8 dword_4201A8 dd ? ; DATA XREF: sub_403420+33r ; sub_403420+63r ... ; LONG lDistanceToMove lDistanceToMove dd ? ; DATA XREF: sub_403420+19r ; sub_403420+40r ... ; LPCSTR lpString lpString dd ? ; DATA XREF: sub_401610+476r ; sub_401610+490r ... align 8 ; CHAR byte_4201B8 byte_4201B8 db ? ; DATA XREF: start+2E8o start+2F8w ; char NewFileName[] NewFileName db 7F4h dup(?) ; DATA XREF: start+2E3o dword_4209AD dd ? ; DATA XREF: start+336r align 8 ; char ExistingFileName[] ExistingFileName db 400h dup(?) ; DATA XREF: start+2EDo dword_420DB8 dd ? ; DATA XREF: sub_404258+9r ; sub_404258+26w ... dword_420DBC dd ? ; DATA XREF: sub_405597+196w ; sub_405597+1E5w ... ; WNDPROC lpPrevWndFunc lpPrevWndFunc dd ? ; DATA XREF: sub_4049AD+D5r ; sub_404A94+A3w dword_420DC4 dd ? ; DATA XREF: sub_40463C:loc_4047DDw ; sub_40463C+2FDr ... ; char RootPathName[] RootPathName db 400h dup(?) ; DATA XREF: sub_40463C+1EBo ; HWND dword_4211C8 dword_4211C8 dd ? ; DATA XREF: sub_403FD6+7r ; sub_405597+B0r ... ; LPARAM lParam lParam dd ? ; DATA XREF: sub_404A94+B6w ; sub_404A94+C2r ... ; HGLOBAL hMem hMem dd ? ; DATA XREF: sub_404A94+7Ew ; sub_404A94:loc_404C94r ... ; HWND dword_4211D4 dword_4211D4 dd ? ; DATA XREF: sub_40410B+ACr ; sub_405597+36r ... ; const CHAR byte_4211D8 byte_4211D8 db ? ; DATA XREF: sub_40509F+28o ; sub_40509F+CAw align 4 dd 1FFh dup(?) ; char byte_4219D8[] byte_4219D8 db 1000h dup(?) ; DATA XREF: sub_404578+62o ; sub_40463C+131o ... ; HWND dword_4229D8 dword_4229D8 dd ? ; DATA XREF: sub_403FD6+Er ; sub_403FFA+4r ... dword_4229DC dd ? ; DATA XREF: sub_40428C+152r ; sub_40463C+6r ... ; INT_PTR nResult nResult dd ? ; DATA XREF: sub_405202+22Aw ; sub_405597+141w ... dword_4229E4 dd ? ; DATA XREF: sub_40428C+112w ; sub_40428C+146r ... dword_4229E8 dd ? ; DATA XREF: sub_401610:loc_40319Br ; sub_405597:loc_405A29r ... align 10h ; char byte_4229F0[] byte_4229F0 db 400h dup(?) ; DATA XREF: sub_406357+B7o ; sub_406357+171o ... ; char byte_422DF0[] byte_422DF0 db 400h dup(?) ; DATA XREF: sub_406357+92o ; struct _STARTUPINFOA StartupInfo StartupInfo _STARTUPINFOA <?> ; DATA XREF: sub_405D01+9w ; sub_405D01+2Bo align 8 ; char FileName[] FileName db 400h dup(?) ; DATA XREF: sub_40622D+5o ; char szShortPath[] szShortPath dd ? ; DATA XREF: sub_406357+43w ; sub_406357+66o ... dd 0FFh dup(?) ; struct _WIN32_FIND_DATAA FindFileData FindFileData _WIN32_FIND_DATAA <?> ; DATA XREF: sub_406168+10o ; char byte_423B78[] byte_423B78 db 400h dup(?) ; DATA XREF: sub_4067E6+52o dword_423F78 dd ? ; DATA XREF: sub_401610+1A66w ; sub_40463C+51w ... align 10h ; char String1[] String1 db 1000h dup(?) ; DATA XREF: sub_4060AD+73o ; sub_40614C+9o ; const CHAR byte_424F80 byte_424F80 db ? ; DATA XREF: sub_40428C+1D7o ; sub_40463C+183o ... ; char sz[] sz db 3 dup(?) ; DATA XREF: sub_405A5A+66o dd 1FFh dup(?) ; CHAR byte_425780 byte_425780 db ? ; DATA XREF: sub_4040E9+Ao ; sub_4060AD+2Dr ... align 4 dd 0FFh dup(?) ; WNDCLASSA WndClass WndClass WNDCLASSA <?> ; DATA XREF: sub_405A5A+108o ; sub_405A5A+12Bw ; HWND dword_425BA8 dword_425BA8 dd ? ; DATA XREF: sub_404024r ; sub_404578+85r ... ; HWND dword_425BAC dword_425BAC dd ? ; DATA XREF: sub_401610:loc_4017E9r ; sub_40509F+6r ... ; LONG dwNewLong dwNewLong dd ? ; DATA XREF: sub_405597+1C7r ; sub_405A5A+FFw dword_425BB4 dd ? ; DATA XREF: sub_401610:loc_4016A9w ; sub_403F8D+7w ... ; HWND dword_425BB8 dword_425BB8 dd ? ; DATA XREF: sub_40509F+68r ; sub_405202+78w dword_425BBC dd ? ; DATA XREF: sub_40410B+62w ; sub_405597+3E0r ... ; HWND hWnd hWnd dd ? ; DATA XREF: sub_401610:loc_4017D3r ; sub_405202+69w ... dword_425BC4 dd ? ; DATA XREF: sub_4013E7+93r ; sub_405202+A1w dword_425BC8 dd ? ; DATA XREF: sub_40410B+74w ; sub_40410B:loc_404185r ... ; int nNumber nNumber dd ? ; DATA XREF: sub_4013E7+98w ; sub_4013E7+AFr ... dd 4 dup(?) ; char Caption[] Caption db 800h dup(?) ; DATA XREF: sub_401000+150o start+29o ... ; HWND dword_4263E0 dword_4263E0 dd ? ; DATA XREF: sub_401000+19r ; sub_401610+9r ... ; HINSTANCE hInstance hInstance dd ? ; DATA XREF: sub_403420+116r ; sub_403756+22r ... dword_4263E8 dd ? ; DATA XREF: sub_401000+39r ; sub_4012F3+6r ... dd 5 dup(?) dword_426400 dd ? ; DATA XREF: sub_403756+2F9o ; sub_405597+1F5r dword_426404 dd ? ; DATA XREF: sub_405597+9Er ; sub_405597+25Er ... dword_426408 dd ? ; DATA XREF: sub_40117D+4r ; sub_4011EF+13r ... dword_42640C dd ? ; DATA XREF: sub_40117D+21r ; sub_40117D+64r ... dword_426410 dd ? ; DATA XREF: sub_4013E7:loc_401400r align 8 dword_426418 dd ? ; DATA XREF: sub_40428C:loc_4042BDr ; sub_405A5A+3Br ... align 10h dword_426420 dd ? ; DATA XREF: sub_40410B+41r dword_426424 dd ? ; DATA XREF: sub_40410B:loc_404132r dword_426428 dd ? ; DATA XREF: sub_401610:loc_402149r dd 3 dup(?) dword_426438 dd ? ; DATA XREF: sub_40362B+10r align 10h dword_426440 dd ? ; DATA XREF: sub_403756+2D7w ; start+1FEr ... dword_426444 dd ? ; DATA XREF: sub_4013E7+31r ; sub_4013E7+57r ... ; SIZE_T dwBytes dwBytes dd ? ; DATA XREF: sub_401610+18A2r ; sub_403756:loc_4037D3r ... dword_42644C dd ? ; DATA XREF: sub_404A94+59w ; sub_404A94+465w dd 4 dup(?) dword_426460 dd ? ; DATA XREF: sub_401610+18Bw ; sub_401610:loc_4017C6r ... dword_426464 dd ? ; DATA XREF: sub_4015C7:loc_4015DCr ; sub_401610+1369r ... dword_426468 dd ? ; DATA XREF: sub_401610+651w ; sub_401610+677w ... dword_42646C dd ? ; DATA XREF: sub_403FD6r ; StartAddress:loc_4051E2w ... dword_426470 dd ? ; DATA XREF: sub_406357:loc_4065A7w dword_426474 dd ? ; DATA XREF: sub_401610:loc_402835w ; start:loc_403ECAr align 10h dword_426480 dd ? ; DATA XREF: sub_403420+A6r ; sub_403756+2BFw ... dword_426484 dd ? ; DATA XREF: sub_40463C+2CEw dword_426488 dd ? ; DATA XREF: sub_40410B+6Bw ; sub_405D79:loc_405D93r dword_42648C dd ? ; DATA XREF: start:loc_403D8Dw ; start:loc_403F74r dword_426490 dd ? ; DATA XREF: sub_401610+EA1r start+2Ew ... _data ends ; Section 4. (virtual address 00027000) ; Virtual size : 00008000 ( 32768.) ; Section size in file : 00000000 ( 0.) ; Offset to raw data for section: 00000000 ; Flags C0000080: Bss Readable Writable ; Alignment : default ; =========================================================================== ; Segment type: Uninitialized ; Segment permissions: Read/Write _ndata segment para public 'BSS' use32 assume cs:_ndata ;org 427000h assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing ; char dword_427000[] dword_427000 dd ? ; DATA XREF: sub_4013E7+67o ; sub_401610+46o ... dd 13FFh dup(?) ; const CHAR byte_42C000 byte_42C000 db ? ; DATA XREF: sub_403A62+28o ; start:loc_403B62o ... byte_42C001 db 3 dup(?) ; DATA XREF: start+B0o dd 0FFh dup(?) ; const CHAR byte_42C400 byte_42C400 db ? ; DATA XREF: sub_401610:loc_402E7Fo ; start+24Bo ... align 4 dd 0FFh dup(?) ; char CurrentDirectory[] CurrentDirectory db 400h dup(?) ; DATA XREF: sub_401610+271o ; sub_401610:loc_401B43o ... ; char szStart[] szStart db 400h dup(?) ; DATA XREF: sub_403756+1Co ; CHAR byte_42D000 byte_42D000 db ? ; DATA XREF: sub_40410Br ; sub_40410B+10o align 4 dd 0FFh dup(?) ; char szCurrent[] szCurrent db 400h dup(?) ; DATA XREF: sub_403756+1F0o ; sub_403A62+1o ... ; char dword_42D800[] dword_42D800 dd 200h dup(?) ; DATA XREF: sub_403A96+31o ; char dword_42E000[] dword_42E000 dd 400h dup(?) ; DATA XREF: sub_405597+291o _ndata ends end start