Hace no mucho había escrito una función en pascal usando WinSocks llamada GetIp, aquí les dejo el post: http://foro.elhacker.net/programacion_general/pascal_gathor_01_recolector_de_informacion-t396062.0.html
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 ;D) 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 :rolleyes:
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.
(http://i.imgur.com/RyBHxsy.png)
(http://i.imgur.com/bMfHuLz.png)