|
Mostrar Temas
|
Páginas: [1]
|
1
|
Seguridad Informática / Bugs y Exploits / Buffer Overflow
|
en: 23 Abril 2019, 23:58 pm
|
Hola estoy empezando con algunos temas de seguridad y a familiarizarme con Linux, en este caso con Buffer Overflow, tengo lo siguiente pero no logro obtener la direccion de retorno , agradeceria su ayuda
/* stack.c */
/* This program has a buffer overflow vulnerability. */ /* Our task is to exploit this vulnerability */ #include <stdlib.h> #include <stdio.h> #include <string.h>
int bof(char *str) { char buffer[24];
/* The following statement has a buffer overflow problem */ strcpy(buffer, str);
return 1; }
int main(int argc, char **argv) { char str[517]; FILE *badfile;
badfile = fopen("badfile", "r"); fread(str, sizeof(char), 517, badfile); bof(str);
printf("Returned Properly\n"); return 1; }
--- /* call_shellcode.c */
/*A program that creates a file containing code for launching shell*/ #include <stdlib.h> #include <stdio.h>
const char code[] = "\x31\xc0" /* xorl %eax,%eax */ "\x50" /* pushl %eax */ "\x68""//sh" /* pushl $0x68732f2f */ "\x68""/bin" /* pushl $0x6e69622f */ "\x89\xe3" /* movl %esp,%ebx */ "\x50" /* pushl %eax */ "\x53" /* pushl %ebx */ "\x89\xe1" /* movl %esp,%ecx */ "\x99" /* cdq */ "\xb0\x0b" /* movb $0x0b,%al */ "\xcd\x80" /* int $0x80 */ ;
int main(int argc, char **argv) { char buf[sizeof(code)]; strcpy(buf, code); ((void(*)( ))buf)( ); } ---- /* exploit.c */
/* A program that creates a file containing code for launching shell*/ #include <stdlib.h> #include <stdio.h> #include <string.h> char shellcode[]= "\x31\xc0" /* xorl %eax,%eax */ "\x50" /* pushl %eax */ "\x68""//sh" /* pushl $0x68732f2f */ "\x68""/bin" /* pushl $0x6e69622f */ "\x89\xe3" /* movl %esp,%ebx */ "\x50" /* pushl %eax */ "\x53" /* pushl %ebx */ "\x89\xe1" /* movl %esp,%ecx */ "\x99" /* cdq */ "\xb0\x0b" /* movb $0x0b,%al */ "\xcd\x80" /* int $0x80 */ ;
void main(int argc, char **argv) { char buffer[517]; FILE *badfile;
/* Initialize buffer with 0x90 (NOP instruction) */ memset(&buffer, 0x90, 517);
/* You need to fill the buffer with appropriate contents here */
/* Save the contents to the file "badfile" */ badfile = fopen("./badfile", "w"); fwrite(buffer, 517, 1, badfile); fclose(badfile); }
|
|
|
2
|
Programación / Programación C/C++ / programacion orientada a objetos
|
en: 4 Mayo 2016, 02:46 am
|
Hola que tal estoy empezando en introducción a POO y nos han dejado un trabajo donde entendamos los conceptos básicos pero no de libros sino de experiencias de otras personas por lo cual agradecería si alguien pudiera darme su opinión sobre estos temas Temas: 1.-Que Es Programacion Orientada a Objetos? 2.-Caracteristicas (abstraccion, encapsulamiento, herencia, polimorfismo) 3.- Clases y Objetos 4.-Metodos y datos miembro
|
|
|
3
|
Programación / Java / snake java
|
en: 14 Noviembre 2015, 16:17 pm
|
Hola tengo problemas con estas clases del juego snake al parecer son las variables x,y en la clase panel que afecta tambien la clase gui al heredar,intente declarar las variables pero aun asi marca errore,alguien podria ayudarme? gracias Clase Panel: package snake.gui;
import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.RenderingHints; import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.List;
import javax.swing.JPanel;
@SuppressWarnings("serial") public class SnakePanel extends JPanel { Color board[][] = new Color[30][30]; private Rectangle2D[][] my_board = new Rectangle2D[30][30]; private boolean collided; private boolean growMode; int growingThreeSpaces; int spacesToGrowTotal; int beginning; public SnakePanel(Color[][] gameBoard) { collided = false; growMode = false; beginning = 0; board = gameBoard; for (int x = 0; x < 30; x++) { for (int y = 0; y < 30; y++) { my_board[x][y] = new Rectangle2D.Double(y * 15, x * 15, 14, 14); //Quick fix } } //board is correct here } public void paintComponent(final Graphics the_graphics) { super.paintComponent(the_graphics); //Rectangle2D my_square; final Graphics2D g2d = (Graphics2D) the_graphics; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); for (int x = 0; x < 30; x++) { for (int y = 0; y < 30; y++) { g2d.setColor(board[x][y]); g2d.fill(my_board[x][y]); g2d.draw(my_board[x][y]); } } } public void clearOldSnake(List points) { //System.out.println("clearOldSnake(List points (points.size() = " + points.size() + ")"); for (int x = 0; x < points.size(); x++) { board[points.get(x).x][points.get(x).y] = Color.GREEN; } } public boolean growMode() { return growMode; } /* * This updates the position of the snake by points (positions) on the map level */ public void updateSnake(List points) { if (beginning < 2) { beginning++; } if (growMode) { growingThreeSpaces++; if (growingThreeSpaces == spacesToGrowTotal) { resetGrowMode(); } }
for (int x = 0; x < points.size(); x++) { //System.out.println("Coords: " + board[points.get(x).x][points.get(x).y]); if (board[points.get(x).x][points.get(x).y] == Color.BLUE) { //System.out.println("COLLIDED WITH SOMETHING THAT MAKES SNAKE GROW"); spacesToGrowTotal += 3; growMode = true;
} else if (board[points.get(x).x][points.get(x).y] != Color.GREEN && board[points.get(x).x][points.get(x).y] != Color.BLUE) { if (beginning > 1) { collided = true; } }
board[points.get(x).x][points.get(x).y] = Color.YELLOW; //System.out.println("Coloring the snake yellow"); //System.out.println(points.get(x).x + ", " + points.get(x).y); } repaint(); } public boolean isCollided() { return collided; } public void resetCollided() { collided = false; } public void resetGrowMode() { spacesToGrowTotal = 0; growingThreeSpaces = 0; growMode = false; } public boolean checkForLevelCompletion() { boolean complete = true; for (int x = 0; x < 30; x++) { for (int y = 0; y < 30; y++) { if (board[x][y] == Color.BLUE) { complete = false; } } } return complete; } }
y esta es la clase gui
package snake.gui;
import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.Point; import java.util.ArrayList; import java.util.List;
import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.Timer;
import snake.enums.KeyDirections;
@SuppressWarnings("serial") public class SnakeGUI extends JFrame { public static final int FRAME_HEIGHT = 500; public static final int FRAME_WIDTH = 455; //private int[] my_keys; private int my_snake_direction; private int my_current_level; private Listener my_listener = new Listener(); private MyTimer my_timer_listener = new MyTimer(); private Timer my_timer; private KeyboardListener my_keyboardlistener = new KeyboardListener(); private final JPanel my_main_panel = new JPanel(new BorderLayout()); private final JMenuBar my_menubar = new JMenuBar(); private final JMenu my_menubar_game = new JMenu("Game"); private final JMenuItem my_menubar_game_newgame = new JMenuItem("New Game"); private final JMenuItem my_menubar_game_pause = new JMenuItem("Pause"); private final JMenuItem my_menubar_game_quit = new JMenuItem("Quit"); /*******/ private final JMenu my_menubar_help = new JMenu("Help"); private final JMenuItem my_menubar_help_rules = new JMenuItem("Rules"); private final JMenuItem my_menubar_help_about = new JMenuItem("About");
private SnakePanel my_panel; private Color[][] board; private Level level = new Level(); private List my_snake; private List new_snake;
public SnakeGUI() { my_current_level = 1; my_timer = new Timer(1000, my_timer_listener);
my_snake = new ArrayList(); new_snake = new ArrayList(); my_timer.setDelay(1000);
newGame(); setup(); } public void newGame() { my_timer.start(); my_snake.clear(); board = level.getLevel(my_current_level); //set level at the same time of assigning my_current_level to 1 my_snake.add(new Point(1, 14)); my_snake.add(new Point(2, 14)); my_snake_direction = 40;
} public void setup() { my_panel = new SnakePanel(board); //my_panel.updateSnake(my_snake); //temp my_main_panel.add(my_panel, BorderLayout.CENTER); addKeyListener(my_keyboardlistener); add(my_main_panel); setupMenuBar(); setJMenuBar(my_menubar); setTitle("Snake"); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(FRAME_WIDTH, FRAME_HEIGHT); setLocationRelativeTo(null); setVisible(true); //my_panel.resetCollided(); my_panel.updateSnake(my_snake); my_menubar_game_newgame.addActionListener(my_listener); my_menubar_game_pause.addActionListener(my_listener); my_menubar_game_quit.addActionListener(my_listener); my_menubar_help_rules.addActionListener(my_listener); my_menubar_help_about.addActionListener(my_listener);
} private void setupMenuBar() { my_menubar.add(my_menubar_game); my_menubar_game.add(my_menubar_game_newgame); my_menubar_game.add(my_menubar_game_pause); my_menubar_game.addSeparator(); my_menubar_game.add(my_menubar_game_quit); my_menubar.add(my_menubar_help); my_menubar_help.add(my_menubar_help_rules); my_menubar_help.addSeparator(); my_menubar_help.add(my_menubar_help_about); } private class KeyboardListener implements KeyListener { /** * The key that was just pressed. * @param the_event The event that just happened (used to acquire what key was pressed). */ public void keyPressed(final KeyEvent the_event) { final int key = the_event.getKeyCode(); if (my_timer.isRunning()) { if (key == 38 && my_snake_direction != 40) { my_snake_direction = key; moveSnake(KeyDirections.UP.getDirection()); } else if (key == 40 && my_snake_direction != 38) { my_snake_direction = key; moveSnake(KeyDirections.DOWN.getDirection()); //System.out.println("DOWN pressed"); } else if (key == 37 && my_snake_direction != 39) { my_snake_direction = key; moveSnake(KeyDirections.LEFT.getDirection()); //System.out.println("LEFT pressed"); } else if (key == 39 && my_snake_direction != 37) { my_snake_direction = key; moveSnake(KeyDirections.RIGHT.getDirection()); //System.out.println("RIGHT pressed"); } } } /** * The key that was just released. * @param the_event The event that just happened (used to acquire what key was released). */ public void keyReleased(final KeyEvent the_event) { } /** * The key that was just typed. * @param the_event The event that just happened (used to acquire what key was typed). */ public void keyTyped(final KeyEvent the_event) { } }
private void moveSnake(int direction) { //System.out.println(my_timer.getDelay()); boolean skipit = true; new_snake.clear(); my_panel.clearOldSnake(my_snake); //System.out.println(direction + ""); //If the desired direction is UP and the snake's not going down (can't go down to up, must go left or right first) if (direction == 38) { //System.out.println("Going UP"); Point newPoint = new Point(my_snake.get(my_snake.size() - 1).x - 1, my_snake.get(my_snake.size() - 1).y); my_snake.add(newPoint); //my_snake.remove(0); } //Want to go DOWN, but can't if going UP else if (direction == 40) { //System.out.println("Going DOWN"); Point newPoint = new Point(my_snake.get(my_snake.size() - 1).x + 1, my_snake.get(my_snake.size() - 1).y); my_snake.add(newPoint); //my_snake.remove(0); } //Want to go LEFT, but can't if going RIGHT else if (direction == 37) { //System.out.println("Going LEFT"); Point newPoint = new Point(my_snake.get(my_snake.size() - 1).x, my_snake.get(my_snake.size() - 1).y - 1); my_snake.add(newPoint); //my_snake.remove(0); } //Want to go RIGHT, but can't if going LEFT else if (direction == 39) { //System.out.println("Going RIGHT"); Point newPoint = new Point(my_snake.get(my_snake.size() - 1).x, my_snake.get(my_snake.size() - 1).y + 1); my_snake.add(newPoint); //my_snake.remove(0); } else { skipit = false; } if (skipit) { if (my_panel.growMode()) { if(my_panel.checkForLevelCompletion()) { my_current_level++; if (my_current_level == 11) { JOptionPane.showMessageDialog(null, "Good job. You beat the game."); my_current_level = 1; } my_timer.setDelay(my_timer.getDelay() - 80); newGame(); } } else { my_snake.remove(0); } my_panel.updateSnake(my_snake); if (my_panel.isCollided()) { //System.out.println("COLLIDED"); gameOver(); } } } private class MyTimer implements ActionListener { public void actionPerformed(final ActionEvent the_event) { moveSnake(my_snake_direction); } } private void gameOver() { my_timer.stop(); //System.out.println("Game over");
newGame(); my_panel.resetCollided(); } private class Listener implements ActionListener { public void actionPerformed(final ActionEvent the_event) { final String the_action = the_event.getActionCommand(); if (the_action.equals(my_menubar_game_newgame.getActionCommand())) { my_timer.setDelay(1000);
my_current_level = 1; newGame(); } else if (the_action.equals(my_menubar_game_quit.getActionCommand())) { System.exit(0); } else if (the_action.equals(my_menubar_help_rules.getActionCommand())) { JOptionPane.showMessageDialog(null, "Eric Sweeten\nSnake v1.0\n\n" + "Keep the snake on the green. Gather up all the food\n" + "(blue squares), and once all the food is gathered, you\n" + "pass the level. There are 10 levels total. Once you\n" + "pass the 10th level, you beat the game."); } else if (the_action.equals(my_menubar_help_about.getActionCommand())) { JOptionPane.showMessageDialog(null, "Eric Sweeten\nSnake v1.0\n\neric.sweeten@gmail.com"); } else if (the_action.equals(my_menubar_game_pause.getActionCommand())) { togglePause(); } } } private void togglePause() { if (my_timer.isRunning()) { my_timer.stop(); } else { my_timer.start(); } } }
|
|
|
5
|
Programación / Programación C/C++ / contador
|
en: 25 Marzo 2015, 03:07 am
|
hola tengo un problema con mi codigo necesito que imprima cuantas palabras hay en un arreglo bidimensional interactivo, me imprime bien cuantos caracteres hay por fila pero en palabras solo imprime 0, no se si haya alguna funcion para contar palabras o necesite modificar el codigo #include <stdio.h> #include <string.h> #define T 3 #define B 30 void carga(char[][B]); void cuenta(char[][B],int[]); int palabras(char[][B]); void imprime(int[],int ); int main(int argc, char *argv[]) { char mosco[T][B]; int cont,oso[T]; carga(mosco); cuenta(mosco,oso); palabras(mosco); imprime(oso,cont); return 0; } void carga(char mosco[][B]) { int i; for(i=0;i<T;i++) { } } void cuenta(char mosco[][B],int oso[T]) { int i=0; for( ;i<T;i++) { } } void imprime(int oso[],int cont) { int i=0,j=0; for(;i<T;i++) { printf("cad %d tiene =%d letras\n",i +1,oso [i ]); } for(;j<T;j++) { printf("cad %d tiene =%d palabras\n",j +1,cont ); } } int palabras(char mosco[][B]) { int cont,i=0,j=0; for( ;i<T;i++) { cont=0; for(;j<T&&mosco[i]!='\0';j++) { if (i != ' ' || i!= '\n' || i!= '\t') cont++; } } }
|
|
|
6
|
Programación / Programación C/C++ / recorrer arrays
|
en: 9 Marzo 2015, 03:54 am
|
tengo un arreglo de num pares interactivo de 10 y rellenado de 0 dig ejemplo: 4 0 0 2 0 80 0 0 20 6. como hago para que quede recorrido asi 4 2 80 20 6 0 0 0 0 0; en lenguaje c
|
|
|
7
|
Programación / Programación C/C++ / funciones paso por referencia
|
en: 3 Marzo 2015, 23:57 pm
|
hola tengo dudas sobre el tema de funciones, en este ejercicio debo pedir al usuario que ingrese los digitos se debe calcular la suma y debe imprimir tambien el area de memoria pero no me imprime la suma ni me deja leer los numeros al correr el programa, agradeceria su ayuda #include <stdio.h> int main(int argc, char *argv[]) { int var,a=0,b=0,c=0,resultado; printf(" a su direccion = %p\n",&a ); printf(" b su direccion = %p\n",&b ); printf(" c su direccion = %p\n",&c ); a=(a,b,c,resultado); printf("El resultado de la suma es %d",a ); } int suma(int a, int b,int c, int *resultado) { *resultado = a +b+c; return(*resultado); }
Mod: post corregido, asegurate de seleccionar tu codigo antes de usar las GeSHi
|
|
|
8
|
Programación / Programación C/C++ / ayuda
|
en: 8 Febrero 2015, 02:03 am
|
hola necesito ayuda este es mi fuente, necesito que imprima el importe de comision,el porcentaje correspondiente y muestra las ventas, solo falta que imprima el porcentaje pero no encuentro como corregirlo
gracias #include <stdio.h>
int main(int argc, char *argv[]) { float ventas,com; float comision; printf("Digitar ventas: \n"); scanf("%f",&ventas); if(ventas>=5000&&ventas<=20000) { if(ventas>=5000&&ventas<=10000) com=15; else if(ventas<=15000) com=25; else if(ventas>15000) com=35; else printf("Tu comision es del:%3.0f%%\n",com); comision=(ventas*com)/100; printf("Importe comision: %.2f\n",comision); } else printf("Sin comision\n"); getch(); return 0; }
|
|
|
9
|
Programación / Programación C/C++ / pseudocodigo
|
en: 13 Noviembre 2014, 03:36 am
|
hola tengo este programa que me pide convertir un numero arabigo a romano pero me marca error en el concatenar alguien podria ayudarme con los errores porfavor leer arabigo; n=arabigo/1000; para i<-1 hasta n Hacer romano<-romano concatenar M; FinPara arabigo<-arabigo mod 1000; n<-arabigo/1000; si n=9 entonces romano<-romano concatenar cm n<-n-9; FinSi si n=4 entonces romano<-romano concatener cd n<-n-4; FinSi si n>=5 Entonces concatenar(romano,D); n<-n-5; FinSi para x<-1 hasta n romano<-romano concatenar c; FinPara arabigo<-arabigo mod 1oo; n<-arabigo/10; si n=9 Entonces romano<-romano concatenar xc; n<-n-9; FinSi si n=4 entonces romano<-romano concatenar xl; n<-4; FinSi si n>=5 Entonces romano<-romano concatenar l; n<-n-5; FinSi para i<-1 hasta n romano concatenar x; FinPara romano<-romano mod 10; n<=arabigo/l si n=9 entonces romano<-romano concatenar ix; n<-n-9; FinSi si n=4 Entonces romano<-romano concatenar iv; n<-n-4; FinSi si n>=5 Entonces romano<-romano concatenar v; n<-n-5; FinSi para i<-1 hasta n romano<-romano+"V" FinPara escribir imprime romano; FinProceso
|
|
|
10
|
Programación / Programación C/C++ / operaciones con funciones
|
en: 6 Noviembre 2014, 04:06 am
|
hola necesito ayuda con este programa Escribe un programa que obtenga dos números y realice, mediante funciones, la suma resta, multiplicación y división de ellos.
La función main() debe pedir al usuario los dos números, empleando una instrucción switch llamar a la función correspondiente, recibir de la función el resultado, y luego desplegarlo al usuario.
Los nombres de las funciones son: fsuma(), fresta(), fmultiplica() y fdivide().
ya que no entiendo bien como se llama la funcion se los agradeceria mucho
|
|
|
|
|
|
|