; ษอออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออป ; บ This file is generated by The Interactive Disassembler (IDA) บ ; บ Copyright (c) 1998 by DataRescue sa/nv, <ida@datarescue.com> บ ; ศอออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออผ :0048C0E0 55 push ebp;Protocolo de llamada a funciones. :0048C0E1 8B EC mov ebp, esp :0048C0E3 83 EC 10 sub esp, 10h;16 bytes de pila para variables locales :0048C0E6 50 push eax;Guardamos los registros. :0048C0E7 53 push ebx :0048C0E8 51 push ecx :0048C0E9 52 push edx :0048C0EA 57 push edi :0048C0EB 56 push esi :0048C0EC BE 40 c1 48 00 mov esi, 48C140h;1บ parametro.Zona de datos :0048C0F1 8D 86 C8 00 00 00 lea eax, [esi+0C8h];Direccion en la zona de datos para el 2บ parametro :0048C0F7 BF 1A 77 F7 BF mov edi, 0BFF7771Ah;2บ parametro.Direcci๓n de GetmodulehandleA :0048C0FC 89 38 mov [eax], edi;Guardamos el 2บ parametro en la zona de datos. :0048C0FE 8D 86 CC 00 00 00 lea eax, [esi+0CCh];Direccion en la zona de datos para el 3บ parametro :0048F104 BF AC 6D F7 BF mov edi, 0BFF76DACh;3บ parametro.Direcci๓n de GetProcAddress :0048F109 89 38 mov [eax], edi;Guardamos el 3บ parametro en la zona de datos. :0048F10B 8D 86 2B 00 00 00 lea eax, [esi+2Bh];Cadena:Comdlg32 :0048F111 50 push eax;Cadena:Comdlg32 :0048F112 FF 96 C8 00 00 00 call dword ptr [esi+0C8h];Calculamos el handle de Comdlg32 :0048F118 8D 5E 34 lea ebx, [esi+34h];Cadena:GetSaveFileNameA :0048F11B 53 push ebx;Cadena:GetSaveFileNameA :0048F11C 50 push eax;handle de Comdlg32 :0048F11D FF 96 CC 00 00 00 call dword ptr [esi+0CCh];Calculamos la direcci๓n de GetSaveFileNameA :0048F123 8B D8 mov ebx, eax;Guardamos la direcci๓n del GetSaveFileNameA :0048F125 6A 00 push 0;Handle del fichero que lanz๓ la aplicaci๓n. :0048F127 FF 96 C8 00 00 00 call dword ptr [esi+0C8h];Calculamos el handle de la aplicaci๓n. :0048F12D 8B D0 mov edx, eax;Guardamos el handle de la aplicaci๓n :0048F12F 8D 7E 77 lea edi, [esi+77h];Direcci๓n de inicio de la estructura de GetSaveFileNameA :0048F132 B9 4C 00 00 00 mov ecx, 4Ch;Tama๑o de la estructura. :0048F137 31 C0 xor eax, eax;Reseteamos la estructura con 0. :0048F139 F3 AA repe stosb;Escribimos los ceros. :0048F13B 8D 7E 77 lea edi, [esi+77h];Direcci๓n de inicio de la estructura de GetSaveFileNameA :0048F13E C7 07 4C 00 00 00 mov dword ptr [edi],4Ch;Guardamos en la estructura su tama๑o :0048F144 89 57 08 mov [edi+8],edx;Guardamos en la estructura handle de la aplicaci๓n :0048F147 8D 46 56 lea eax, [esi+56h];lpstrCustomFilter :0048F14A 8D 4F 01 lea ecx, [edi+1];Direccion para almacenar el nombre del fichero a salvar :0048F14D 8D 56 45 lea edx, [esi+45h];lpstrTitle :0048F150 89 47 0C mov [edi+0Ch], eax;Guardamos en la estructura lpstrCustomFilter :0048F153 89 4F 1C mov [edi+1Ch], ecx;Guardamos en la estructura la direccion para almacenar el nombre del fichero a salvar :0048F156 C7 47 20 01 2C 00 00 mov dword ptr [edi+20h], 2C01h;Tama๑o basura del buffer para almacenar el nombre del fichero a salvar :0048F15D 89 57 30 mov [edi+30h], edx;Guardamos en la estructura lpstrTitle :0048F160 C7 47 34 06 00 08 00 mov dword ptr [edi+34h],80006h;Guardamos en la estructura los flags.HIDEREADONLY|OVERWRITEPROMPT|EXPLORER :0048F167 8D 46 6D lea eax, [esi+6D];Extensi๓n por defecto. :0048F16A 89 47 3C mov [edi+3ch], eax;Guardamos la extensi๓n por defecto :0048F16D 57 push edi;Direcci๓n de inicio de la estructura de GetSaveFileNameA :0048F16E FF D3 call ebx;GetSaveFileNameA :0048F170 3D 01 00 00 00 cmp eax,1;Tenemos un nombre de fichero vแlido? :0048F175 75 5D jnz short loc_0_48F1D4; Si no hay nombre, salimos. :0048F177 56 push esi;Cadena:Kernel32 :0048F178 FF 96 C8 00 00 00 call dword ptr [esi+0C8h];Calculamos el handle del Kernel32 :0048F17E 8B F8 mov edi, eax;Guardamos el handle de Kernel32 :0048F180 8D 5E 15 lea ebx, [esi+15h];Cadena:CreateFileA :0048F183 53 push ebx;Cadena:CreateFileA :0048F184 50 push eax;Handle de Kernel32 :0048F185 FF 96 CC 00 00 00 call dword ptr [esi+0CCh];Calculamos la direcci๓n de CreateFileA :0048F18B 8D 5E 78 lea ebx, [esi+78h];Direcci๓n del nombre del fichero dentro de la estructura :0048F18E 6A 00 push 0;Sin template :0048F190 68 80 00 00 00 push 80h;Fichero normal :0048F195 6A 02 push 2;Crear siempre :0048F197 6A 00 push 0;Sin atributos de seguridad :0048F199 6A 01 push 1;Permite lectura compartida :0048F19B 68 00 00 00 C0 push 0C0000000h;abierto para lectura y escritura :0048F1A0 53 push ebx;Direcci๓n del nombre del fichero dentro de la estructura :0048F1A1 FF D0 call eax;CreateFileA :0048F1A3 8B D8 mov ebx, eax;Guardamos el handle del fichero creado :0048F1A5 8D 4E 21 lea ecx, [esi+21h];Cadena:WriteFile :0048F1A8 51 push ecx;Cadena:WriteFile :0048F1A9 57 push edi;Handle de Kernel32 :0048F1AA FF 96 CC 00 00 00 call dword ptr [esi+0CCh];Calculamos la direcci๓n de WriteFile :0048F1B0 8D 96 D0 00 00 00 lea edx, [esi+0D0h];Direcci๓n de inico de memoria a salvar en el fichero :0048F1B6 8D 8E D4 00 00 00 lea ecx, [esi+0D4h];Direccion para guardar el n๚mero de bytes a escribir :0048F1BC 6A 00 push 0;No overlapped :0048F1BE 51 push ecx;Direccion para guardar el n๚mero de bytes a escribir :0048F1BF FF 31 push dword ptr [ecx];N๚mero de bytes a escribir :0048F1C1 FF 32 push dword ptr [edx];Direcci๓n de inico de memoria a salvar en el fichero :0048F1C3 53 push ebx;Handle del fichero creado :0048F1C4 FF D0 call eax;CreateFile :0048F1C6 8D 56 09 lea edx,[esi+9];Cadena:CloseHandle :0048F1C9 52 push edx;Cadena:CloseHandle :0048F1CA 57 push edi;Handle de Kernel32 :0048F1CB FF 96 CC 00 00 00 call dword ptr [esi+0CCh];Calculamos la direcci๓n de CloseHandle :0048F1D1 53 push ebx;Handle del fichero creado :0048F1D2 FF D0 call eax;Close Handle :0048F1D4 5E pop esi;Restauramos los registros :0048F1D5 5F pop edi :0048F1D6 5A pop edx :0048F1D7 59 pop ecx :0048F1D8 5B pop ebx :0048F1D9 58 pop eax :0048F1DA 83 C4 10 add esp, 10h;Protocolo de salida :0048F1DD 8B E5 mov esp, ebp :0048F1DF 5D pop ebp :0048F1D0 C3 retn ;Volvemos al punto de llamada