Autor
|
Tema: Como buscar un Integer en la memoria de forma manual? (Leído 3,770 veces)
|
WHK
|
Hola, actualmente para buscar valores en la memoria y modificarlos utilizaba la herramienta scanmem y quiero hacer una gui que haga lo mismo pero sin utilizar el binario Se que suena raro pero en la práctica estoy utilizando ARM y es muy dificil encontrar un binario compatible debido a los sistemas de protección del dispositivo pero tengo acceso desde el terminal a leer y escribir los archivos /proc/pid/maps. Se que en ese lugar se aloja la memoria de cada aplicación y me gustaría hacer una app gráfica capaz de leer y escribir los valores de memoria. Solo necesito manipular enteros de 32 bits. Alguien me da una mano sobre la estructura de estos archivos y donde buscar estos valores?
|
|
|
En línea
|
|
|
|
WHK
|
Bueno, leyendo algunos documentos oficiales sobre la estructura de estos archivos hice este pequeño script para leer la memoria de una aplicación a traves de su pid: <?php $map = '/proc/'.$argv[1].'/maps'; echo "Leyendo ".$map." ...\n"; foreach($lines as $line){ $length = $start - $end; echo "Start: ".$start." End: ".$end." Mode: ".$mode."\n"; echo $length." ------------\n".$mem."\n------------\n"; }
Comprendiendo que los primeros dos valores de cada línea es la posición en hexadecimal de los bytes que se alojan en el archivo /proc/pid/mem, el problema es que parece que lo estoy haciendo mal ya que al convertir el valor hexadecimal a decimal me arroja un error exageradamente elevado: 7ffd9c73b000-7ffd9c73d000 r--p 00000000 00:00 0 [vvar] ------------ Start: 140727228280832 End: 7.5513797076684E+22 Mode: r--p PHP Warning: file_get_contents(/proc/3385/mem): failed to open stream: Permission denied in /home/whk/Escritorio/read.php on line 14 -7.5513796935957E+22 ------------ Algo estoy haciendo mal :-/
|
|
|
En línea
|
|
|
|
WHK
|
Bueno, fue un error mio, usé mal el substr, puse el valor final en ves de la cantidad de bytes y también me equivoqué al restar inicio con final, era final con inicio xD Ahora si funciona de lujo <?php if(!isset($argv[1])){ echo "Uso: sudo php read.php PID\n"; exit; }
$regiones = array("misc", "code", "exe", "heap", "stack");
$map = '/proc/'.$argv[1].'/maps'; echo "Leyendo ".$map." ...\n"; $lines = file($map);
foreach($lines as $line){ $line = trim($line); $separator = substr($line, 12, 1); if((string)$separator !== '-') continue;
$mode = substr($line, 26, 4); /* r = read w = write x = execute s = shared p = private (copy on write) */
$start = substr($line, 0, 12); $end = substr($line, 13, 12); $length = (hexdec($end) - hexdec($start)); $mem = file_get_contents('/proc/'.$argv[1].'/mem', NULL, NULL, hexdec($start), $length); /*if(strpos($mem, "testdisk.log") !== false){ //echo substr($mem, strpos($mem, "testdisk.log"), 100)."\n"; echo $mem; exit; } $cmd = substr($mem, 0, 512);*/
//if($length < 2048){ echo "------------------------------------------\n". "Start : ".$start." (".hexdec($start).")\n". "End : ".$end." (".hexdec($end).")\n". "Length : ".$length."\n". "Mode : ".$mode."\n". //"Mem (15) : ".$mem."\n"; "Mem (15) : ".bin2hex(substr($mem, 0, 15))."\n"; //} }
Ahora mi pregunta es: Tengo una serie de bytes, si quiero buscar un valor entero (Int32) debo convertir los bytes a int32?
|
|
« Última modificación: 26 Abril 2015, 16:29 pm por WHK »
|
En línea
|
|
|
|
WHK
|
Bueno, finalmente veo que tiene una estructura ya mas definida cada bloque de memoria. Finalmente me estoy guiando por el mismo proyecto de scanmem https://github.com/scanmem/scanmemIgual gracias de todas maneras. Saludos.
|
|
|
En línea
|
|
|
|
scott_
Desconectado
Mensajes: 458
Mientras luches, ya eres un ganador
|
Es algo raro este tema no? que un usuario se responda así solo , me ha asado no te preocupes Saludos.
|
|
|
En línea
|
Si no intentas salvar una vida, jamás salvarás la de nadie más
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
SQLite integer como float
Bases de Datos
|
Dukatus
|
0
|
2,333
|
17 Marzo 2013, 01:20 am
por Dukatus
|
|
|
Poachable, o cómo buscar empleo de forma anónima
Noticias
|
wolfbcn
|
0
|
1,425
|
9 Octubre 2014, 13:58 pm
por wolfbcn
|
|
|
Cómo encontrar y eliminar virus de forma manual
Noticias
|
wolfbcn
|
0
|
2,133
|
28 Diciembre 2014, 14:13 pm
por wolfbcn
|
|
|
[RESUELTO] Como modificar el agente de usuario de forma manual en Firefox?
Dudas Generales
|
Killlztream
|
3
|
3,395
|
9 Agosto 2015, 01:10 am
por Killlztream
|
|
|
Cómo descargar actualizaciones de Windows 10 de forma manual
Noticias
|
wolfbcn
|
0
|
2,017
|
11 Enero 2018, 21:27 pm
por wolfbcn
|
|