Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: ViejoMajara en 5 Abril 2015, 21:09 pm



Título: Python mezclado con ASM
Publicado por: ViejoMajara en 5 Abril 2015, 21:09 pm
¡Hola!

Vaya por delante que soy nuevo en Python, que de ASM sé lo que haya podido aprender en las lecciones sobre OLLY de R.Narvaja y que también tengo que pensar bastante para saber en qué sección del Foro debo colocar las preguntas que se me ocurren.

Hace unos días en el Foro de Ingeniería inversa, en el titulado "[KeygenMe] Matrix <<1,2,3>> por mr.blood", presenté un keygen en Python. Funciona pero es muy lento porque tiene que hacer la comparación entre una ingente combinación de letras. En mi PC, si el nombre que introduzco no tiene clave posible, tarda casi 40 segundos. Pensé, si las comparaciones las pudiese hacer en ASM tardaría mucho menos.

Buscando por la red encontré un módulo pyasm.py en la página de un tal pyalot-pyasm que parece ser que permite injertar código ASM en Phyton. He tratado de hacer correr el "HOLA MUNDO" de ejemplo que hay en la página citada y me da un montón de errores.

Preguntas ¿Se puede injertar ASM en Python? ¿Acelera los módulos?¿Hay alguien que haya usado el pyasm y tenga algún ejemplo de uso?

Saludos.





Título: Re: Python mezclado con ASM
Publicado por: ivancea96 en 5 Abril 2015, 22:12 pm
¿Algo como esto no te funciona? http://codeflow.org/entries/2009/jul/31/pyasm-python-x86-assembler/ (http://codeflow.org/entries/2009/jul/31/pyasm-python-x86-assembler/)

An vez de mezclar ASM con Python, también puedes plantearte usar un lenguaje como C, de más bajo nivel.


Título: Re: Python mezclado con ASM
Publicado por: tincopasan en 6 Abril 2015, 00:33 am
me parece que al pasar siempre por el interprete asm perderá velocidad, ¿por qué no programar en asm directamente?


Título: Re: Python mezclado con ASM
Publicado por: ivancea96 en 6 Abril 2015, 01:32 am
me parece que al pasar siempre por el interprete asm perderá velocidad, ¿por qué no programar en asm directamente?

Supongo que lo que hace en Python es compilar el ASM y guardarlo como una función, que luego ejecuta directamente. Por tanto, sería eficiente. El problema de ASM directamente es que es más complejo.


Título: Re: Python mezclado con ASM
Publicado por: engel lex en 6 Abril 2015, 02:08 am
Supongo que lo que hace en Python es compilar el ASM y guardarlo como una función, que luego ejecuta directamente. Por tanto, sería eficiente. El problema de ASM directamente es que es más complejo.

eso hay que revisarlo porque puede ser un simple interprete de asm



Título: Re: Python mezclado con ASM
Publicado por: ivancea96 en 6 Abril 2015, 02:17 am
eso hay que revisarlo porque puede ser un simple interprete de asm

Puede, pero sería una librería bastante inútil :/


Título: Re: Python mezclado con ASM
Publicado por: engel lex en 6 Abril 2015, 02:21 am
no sería inútil... sería practico para webs que quieren hacer asm de practica (al warzone de este foro) serviría para hacer debug, etc...

pero revisando el github de pyasm, creo qeu queda claro de que va
https://github.com/AmihaiN/pyAsm/blob/master/pyAsm.py (https://github.com/AmihaiN/pyAsm/blob/master/pyAsm.py)


Título: Re: Python mezclado con ASM
Publicado por: ViejoMajara en 6 Abril 2015, 19:33 pm
¡Hola!

Ivancea96, efectivamente es ese 'Hello World' el que no consigo correrlo en Python. Tengo el python.exe de python y el setup.py del pyasm en dos carpetas separadas en el mismo directorio, y para correr y modificar los .py utilizo WING IDE. Pues con estas herramientas no he sabido dónde colocar ni cómo usar los comandos de instalación de pyasm que indican en la página que citas.

Me da la impresión de que he hecho unas preguntas de master cuando estoy en primaria, así que voy a seguir profundizando en ASM y Python por separado y me voy a dejar de fantasías que no entiendo por el momento.

De todas formas me gusta mucho leer vuestros comentarios magistrales, tanto de este como de otros asuntos, aunque no me entere de la misa la media.

Saludos


Título: Re: Python mezclado con ASM
Publicado por: MCKSys Argentina en 7 Abril 2015, 03:33 am
@ViejoMajara: PyAsm está usando nasm para compilar el codigo asm. Necesitas el nasm.exe para que el pyasm pueda compilar el codigo.

Lo tienes al ejecutable?

Saludos!


Título: Re: Python mezclado con ASM
Publicado por: ViejoMajara en 8 Abril 2015, 09:06 am
¡Hola!

Sí que tengo el nasm.exe pero no sé cómo hacer para que todo se ligue.

Explico lo que he hecho:
 
He guardado el Example(Hello World) como pythonASM_1.py y lo he abierto en Wing IDE. Observo que aquí hay un fun() que debe ser prog compilado.

Como veo que importa cosas de pyasm, pues he abierto también el pyasm.py.

He tratado de correr el  pythonASM_1.py y me da una serie de errores.

Si ejecuto el nasm.exe, aparece fugazmente y desaparece.

Con esto que recomienda el autor de pyasm para instalarlo:
Citar
cd pyasm; python setup.py install
easy_install pyasm
no sé ni dónde ni cómo ni qué hacer.

En resumidas cuentas, no tengo ni pajolera idea. >:D

Saludos.


 


Título: Re: Python mezclado con ASM
Publicado por: explorer en 8 Abril 2015, 17:43 pm
¿Errores? ¿Qué errores?


Título: Re: Python mezclado con ASM
Publicado por: ViejoMajara en 10 Abril 2015, 08:31 am
¡Hola!

He colocado en Wing IDE el ejemplo siguiente con el nombre pythonASM_1.py.

Código
  1. from pyasm import Program
  2. from pyasm.data import String
  3. from pyasm.macro import syscall
  4. from pyasm.instructions import mov, ret, push, add
  5. from pyasm.registers import eax, ebx, ecx, edx, ebp
  6. import sys
  7.  
  8. def example():
  9.    msg = 'Hello World!'
  10.    prog = Program(
  11.        mov(ebx, 1),
  12.        mov(ecx, String(msg)),
  13.        mov(edx, len(msg)),
  14.        syscall('write'),
  15.        ret(),
  16.    )
  17.    fun = prog.compile()
  18.    fun()
  19.  
  20. if __name__ == '__main__':
  21.    example()

He colocado a su lado en la cabecera de Wing IDE el setup.py para pyasm.

He corrido el pythonASM_1.py y en vez de aparecerme 'Hello World' me sale la ventana de excepciones con estos mensajes.


Código
  1. File "l:\Aprendiendo PYTHON\PythonASM\pythonASM_1.py", line 21, in <module>
  2.  example()
  3. File "l:\Aprendiendo PYTHON\PythonASM\pythonASM_1.py", line 17, in example
  4.  fun = prog.compile()
  5. File "E:\Python27\lib\site-packages\pyasm-0.1.0-py2.7.egg\pyasm\program.py", line 39, in compile
  6. File "E:\Python27\lib\site-packages\pyasm-0.1.0-py2.7.egg\pyasm\program.py", line 72, in compile
  7. File "E:\Python27\lib\site-packages\pyasm-0.1.0-py2.7.egg\pyasm\program.py", line 48, in __init__
  8. File "E:\Python27\Lib\ctypes\__init__.py", line 378, in __getattr__
  9.  func = self.__getitem__(name)
  10. File "E:\Python27\Lib\ctypes\__init__.py", line 383, in __getitem__
  11.  func = self._FuncPtr((name_or_ordinal, self))
  12.  
  13. AttributeError: function 'valloc' not found

Esos son lo que yo llamo errores.

Saludos