Orientacion sobre bots

Iniciado por s_azazel, 7 Junio 2014, 15:07 PM

0 Miembros y 2 Visitantes están viendo este tema.

NikNitro!

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;)

kub0x

Cita de: 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;)

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!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


s_azazel

me recomendais algun sniffer bueno y sencillo??? XDDD

tambien me interesaria ver los paquetes que recibo

a ver si puedo automatizar todo :D

kub0x

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!!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


s_azazel

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???

kub0x

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
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


s_azazel

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


s_azazel

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

kub0x

¿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!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate