Básicamente conseguía la IP de un sitio pasado como parámetro, pero el ensamblado que le había hecho era bastante malo, hoy que tuve un rato, lo desensamble(bendito IDA ) y modificando el desensamblado logre reconstruir la función pero en assembler.
Reduje el código de la vez pasada para que quede bien legible, y se entienda.
Aquí la función (compilada en delphi 7), ojala les sirva
Código
program Gathor; {$APPTYPE CONSOLE} (***********************************) (* Funcion GetIp por WarZ0n3 *) (* Explicacion: *) (* PoC usando Winsocks en assembly *) (* Uso: *) (* Consigue la IP de un sitio web *) (* pasado como argumento *) (***********************************) uses SysUtils, Windows, WinSock; var SITE : string; (* Reporte por WarZ0n3 00408174 /$ 53 PUSH EBX 00408175 |. 81C4 70FEFFFF ADD ESP,-190 0040817B |. 54 PUSH ESP ; /pWSAData 0040817C |. 6A 01 PUSH 1 ; |RequestedVersion = 1 (1.0.) 0040817E |. E8 91FFFFFF CALL <JMP.&wsock32.WSAStartup> ; \WSAStartup 00408183 |. 90 NOP 00408184 |. 90 NOP // Solo para demostracion en el stack 00408185 |. 90 NOP 00408186 |. 68 B8814000 PUSH Project2.004081B8 ; /Name = "www.youtube.com" 0040818B |. E8 7CFFFFFF CALL <JMP.&wsock32.gethostbyname> ; \gethostbyname 00408190 |. 8B40 0C MOV EAX,DWORD PTR DS:[EAX+C] 00408193 |. 33D2 XOR EDX,EDX 00408195 |. 90 NOP 00408196 |. 90 NOP // Solo para demostracion en el stack 00408197 |. 90 NOP 00408198 |. 90 NOP 00408199 |. 8B0490 MOV EAX,DWORD PTR DS:[EAX+EDX*4] 0040819C |. FF30 PUSH DWORD PTR DS:[EAX] 0040819E |. E8 61FFFFFF CALL <JMP.&wsock32.inet_ntoa> 004081A3 |. 8BD8 MOV EBX,EAX 004081A5 |. 90 NOP 004081A6 |. 90 NOP // Solo para demostracion en el stack 004081A7 |. 90 NOP 004081A8 |. 90 NOP 004081A9 |. E8 6EFFFFFF CALL <JMP.&wsock32.WSACleanup> ; [WSACleanup 004081AE |. 8BC3 MOV EAX,EBX 004081B0 |. 81C4 90010000 ADD ESP,190 004081B6 |. 5B POP EBX 004081B7 \. C3 RETN *) function GetIP(): PChar; assembler; asm PUSH EBX ADD ESP, 0FFFFFE70h PUSH ESP PUSH 1 CALL WSASTARTUP NOP NOP NOP PUSH SITE // 04081B4h CALL GetHostByName MOV EAX, [EAX+0Ch] XOR EDX, EDX NOP NOP NOP MOV EAX, [EAX+EDX*4] PUSH DWORD PTR [EAX] CALL INET_NTOA MOV EBX, EAX CALL WSACleanup MOV EAX, EBX ADD ESP, 190h POP EBX RETN end; begin SITE:= ParamStr(1); WriteLn('[Sitio web]: ', SITE, #13#10+'[Ip]: ', GetIP()); end.