Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - xavieeee

#1
Buenas,

Estoy intentando crear una aplicación para editar imágenes con Python.

Esto es lo que quiero hacer:
1.- Crear una imagen con  un screenshot #ok
2.- Convertir la imagen a blanco y negro #ok
3.- Borrar las filas que sean enteras  negras #ok
4.- Borrar las columnas que sean enteras negras

No entiendo la lógica del punto 3, y no soy capaz de editar  la función que borra las filas para que borre las columnas.

Espero que podáis ayudarme

Un saludo,


Código (python) [Seleccionar]
import pyscreenshot as ImageGrab
from itertools import izip
from PIL import Image
import time

#Screenshot y guarda como .png

im1=ImageGrab.grab(bbox=(495,198,511,209))
im1.save("imagen.png","png")

#Convertir imagen a blanco y negro
col = Image.open("imagen.png")
gray = col.convert('L')
bw = gray.point(lambda x: 0 if x<128 else 255, '1')
bw.save("imagenbw.png")

#Borrar las filas que sean completamente negras
def find_rows_with_color(pixels, width, height, color):
   rows_found=[]
   for y in xrange(height):
       for x in xrange(width):
           if pixels[x, y] != color:
               break
       else:
           rows_found.append(y)
   return rows_found

rold_im = Image.open("imagenbw.png")
if old_im.mode != 'RGB':
   old_im = old_im.convert('RGB')
pixels = old_im.load()
width, height = old_im.size[0], old_im.size[1]
rows_to_remove = find_rows_with_color(pixels, width, height, (0, 0, 0)) #Remove black rows
new_im = Image.new('RGB', (width, height - len(rows_to_remove)))
pixels_new = new_im.load()
rows_removed = 0
for y in xrange(old_im.size[1]):
   if y not in rows_to_remove:
       for x in xrange(new_im.size[0]):
           pixels_new[x, y - rows_removed] = pixels[x, y]
   else:
       rows_removed += 1
new_im.save("imagennew.png")
#2
Buenas,

Primero de todo agradecer a Mad Antrax su ayuda el la elaboración de los siguientes códigos.

Estoy intentando inyectar código mediante Cheat Engine en el casino SuperStackPoker.

El objetivo es convertir el stack de los jugadores y las apuestas que realizan en función de la ciega grande de la mesa en la que se encuentren. Lo explicare de otro modo por si no jugáis a Poker.

Si un jugador esta sentado con 200 € en una mesa y el nivel de la mesa es 25NL, la ciega grande o apuesta mínima sera de 0,25 €. Por lo que este jugador esta sentado con 800 ciegas grandes o apuestas mínimas (200/0,25)
En cambio si el jugador tiene los mismos 200 €, pero esta en una mesa de nivel 200NL solo tendrá 100 apuestas mínimas. (200/2)

He conseguido realizar parte del código:

EL siguiente script multiplica el stack de todos los jugadores de la mesa por el valor de la apuesta mínima de la mesa.
Este scrip es solo para cuando un jugador iguala una apuesta, tengo otros dos para cuando suben o se retiran. Son las tres instrucciones que escriben el valor del stack.

[ENABLE]

aobscanmodule(INJECT,ClientRuntime.dll,00 CC CC 55 8B EC 8B 55 08 8B 02 89 81 E0 00 00 00) // should be unique
alloc(newmem,$1000)
alloc(var1,4)

label(code)
label(return)

var1:
dd #1

newmem:

code:

 mov [ecx+000000E0],eax
 push ebx
   mov ebx,[ecx+000000E0]
   imul ebx,[var1]
   mov [ecx+000000E0],ebx
 pop ebx
 jmp return

INJECT+0B:
 jmp code
 nop
return:
registersymbol(INJECT)
registersymbol(var1)
[DISABLE]

INJECT+0B:
 db 89 81 E0 00 00 00

unregistersymbol(INJECT)
dealloc(newmem)
unregistersymbol(var1)
dealloc(var1)


Con el siguiente scrip cargo el valor en var1

[ENABLE]

aobscanmodule(LeerApuestaMinima,ClientRuntime.dll,89 57 28 8B 4E 5C) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
 mov [edi+28],edx
 mov [var1],edx
 mov ecx,[esi+5C]
 jmp return

LeerApuestaMinima:
 jmp code
 nop
return:
registersymbol(LeerApuestaMinima)

[DISABLE]

LeerApuestaMinima:
 db 89 57 28 8B 4E 5C

unregistersymbol(LeerApuestaMinima)
dealloc(newmem)


Funciona bien con algunos matices.
He utilizado el comando imul, pero en realidad lo que necesito es dividir. No he sido capaz de utilizar los comandos div y idiv.
El segundo problema es que como la instrucción que carga el valor de apuesta mínima es diferente de las de igualar, subir o retirarse pues cuando hay mas de una mesa abierta de distintos niveles pues el valor de var1 va cambiando constantemente y la multiplicación no se realiza por el valor que le corresponde a cada mesa.

He intentado juntar los dos scripts para que antes de realizar la operación lea el valor de la apuesta mínima, pero no he sido capaz.


Espero que podáis ayudarme.

Un saludo,
#3
Buenas,

Estoy tratando de modificar la interfaz de usuario de un soft de escritorio con Cheat Engine.
Necesito dividir el valor de una variable por el valor de otra variable y no consigo realizarlo.

En el siguiente script divido el valor de la variable1 por 4

[ENABLE]

aobscanmodule(script1,ClientRuntime.dll,0C 8B 02 89 81 E0 00 00 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
alloc(variable,4)

variable:
         dd #6

newmem:

code:
  mov [ecx+000000E0],eax
  shr [ecx+000000E0],2
  //push eax
  //     mov eax,[variable]
  //     shl [ecx+000000E0],ebx
  //pop eax
  jmp return

script1+03:
  jmp code
  nop
return:
registersymbol(script1)
registersymbol(variable)
[DISABLE]

script1+03:
  db 89 81 E0 00 00 00

unregistersymbol(script1)
dealloc(newmem)
dealloc(variable)


El valor de la segunda variable la tengo que extraer de la siguiente instrucción
ClientRuntime.dll+4DBF0E


Espero que me podáis echar una mano.


Un saludo,