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 - GGZ

#41
ASM / Shellcode to HEX (BOF)
26 Enero 2017, 23:48 PM
Hola a todos, estoy explotando un bof necesito una ayuda.

Necesito pasar esta serie de instrucciones a hexa para luego ejecutarlo con C.

Código (asm) [Seleccionar]
.section .data
__archivo:
.asciz "/home/httpd/test"  # Archivo a eliminar.

.section .text
.global main
main:
       movl $10, %eax    
       movl $__archivo, %ebx    
       int  $0x80

       movl %eax, %ebx  
       movl $1, %eax      
       int  $0x80


Quiero pasar este código asm que borra un archivo a C tipo:


char sc[] =  "\xb8\x0a\x00\x00\x00\xbb\x8c\x90\x04\x08\xcd\x80\x89\xc3\xb8\x01\x00\x00\x00\xcd\x80";

int main (void){

       int (*func)();
       func = (int (*)())sc;
       (int)(*func)();
}



Pero me parece que estoy pasando mal el asm al hexadecimal, ¿cómo puedo pasarlo para ejecutarlo desde C?

Probé hacerlo con objdump pero no funciona.

Saludos.
#42
Foro Libre / Re: Enseña tu teclado.
9 Enero 2017, 13:53 PM
Yo tengo un Genius k639, de los planos.


Me encanta, uno de los teclados más cómodos que probé.
No sé que onda los teclados mecánicos me gustaría algún día probar alguno, ¿te acordás de mi Songoku? vos me ayudaste a resolver un problema que tenía con la placa Ethernet, me hiciste comprar un USB Ethernet y desde ahí mi vida cambio para siempre(?, no mentira solo tengo internet ahora.

Saludos.
#43
Todas las peticiones que se hacen a tu página web estan guardadas en los logs, así que puedes crear un script que busque directamente de ahí con expresiones regulares.

No sé que servidor usas pero buscalo en Google, seguro vas a encontrar mucha información, sino pregunta.

Saludos.
#44
ASM / Re: ¿Funciones anidadas?
25 Noviembre 2016, 03:45 AM
No, ya lo había leído por arriba.
#45
ASM / Re: ¿Funciones anidadas?
25 Noviembre 2016, 00:07 AM
No, las diferentes formas de implementar funciones anidadas en ASM y la lógica de cada una de las implementaciones.
Si quisiera el código simplemente haría gcc -S ff.c, pero no es la única forma que hay de escribir funciones anidadas.
#46
ASM / ¿Funciones anidadas?
21 Noviembre 2016, 18:05 PM
Hola!, estuve buscando por internet pero todavía no me queda del todo claro, alguien sabe algo sobre funciones anidadas?


Algo como esto estoy buscando

void f( int a){

      int gg(char v){
            return 1;
     }
      gg('b');

}


Sí se que se lo puede pasar a ASM con gcc -S, de todos modos no entiendo los procedimientos que hace.


Saludos!
#47
Programación C/C++ / [C-ASM] Pila
21 Noviembre 2016, 01:58 AM
¿Podrían explicarme un poco mejor como es que funciona stack y hacer_stack?
#include <stdlib.h>
#include <setjmp.h>

#define TPILA 4096
#define NPILAS 10

static void hace_stack(jmp_buf buf, void (*pf)(), unsigned prof, char *dummy) {

       printf ("prof: %d\n",prof);
       printf ("dummy: %d\n",dummy-(char*) &prof );


       if( dummy - (char *) &prof >= prof) {
               if (setjmp(buf)!=0) {
                       pf(); abort();
               }
       } else hace_stack(buf, pf, prof, dummy);
}

void stack(jmp_buf buf, void (*pf)()) {
       static int ctas = NPILAS;
       char dummy;
       hace_stack(buf, pf, TPILA*ctas, &dummy);
       ctas--;
}



#include <stdio.h>
#include "guindows.h"

task t1, t2, taskmain;

void ft1(){
double d;
for(d=-1;;d+=0.001) {
printf("d=%f\n", d);
TRANSFER(t1,t2);
}
}

void ft2(){
int i;
for(i=0;i<10000;i++) {
printf("i=%d\n", i);
TRANSFER(t2,t1);
}
TRANSFER(t2, taskmain);
}

main(){
stack(t1,ft1);
stack(t2,ft2);
TRANSFER(taskmain,t1);
return 0;
}



¿Para qué carajos sirve esto?

       if( dummy - (char *) &prof >= prof) {
               if (setjmp(buf)!=0) {
                       pf(); abort();
               }
       } else hace_stack(buf, pf, prof, dummy);


Me parece una forma muy rara de codear (char *)&prof sé lo que significa pero no entiendo para que sirve.

Todo lo de guindows.h lo entiendo.
#48
¿Esto es lo que estás buscando?
Fijate, ahí hice algunos arreglos, y funciona.

Gets se dejó de usar hace tiempo, mejor usa scanf.
EDITO: scanf lee la entrada hasta el primer espacio, entonces no deberías usar scanf tampoco. Creo que fgets o alguna función de esas, eso te dejo que lo investigues vos.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void cifrarmorse (char frase){

   switch (frase){
       case 'a':
       case 'A': printf("·- ");
           break;
       case 'b':
       case 'B': printf("-··· ");
           break;
       case 'c':
       case 'C': printf("-·-·" );
           break;
       case 'd':
       case 'D': printf("-·· ");
           break;
       case 'e':
       case 'E': printf("· ");
           break;
       case 'f':
       case 'F': printf("··-· ");
           break;
       case 'g':
       case 'G': printf("--· ");
           break;
       case 'h':
       case 'H': printf("···· ");
           break;
       case 'i':
       case 'I': printf("·· ");
           break;
       case 'j':
       case 'J': printf("·--- ");
           break;
       case 'k':
       case 'K': printf("-·- ");
           break;
       case 'l':
       case 'L': printf("·-·· ");
           break;
       case 'm':
       case 'M': printf("-- ");
           break;
       case 'n':
       case 'N': printf("-· ");
           break;
       case 'o':
       case 'O': printf("--- ");
           break;
       case 'p':
       case 'P': printf("·--· ");
           break;
       case 'q':
       case 'Q': printf("--·- ");
           break;
       case 'r':
       case 'R': printf("·-· ");
           break;
       case 's':
       case 'S': printf("··· ");
           break;
       case 't':
       case 'T': printf("- ");
           break;
       case 'u':
       case 'U': printf("··- ");
           break;
       case 'v':
       case 'V': printf("···- ");
           break;
       case 'w':
       case 'W': printf("·-- ");
           break;
       case 'x':
       case 'X': printf("-··- ");
           break;
       case 'y':
       case 'Y': printf("-·-- ");
           break;
       case 'z':
       case 'Z': printf("--·· ");
           break;
       case '0': printf("----- ");
           break;
       case '1': printf("·---- ");
           break;
       case '2': printf("··--- ");
           break;
       case '3': printf("···-- ");
           break;
       case '4': printf("····- ");
           break;
       case '5': printf("····· ");
           break;
       case '6': printf("-···· ");
           break;
       case '7': printf("--··· ");
           break;
       case '8': printf("---·· ");
           break;
       case '9': printf("----· ");
           break;
       case '.': printf("·-·-·- ");
           break;
       case ',': printf("--··-- ");
           break;
       case '?': printf("··--·· ");
           break;
       case '"': printf("·-··-· ");
           break;
       case ' ': printf("   ");
           break;
   }        
}

int main(int argc, char** argv){
   int a;
   char frase[95];
   printf("Introduzca una frase:\n");
   scanf ("%s",frase);
   a=strlen(frase);

   int i;

   for (i=0; i<a; i++)
   cifrarmorse(frase[i]);


   // Agregamos salto de linea al final.
   printf ("\n");

   return 0;
}


OUTPUT:
Introduzca una frase:
HOLA      
···· --- ·-·· ·-


Usá fgets te dejo como:    fgets (frase,sizeof(frase),stdin);
Deberías cambiarlo en el código que te pasé porque como te dije arriba scanf solo toma hasta el primer espacio.

Si pones "Hola" o "Hola Mundo" el programa con scanf solo toma Hola.


¡Saludos!
#49
A eso era que me refería pero ya fue, a mi me lo dieron así.

Wikipedia es lo primero que leí antes de escribir este post.

Fue, ya está.
¡Saludos!
#50
Si que los hay, y los encontré ya los voy entendiendo de todos modos ...

Top-Down y Botton-Up para calcular un número combinatorio.


int comb(int n, int k) {
 static int table[MAXN][MAXK] = { 0 };

 if (k == 0 || n == k)
   return 1;

 if (table[n][k] != 0)
   return table[n][k];

 table[n][k] = comb(n - 1, k) + comb(n - 1, k - 1);

 return table[n][k];
}



int comb_(int n, int k) {
 int table[n+1][k+1];
 int i, j;

 for (i = 0; i <= n; i++)
   table[i][0] = 1;

 for (i = 0; i <= n; i++)
   table[i][i] = 1;

 for (i = 0; i <= n; i++)
   for (j = 1; j <= k && j < i; j++){
printf ("Valor de i: %d, valor de j: %d\n",i,j);
     table[i][j] = table[i - 1][j - 1] + table[i - 1][j];

}

 return table[n][k];
}