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ú

Mensajes - razormta

#11
lo mismo que dice el de arriba xd sustituye el system("PAUSE > NULL"); por system("pause");
#12
creo que entiendo tu pregunta y mmmm no se, creo que si he llegado a poner signo  de fin de cadena antes de que llegue al verdadero signo de fin de cadena ( '\0' ) mmm pero no recuerdo que paso y me da pereza ir al compilador a ver xd , porque no intentas verlo por tu cuenta ?

lo que yo suponto que pasara que que por ejemplo ...

Código (cpp) [Seleccionar]
char str[10];

strcpy( str, "test");

std::cout<<str<<std::endl;


imprimira : test
y si hago

Código (cpp) [Seleccionar]
str[2] = '\0';

std::cout<<str<<std::endl;


imprimira: te

haha por logica es lo que pienso que sucedera, pero tengo tiempo sin trabajar con cadena de caracteres xd

si mi teoria es cierto entonces, tienes un string : { 'a', '\0', 'b' , '\0' }

si lo imprimes en pantalla deberia mostrar: a

pero bueno ... intentalo a ver xd
#13
Haciendo caso al chico de arriba, aca mi solucion, primero estudiar a fondo como funcionan las BMP's, todo acerca de el padding y aprender la diferencia de imagenes de 8 bits, 16 bits , 24 bits etc ...

Por ahora mi programa trabaja con imagenes bmp de 24 bits, pero me animare para hacerlo de todos los formatos posibles, algo asi como freeimage xd

Código (cpp) [Seleccionar]

bool SPRITE::LoadBMP(const char * path, GLuint * texture)
{
/**/
std::ifstream img(path, std::ios::binary);
if( !img )
return(False);
/**/
BITMAPINFOHEADER imgHeader;
BITMAPFILEHEADER imgInfo;
img.read( (char*)&imgHeader,sizeof(BITMAPFILEHEADER) );
img.read( (char*)&imgInfo, sizeof( BITMAPINFOHEADER ) );
/**/
if (imgHeader.bfType != 0x4D42)
{
img.close();
return(False);
}
/**/
int W =  imgInfo.biWidth;
int w = 4* ( ( W * 24 + 31 ) /32 );
int h = imgInfo.biHeight;
int size = abs(w*h);
/**/
BYTE * pix = new BYTE[size];
img.seekg(imgHeader.bfOffBits);
img.read( (char*)pix, size );
/**/
BYTE * data = new BYTE[size];
bool done = true;

switch(imgInfo.biBitCount)
{
case 24:
BMP_24_TO_24( pix, data, (W*h) );
}
/**/
if( done )
{
glGenTextures(1, texture);           
glBindTexture(GL_TEXTURE_2D, *texture);           

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glTexImage2D(GL_TEXTURE_2D, 0,  GL_RGB, W, h, 0, GL_RGB, GL_UNSIGNED_BYTE, data);

glBindTexture(GL_TEXTURE_2D, NULL);
}
/**/
delete[] pix;
delete[] data;
/**/
return(True);
}


Es probable que la funcion no sea muy elegante , pero deben tener en cuenta que lo que se de programacion lo aprendi de ejemplos y no de manuales xd

Código (cpp) [Seleccionar]

void SPRITE::BMP_24_TO_24( BYTE * data, BYTE * new_data, int Size )
{
int index = 0;
do
{
new_data[(index*3)+0] = data[(index*3)+2];
new_data[(index*3)+1] = data[(index*3)+1];
new_data[(index*3)+2] = data[(index*3)+0];
index++;
}while( index < Size );
}


Mmmm, para mostrar una imagen de 8 bits, primero la transformare a 24 bits y luego llamare a la funcion BMP_24_TO_24, pero eso me tomara un tiempo, hasta ahora tnego solo esto xd
#14
Resolver problemas es mi mayor adiccion, ya lo resolvi... pff ... punteros xd , de todas maneras deberia borrar el post no ?, haha ... no me hace falta un foro lml okno xd
#15
¿ Que ven mal en mi codigo ?
Es que me muestra un cuadro gris pero no carga la textura .... no entiendo porque
Estoy algo desesperado y puede que este pasando algo por alto, si alguien ve algo malo digame T_T

PD: empeze a hacerlo hace unas horas y no he estudiado mucho con respecto al manejo de BMP's, tal ves ese sea mi problema

Código (cpp) [Seleccionar]


bool SPRITE::LoadBMP(const char * path, GLuint * texture)
{
std::ifstream img(path, std::ios::binary);
if( !img )
return(False);

BITMAPFILEHEADER imgHeader;
BITMAPINFOHEADER imgInfo;

img.read( (char*)&imgHeader,sizeof(BITMAPFILEHEADER) );
img.read( (char*)&imgInfo, sizeof( BITMAPINFOHEADER ) );

if (imgHeader.bfType != 0x4D42)
return(False);

int size = ( imgInfo.biSizeImage );

BYTE * pix =new BYTE[size];
img.read( (char*)pix, size );

img.close();

BYTE * data = new BYTE[size];
for (int i = 0; i < size; i += 3)
{
data[i+0] = pix[i+2];
data[i+1] = pix[i+1];
data[i+2] = pix[i+0];;
}

unsigned int w = imgInfo.biWidth;
unsigned int h = imgInfo.biHeight;

glGenTextures(1, texture);           
glBindTexture(GL_TEXTURE_2D, *texture);           

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, data);

glBindTexture(GL_TEXTURE_2D, NULL);

return(True);
}

#16
nadie me respondio xd mmm hoy pase 12 horas mas programando, estoy teniendo hormigueos en la cabeza, debo ir al neurologo de nuevo xd pero bueno .... aca esta el codigo

Código (cpp) [Seleccionar]


#include "stdafx.h"
#include "util.h"
#include <tlhelp32.h> 
#include <shlwapi.h> 

#define PROCESS_NAME "victima.exe"

int readMemory(DWORD pId);
DWORD getModuleBase(DWORD pId, char[64]);
DWORD getProcessId(IN PCHAR szExeName);



int main()
{
DWORD pId=getProcessId(PROCESS_NAME);
if(!pId)
return(0);

int result=readMemory(pId);

std::cout<<result<<std::endl;
system("pause");

return 0;
}

int readMemory(DWORD pId)
{
int memory;
int memory1;
int memory2;
int memory3;
int memory4;
int memory5;

int result;

HANDLE hProc = OpenProcess(PROCESS_VM_READ, FALSE, pId);
DWORD baseAddress  = getModuleBase( pId, PROCESS_NAME )+0x00017154;

ReadProcessMemory(hProc, (LPVOID)(baseAddress),(LPVOID)&memory,4, NULL);
ReadProcessMemory(hProc,(LPCVOID)(memory+0x180),(LPVOID) &memory1, 4, NULL);
ReadProcessMemory(hProc,(LPCVOID)(memory1+0x4fC),(LPVOID) &memory2, 4, NULL);
ReadProcessMemory(hProc,(LPCVOID)(memory2+0x624),(LPVOID) &memory3, 4, NULL);
ReadProcessMemory(hProc,(LPCVOID)(memory3+0x51C),(LPVOID) &memory4, 4, NULL);
ReadProcessMemory(hProc,(LPCVOID)(memory4+0x8),(LPVOID) &memory5, 4, NULL);

std::cout<<memory5<<std::endl; // Fuck yeah xd

return(0);
}

DWORD getProcessId(IN PCHAR szExeName)
{
    DWORD dwRet = 0;
    DWORD dwCount = 0;

    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnapshot != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pe = {0};
        pe.dwSize = sizeof(PROCESSENTRY32);

        BOOL bRet = Process32First(hSnapshot, &pe);

        while (bRet)
        {
            if (!_stricmp(cw(pe.szExeFile), szExeName))
            {
                dwCount++;
                dwRet = pe.th32ProcessID;
            }
            bRet = Process32Next(hSnapshot, &pe);
        }

        if (dwCount > 1)
            dwRet = 0xFFFFFFFF;

        CloseHandle(hSnapshot);
    }

    return dwRet;
}


DWORD getModuleBase(DWORD pId,char ModuleName[64])
{
char mModuleName[36];
MODULEENTRY32 mModule;
HANDLE hTool = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pId);
mModule.dwSize = sizeof( MODULEENTRY32 );
BOOL bModule = Module32First(hTool, &mModule);
BOOL founded = false;
strcpy(mModuleName,cw(mModule.szModule));

while(bModule)
{
if(!strcmp(ModuleName,mModuleName))
{
founded = true;
break;
}
strcpy(mModuleName,cw(mModule.szModule));
bModule = Module32Next(hTool, &mModule);
}
CloseHandle( hTool );
if(!founded)
return(0);
return((DWORD)mModule.modBaseAddr);
}




resulto ser un pointer con offset1+offset2+offset3+offset4+offset5
lo dejo por si algun novato se siente interesado, esta un poco desordenado pero es que debo ir a comer xd, mmm consegui la memoria estatica y no recordaba que debia añadir el getModuleHandle, al olvidar eso el primer codigo no tenia sentido alguno xd bueno, tema cerrado.
#18
Amm, soy nuevo ._. me vi en la necesidad de unirme a un foro de programacion porque hay algo que realmente no logro comprender, me explicare...

Llevo varias horas estudiando sobre como inyectar fracciones de codigo en un programa, desde otro programa creado por mi en c++ ( alrededor de 50 horas en los ultimos 3 dias ), y hasta ahora he logrado modificar el valor del dinero en counter strike xd y el valor de una variable de un programa "victima.exe" que yo mismo cree para iniciarme.

si, tuve exito, pero si reinicio el programa la posicion de la memoria de la variable es distinta, ya se que eso es normal xd lo que no logro es encontrar la posicion de memoria estatica, me es dificil explicarme pero supongo que mas de uno paso por esto.

"Address=Base+offset+offset+offset"

ok .. intente con el cheat engine 6.2 pero solo logre conseguir una posicion de memoria dinamica y de ahi no logro por mas que lo intento conseguir la estatica

les muestro mi codigo y les explico:

main.cpp

Código (cpp) [Seleccionar]



#include "stdafx.h"
#include "util.h"
#include <tlhelp32.h> 
#include <shlwapi.h> 

#define PROCESS_NAME "victima.exe"

int readMemory(DWORD pId);
DWORD getProcessId(IN PCHAR szExeName);


int main()
{
DWORD pId=getProcessId(PROCESS_NAME);
if(!pId)
return(0);

int result=readMemory(pId);

std::cout<<result<<std::endl;
system("pause");

return 0;
}

int readMemory(DWORD pId)
{
int hex=0x0016FAC8, // esto lo obtengo con cheat engine
int offset = -8; // esto lo obtengo con cheat engine
int memory,pointerBase,result;
HANDLE hProc = OpenProcess(PROCESS_VM_READ, FALSE, pId);
ReadProcessMemory(hProc, (LPVOID)hex, &memory, 4, NULL);
pointerBase = memory-offset;
ReadProcessMemory(hProc, (LPVOID)pointerBase, &result,4, NULL);
return(result);
}

DWORD getProcessId(IN PCHAR szExeName)
{
    DWORD dwRet = 0;
    DWORD dwCount = 0;

    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnapshot != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pe = {0};
        pe.dwSize = sizeof(PROCESSENTRY32);

        BOOL bRet = Process32First(hSnapshot, &pe);

        while (bRet)
        {
            if (!_stricmp(cw(pe.szExeFile), szExeName))
            {
                dwCount++;
                dwRet = pe.th32ProcessID;
            }
            bRet = Process32Next(hSnapshot, &pe);
        }

        if (dwCount > 1)
            dwRet = 0xFFFFFFFF;

        CloseHandle(hSnapshot);
    }

    return dwRet;
}



util.h , tenia unos errores con el stricmp y logre crearme esta funcion xd

Código (cpp) [Seleccionar]
wchar_t * wc(const char* word)
{
    size_t newsize = strlen(word) + 1;
    wchar_t * wcs = new wchar_t[newsize];

    size_t convertedChars = 0;
    mbstowcs_s(&convertedChars, wcs, newsize, word, _TRUNCATE);
   
return( wcs );
}

char * cw(const wchar_t* word)
{
    size_t newsize = wcslen(word) + 1;
    char * wcs = new char[newsize];

    size_t convertedChars = 0;
    wcstombs_s(&convertedChars, wcs, newsize, word, _TRUNCATE);
   
return( wcs );
}




aca el link del programa victima.exe:
http://www.mediafire.com/download/4iwb35swrh4o8ei/victima.exe

victima.cpp

Código (cpp) [Seleccionar]
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{
int num=1000;
while(num>0)
{
std::cout<<num<<std::endl;
num-=10;
system("pause");
}
return 0;
}



me gustaria que si alguno tiene alguna idea de como hacerlo me explicara, señores solo necesito eso xd la ***** posicion de la variable X xd pero .. una posicion que no cambie al reiniciar el programa, me gustaria una explicacion de lo que neceisto hacer y del error que estoy cometiendo xd

espero no haber publicado en la sección incorrecta y espero que alguien me responda al menos un "hola" xd

Gracias de antemano.