elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Temas
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
21  Programación / Java / como obtengo la direccion completa de un archivo? en: 27 Agosto 2013, 03:20 am
hola

alguien me podria decir como obtener la direccion completa de un archivo, estoy usando Filedialog pero solo me da el nombre y quisiera obtener la direccion completa de la ubicacion de un archivo

lo estoy haciendo de esta manera

Código
  1. private void doOpen(){
  2.  
  3.        FileDialog open = new FileDialog(this, "Abrir...", FileDialog.LOAD);
  4.        open.setVisible(true);
  5.  
  6.  
  7.        String fname = open.getDirectory();
  8.        System.out.println(fname);
  9.    }

pero no encuentro alguna funcion que haga lo que necesito, espero alguien sepa como obtener el path completo de un archivo

salu2
22  Programación / ASM / se compila el socket sin errores pero no se conecta, ayuda en: 10 Agosto 2013, 19:38 pm
hola

pues despues de buscar y reintentar, logre crear el codigo y que se compile sin errores, se cargan las siguientes librerias en la pantalla de depuracion de visual studio, el cual lo tengo configurado como x64

Código:
'Project1.exe' (Win32): 'C:\Windows\System32\ntdll.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\kernel32.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\KernelBase.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\ws2_32.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\msvcrt.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\rpcrt4.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\nsi.dll' cargado. Símbolos cargados.

pero no se conecta, alguien podria checar el codigo y decirme que podria estar mal, por favor

Código
  1. extrn LoadLibraryA:PROC
  2. extrn ExitProcess:PROC
  3. extrn GetProcAddress:PROC
  4.  
  5. .data
  6.  
  7. wsdll db "ws2_32.dll",0
  8. wsaddr dq ?
  9. WStp db "WSAStartup",0
  10. wtaddr dq ?
  11. wsadata db 400 dup (0)
  12. sock db "socket",0
  13. sockaddr dq ?
  14. conn db "connect",0
  15. conaddr dq ?
  16. sen db "send",0
  17. senaddr dq ?
  18. buf db "hola mundo",0
  19.  
  20. .code
  21. Start proc
  22. push rbp
  23. mov rbp, rsp
  24. sub rsp, 20h
  25.  
  26. mov rcx, offset [wsdll]
  27. call LoadLibraryA
  28. mov[wsaddr], rax
  29.  
  30. mov rdx, offset[WStp]
  31. mov rcx, [wsaddr]
  32. call GetProcAddress
  33. mov[wtaddr], rax
  34.  
  35. lea rdx, wsadata
  36. push rdx
  37. push 2h
  38. call [wtaddr]
  39.  
  40. mov rdx, offset[sock]
  41. mov rcx, [wsaddr]
  42. call GetProcAddress
  43. mov[sockaddr], rax
  44.  
  45. push 0
  46. push 1
  47. push 2
  48. call [sockaddr]
  49. mov[sockaddr], rax
  50.  
  51. mov rdx, offset[conn]
  52. mov rcx, [wsaddr]
  53. call GetProcAddress
  54. mov[conaddr], rax
  55.  
  56. push 16
  57. mov rax, 0100007FB9220002h
  58. push rax
  59. push[sockaddr]
  60. call[conaddr]
  61.  
  62. mov rdx, offset[sen]
  63. mov rcx, [wsaddr]
  64. call GetProcAddress
  65. mov[senaddr], rax
  66.  
  67. mov r9, 0
  68. mov r8, 50
  69. mov rdx, offset[buf]
  70. mov rcx,[sockaddr]
  71. call[senaddr]
  72.  
  73.  
  74. mov rsp, rbp
  75. pop rbp
  76.  
  77. xor ecx, ecx
  78. call ExitProcess
  79.  
  80. Start endp
  81.  
  82. End
23  Programación / ASM / no logro invocar a getprocaddress en masm 64 bits en: 6 Agosto 2013, 03:30 am
hola

estuve investigando sobre el tema de rcx - r8, y encontre que hay que alinear reservando espacio para los registros que seria 20h, no tengo bien entendido si tambien hay que reservar espacio para las API o para los CALL, en un foro resolvieron un problema sumando 8

sub rsp, 20h

sub rsp, 20h + 8

pero en un tutorial dice que call manda de retorno 8 bytes, asi que si 20h son 32 bytes, serian 32 + 8 = 40 entonces seria

sub rsp, 28h

Código:
It is the caller's responsibility to allocate 32 bytes of "shadow space" (for storing RCX, RDX, R8, and R9 if needed) before calling the function.

asi lo he hecho en este momento y al parecer funciono al inicio, antes solo cargaba estas dll

 'C:\Windows\System32\ntdll.dll' cargado. Símbolos cargados.
 'C:\Windows\System32\kernel32.dll' cargado. Símbolos cargados.
 'C:\Windows\System32\KernelBase.dll' cargado. Símbolos cargados

cuando agregue 28h, cargaron las demas dll

'C:\Windows\System32\ntdll.dll' cargado. Símbolos cargados.
'C:\Windows\System32\kernel32.dll' cargado. Símbolos cargados.
'C:\Windows\System32\KernelBase.dll' cargado. Símbolos cargados.
'C:\Windows\System32\ws2_32.dll' cargado. Símbolos cargados.
'C:\Windows\System32\msvcrt.dll' cargado. Símbolos cargados.
'C:\Windows\System32\rpcrt4.dll' cargado. Símbolos cargados.
'C:\Windows\System32\nsi.dll' cargado. Símbolos cargados.

este es el codigo

Código
  1.  
  2. extrn LoadLibraryA:PROC
  3. extrn ExitProcess:PROC
  4.  
  5. .data
  6.  
  7. wsdll db "ws2_32.dll",0
  8. wsaddr dq ?
  9.  
  10.  
  11. .code
  12. Start proc
  13. push rbp
  14. mov rbp, rsp
  15. sub rsp, 28h
  16.  
  17. mov rcx, offset [wsdll]
  18. call LoadLibraryA
  19. mov[wsaddr], rax
  20.  
  21.  
  22. xor ecx, ecx
  23. call ExitProcess
  24.  
  25. mov rsp, rbp
  26. pop rbp
  27.  
  28. Start endp
  29.  
  30. End

ahora quise continuar con GetProcAddress, pero aqui no logro avanzar, ahora se interrumpe la ejecucion en el call de getprocaddress, lo que significa que vuelve a retornar 0, intente varias formas, por ejemplo

Código
  1. mov rcx, offset[WStp]
  2. mov rdx, [wsaddr]
  3. call GetProcAddress
  4. mov[wtaddr], rax

Código
  1. mov rdx, offset[WStp]
  2. mov r8, [wsaddr]
  3. call GetProcAddress
  4. mov[wtaddr], rax

tambien intente mover rsp, con 30h, 20h, etc, leyendo mas encontre

Código:
It is the caller's responsibility to clean the stack after the call.

asi que quise borrar usando add rsp, 28h y volviendo a reservar sub rsp, 28h,tambien add rsp, 8h, add rsp, 10h,  pero nada,
me podrian ayudar un poco con esto porfavor?

salu2
24  Programación / ASM / problema con masm para 64bits en: 5 Agosto 2013, 02:56 am
hola

tuve curiosidad de pasar el socket que hice a 64 bits, pero tambien tuve problemas para vincular obj a exe, ya que gcc en windows solo funciona para 32bits, hay una version para 64 pero me tira errores, asi que opte por golink, pero encontre que se podia usar masm desde Visual studio, asi que opte por usar masm

hay algunas diferencias en entre nasm y masm sobre el codigo, pero tenia entendido que es mas universal asm, asi que para no complicarme hice el mismo codigo que ya tenia pero con las diferencias de masm, el codigo al compilarlo no me produce errores, pero aparece la pantalla de interrupcion que menciona que hay un error en ejecucion, desafortunadamente ollydbg tampoco funciona para ejecutables de 64 bits y no tengo mucha experiencia con el debugger que viene por defecto en visual studio, pero puse algunos break y tira el error en el primer "call", y posiblemente son todos los call

en nasm normalmente lo uso asi

Código
  1. mov[valor], eax
  2. call [valor]


pero creo en masm eso no funciona, ya googlé varias veces, pero no encuentro como usar call en masm para 64 bits, o cual es la diferencia, etc, todo lo que encuentro es para 32bits

alguien podria explicarme, porque no funciona el codigo que hice?, acabo de empezar en estos dias con masm, asi que todavia hay diferencias que no comprendo, y siento que lo mas recomendable para ensamblador en windows seria masm y en linux seria nasm

por cierto, si me recomiendan mejor usar el IDE de masm en vez de Visual studio, puedo hacer el cambio, lo que sucede es que uso Visual Studio para programar en C o visual basic, aunque me gusta mas usar MinGW con codeblocks, pero ya que tengo esa IDE instalada, decidi mejor programar alli tambien en ensamblador

les dejo el codigo

Código
  1. extrn LoadLibraryA:PROC
  2. extrn ExitProcess:PROC
  3. extrn GetProcAddress:PROC
  4.  
  5. .data
  6.  
  7. wstart db 400 dup (0)
  8.  
  9. wsdll db 'ws2_32.dll',0
  10. wsaddr dq ?
  11. WStp db 'WSAStartup',0
  12. wstaddr dq ?
  13. soc db 'socket',0
  14. socaddr dq ?
  15. conn db 'connect',0
  16. conaddr dq ?
  17. sen db 'send',0
  18. senaddr dq ?
  19.  
  20. sre db "hola mundo",0
  21.  
  22. .code
  23. Start proc
  24. push rbp
  25. mov rbp, rsp
  26.  
  27. mov rdx, offset[wsdll]
  28. call LoadLibraryA
  29. mov[wsaddr], rax
  30.  
  31. mov r8, offset[WStp]
  32. mov r9, [wsaddr]
  33. call GetProcAddress
  34. mov[wstaddr], rax
  35.  
  36. lea rcx,[wstart]
  37. push rcx
  38. push 2
  39. call [wstaddr]
  40.  
  41. mov r8, offset[soc]
  42. mov r9, offset[wsaddr]
  43. call GetProcAddress
  44. mov[wstaddr], rax
  45.  
  46. push 0
  47. push 1
  48. push 2
  49. call [wstaddr]
  50. mov[socaddr], rax
  51.  
  52. mov r8, offset[conn]
  53. mov r9, offset[wsaddr]
  54. call GetProcAddress
  55. mov[conaddr], rax
  56.  
  57. push 16
  58. xor rax, rax
  59. mov rax, 0100007f5c110002h
  60. push rax
  61. push qword ptr[socaddr]
  62. call [conaddr]
  63.  
  64. mov r8, offset[sen]
  65. mov r9, offset[wsaddr]
  66. call GetProcAddress
  67. mov[senaddr], rax
  68.  
  69. push 0
  70. push 50
  71. mov rcx, offset [sre]
  72. push rcx
  73. push qword ptr[socaddr]
  74. call [senaddr]
  75.  
  76. xor ecx, ecx
  77. call ExitProcess
  78.  
  79. mov rsp, rbp
  80. pop rbp
  81.  
  82. Start endp
  83.  
  84. End

si encuetran codigo muy raro, es que use varias formas que encontraba en google pero ninguna funciono, aunque espero siga siendo entendible

salu2
25  Programación / ASM / no entiendo un error debido a la sección data en: 24 Julio 2013, 03:16 am
hola

tengo una duda

en el codigo de socket que hice de nasm, estaba quitando varios printf que puse para saber que estaba haciendo el programa y verificar si se ejecutaba bien, pero al saber que ya estaba funcionando quise eliminarlos, pero al eliminar una parte codigo dejo de funcionar

habia puesto saveWSA, para comprobar que WSAStartup esta funcionando

Código
  1. saveWSA: dd '0xFFFFFFFF'
  2. soc: db 'socket',0
  3. soadd: dd '0xFFFFFFFF'

"saveWSA" solo era para verificar que estaba bien WSAStartup viendo el resultado de eax con un printf

lo habia puesto asi

Código
  1. mov [saveWSA], eax
  2. cmp dword [saveWSA], -1
  3. jne mns1
  4. je erro
  5.  
  6. mns1:
  7. push dword [saveWSA]
  8. push res1
  9. call _printf

quise eliminar "0xFFFFFFFF" de saveWSA, pero despues de compilar, lo ejecuto y me aparece un error y se cierra el programa, despues solo elimine la parte de comprobacion

/////////
mov [saveWSA], eax
......
....
...
...
call printf
////////////

todo eso borre y pero esta ves deje "saveWSA: dd '0xFFFFFFFF'", volvi a compilar y al ejecutar el programa, funciona correctamente

hice un seguimiento con ollydbg y me di cuenta de dos cosas, la primera es que si quito "saveWSA" de la sección data, la parte donde llamo con GetProcAddress a socket, solo me aparece

"ock 2.0" y me aparece despues una violacion de acceso

y la segunda es que cuando vuelvo a colocar unicamente "saveWSA: dd '0xFFFFFFFF'" en ollydbg me aparece bien la invocacion con GetPtocAddress, "socket"

en pocas palabaras

funciona correctamente

Código
  1. saveWSA: dd '0xFFFFFFFF'
  2. soc: db 'socket',0
  3. soadd: dd '0xFFFFFFFF'

ya no funciona

Código
  1. soc: db 'socket',0
  2. soadd: dd '0xFFFFFFFF'

alguien sabe porque falla en ese sentido?, la verdad no entiendo porque funciona con saveWSA si solo lo puse para verificar con printf si estaba bien WSAStartup, y al quitarlo deja de funcionar

salu2
26  Programación / Programación C/C++ / porque no funciona send() y recv()? en: 21 Julio 2013, 02:50 am
hola

estaba haciendo un socket sencillo e windows y se conecta bien pero cuando uso send() y recv() no me aparece nada  :huh:  :huh:, me podrian decir que podria estar mal, llevo un tiempo sin usar C y sockets pero no creo que se me haya olvidado como hacerlo jeje, a ver si le encuentran algo mal, porque ya lo revise y no recuerdo haber olvidado algo

solo era conectarse entre sockets y mandan un "hola mundo"

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <winsock2.h>
  4.  
  5. int main()
  6. {
  7.    WSADATA wsa;
  8. SOCKET sock;
  9. struct sockaddr_in cl;
  10. int co = 0;
  11. char buff[50];
  12.  
  13. WSAStartup(MAKEWORD(2,2), &wsa);
  14. sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  15.  
  16. cl.sin_family = AF_INET;
  17. cl.sin_port = htons(8889);
  18. cl.sin_addr.s_addr = INADDR_ANY;
  19.  
  20. if(bind(sock, (struct sockaddr*)&cl, sizeof(struct sockaddr)) == -1){
  21.    printf("error bind");
  22. }
  23.  
  24. if(listen(sock, 1) == -1){
  25.  
  26.    printf("error listen");
  27. }
  28.  
  29. co = sizeof(struct sockaddr);
  30.  
  31. if((accept(sock, (struct sockaddr*)&cl, &co)) == -1){
  32.        accept(sock, (struct sockaddr*)&cl, &co);
  33.  
  34.        }
  35.  
  36. recv(sock, buff, sizeof(buff), 0);
  37. printf("%s", buff);
  38.  
  39.  
  40. return 0;
  41. }
  42.  

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <winsock2.h>
  4.  
  5. int main()
  6. {
  7.    WSADATA wsa;
  8.    SOCKET fd;
  9.    struct sockaddr_in cli;
  10.    struct hostent* he;
  11.    char buff[50] = "hola mundo";
  12.  
  13.    WSAStartup(MAKEWORD(2,2), &wsa);
  14.    he = gethostbyname("127.0.0.1");
  15.    if((fd=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) != 0){
  16.  
  17.        printf("resultado %d", fd);
  18.    }
  19.  
  20.    cli.sin_family = AF_INET;
  21.    cli.sin_port = htons(8889);
  22.    cli.sin_addr = *((struct in_addr*)he->h_addr);
  23.    memset(cli.sin_zero, 8, 0);
  24.  
  25.    connect(fd, (struct sockaddr*)&cli, sizeof(struct sockaddr));
  26.  
  27.    send(fd, buff, strlen(buff), 0);
  28.  
  29.    return 0;
  30. }
  31.  
27  Programación / ASM / logre un socket en nasm jeje en: 20 Julio 2013, 22:05 pm
yeeeeeah!! lo logre

les dejo el codigo por si a alguien mas le sirve y por si lo pierdo se que aqui estara, solo me falta el servidor pero espero se me facilite un poco mas

y gracias al consejo de cpu2 de usar direcciones en vez de usar estructuras logre hacerlo

Código
  1. [BITS 32]
  2.  
  3. section .data
  4.  
  5. wsdll: db 'ws2_32.dll',0
  6. wsaddr: dd '0xFFFFFFFF'
  7. Getpc: dd '0xFFFFFFFF'
  8.  
  9. WStp: db 'WSAStartup',0
  10. WSaddr: dd '0xFFFFFFFF'
  11. WSD: dd 'WSADATA',0
  12. saveWSA: dd '0xFFFFFFFF'
  13. soc: db 'socket',0
  14. soadd: dd '0xFFFFFFFF'
  15. conn: db 'connect', 0
  16. conaddr: dd '0xFFFFFFFF'
  17. sen: db 'send', 0
  18. sendadd: dd '0xFFFFFFFF'
  19.  
  20. res1: db "WSAStartup %d", 10, 0
  21. res2: db "Socket %d", 10, 0
  22. res3: db "connect %d", 10, 0
  23. res4: db "send %d", 10 ,0
  24.  
  25. sre: db "hola mundo",0
  26.  
  27. section .bss
  28. sn resb 10
  29.  
  30. section .text
  31.  
  32. global _WinMain@16
  33. extern _ExitProcess@4
  34. extern _LoadLibraryA@4
  35. extern _GetProcAddress@8
  36. extern _printf
  37. extern _WSAStartup@8
  38.  
  39. _WinMain@16:
  40.  
  41. xor eax, eax
  42.  
  43. push wsdll
  44. call _LoadLibraryA@4
  45. mov [wsaddr], eax
  46.  
  47. push WStp
  48. push dword [wsaddr]
  49. call _GetProcAddress@8
  50. mov [Getpc], eax
  51.  
  52. push WSD
  53. push 0x202
  54. call [Getpc]
  55. mov [saveWSA], eax
  56.  
  57. cmp dword [saveWSA], -1
  58. jne mns1
  59. je erro
  60.  
  61. mns1:
  62. push dword [saveWSA]
  63. push res1
  64. call _printf
  65.  
  66. push soc
  67. push dword [wsaddr]
  68. call _GetProcAddress@8
  69. mov [Getpc], eax
  70.  
  71. push 6
  72. push 1
  73. push 2
  74. call [Getpc]
  75. mov [soadd], eax
  76.  
  77. push dword [soadd]
  78. push res2
  79. call _printf
  80.  
  81. push conn
  82. push dword [wsaddr]
  83. call _GetProcAddress@8
  84. mov [conaddr], eax
  85.  
  86. push dword [conaddr]
  87. push res3
  88. call _printf
  89.  
  90. push 0x0100007F
  91. push 0xB9220002
  92. mov esi, esp
  93. push byte 16
  94. push esi
  95. push dword [soadd]
  96. call [conaddr]
  97.  
  98. erro:
  99. push 0
  100. call _ExitProcess@4


Habia leido sobre poner sockaddr_in en nasm pero no supe como usar estructuras asi que puse directamente la ip, el puerto y el formato de direccion (AF_INET) lo guarde en ESI, despues reserve 16 bytes de espacio para la longitud de sockaddr_in y listo, meti en la pila la longitud, ESI, el descriptor e hice un call a connect

aun me confundo en la posicion de las cosas, habia puesto el descriptor socket al inicio pero iba antes de connect

bueno, espero a alguien mas le ayude esto que si me costo trabajo, seguire estudiando todavia mas sobre asm

solo como ultima peticion, alguien me podria explicar bien el funcionamiento de ESI y EDI

funciona para concatenar o copiar?, por ejemplo

lo que haya en esi se concatena con edi

esi = 1
edi = 2

mov eax, edi
eax = 12

es algo asi?

se que significa source index y destination index y en este caso me ayudo como registro para salvar lo que habia en esp, pero muy bien aun no lo entiendo, podrian explicarme y si se puede con un ejemplo porfavor

gracias y salu2
28  Programación / ASM / como usar estructuras en nasm? en: 16 Julio 2013, 20:45 pm
hola

alguien me puede decir como usar estructuras en nasm?, lo que estoy tratando de programar es un socket en asm, pero no se como colocar la estructura sockaddr_in en nasm para usar los parametros de .sin_family, .sin_port, etc
29  Programación / ASM / que error le encuentran a este codigo en nasm? en: 14 Julio 2013, 02:21 am
hola

Quise hacer por mi mismo un downloader para practicar asm, pero tengo un problema, nasm no me da ningun error, gcc tampoco pero cuando lo ejecuto, me sale un mensaje de error y se cierra, me podrian decir que fallo le encuentran porfavor?

Código:
[Bits 32]

section .data
remote_file db 'http://www.crackberrista.com/wp-content/uploads/2012/01/hacker.gif',0
local_file db 'hacker.gif',0
url db 'urlmon.dll'
ldlib dd '0xFFFFFFFF'
URDo db 'URLDownloadToFileA'
urd dd '0xFFFFFFFF'

section .text
extern _LoadLibraryA@4
extern _GetProcAddress@8
extern _FreeLibrary@4
extern _ExitProcess@4
global _WinMain@16

_WinMain@16:

push url
call _LoadLibraryA@4
mov [ldlib], eax

push URDo
push dword [ldlib]
call _GetProcAddress@8
mov [urd], eax

push 0
push 0
push local_file
push remote_file
push 0
call [urd]

call _FreeLibrary@4

push 0
call _ExitProcess@4
ret 16
30  Programación / ASM / error usando linux 64bits en codigo de nasm en: 14 Julio 2013, 02:10 am
hola

tengo una duda, cuando hago un for y un printf juntos, me funciona en 32bits de windows pero en 64 bits de linux, me dice que la instruccion no es soportada para 64 bits, la verdad no he logrado saber si el codigo esta bien o mal hecho por la razon de los 64 bits, a lo cual tambien tengo otra duda

tenia entendido que para usar inc o dec se usaba el registro ecx, pero cuando lo ejecuto usando ecx me da error, y cuando uso ebx me funciona bien cuando lo ejecuto en windows 32bits, alguien sabe cual seria la razon de porque pasa eso?

les dejo el codigo que trato de usar en linux y espero me puedan decir cual es el problema de porque no funciona

Código:
[BITS 64]

section .data

fmt: db "valor = %d",10, 0

section .text

extern printf
global main

main:

mov ebx, 10
loop:

push ebx
push fmt
mov eax, 0
call printf

dec ebx
jnz loop

ret
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines