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

 

 


Tema destacado:


  Mostrar Temas
Páginas: 1 [2] 3
11  Programación / Scripting / Aporte python: casi emular input() pero con tiempo de espera en: 2 Agosto 2016, 03:31 am
Muchas veces me preguntan y veo que preguntan como continuar si hay un input() y el usuario no presiona ENTER,lo más correcto desde mi perspectiva es usar threads y semaforos, pero cuando digo eso la respuesta más común es: "¿pódes hacer el código?, no manejo threads", pues bien, cualquiera puede hacer el código, el tema es que la mayoría solo copia y pega sin aprender nada, entonces me parece mejor hacer un código que haga algo similar y muy fácil, ya que usa lo más común de python.
Otra cosa, solo trabajo sobre windows y python 3.x por lo que el funcionamiento en otros S.O o versiones anteriores de python (2.x) no me interesan ni probar.
Bueno así usaría una función para casi emular input y que se corte con tiempo, por supuesto hay muchas más formas de hacerlo, pero quizá este sea un puntapie de inicio para sus códigos(que espero posteen)
Está incompleto por supuesto, pero si funcional en lo simple.
Claro que todos sabemos que esto es por consola y que si fuese con tkinter sería mucho más simple y mejor.
Código
  1. #-*- coding:utf-8 -*-
  2. import msvcrt
  3. import time
  4. def input_tiempo(aviso = ">>>",duracion=10): #aviso es el prompt y duración cuanto hay que esperar
  5.    global nombre                              
  6.    nombre=""
  7.    print (aviso)    
  8.    finaliza = time.time() + duracion        #cuando terminar de esperar
  9.    while time.time()< finaliza:            
  10.        if msvcrt.kbhit():                   #msvcrt está recontra documentado y hay cientos de ejemplos    
  11.            letra= msvcrt.getche().decode('ASCII')
  12.            if letra == "\r":                 #si el usuario presiona enter sigue normal    
  13.                break
  14.            else:
  15.                nombre+= letra
  16. #forma de uso          
  17. q=input_tiempo("Escribe tu nombre: ")  #pongo lo que quiera y si no pongo duración es la que viene x defecto
  18. if nombre != "":
  19.    print("\nHola ¡¡ {} !!".format(nombre))
  20. else:
  21.    print("Hola desconocido")    
  22.  
Saludos   
12  Programación / Scripting / Listas en python en: 16 Julio 2016, 20:47 pm
Hay muchos tutoriales sobre listas en python, éste seguramente, será uno más, pero trataré de mostrar algunos puntos que no veo frecuentemente. Además python permite que cada uno resuelva como quiera, por lo tanto esto es sólo una forma en que podría hacerlo.También es cierto que se busca lo más simple.Ya todos conocemos la filosofía de python.
Sabemos que las listas pueden contener todo tipo de datos, cadenas,números,listas,tuplas y diccionarios, ahora usaré las más simples, por ejemplo:

lista simple de cadenas
Código
  1. l1=["quiero","aprender","python","y ","tambien","quiero","aprender","otros","lenguajes"]
  2.  

¿cómo cuento cuántas veces está cada palabra?
para eso está el método Counter
Código
  1. from collections import Counter
  2. cuenta_palabras = Counter(l1)
  3.  

>>> Counter({'quiero': 2, 'aprender': 2, 'y ': 1, 'tambien': 1, 'python': 1, 'lenguajes': 1, 'otros': 1})

y si busco cuantas veces se repite quiero
Código
  1. cuantas=cuenta_palabras["quiero"]
  2.  
>>> 2

para mostrar la cantidad que quiera de las más usadas
Código
  1. mas_usadas_2= cuenta_palabras.most_common(2) #donde 2 serian las 2 con mayor repeticion
  2.  
>>> [('quiero', 2), ('aprender', 2)]

¿la palabra más larga?
Código
  1. import heapq
  2. largo=heapq.nlargest(1,l1,key=len)
  3.  
>>> ['lenguajes']

¿la más corta?
Código
  1. corta=heapq.nsmallest(1,l1,key=len)
  2.  
>>> ['y ']

para filtar palabras por la primer letra
Código
  1. filtrar=[n for n in l1 if n[0] == "o"]
  2.  
>>>['otros']

sumar cada caracter ascci de las palabras en la lista
Código
  1. valores=list(map(lambda x: sum(map(ord, x)), l1))
  2.  
>>>[661, 849, 674, 153, 736, 661, 849, 567, 958]

Bueno esto es muy básico, pero sirve para ver el uso de otras funciones y métodos en listas simples.
La verdad me cansé de escribir, así que dejo para otro día diccionarios,tuplas y listas en listas.
Saludos
13  Programación / Scripting / Tramposo aporte de python y vbs en: 11 Julio 2016, 12:54 pm
Muchas veces me pasa que algunos usuarios quieren reproducir los textos hablados en python. Ahora bien, python es multiplataforma etc, pero por suerte para mí, todos mis usuarios usan solo windows y del Seven en adelante(ninguno debugea y quieren los últimos jueguitos así que nadie tiene xp), lo cual dice adiós a multiplataforma, el incoveniente que sigo teniendo es que algunos todavía quieren usar python 2.x(al pedo sino tienen idea, pero lo tienen), por suerte la mayoría usa 3.x (lo cual a veces lleva a inconvenientes entre las versiones de las bibiotecas)asi que para ahorrarme instalarlas decidí usar vbs y SAPI5 (vienen por defecto en windows), para resumir un simple código de como hago trampas para reproducir los textos.Como siempre lo bueno de python que cada uno lo usa como quiere!
Código
  1. import os, subprocess
  2. def hablar():
  3.    global archivo
  4.    temporal=os.getenv("temp") #obtengo el path del directorio temp
  5.    nombre="\prueba.vbs"       #nombre del archvo que voy a escribir
  6.    archivo= temporal+nombre   #concateno el path y el nombre
  7.  
  8.    arch=open(archivo,"w")     #para crear el archvo en modo escritura
  9.    obligatorio = 'set speech = Wscript.CreateObject("SAPI.spVoice")'
  10.  
  11.    texto=input("Escriba lo que desea decir: ")
  12.    cmd1= 'speech.speak "{}"'.format(texto)  #le doy formato a la linea a escribir en el archivo
  13.  
  14.    arch.write(obligatorio)
  15.    arch.write("\n"+cmd1)
  16.    arch.close()
  17.  
  18. hablar()
  19. ejecutar="cscript " + archivo     #declaro todo el comando a usar en cmd
  20. out= subprocess.check_output(ejecutar) #ejecuto el comando
  21. os.remove(archivo)                     #borro el *.vbs
  22.  
  23.  

Saludos


Deliberar sobre las versiones de python es como la religión, cada uno cree lo que quiere y no por eso es absoluto.
14  Programación / Scripting / Aporte muy simple de guardar archivos con python y mdos en: 7 Julio 2016, 07:53 am
me ha pasado varias veces que los script solo devuelven cadenas y no hay intervención del usuario, por ejemplo si realizan algún cálculo,muchas cadenas  o fibonacci, más lo cual me preguntaron si esos resultados se pueden guardar en un archivo de texto. Es más que obvio que se puede, pero...
tendría que modificar cada uno de los script con las sentencias ya recontra conocidas.Con los años además de vago me gusta simplificar sin grandes complicaciones así que...
era usuario de dos en sus inicios y pensé o hago un bat (que odio) o uso otro script(imprime.py) y listo!
código de imprime.py
Código
  1. import os
  2. import sys
  3. archivo= sys.argv[1]
  4. os.system('python {} > impreso.txt'.format(archivo))
  5.  

4 líneas y asunto resuelto para siempre en estos casos.
se usa muy fácil: desde la consola de cmd python imprime.py archivoaimprimir.py
Saludos y perdón por esta huevada pero la quice compartir.

Edito:

lo entiendo pero...
1) si le quiero cambiar el nombre al archivo de salida lo hago en el script
2) de tu forma el usuario tendría que pasar 2 argumentos,el nombre del archivo a crear y el nombre del archivo a guardar la salida- es más rápido  con un solo argumento

Dicho sea de paso, creo no entendiste que imprime llama a cualquier archivo que quiera(siempre que no espere la intervención del usuario) y lo mande a un txt sin realizarle ninguna modificación.
15  Programación / Scripting / Aporte en python(pone ontop algunos procesos) en: 18 Junio 2016, 19:06 pm
Hola:
         muchas veces cuando hago diseño o programación me apoyo en otros archivos o videos, el tema es que me gusta tener maximizada la aplicación principal que esté usando y me molesta tener que andar cambiando entre aplicaciones o usar alt tab, etc, así que pongo los visores o reproductores ontop, no todos traen esa función(notepad por ejemplo) y aunque la traigan hay que configurarla cada vez que quiero cambiar esa modalidad. Hay muchos programas de terceros,pero ¿cuál es el chiste?así que programé con python y pyqt5 un visor de procesos y la posibilidad de ponerlos ontop, es más que obvio que no se puede con todos los procesos, pero es simple y cumple su función.
Además usé otras bibliotecas y el uso de apis para que los más nuevos vean como puede hacerse.
Son dos códigos:1) El archivo .ui que es el entorno y 2)el archivo.pyw
código del ui:
Código
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <ui version="4.0">
  3. <class>frmprincipal</class>
  4. <widget class="QDialog" name="frmprincipal">
  5.  <property name="geometry">
  6.   <rect>
  7.    <x>0</x>
  8.    <y>0</y>
  9.    <width>447</width>
  10.    <height>307</height>
  11.   </rect>
  12.  </property>
  13.  <property name="windowTitle">
  14.   <string>Procesos</string>
  15.  </property>
  16.  <widget class="QPushButton" name="btntop">
  17.   <property name="geometry">
  18.    <rect>
  19.     <x>360</x>
  20.     <y>30</y>
  21.     <width>75</width>
  22.     <height>23</height>
  23.    </rect>
  24.   </property>
  25.   <property name="text">
  26.    <string>Arriba</string>
  27.   </property>
  28.  </widget>
  29.  <widget class="QPushButton" name="btnsalir">
  30.   <property name="geometry">
  31.    <rect>
  32.     <x>360</x>
  33.     <y>280</y>
  34.     <width>75</width>
  35.     <height>23</height>
  36.    </rect>
  37.   </property>
  38.   <property name="text">
  39.    <string>Salir</string>
  40.   </property>
  41.  </widget>
  42.  <widget class="QLabel" name="lblnombre">
  43.   <property name="geometry">
  44.    <rect>
  45.     <x>20</x>
  46.     <y>10</y>
  47.     <width>161</width>
  48.     <height>16</height>
  49.    </rect>
  50.   </property>
  51.   <property name="font">
  52.    <font>
  53.     <pointsize>10</pointsize>
  54.    </font>
  55.   </property>
  56.   <property name="text">
  57.    <string>Nombre del proceso</string>
  58.   </property>
  59.  </widget>
  60.  <widget class="QListWidget" name="lstprocesos">
  61.   <property name="geometry">
  62.    <rect>
  63.     <x>10</x>
  64.     <y>30</y>
  65.     <width>341</width>
  66.     <height>271</height>
  67.    </rect>
  68.   </property>
  69.  </widget>
  70.  <widget class="QPushButton" name="btnactualizar">
  71.   <property name="geometry">
  72.    <rect>
  73.     <x>360</x>
  74.     <y>60</y>
  75.     <width>75</width>
  76.     <height>23</height>
  77.    </rect>
  78.   </property>
  79.   <property name="text">
  80.    <string>Actualizar</string>
  81.   </property>
  82.  </widget>
  83. </widget>
  84. <resources/>
  85. <connections/>
  86. </ui>
  87.  

código del pyw:

Código
  1. #-*- coding:utf-8 -*-
  2. import sys
  3. from PyQt5.QtWidgets import QApplication,QDialog,QMessageBox
  4. from PyQt5 import uic
  5. import psutil
  6. from ctypes import c_void_p, windll
  7. import win32gui
  8.  
  9. SWP_NOMOVE = 2        
  10. SWP_NOSIZE = 1        
  11. VEN_TOP    = -1        
  12. VEN_NOTOP  = -2    
  13.  
  14.  
  15. class Form(QDialog):
  16.    def __init__(self):
  17.        QDialog.__init__(self)
  18.        uic.loadUi("principal.ui",self)
  19.        self.btnactualizar.clicked.connect(self.TomarProcesos)
  20.        self.btntop.clicked.connect(self.PonerTop)
  21.        self.btnsalir.clicked.connect(self.Terminar)
  22.  
  23.    def Actualizar(self):
  24.        for proc in psutil.process_iter():
  25.            try:
  26.                procesos=proc.as_dict(attrs=['name'])
  27.            except psutil.NoSuchProcess:
  28.                pass
  29.            else:
  30.                nombre= procesos["name"]
  31.                self.lstprocesos.addItem(nombre)          
  32.  
  33.    def TomarProcesos(self):
  34.        uno= self.lstprocesos.count()
  35.        if uno !=0 :
  36.            self.lstprocesos.clear()
  37.            self.Actualizar()            
  38.        else:
  39.            self.Actualizar()
  40.  
  41.    def PonerTop(self):        
  42.        item=self.lstprocesos.selectedItems()
  43.        seleccionado=[]
  44.        for x in range(len(item)):
  45.            seleccionado.append(self.lstprocesos.selectedItems()[x].text())
  46.  
  47.        proceso=''.join(seleccionado)
  48.        proceso=proceso[:-4]
  49.        ventana= win32gui.FindWindow(proceso,None)
  50.        if ventana != 0:
  51.            win32gui.SetForegroundWindow(ventana)
  52.            windll.user32.SetWindowPos(ventana, VEN_TOP, 0, 0, 0, 0,SWP_NOMOVE | SWP_NOSIZE)
  53.  
  54.  
  55.    def closeEvent(self,event):
  56.        respuesta=QMessageBox.question(self,"Terminar","¿Desea Salir?",QMessageBox.Yes|QMessageBox.No)
  57.        if respuesta == QMessageBox.Yes: event.accept()
  58.        else: event.ignore()    
  59.  
  60.    def Terminar(self):
  61.        respuesta=QMessageBox.question(self,"Terminar","¿Desea Salir?",QMessageBox.Yes|QMessageBox.No)
  62.        if respuesta == QMessageBox.Yes: exit()
  63.  
  64.  
  65. aplicacion=QApplication(sys.argv)
  66. ventana=Form()
  67. ventana.show()
  68. aplicacion.exec_()
  69.  
  70.  
Saludos  


Edito: Asunto modificado.
16  Foros Generales / Sugerencias y dudas sobre el Foro / link en: 8 Junio 2016, 05:21 am
Hola:
        soy un inútil total con la forma de hacer algunas cosas en las repuestas. Alguien podría explicarme como hacer que una palabra, por ejemplo casa, sea un link externo a otra pagina.
17  Programación / Scripting / simple generador de claves con tkinter en: 21 Marzo 2016, 06:33 am
Estuve haciendo un sencillo generador de claves, para quienes estamos aprendiendo el uso de tkinter y algunas de sus funciones para hacerlo un poquito más visual.
Es mejor hacer el archivo .pyw para que no salga la molesta consola.
Es todo simple, pero creo ayudará  a los más nuevos.
Saludos
Código
  1. #código realizado por tincopasan
  2. #-*- coding: utf -8 -*-
  3. from tkinter import *
  4. from tkinter import messagebox
  5. import string
  6. import random
  7.  
  8.  
  9. def generar_pass():
  10.    pass_may=cmay.get()
  11.    pass_min=cmin.get()
  12.    pass_num=cnum.get()
  13.    pass_sim=csim.get()
  14.  
  15.    exito= 0
  16.  
  17.    global argumentos
  18.    argumentos =""
  19.  
  20.    if pass_may == 1:
  21.        mayusculas=string.ascii_uppercase
  22.        argumentos = argumentos + mayusculas
  23.        exito=1        
  24.  
  25.    if pass_min == 1:
  26.        minusculas=string.ascii_lowercase
  27.        argumentos = argumentos + minusculas
  28.        exito = 1
  29.  
  30.    if pass_sim == 1:
  31.        simbolos="@#\/¿?¡!.,+-_"
  32.        argumentos=argumentos + simbolos
  33.        exito = 1
  34.  
  35.    if pass_num == 1:
  36.        numeros=string.digits
  37.        argumentos= argumentos + numeros
  38.        exito=1
  39.  
  40.    if exito == 0:
  41.        messagebox.showinfo("¡Error!","Debes seleccionar por lo menos 1 argumento")
  42.  
  43.    if exito == 1:
  44.        cuantas = 0
  45.        total = arg_cantidad.get()
  46.        dic = open("diccionario.txt", "a")
  47.        while cuantas < total:
  48.            cuantas = cuantas + 1        
  49.            password =  "".join(random.SystemRandom().choice(argumentos) for _ in range(arg_largo.get()))
  50.            dic.write(password + "\n")
  51.  
  52.        dic.close()
  53.        messagebox.showinfo("¿Atención!","Archivo de claves generado exitosamente")    
  54.  
  55.  
  56. ventana=Tk()
  57. ventana.title("Generador de Passwords")
  58. ventana.geometry("220x190+200+150")
  59. eleccion=Label(ventana,text="Elija que argumentos utilizar").place(x=0,y=0)
  60.  
  61. cmay=IntVar()
  62. chkmay=Checkbutton(ventana,text="Mayúsculas",variable=cmay,onvalue=1,offvalue=0).place(x=10,y=20)
  63.  
  64. cmin=IntVar()
  65. chkmin=Checkbutton(ventana,text="Minúsculas",variable=cmin,onvalue=1,offvalue=0).place(x=10,y=40)
  66.  
  67. cnum=IntVar()
  68. chknum=Checkbutton(ventana,text="Números",variable=cnum,onvalue=1,offvalue=0).place(x=10,y=60)
  69.  
  70. csim=IntVar()
  71. chksim=Checkbutton(ventana,text="Símbolos",variable=csim,onvalue=1,offvalue=0).place(x=10,y=80)
  72.  
  73. largo=Label(ventana,text="¿Largo de la contraseña?: ").place(x=10,y=100)
  74. cantidad=Label(ventana,text="¿Cantidad de contraseñas?: ").place(x=10,y=120)
  75. arg_largo= IntVar()
  76. inicio=Entry(ventana,textvariable= arg_largo, width=2).place(x=160,y=100)
  77. arg_cantidad=IntVar()
  78. cuantas=Entry(ventana,textvariable=arg_cantidad,width=2).place(x=160,y=120)
  79.  
  80. quien=Label(ventana,text="Realizado por tincopasan").place(x=10,y=170)
  81. boton_generar=Button(ventana,text="Generar pass",command=generar_pass).place(x=130,y=140)
  82. boton_salir=Button(ventana,text="Salir",command=ventana.quit).place(x=10,y=140)
  83. arg_cantidad.set(1)
  84. arg_largo.set(1)
  85. ventana.resizable(0,0)
  86.  
  87. ventana.mainloop()
  88.  
18  Programación / Ingeniería Inversa / sobre foxpro en: 27 Septiembre 2015, 06:45 am
Normalmente no contesto (menos de buena forma) a los post que piden algo y no tienen idea del tema. En este caso es sobre un programa hecho en foxpro, del que no recuerdo pidan datos(sobre fox), así que antes de salir lo miré un ratito y aclaro un par de puntos, que no lo hice en el mismo post por estar bloqueado(lo cual me parece perfecto), pero como quice contestar lo hago aparte.
1)el programa se llama escuelasimple (me parece malisimo y cualquiera que conozca lo mínimo de programación podría hacer algo mejor)
2)el autor del post del cual hablo declara no tiene experiencia (¿le pasamos conocimientos por dvd como en matrix?)
3) para trabajar con foxpro existen varios decompiladores, normalmente uso refox
4) en este caso si lo vemos es fácil porque solo usa algunas sentencias dow(date), store,Ltrim y stuff, o sea que buscando sobre ellas enla red se puede hacer un keygen en cualquier lenguaje, ya que tienen equivalentes.
5)basicamente toma la fecha (día, mes,año), tiene unas constantes VFR ó VFRP compara de acuerdo al dia y le agrega los datos de fecha, después reemplaza algunos caracteres con E ó S y listo.
19  Foros Generales / Sugerencias y dudas sobre el Foro / post titulo ayuda en: 21 Septiembre 2015, 05:50 am
una vez quice poner una palabra que fue reemplazada por asteriscos, no me acuerdo la explicación  que me dieron, pero es que el propio sistema no lo deja hacer, ahora bien, cada vez más hay post con el título "ayuda", ni hablar del que dice "ayuda urgente!!!!", sin descripción ni rama, ¿no sería posible eliminarlos directamente? y enviarle al usuario un mensaje con el porque. Lo mismo de los que piden tareas sin mostrar un mínimo avance.
20  Foros Generales / Sugerencias y dudas sobre el Foro / Sobre el post de Malware detector beta en: 29 Junio 2015, 05:05 am
lei el post en el que RDG sube una aplicación para detectar malware y se le acusa de cosas que no sé ni me importa si son reales o no, es entre él y los moredadores, pero.. supongo que las reglas de públicación del code está, aunque no he visto ni un code de nada. citando a x64core "¿es en serio?" y bla bla bla mejores. supongo que cada uno es libre de considerar que cada soft y su publicación es en serio y sobre lo que es mejor siempre depende de cada uno y no por eso está bueno menospreciar cualquier otra aplicación. "Se arriesga a que le haga..." está es la sección de análisis y diseño de malware, supongo que quien entra debería tener conocimientos mínimos sobre el tema, como para poder probar soft en entornos controlados, por lo tanto cada cual sabe a lo que se arriesga con cualquier soft(las grandes empresas usan spyware y no hablo de malware porque desconozco todo el soft que circula), de última si no tienen idea no lo bajen y listo!.
La censura de algo que no es una agresión directa,(bah todas las censuras) me parece muy tiránico, pero eso es lo bueno que da el poder, cada cual cree y hace lo que quiere.
Además me parece indignante no poder contestar en el mismo post.
Si van a censurar, haganlo con los que piden solución a problemas que no tienen la menor idea y cuando reciben la respuesta no aparecen ni para agradecer. ahhhh menos mal que no soy moderador, por que no los censuraría, los elimino del sitio.  

Mod: Tema movido, este post no es sobre malware, sino sobre el foro
Páginas: 1 [2] 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines