// Nivel 3 // PUNTERO (ESTRUCTURA) -> DIRECCION (ADDRESS) + OFFSET -> VIDA if (estructura != 0) { *(DWORD*)(estructura + 4) = 10; } }
if (mana) { // Nivel 1 *(DWORD*)(entryPoint + 0x545C) = 100;
// Nivel 2 // PUNTERO -> DIRECCION (ADDRESS) -> MANA DWORD direccion = *(DWORD*)(entryPoint + 0x5450); if (direccion != 0) { *(DWORD*)(direccion) = 100; }
// Nivel 3 // PUNTERO (ESTRUCTURA) -> DIRECCION (ADDRESS) + OFFSET -> VIDA if (estructura != 0) { *(DWORD*)(estructura + 8) = 100; } }
Sleep(200); // 200 milisegundos // Sleep(1); } }
void Teclado() { while (!salir) { // 'a' => vida = activar/desactivar (true/false) if (GetAsyncKeyState(VkKeyScan('a')) & 1) { vida = !vida; // ! "NO"/"LO CONTRARIO" /* vida es true vida = "NO" true => vida = false vida = "NO" false => vida = true */ }
Usando Visual C# 2013, creando otro proyecto a parte con Windows Form, coloco la dll llamada HackDLL.dll en el directorio del proyecto del C#.
Creao en C# una clase que se llama Super_DLL.cs. Dentro de ella tiene este código que en realidad no es nada.
Código:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
using System.Runtime.InteropServices; // No olvidar. Para Dllimport.
namespace Prueba_DLL { class Super_DLL { [DllImport("HackDLL.dll")]
} }
El formulario principal solo he colocado un using.
Código:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
using Prueba_DLL; // No olvidar este using. Para llamar a la clase Super_DLL.cs.
namespace Prueba_DLL { public partial class Form1 : Form { public Form1() { InitializeComponent(); } } }
En Windows Form de C# solo tiene tres label para mostrar dichas variables. Los label para no condundir se llama su nombre interno.
label_vida
label_balas
label_mana
No se si es posible hacerlo con el código mostrado. Lo que hace simplente ejecutar un juego básico hecho con C++ 2013 (no tengo código fuente y puede ser el ejecutable de cualquier juego).
Se crea una dll a parte con otro proyecto del código de arriba.
Luego creo otro proyecto con Windows Form bajo C# como dije antes arriba. Solo tiene que leer las variables del juego cuando está en ejecución. La dll hace el trabajo principal leyendo y C# solo muestra información optenida gracias a la dll.
Quiero hacer un menú con Visual C/C++ 2013, la aplicación en en consola a Win32, nada de FrameWork .net y CLR.
Hice uno muy básico, estoy siguiendo tutriales por todas partes, por ahora parece que funciona pero las tildes como la ó al compilar el programa sale caracteres raros.
Por ahora solo he hecho esto sin las funciones.
Código
#include<iostream>
using namespace std;
void Imprimir_menu(){
cout <<"\n\nOpciones: ";
cout <<"\n(1) Ver variables.";
cout <<"\n(2) Variable tiempo.";
cout <<"\n(3) Sumar o restar variables.";
cout <<"\n(4) Opción pendiente 4.";
cout <<"\n(5) Opción pendiente 5.";
cout <<"\n(6) Salir del programa. \n";
cout <<"\nOpción: ";
}
void Ver_varibales(){
//Defines lo que debe hacer
}
void Variable_tiempo(){
//Defines lo que debe hacer
}
void Sumar_o_restar_variables(){
//Defines lo que debe hacer
}
void Opcion_pendiente_4(){
//Defines lo que debe hacer
}
void Opcion_pendiente_5(){
//Defines lo que debe hacer
}
int main(){
bool bContinuar =true;
int opcion =0;
while(bContinuar){
cout <<"\n\nSeleccione una opción del siguiente menu: ";
Imprimir_menu();
cin >> opcion;
switch(opcion){
case1:
Ver_varibales();
break;
case2:
Variable_tiempo();
break;
case3:
Sumar_o_restar_variables();
break;
case4:
Opcion_pendiente_4();
break;
case5:
Opcion_pendiente_5();
break;
case6:
bContinuar =false;
cout <<"\nEjecución terminada....";
break;
defualt:
cout <<"\nPor favor selecciona una opción del 1 al 6";
break;
}
}
}
A lo mejor el código base lo pueden mejorar si les apetece antes de seguir con las variables. Que es solamente hacer otro submenú que pregutne que haré con dichas variables, solamente si pulsas Q, incremente un punto en una variable, si pulsas W, disminuye un punto.
La variable de entrada vale 10 como int. luego se cambia cuando selecciones aumentar o disminuir como dije antes. Esa es la primera opción. La obsión 2 o el segundo menú, hay un temporizador que cuenta de 100 segundos a 0. Cuando llegue a 0 sale a otro submenú que diga "Se acabó el tiempo." El tiempo lo puedes detener pulsando P y continuar pulsado L.
Son detalles que todavía con este lenguaje no se hacer. Por eso quiero una ayudita.
Según vea las ayudas, seguiré haciendo por mi cuenta las otras opciones.
Un saludo.
Edito: Aquí hay algo más o menos que se entiende para hacer menús.
Usando un PIC16F877A a XT de 4 MHz con el PIC simulator IDE.
Pin RA0 como salida para encender un Led. Pin RB0 como entrada de un pulsador, no interruptor.
Lo que quiero hacer es lo siguiente, no tengo idea de estelenguaje pero quiero verlo como curiosidad de una vista rápida.
Al pulsar el pulsador, el Led se queda encendido durante 1 minuto, luego se apaga. Solo quiero hacer eso. ¿Cómo es el código?
Intenté hacer esta chapuza pero no va.
Código:
AllDigital TRISA = %00000000 TRISD = %00000001
inicio: If PORTB.0 = 1 Then '¿Pulsador en 1? (Sin pulsar). Goto motor 'Se cumple esta condición al motor. Else 'En caso contrario. PORTB.0 = 0 'Motor apagado. Endif Goto inicio 'Vuelve a escanear el pulsador.
motor: PORTD.0 = 1 'Activa el motor. WaitMs 250 '15 es un segundos. PORTD.0 = 0 'Se apaga elmotor. Goto inicio 'Vuelve a escanear o leer el pulsador. End
Un cordial saludo.
Edito:
Para hacerlo más complejo. Por el pin RB0 = Entrada digital, pulsador. RB1 = Igual. RB2 = Igual. RB3 = Detiene el tiempo. Stop.
RD0 = Motor encendido que puede ser de 5, 10 o 20 minutos. RD1 = Led encendido durante 5 minutos con el motor RD0. Los demás Led apgados. RD2 = Lo mismo pero a 10 minutos. RD3 = Lo mimso pero en 20 minutos.
El esquema es parecido a este pero con el PIC16F877A. Como es un lenguaje que no conozco, me cuesta muchísimo coger el hilo.
En el visual C++ 2010 Express incluye el Windows Form de entrada, a partir del 2012 creí que lo han quitado, más de un usurario del foro piensa lo mismo y hablamos del tema de que íbamos a comprobar que realmente lo incluye o lo han quitado. Lo que no recuerdos sus nick del foro.
Se trata de usar Visual C++ Express 2013 y trabajar con el Windows Form de toda la vida, se incluye un button y que al pulsarlo diga "Hola Mundo".
Por ahora no hago bien el trabajo, les pondo el proceso de lo que he hecho para que me guíen los que sepan.
1) Hago click arriba en ARcHIVO->Archivo nuevo. Como nombre lo dejjo como está por defecto. Pulsa Aceptar. 2) Pulsar Siguiente. 3) Pulsa Proyecto vacío, que esté marcado y luego Finalizar. 4) Paso 4 leer en la imagen de abajo. 5) Por fin encontré que el Windows Form si se incluye en el Visual C++ 2013. 6) No queda otra que pulsar Sí, si quiere usarlo. 7) Por fin se ve en el Visual C++ 2013 la ventana perfecta para tarbajar con los componentes button y demás como en C# y VB .net. 8) Aquí mi duda. En el explorador de solucioines puedo agregar un Windows Form donde lo acabo de añadir "Archivos de códigos fuentes" y también se puede añadir en "Archivos de encabezado". Añade un label en el centro del formulario como indica abajo y luego, pulsa F7 que significa Compilar solución. 9) Mirando el código fuente del formulario, da errores como que no encuentran los using. En Visual C++ 2010 no es tan majadero crear un formulario Windows y no da problemas de este tipo. Tampoco deja depurar con F5. A partir de aquí no se que hacer, a lo mejor no he hecho el procedimiento adecuado para crear formularios como proyecto principal. Al menos se que existe una forma de crear formularios Windows en Visual C++ Express 2013 y menos mal, no quiero siempre trabajar en modo consola.
Quiero hacer una prueba sencilla para lograr un objetivo. Intentar leer en la memoria RAM unos valores de las variables que no conoces, localizar esa variable, crear tu aplicación aunque sea en C# capaz de leer sus valores. Hay que crear dos proyectos. Uno como hice abajo, lo que hace es con un timer incrementar el valor del componente progressBar y mostrar su valor en label1.
Como muestra en la imagen de abajo, se ha incluido en el Form1, un lable, un button, un timer y progressBar.
int Valor = progressBar1.Value;// Guarda el valor actual.
progressBar1.Increment(1);// Incrementa a 1.
label1.Text= Valor.ToString();// Muestra el valor del incremento del ProgressBar.
// Si el valor llega a 100.
if(Valor ==100)
{
progressBar1.Value=0;// Empieza desde 0.
}
}
}
}
Este programa se recomienda ejecutarlo directamente del .exe compilado, no usando Visual Express 2013. Supuestamente no tengo idea del código fuente del .exe de arriba, tener claro que no lo conoces, se los dejo para dar ideas. Ahora hay que crear otro proyecto desde cero, puedes usar C++ que es más rápido a la hora de intercambiar información, para dejarlo más fácil ya que estamos aprendiendo, usaremos C#, y los que quieran VB .net.
Para leer los valores del archivo.exe, hay que verlo desde un descompilador o algún programa que lea en tiempo real el proceso. Aquí hay uno, es muy utilizado para cambiar vidas infinitas a los juegos de PC. Se logra buscar esa variable, se le suma nuevos valores y tiene más vida, en nuestro caso no trataremos este tema, se tratará de localizar dicha variable y ver como cambian sus estados. Luego crear un progrma a parte que lea dichas variables y mostrarla en un label.
Puedes usar otro programa y también recomendarlo si parece interesante.
La idea principal es, ser capaz de localizar esas variables, hacer una aplicación que los lea y muestre en un form1 con C# o otro lenguaje que más te guste.
El ejemplo que puse arriba quiero sacar los valores que muestra en label1, que es el mismo del progressBar1.
En un juego de Rally, quiero sacar el cuentakilómetros indicado en pantalla a mi propia aplicación, pero esto es otra historia mucha más adelante. Por ahora me conformo en entender lo más básico.
Tanto el MPLAB v8.89 y el más moderno MPLAB X v1.60 pesco.
En MPLAB puedo ver los nombres de las variables y los datos que contiene. En cuanto a MPLAB X, puedo ver los datos de las variables pero no sus nombres.
He comprobado que en el MPLAB v8.89 si compilo bajo Absolute, se me ven los nombres de las variables. Si lo compilo bajo Relocatable, no se ven los nombres de las variables.
Sospecho que el MPLAB X 1.60 pasará algo similar. Creo que lo guardé en auto, no se cual de los dos tiene realmente para descartar este tipo de cosas.
La pregunta es. ¿Cómo voy en las opciones para cambiarlo a Absolute del MPLAB X?
En el MPLAB normal se hace así. En la barra de herramientas arriba:
Espero que en el nuevo MPLAB no hayan quitado de leer los nombres de las variables, entonces para depurar sería un misterio, es más, vuelvo mientras puedas solo al MPLAB v8.xx.
He probado códigos para sber si muestra mensajes pero no me dice ni el "Hola". Códigos que he probado y ninguno me da respuesta. Quiero saber si es el código o la LCD está rota.