Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

Autor Topic: Agregar Camara 3D a un MAIN + Dll  (Visto 836 veces)

0 Miembros and 1 Guest are viewing this topic.

Offline virgen on: March 07, 2017, 11:51:32 AM

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 55
  • Gracias recibida: 1322
  • ar
Hola encontre este tutorial y lo comparto.

- OllyDBG

Ahora, vamos a empezar! Abierto main.exe través ollydbg. Usted debe ver un poco como esto:

1. Vamos a trabajar sólo con el desalojo o DUMP

2. Haga clic derecho sobre cualquier byte y seleccione "Float" -> "float de 32 bits."

3. Para realizar una cámara completa 3D que va a necesitar estos valores
 (nombre / valor por defecto / comentario):
Camera_Zoom = 35 - zooming in/out
Camera_Zoom = 35 - zoom in / out
Camera_Zoom = 35 - zoom in / out
Camera_Zoom = 35 - zoom in / out
Camera_RotY = -48.5 - rotate up/down
Camera_RotY = -48,5 - gire hacia arriba / abajo
Camera_RotY = -48,5 - rodar para cima / baixo
Camera_RotY = -48,5 - gire hacia arriba / abajo
Camera_RotZ = -45 - rotate left/right
Camera_RotZ = -45 - girar a la izquierda / derecha
Camera_RotZ = -45 - roda esquerda / direita
Camera_RotZ = -45 - rueda izquierda / derecha
Camera_PosZ = 150 - additional value for corrent Y rotating
Camera_PosZ = 150 - un valor adicional para la rotación de corrent Y
Camera_PosZ = 150 - valor añadido para los rotativos Y corrent

Camera_PosZ = 150 - valor adicional para CORRENT Y rotativa
Camera_PosZ = 150 - valor añadido para los rotativos Y corrent
Camera_ClipX = 1190 - area filled with textures, x value
Camera_ClipX = 1190 - zona llena de texturas, el valor x
Camera_ClipX = 1190 - área cheia com texturas, x valor
Camera_ClipX = 1190 - una zona llena de texturas, el valor x
Camera_ClipY = 2400 - area filled with textures, y value
Camera_ClipY = 2400 - zona llena de texturas, valor y
Camera_ClipY = 2400 - área cheia com texturas, y valor
Camera_ClipY = 2400 - una zona llena de texturas, valor

4. Haga clic de nuevo en cualquier valor en Dump y seleccione "Búsqueda" -> "Float"

5. Ahora, en la ventana abierta, ponga el valor por defecto de desplazamiento necesario (por ejemplo ClipX)

6. y haga clic en Aceptar.
Lo encontramos!
es el valor de desviación en la columna izquierda de la fila con el valor buscado.

7. Haga lo mismo con otros valores, y usted encontrará a todos
Si algunos valores en OllyDbg Valor dice que no se encontró o no compensar el trabajo, cambio de intervalo de búsqueda.
Presione CTRL + G y el tipo en cualquier otra ventana en offset, por ejemplo, si la corriente se compensa 0x6AXXXX tipo 0x50XXXX


AHORA VAMOS A CREAR LA DLL

3DCamera.h

Code: [Select]
#pragma once
#include "stdafx.h"

#pragma data_seg(".SHAREDDATA")
static HHOOK KeyboardHook = NULL;
static HHOOK MouseHook = NULL;
#pragma data_seg()
#pragma comment(linker, "/SECTION:.SHAREDDATA,RWS")

static HINSTANCE hInstance;
bool MoveCamera = false;
bool InitCamera = true;
int MouseX, MouseY;

// ver.1.02f Main.exe Offsets
float *Camera_Zoom = (float*) 0x632CB1;
float *Camera_RotY = (float*) 0x6AB72C;
float *Camera_RotZ = (float*) 0x7D26120;
float *Camera_PosZ = (float*) 0x6A971C;
float *Camera_ClipX = (float*) 0x6AB638;
float *Camera_ClipY = (float*) 0x6AB640;
float *Camera_GlClip = (float*) 0x6A6B80;

struct CameraStruct {
float Zoom;
float RotY;
float RotZ;
float PosZ;
float ClipX;
float ClipY;
float GlClip;
} Camera;

LRESULT CALLBACK KeyboardProc(int, WPARAM, LPARAM);
LRESULT CALLBACK MouseProc(int, WPARAM, LPARAM);
BOOL MouseSetHook(BOOL);
BOOL KeyboardSetHook(BOOL);

Resource.h

Code: [Select]
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Window.rc
//

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 1000
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 1000
#endif
#endif

3DCamera.cpp

Code: [Select]
#include "stdafx.h"
#include "3DCamera.h"

int APIENTRY DllMain (HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved){
switch(dwReason){
case DLL_PROCESS_ATTACH:
hInstance = hInst;
KeyboardSetHook(true);
MouseSetHook(true);
break;
case DLL_PROCESS_DETACH:
KeyboardSetHook(false);
MouseSetHook(false);
break;
}
return true;
}

BOOL KeyboardSetHook(BOOL set_or_remove){
if(set_or_remove == TRUE){
if(KeyboardHook == NULL){
KeyboardHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, hInstance, GetCurrentThreadId());
if(!KeyboardHook){ return FALSE; }
}
} else {
return UnhookWindowsHookEx(KeyboardHook);
KeyboardHook = NULL;
}
return TRUE;
}

BOOL MouseSetHook(BOOL set_or_remove){
if(set_or_remove == TRUE){
if(MouseHook == NULL){
MouseHook = SetWindowsHookEx(WH_MOUSE, MouseProc, hInstance, GetCurrentThreadId());
if(!MouseHook){ return FALSE; }
}
} else { return UnhookWindowsHookEx(MouseHook); }
return TRUE;
}

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam){
if(((lParam>>31)&1) && (nCode == HC_ACTION)){
if(wParam == VK_F10){
*Camera_RotY = Camera.RotY;
*Camera_RotZ = -45;
*Camera_PosZ = Camera.PosZ;
*Camera_ClipX = Camera.ClipX;
*Camera_ClipY = Camera.ClipY;
*Camera_GlClip = Camera.GlClip;
*Camera_Zoom = Camera.Zoom;
}
}
return CallNextHookEx(KeyboardHook, nCode, wParam, lParam);
}

LRESULT CALLBACK MouseProc(int code, WPARAM wParam, LPARAM lParam){
MOUSEHOOKSTRUCTEX* mhs = (MOUSEHOOKSTRUCTEX*)lParam;
HWND MuWnd = FindWindow("MU", NULL);
if(GetForegroundWindow() == MuWnd){
if(InitCamera){
Camera.ClipX = *Camera_ClipX;
Camera.ClipY = *Camera_ClipY;
Camera.GlClip = *Camera_GlClip;
Camera.PosZ = *Camera_PosZ;
Camera.RotY = *Camera_RotY;
Camera.RotZ = *Camera_RotZ;
Camera.Zoom = *Camera_Zoom;
InitCamera = false;
}
if(wParam == WM_MOUSEWHEEL){
int direction = mhs->mouseData;
if(direction > 0){
if(*Camera_Zoom < 60){ *Camera_Zoom += 2; }
}
else if(direction < 0){
if(*Camera_Zoom > 12){ *Camera_Zoom -= 2; }
}
*Camera_ClipX = 1190 + (abs(*Camera_PosZ - 150) * 3) + 3000;
*Camera_ClipY = 2400 + (abs(*Camera_PosZ - 150) * 3) + 3000;
*Camera_GlClip = 3000 + (abs(*Camera_PosZ - 150) * 3) + 1500;
}
else if(wParam == WM_MBUTTONDOWN){
MouseX = mhs->pt.x;
MouseY = mhs->pt.y;
MoveCamera = true;
}
else if(wParam == WM_MBUTTONUP){
MoveCamera = false;
}
else if(wParam == WM_MOUSEMOVE){
if(MoveCamera){
if(MouseX < mhs->pt.x){
*Camera_RotZ += 8;
if (*Camera_RotZ > 315) *Camera_RotZ = -45;
}
else if(MouseX > mhs->pt.x){
*Camera_RotZ -= 8;
if (*Camera_RotZ < -405) *Camera_RotZ = -45;
}
if(MouseY < mhs->pt.y){
if(*Camera_RotY < -45){
*Camera_PosZ -= 44;
*Camera_RotY += (float)2.42;
}
}
else if(MouseY > mhs->pt.y){
if(*Camera_RotY > -90){
*Camera_PosZ += 44;
*Camera_RotY -= (float)2.42;
}
}

MouseX = mhs->pt.x;
MouseY = mhs->pt.y;

*Camera_ClipX = 1190 + (abs(*Camera_PosZ - 150) * 3) + 3000;
*Camera_ClipY = 2400 + (abs(*Camera_PosZ - 150) * 3) + 3000;
*Camera_GlClip = 3000 + (abs(*Camera_PosZ - 150) * 3) + 1500;
}
}
}
return CallNextHookEx(MouseHook, code, wParam, lParam);
}

3DCamera.def

Code: [Select]
LIBRARY "3DCamera"

EXPORTS

stdafx.h

Code: [Select]
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN
#endif
#ifndef WINVER
#define WINVER 0x0501
#endif
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#ifndef _WIN32_WINDOWS
#define _WIN32_WINDOWS 0x0410
#endif
#ifndef _WIN32_IE
#define _WIN32_IE 0x0600
#endif
#include <windows.h>
#include <math.h>
#pragma comment(lib, "User32.lib")
#pragma warning (disable : 4311 )
#pragma warning (disable : 4800 )

stdafx.cpp

Code: [Select]
#include "stdafx.h"

Gracias:


Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

 

Related Topics

  Subject / Started by Replies Last post
0 Replies
810 Views
Last post March 07, 2017, 07:30:54 PM
by virgen
0 Replies
448 Views
Last post September 06, 2017, 12:31:08 PM
by bandido
2 Replies
435 Views
Last post December 06, 2017, 02:39:53 PM
by caron22
10 Replies
1481 Views
Last post September 30, 2018, 09:46:52 PM
by Cloud
0 Replies
395 Views
Last post July 25, 2018, 08:19:14 AM
by Nikkop