¿Cómo puedo encontrar el tamaño de una matriz solo desde el programa C compilado?

2

Estoy jugando con las vulnerabilidades de desbordamiento del búfer y del montón, y está bien explotar cosas cuando tienes el código fuente y puedes ver todas las variables, sus tamaños y valores, etc. Pero, ¿qué pasa si solo tengo el programa compilado, y necesito encontrar el tamaño de una matriz. Por ejemplo, si tomamos el siguiente programa de muestra, que ha declarado algunas variables y una matriz, y en una etapa posterior de la ejecución, la matriz pasa a otra función.

int main(int argc, char **argv) 
{
   char test;
   char arr[100];
   double someVar;

   // Somewhere in the main call another function with array
   myFunc(arr);

   ...
}

Si no tuviera el código fuente, e, pero sabía que la matriz se pasa a algún lugar (gueesable), ¿cómo continuaría para determinar el tamaño de la matriz? Quiero decir, siempre puedo intentar escribir algo como un script en el que siempre transmito argumentos cada vez más grandes al programa desde la línea de comandos y ver dónde falla, pero este no es un enfoque muy práctico (en mi opinión). Supongo que la ingeniería inversa puede dar alguna información, pero ¿cómo exactamente? ¿Puede gdb también proporcionar algo útil? Quiero decir, ¿cuáles serían los métodos para determinar el tamaño de la matriz si no se conoce el código fuente?

    
pregunta ticket 16.05.2016 - 18:34
fuente

1 respuesta

2

Hay una explicación bastante buena en el siguiente enlace en stackoverflow:

Respuesta corta: No hay manera de obtener exactamente el mismo código que tiene en un programa escrito en C .

Pasa por muchas etapas hasta que alcanza el código binario para una máquina específica. De alguna manera, se compara con un cubo de hielo que se derritió, asumiendo que no ha perdido agua por evaporación. No hay forma de obtener la forma EXACTA del cubo de hielo original, a menos que tenga un molde (y, sin embargo, la formación interna no será la misma).

Tener un buen traductor que pueda ver piezas de ensamblaje y descifrar cada vez que podría ser una matriz, sería la mejor solución. Pero esta herramienta no parece existir por lo que sé.

Este tipo en re.stackexchange tiene algunos consejos sobre cómo ver el código desensamblado y obtener la información que desea sobre arrays C:

respondido por el nwildner 16.05.2016 - 19:28
fuente

Lea otras preguntas en las etiquetas