_2ds:00401000 ; ŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪ S U B R O U T I N E ŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪŪ _2ds:00401000 _2ds:00401000 ; Attributes: bp-based frame _2ds:00401000 _2ds:00401000 public downloadFile _2ds:00401000 downloadFile proc near ; CODE XREF: WinMain+ABp _2ds:00401000 _2ds:00401000 closedSession = dword ptr -47Ch _2ds:00401000 closeIFile_2 = dword ptr -478h _2ds:00401000 closedIFile_1 = dword ptr -474h _2ds:00401000 bytesTransfered_1= dword ptr -470h _2ds:00401000 fileHandle = dword ptr -46Ch _2ds:00401000 length = dword ptr -468h _2ds:00401000 urlFileHandle_1 = dword ptr -464h _2ds:00401000 iSession_1 = dword ptr -460h _2ds:00401000 iSession_4 = dword ptr -45Ch _2ds:00401000 iSession_5 = dword ptr -458h _2ds:00401000 urlFileHandle_3 = dword ptr -450h _2ds:00401000 urlFileHandle_4 = dword ptr -44Ch _2ds:00401000 var_448 = dword ptr -448h _2ds:00401000 mallocResult = dword ptr -444h _2ds:00401000 iSession_2 = dword ptr -440h _2ds:00401000 CFileObjectLocal= byte ptr -438h _2ds:00401000 urlFileHandle_2 = dword ptr -428h _2ds:00401000 bytesTransfered_2= dword ptr -424h _2ds:00401000 var_420 = byte ptr -420h _2ds:00401000 buffer = byte ptr -418h _2ds:00401000 var_18 = dword ptr -18h _2ds:00401000 iSession_3 = dword ptr -14h _2ds:00401000 var_10 = dword ptr -10h _2ds:00401000 var_C = dword ptr -0Ch _2ds:00401000 var_4 = dword ptr -4 _2ds:00401000 url = dword ptr 8 _2ds:00401000 tempPathFilename= dword ptr 0Ch _2ds:00401000 _2ds:00401000 push ebp _2ds:00401001 mov ebp, esp _2ds:00401003 push 0FFFFFFFFh _2ds:00401005 push offset unk_0_401685 _2ds:0040100A mov eax, large fs:0 _2ds:00401010 push eax _2ds:00401011 mov large fs:0, esp _2ds:00401018 push ecx _2ds:00401019 sub esp, 46Ch _2ds:0040101F push ebx _2ds:00401020 push esi _2ds:00401021 push edi _2ds:00401022 mov [ebp+var_10], esp _2ds:00401025 mov [ebp+var_18], 400h _2ds:0040102C push 14h _2ds:0040102E call p_malloc _2ds:00401033 mov [ebp+mallocResult], eax _2ds:00401039 mov [ebp+var_4], 0 _2ds:00401040 cmp [ebp+mallocResult], 0 _2ds:00401047 jz short mallocFailed _2ds:00401049 push 0 ; dwFlags _2ds:0040104B push 0 ; pstrProxyBypass _2ds:0040104D push 0 ; pstrProxyName _2ds:0040104F push 0 ; dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG _2ds:00401051 push 1 ; dwContext _2ds:00401053 push offset aIst ; pstrAgent _2ds:00401058 mov ecx, [ebp+mallocResult] _2ds:0040105E call j_CInternetSess _2ds:00401063 mov [ebp+iSession_1], eax _2ds:00401069 jmp short sessionOpened _2ds:0040106B ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ _2ds:0040106B _2ds:0040106B mallocFailed: ; CODE XREF: downloadFile+47j _2ds:0040106B mov [ebp+iSession_1], 0 _2ds:00401075 _2ds:00401075 sessionOpened: ; CODE XREF: downloadFile+69j _2ds:00401075 mov eax, [ebp+iSession_1] _2ds:0040107B mov [ebp+iSession_2], eax _2ds:00401081 mov [ebp+var_4], 0FFFFFFFFh _2ds:00401088 mov ecx, [ebp+iSession_2] _2ds:0040108E mov [ebp+iSession_3], ecx _2ds:00401091 lea ecx, [ebp+var_420] _2ds:00401097 call j_AFX_EXCEPTION _2ds:0040109C mov [ebp+var_4], 1 _2ds:004010A3 mov byte ptr [ebp+var_4], 2 _2ds:004010A7 push 0 ; dwFlags _2ds:004010A9 push 3E8h ; dwBufferSize _2ds:004010AE push 2 ; dwFlags = INTERNET_HANDLE_TYPE_CONNECT_FTP _2ds:004010AE ; | INTERNET_HANDLE_TYPE_INTERNET _2ds:004010B0 mov ecx, [ebp+iSession_3] _2ds:004010B3 call p_SetOption _2ds:004010B8 push 0 ; dwFlags _2ds:004010BA push 3 ; lpBuffer _2ds:004010BC push 3 ; dwFlags = INTERNET_FLAG_RELOAD _2ds:004010BC ; | INTERNET_FLAG_TRANSFER_BINARY _2ds:004010BE mov ecx, [ebp+iSession_3] _2ds:004010C1 call p_SetOption _2ds:004010C6 push 0 ; dwHeadersLength _2ds:004010C8 push 0 ; pstrHeaders _2ds:004010CA push 80000002h ; dwFlags = INTERNET_FLAG_RELOAD _2ds:004010CA ; | INTERNET_FLAG_TRANSFER_BINARY _2ds:004010CF push 1 ; dwContext _2ds:004010D1 mov edx, [ebp+url] _2ds:004010D4 push edx _2ds:004010D5 mov ecx, [ebp+iSession_3] _2ds:004010D8 call j_OpenUrl _2ds:004010DD mov [ebp+urlFileHandle_1], eax _2ds:004010E3 mov eax, [ebp+urlFileHandle_1] _2ds:004010E9 mov [ebp+urlFileHandle_2], eax _2ds:004010EF cmp [ebp+tempPathFilename], 0 _2ds:004010F3 jnz short pathFilenameOk _2ds:004010F5 mov [ebp+var_448], 1 _2ds:004010FF mov [ebp+var_4], 0FFFFFFFFh _2ds:00401106 lea ecx, [ebp+var_420] _2ds:0040110C call p_AfxTryCleanup _2ds:00401111 mov eax, [ebp+var_448] _2ds:00401117 jmp loc_0_4012C0 _2ds:0040111C ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ _2ds:0040111C _2ds:0040111C pathFilenameOk: ; CODE XREF: downloadFile+F3j _2ds:0040111C mov ecx, [ebp+urlFileHandle_2] _2ds:00401122 mov edx, [ebp+urlFileHandle_2] _2ds:00401128 mov eax, [edx] _2ds:0040112A call dword ptr [eax+38h] ; CInternetFile::GetLength _2ds:0040112D mov [ebp+length], eax _2ds:00401133 cmp [ebp+length], 0 _2ds:0040113A jbe closeConnection _2ds:00401140 push 9001h ; nOpenFlags = modeWrite | modeCreate | typeBinary _2ds:00401145 mov ecx, [ebp+tempPathFilename] _2ds:00401148 push ecx ; lpszFilename _2ds:00401149 lea ecx, [ebp+CFileObjectLocal] _2ds:0040114F call j_CFile _2ds:00401154 mov [ebp+fileHandle], eax _2ds:0040115A mov byte ptr [ebp+var_4], 3 _2ds:0040115E _2ds:0040115E writeLoop: ; CODE XREF: downloadFile+1AFj _2ds:0040115E push 400h ; This loop downloads a file from the net _2ds:0040115E ; in chunks of 1024 bytes and writes it _2ds:0040115E ; to a file in the temp directory. _2ds:00401163 lea edx, [ebp+buffer] _2ds:00401169 push edx _2ds:0040116A mov ecx, [ebp+urlFileHandle_2] _2ds:00401170 mov eax, [ebp+urlFileHandle_2] _2ds:00401176 mov edx, [eax] _2ds:00401178 call dword ptr [edx+3Ch] ; CInternetFile::Read _2ds:0040117B mov [ebp+bytesTransfered_1], eax _2ds:00401181 mov eax, [ebp+bytesTransfered_1] _2ds:00401187 mov [ebp+bytesTransfered_2], eax _2ds:0040118D cmp [ebp+bytesTransfered_2], 0 _2ds:00401194 jz short finishedReading _2ds:00401196 mov ecx, [ebp+bytesTransfered_2] _2ds:0040119C push ecx _2ds:0040119D lea edx, [ebp+buffer] _2ds:004011A3 push edx _2ds:004011A4 lea ecx, [ebp+CFileObjectLocal] _2ds:004011AA call j_Write ; CFile::Write _2ds:004011AF jmp short writeLoop _2ds:004011B1 ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ _2ds:004011B1 _2ds:004011B1 finishedReading: ; CODE XREF: downloadFile+194j _2ds:004011B1 lea ecx, [ebp+CFileObjectLocal] _2ds:004011B7 call j_Close _2ds:004011BC mov byte ptr [ebp+var_4], 2 _2ds:004011C0 lea ecx, [ebp+CFileObjectLocal] _2ds:004011C6 call j_CFile_Dtor _2ds:004011CB _2ds:004011CB closeConnection: ; CODE XREF: downloadFile+13Aj _2ds:004011CB mov ecx, [ebp+urlFileHandle_2] _2ds:004011D1 mov eax, [ebp+urlFileHandle_2] _2ds:004011D7 mov edx, [eax] _2ds:004011D9 call dword ptr [edx+54h] _2ds:004011DC mov eax, [ebp+urlFileHandle_2] _2ds:004011E2 mov [ebp+urlFileHandle_3], eax _2ds:004011E8 mov ecx, [ebp+urlFileHandle_3] _2ds:004011EE mov [ebp+urlFileHandle_4], ecx _2ds:004011F4 cmp [ebp+urlFileHandle_4], 0 _2ds:004011FB jz short urlFileHandleZero _2ds:004011FD push 1 _2ds:004011FF mov ecx, [ebp+urlFileHandle_4] _2ds:00401205 mov edx, [ebp+urlFileHandle_4] _2ds:0040120B mov eax, [edx] _2ds:0040120D call dword ptr [eax+4] ; CInternetFile::~CInternetFile _2ds:00401210 mov [ebp+closedIFile_1], eax _2ds:00401216 mov ecx, [ebp+closedIFile_1] _2ds:0040121C mov [ebp+closeIFile_2], ecx _2ds:00401222 jmp short loc_0_40122E _2ds:00401224 ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ _2ds:00401224 _2ds:00401224 urlFileHandleZero: ; CODE XREF: downloadFile+1FBj _2ds:00401224 mov [ebp+closeIFile_2], 0 _2ds:0040122E _2ds:0040122E loc_0_40122E: ; CODE XREF: downloadFile+222j _2ds:0040122E jmp short loc_0_401266 _2ds:0040122E ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ _2ds:00401230 db 8Bh ; ‹ _2ds:00401231 db 95h ; • _2ds:00401232 db 0C4h ; Ä _2ds:00401233 db 0FBh ; ū _2ds:00401234 db 0FFh ; _2ds:00401235 db 0FFh ; _2ds:00401236 db 89h ; ‰ _2ds:00401237 db 95h ; • _2ds:00401238 db 0E4h ; ä _2ds:00401239 db 0FBh ; ū _2ds:0040123A db 0FFh ; _2ds:0040123B db 0FFh ; _2ds:0040123C db 0C7h ; Ē _2ds:0040123D db 85h ; … _2ds:0040123E db 0ACh ; ¬ _2ds:0040123F db 0FBh ; ū _2ds:00401240 db 0FFh ; _2ds:00401241 db 0FFh ; _2ds:00401242 db 0 ; _2ds:00401243 db 0 ; _2ds:00401244 db 0 ; _2ds:00401245 db 0 ; _2ds:00401246 db 0B8h ; ø _2ds:00401247 db 4Ch ; L _2ds:00401248 db 12h ; _2ds:00401249 db 40h ; @ _2ds:0040124A db 0 ; _2ds:0040124B db 0C3h ; Ć _2ds:0040124C db 0C7h ; Ē _2ds:0040124D db 45h ; E _2ds:0040124E db 0FCh ; ü _2ds:0040124F db 0FFh ; _2ds:00401250 db 0FFh ; _2ds:00401251 db 0FFh ; _2ds:00401252 db 0FFh ; _2ds:00401253 db 8Dh ; ¨ _2ds:00401254 db 8Dh ; ¨ _2ds:00401255 db 0E0h ; ą _2ds:00401256 db 0FBh ; ū _2ds:00401257 db 0FFh ; _2ds:00401258 db 0FFh ; _2ds:00401259 db 0E8h ; č _2ds:0040125A db 82h ; ‚ _2ds:0040125B db 1 ; _2ds:0040125C db 0 ; _2ds:0040125D db 0 ; _2ds:0040125E db 8Bh ; ‹ _2ds:0040125F db 85h ; … _2ds:00401260 db 0ACh ; ¬ _2ds:00401261 db 0FBh ; ū _2ds:00401262 db 0FFh ; _2ds:00401263 db 0FFh ; _2ds:00401264 db 0EBh ; ė _2ds:00401265 db 5Ah ; Z _2ds:00401266 ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ _2ds:00401266 _2ds:00401266 loc_0_401266: ; CODE XREF: downloadFile+22Ej _2ds:00401266 mov [ebp+var_4], 0FFFFFFFFh _2ds:0040126D lea ecx, [ebp+var_420] _2ds:00401273 call p_AfxTryCleanup _2ds:00401278 mov eax, [ebp+iSession_3] _2ds:0040127B mov [ebp+iSession_4], eax _2ds:00401281 mov ecx, [ebp+iSession_4] _2ds:00401287 mov [ebp+iSession_5], ecx _2ds:0040128D cmp [ebp+iSession_5], 0 _2ds:00401294 jz short sessionIsZero _2ds:00401296 push 1 _2ds:00401298 mov ecx, [ebp+iSession_5] _2ds:0040129E mov edx, [ebp+iSession_5] _2ds:004012A4 mov eax, [edx] _2ds:004012A6 call dword ptr [eax+4] ; CInternetSession::~CInternetSession _2ds:004012A9 mov [ebp+closedSession], eax _2ds:004012AF jmp short loc_0_4012BB _2ds:004012B1 ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ _2ds:004012B1 _2ds:004012B1 sessionIsZero: ; CODE XREF: downloadFile+294j _2ds:004012B1 mov [ebp+closedSession], 0 _2ds:004012BB _2ds:004012BB loc_0_4012BB: ; CODE XREF: downloadFile+2AFj _2ds:004012BB mov eax, 1 _2ds:004012C0 _2ds:004012C0 loc_0_4012C0: ; CODE XREF: downloadFile+117j _2ds:004012C0 mov ecx, [ebp+var_C] _2ds:004012C3 mov large fs:0, ecx _2ds:004012CA pop edi _2ds:004012CB pop esi _2ds:004012CC pop ebx _2ds:004012CD mov esp, ebp _2ds:004012CF pop ebp _2ds:004012D0 retn _2ds:004012D0 downloadFile endp