Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: s_azazel en 7 Junio 2014, 15:07 pm



Título: Orientacion sobre bots
Publicado por: s_azazel en 7 Junio 2014, 15:07 pm
Buenos dias!!! he hecho varios bots para aplicaciones a base de identificar imagenes en la pantalla y clcks y me gustaria aprender a profundizar un poco mas

Hay alguna forma de saber que orden se le envia a la aplicacion al hacer click en algun sitio de la aplicacion y enviar ese mensaje directamente o algo asi???

Agradeceria si me podeis orientar algo mas sobre esto o pasarme algun sitio con informacion de interes

Gracias!!!


Título: Re: Orientacion sobre bots
Publicado por: kub0x en 7 Junio 2014, 17:27 pm
Buenas s_azazel,

¿Exactamente que quieres? ¿Capturar la instrucción que ejecuta un programa cuando el usario hace click en el mismo? Explicanos que es lo que deseas.

Un saludo!


Título: Re: Orientacion sobre bots
Publicado por: s_azazel en 7 Junio 2014, 18:12 pm
si, es exactamente eso.¿ es posible??? y luego hacer ejecutar esa instruccion mediante codigo????


Título: Re: Orientacion sobre bots
Publicado por: engel lex en 7 Junio 2014, 18:36 pm
Si, se puede hacer un hook o injeccion de dll, ahi las instrucciones van directo al codigo, no hablamos de "hacer click" sino dar instruccion de "caminar a"


Título: Re: Orientacion sobre bots
Publicado por: s_azazel en 7 Junio 2014, 19:26 pm
la verdad es que parece mas complicado porque es un juego corriendo bajo bluestaks (emulador de android) y supongo que estara programada en java


La cosa es tb es saber cuales son las instrucciones que entiende el juego como la de "caminar a" no?


Título: Re: Orientacion sobre bots
Publicado por: kub0x en 7 Junio 2014, 20:00 pm
Básicamente si quieres inyectar código en un proceso ajeno tendrías que cargar una DLL mediante SetWindowHookEx o CreateRemoteThread.

Posteriormente tendrías que implementar API Hooking para redireccionar las llamadas de X función hacia tu subrutina, para luego devolver la llamada a la función original.

Un ejemplo:

Sin API Hooking: Usuario pulsa tecla 'W' -> se llama a la funcion original -> el personaje se mueve hacia delante.
Con API Hooking: Usuario pulsa tecla 'W' -> se llama a tu función -> se llama a la funcion original -> el personaje se mueve hacia delante.

Ojo, no siempre querras llamar a la función original, eso depende del escenario por el que te estés moviendo.

Todo lo que he trabajado en este campo ha sido en Windows bajo C++. Es imposible que cargues una DLL administrada (.NET) en un proceso nativo, para ello el proceso nativo tendria que correr el entorno de ejecución de .NET (CLR).

Saludos!


Título: Re: Orientacion sobre bots
Publicado por: s_azazel en 7 Junio 2014, 20:32 pm
y alguna forma de saber la instruccion que se ejecuta al hacer click en algun sitio???


Título: Re: Orientacion sobre bots
Publicado por: kub0x en 7 Junio 2014, 20:55 pm
Si el juego no es online imagino que no hara uso de socket por lo que todo se reparte en memoria.

Yo lo que haría sería calcular la dirección de memoria de la función para después ejecutar un hilo remoto en el proceso del juego que mueva el personaje.

El problema es el calculo de la dirección de memoria, toca depurar. No me muevo por Android así que no sé como será ahí :P

Saludos!


Título: Re: Orientacion sobre bots
Publicado por: s_azazel en 7 Junio 2014, 23:21 pm
el juego si que es online :D voy a ver si consigo ver el server y los paquetes que envia :D

algun consejo???


Título: Re: Orientacion sobre bots
Publicado por: samuelhm en 7 Junio 2014, 23:24 pm
yo tengo hecho un bot a base de recoger capturas de pantallas y diferenciar pixels e imagenes, es mas facil que todo eso de injectar dll's y tal.


Título: Re: Orientacion sobre bots
Publicado por: NikNitro! en 8 Junio 2014, 00:27 am
Otra opción es ir leyendo las direcciones de memoria. Ahora mismo estoy yo embarcado en crear una ia para otro juego online de esa manera :p.

La pega... Cada vez que se actualiza puede que tengas que buscar de nuevo las direcciones de memoria :s

Salud;)


Título: Re: Orientacion sobre bots
Publicado por: kub0x en 8 Junio 2014, 00:33 am
Otra opción es ir leyendo las direcciones de memoria. Ahora mismo estoy yo embarcado en crear una ia para otro juego online de esa manera :p.

La pega... Cada vez que se actualiza puede que tengas que buscar de nuevo las direcciones de memoria :s

Salud;)

Buen método, así hice mis primeros bots en Tibia. Leer o escribir en memoria es lo mejor para repsentar datos del juego en tiempo real, o modificar valores de éste (apariencia, diseño, mapa) pero no haces nada así si es online. Cada vez que cambiaban la versión tenías que actualizar las addresses eso era lo peor joder xD

Pero s_azazel lo que quiere es llamar a X función de un juego repetidas veces. Si es un juego online pues meterle una buena esnifada y buscar paquetes que guarden relación con lo que busca, o bien, depurar.

Saludos!


Título: Re: Orientacion sobre bots
Publicado por: s_azazel en 8 Junio 2014, 13:25 pm
me recomendais algun sniffer bueno y sencillo??? XDDD

tambien me interesaria ver los paquetes que recibo

a ver si puedo automatizar todo :D


Título: Re: Orientacion sobre bots
Publicado por: kub0x en 8 Junio 2014, 19:49 pm
Buenas s_azazel,

para sniffar juegos recomiedo WPE Pro, pues puedes examinar que paquetes están siendo enviados en todo momento. No sólo eso, además puedes modificar los paquetes y reproducirlos enviándolos al servidor. Luego ya tienes los filtros que sirven para crear rutinas de envio de paquetes etc Lo utilicé un tiempo para juegos como WoW o Tibia con buenos resultados.

Aquí te dejo un tutorial de un maestro del lado oscuro (XDD) -> http://foro.elhacker.net/ingenieria_inversa/tutorial_wpe_pro_captura_modifica_y_envia_paquetes_tcp_cheats_juegos-t405121.0.html

Saludos!!


Título: Re: Orientacion sobre bots
Publicado por: s_azazel en 10 Junio 2014, 11:42 am
Ufff me salen los paquetes cifrados y si intento reenviarlos no recivo respuesta del server

La verdad es curioso que un juego tan tonto este tan protegido jajaja el wow no tenia los paquetes flitrados????

El juego es el hay day no se si lo conoceis para android (es un pike pesonal con mi chica) jaja

Algun consejo para intentar descifrar los paquetes o lo dejariais por imposible???


Título: Re: Orientacion sobre bots
Publicado por: kub0x en 10 Junio 2014, 15:43 pm
Me acuerdo que en Tibia iban cifrados pero gracias al gran colectivo de mentes pensantes consiguieron tres cosas:

1ª. Debuggear el ejecutable del juego y ver como se construían los paquetes.
2ª. Extraer la clave pública utilizada en el cifrado de los paquetes.
3ª Enviar el paquete cifrado de vuelta al servidor.

En tu juego los paquetes van cifrados. Si aplicaron criptografia asimétrica entonces usan una clave pública. Si la consigues entonces podras cifrar paquetes y enviarlos de vuelta al server, pero te faltaría el proceso de construcción de paquetes.

Si el juego está en Java podrías tirarle una buena decompilación o buscar por foros dedicados al cracking de juegos, a ver si tienes suerte. En Tibia hay mucha gente que se dedica a investigar y gracias a ellos pude armar un bot muy completo a nivel de memoria.

Saludos y espero ganes la apuesta con tu chica! :D


Título: Re: Orientacion sobre bots
Publicado por: s_azazel en 13 Junio 2014, 08:36 am
Llevo varios dias comiendome la cabeza para ver como puedo descompilar el .apk de la aplicacion
tanto apktools como apkmanager me tirar error y solo decompilan parte

Sabeis porque puede ser???

Os dejo el .apk de la aplicacion por si os animais a echarme una mano

Gracias!!!!

https://www.dropbox.com/s/kzin7tb7ycv2bzb/com.supercell.hayday.apk


Título: Re: Orientacion sobre bots
Publicado por: NikNitro! en 13 Junio 2014, 11:55 am
http://androidzone.org/2012/10/decompila-apks-y-obten-el-codigo-fuente-con-apk-to-java/
Creo que eso puede funcionar. De todos modos... ¿No se puede importar el apk a un proyecto en java y/o android?

Salud ;)


Título: Re: Orientacion sobre bots
Publicado por: s_azazel en 13 Junio 2014, 14:57 pm
Muchas gracias!!! asi si :D:D ahora tendre que mirar un poco de que va esto del java jaja se me escapa un poco de todas formas no parece mucho mas complicado que .net

Estoy en el curro y le he podido echar un ojo muy rapido solo pero qu encontrado algo que parece muy interesante :D:D:D

Citar
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)

package com.mobileapptracker;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class Encryption
{

    public Encryption(String s, String s1)
    {
        a = new IvParameterSpec(s1.getBytes());
        b = new SecretKeySpec(s.getBytes(), "AES");
        c = Cipher.getInstance("AES/CBC/NoPadding");
_L1:
        return;
        NoSuchAlgorithmException nosuchalgorithmexception;
        nosuchalgorithmexception;
        nosuchalgorithmexception.printStackTrace();
          goto _L1
        NoSuchPaddingException nosuchpaddingexception;
        nosuchpaddingexception;
        nosuchpaddingexception.printStackTrace();
          goto _L1
    }

    private static String a(String s)
    {
        int i = 16 - s.length() % 16;
        for(int j = 0; j < i; j++)
            s = (new StringBuilder()).append(s).append(' ').toString();

        return s;
    }

    public static String bytesToHex(byte abyte0[])
    {
        String s;
        if(abyte0 == null)
        {
            s = null;
        } else
        {
            int i = abyte0.length;
            s = "";
            int j = 0;
            while(j < i)
            {
                if((0xff & abyte0[j]) < 16)
                    s = (new StringBuilder()).append(s).append("0").append(Integer.toHexString(0xff & abyte0[j])).toString();
                else
                    s = (new StringBuilder()).append(s).append(Integer.toHexString(0xff & abyte0[j])).toString();
                j++;
            }
        }
        return s;
    }

    public static byte[] hexToBytes(String s)
    {
        byte abyte0[];
        abyte0 = null;
        break MISSING_BLOCK_LABEL_2;
        if(s != null && s.length() >= 2)
        {
            int i = s.length() / 2;
            abyte0 = new byte;
            int j = 0;
            while(j < i)
            {
                abyte0[j] = (byte)Integer.parseInt(s.substring(j * 2, 2 + j * 2), 16);
                j++;
            }
        }
        return abyte0;
    }

    public static String md5(String s)
    {
        if(s != null) goto _L2; else goto _L1
_L1:
        String s1 = "";
_L4:
        return s1;
_L2:
        String s2;
        MessageDigest messagedigest = MessageDigest.getInstance("MD5");
        messagedigest.update(s.getBytes());
        s2 = bytesToHex(messagedigest.digest());
        s1 = s2;
        continue; /* Loop/switch isn't completed */
        NoSuchAlgorithmException nosuchalgorithmexception;
        nosuchalgorithmexception;
        nosuchalgorithmexception.printStackTrace();
        s1 = "";
        if(true) goto _L4; else goto _L3
_L3:
    }

    public static String sha1(String s)
    {
        if(s != null) goto _L2; else goto _L1
_L1:
        String s1 = "";
_L4:
        return s1;
_L2:
        String s2;
        MessageDigest messagedigest = MessageDigest.getInstance("SHA-1");
        messagedigest.update(s.getBytes());
        s2 = bytesToHex(messagedigest.digest());
        s1 = s2;
        continue; /* Loop/switch isn't completed */
        NoSuchAlgorithmException nosuchalgorithmexception;
        nosuchalgorithmexception;
        nosuchalgorithmexception.printStackTrace();
        s1 = "";
        if(true) goto _L4; else goto _L3
_L3:
    }

    public static String sha256(String s)
    {
        if(s != null) goto _L2; else goto _L1
_L1:
        String s1 = "";
_L4:
        return s1;
_L2:
        String s2;
        MessageDigest messagedigest = MessageDigest.getInstance("SHA-256");
        messagedigest.update(s.getBytes());
        s2 = bytesToHex(messagedigest.digest());
        s1 = s2;
        continue; /* Loop/switch isn't completed */
        NoSuchAlgorithmException nosuchalgorithmexception;
        nosuchalgorithmexception;
        nosuchalgorithmexception.printStackTrace();
        s1 = "";
        if(true) goto _L4; else goto _L3
_L3:
    }

    public byte[] decrypt(String s)
    {
        if(s == null || s.length() == 0)
            throw new Exception("Empty string");
        byte abyte0[];
        try
        {
            c.init(2, b, a);
            abyte0 = c.doFinal(hexToBytes(s));
        }
        catch(Exception exception)
        {
            throw new Exception((new StringBuilder("[decrypt] ")).append(exception.getMessage()).toString());
        }
        return abyte0;
    }

    public byte[] encrypt(String s)
    {
        if(s == null || s.length() == 0)
            throw new Exception("Empty string");
        byte abyte0[];
        try
        {
            c.init(1, b, a);
            abyte0 = c.doFinal(a(s).getBytes());
        }
        catch(Exception exception)
        {
            throw new Exception((new StringBuilder("[encrypt] ")).append(exception.getMessage()).toString());
        }
        return abyte0;
    }

    private IvParameterSpec a;
    private SecretKeySpec b;
    private Cipher c;
}


:D:D:D


Título: Re: Re: Orientacion sobre bots
Publicado por: kub0x en 15 Junio 2014, 16:41 pm
¿Y no podrias modificar el fuente a tu antojo para implementar cierto seguimiento de pila para ver el orden de llamadas? Tambien se me ocurre implementar un sistema de logs que haga dump de la data antes de cifrar.

La pega es que deberías de recompilar el apk con las nuevas modificaciones.

Saludos!


Título: Re: Orientacion sobre bots
Publicado por: s_azazel en 18 Junio 2014, 08:47 am
Llevo variso dias mirando el source y la verdad me estoy volviendo loco
Buscando ni si quiera encuentro una direccion ip

No encuentro donde hace las conexiones el programa :(