diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/analysis/binary.c | 13 | ||||
| -rw-r--r-- | src/common/xml.c | 37 | ||||
| -rw-r--r-- | src/common/xml.h | 5 | ||||
| -rw-r--r-- | src/dialogs/Makefile.am | 1 | ||||
| -rw-r--r-- | src/editor.c | 35 | ||||
| -rw-r--r-- | src/format/part.c | 2 | ||||
| -rw-r--r-- | src/gtkext/easygtk.c | 41 | ||||
| -rw-r--r-- | src/gtkext/easygtk.h | 3 | 
8 files changed, 131 insertions, 6 deletions
diff --git a/src/analysis/binary.c b/src/analysis/binary.c index f13a887..15be43e 100644 --- a/src/analysis/binary.c +++ b/src/analysis/binary.c @@ -445,6 +445,7 @@ GOpenidaBinary *g_openida_binary_new_from_file(const char *filename)  GOpenidaBinary *g_openida_binary_new_from_xml(xmlXPathContextPtr context, const char *path)  {      GOpenidaBinary *result;                 /* Adresse à retourner         */ +    char *type;                             /* Tupe de binaire à charger   */      size_t access_len;                      /* Taille d'un chemin interne  */      char *access;                           /* Chemin pour une sous-config.*/      char *filename;                         /* Chemin du binaire à charger */ @@ -456,6 +457,14 @@ GOpenidaBinary *g_openida_binary_new_from_xml(xmlXPathContextPtr context, const      result = NULL; +    /* Type */ + +    type = get_node_prop_value(context, path, "type"); + +    printf("###type### %s\n", type); + +    free(type); +      /* Chemin du fichier à retrouver */      access = strdup(path); @@ -627,6 +636,10 @@ bool g_openida_binary_save(const GOpenidaBinary *binary, xmlDocPtr xdoc, xmlXPat      result = true; +    /* Type */ + +    result &= add_string_attribute_to_node(xdoc, context, path, "type", "file"); +      /* Nom du fichier associé */      access = strdup(path); diff --git a/src/common/xml.c b/src/common/xml.c index eb450e0..a90bc65 100644 --- a/src/common/xml.c +++ b/src/common/xml.c @@ -878,7 +878,7 @@ bool add_content_to_node(xmlDocPtr xdoc, xmlXPathContextPtr context, const char  *                                                                             *  ******************************************************************************/ -bool add_string_attribute_to_node(xmlNodePtr node, const char *name, const char *value) +bool _add_string_attribute_to_node(xmlNodePtr node, const char *name, const char *value)  {      xmlAttrPtr attrib;                      /* Attribut créé et en place   */ @@ -891,6 +891,39 @@ bool add_string_attribute_to_node(xmlNodePtr node, const char *name, const char  /******************************************************************************  *                                                                             * +*  Paramètres  : xdoc    = structure XML chargée.                             * +*                context = contexte à utiliser pour les recherches.           * +*                path    = chemin d'accès au noeud visé.                      * +*                name    = nom de la propriété à créer.                       * +*                value   = chaîne de caractère à placer.                      * +*                                                                             * +*  Description : Ajoute une propriété à un noeud existant donné.              * +*                                                                             * +*  Retour      : true en cas de succès, false sinon.                          * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +bool add_string_attribute_to_node(xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path, const char *name, const char *value) +{ +    xmlNodePtr node;                        /* Noeud à modifier            */ +    xmlAttrPtr attrib;                      /* Attribut créé et en place   */ + +    if (value == NULL) return true; + +    node = ensure_node_exist(xdoc, context, path); +    if (node == NULL) return false; + +    attrib = xmlSetProp(node, BAD_CAST name, BAD_CAST value); + +    return (attrib != NULL); + +} + + +/****************************************************************************** +*                                                                             *  *  Paramètres  : node  = noeud dont le contenu est à mettre à jour.           *  *                name  = nom de la propriété à créer.                         *  *                value = valeur numérique à placer.                           * @@ -909,6 +942,6 @@ bool add_long_attribute_to_node(xmlNodePtr node, const char *name, long value)      snprintf(tmp, 11, "%ld", value); -    return add_string_attribute_to_node(node, name, tmp); +    return _add_string_attribute_to_node(node, name, tmp);  } diff --git a/src/common/xml.h b/src/common/xml.h index a555f56..988a6d7 100644 --- a/src/common/xml.h +++ b/src/common/xml.h @@ -124,7 +124,10 @@ xmlNodePtr ensure_node_exist(xmlDocPtr, xmlXPathContextPtr, const char *);  bool add_content_to_node(xmlDocPtr, xmlXPathContextPtr, const char *, const char *);  /* Ajoute une propriété à un noeud existant donné. */ -bool add_string_attribute_to_node(xmlNodePtr, const char *, const char *); +bool _add_string_attribute_to_node(xmlNodePtr, const char *, const char *); + +/* Ajoute une propriété à un noeud existant donné. */ +bool add_string_attribute_to_node(xmlDocPtr, xmlXPathContextPtr, const char *, const char *, const char *);  /* Ajoute une propriété à un noeud existant donné. */  bool add_long_attribute_to_node(xmlNodePtr, const char *, long); diff --git a/src/dialogs/Makefile.am b/src/dialogs/Makefile.am index 359ac95..16b2dc7 100644 --- a/src/dialogs/Makefile.am +++ b/src/dialogs/Makefile.am @@ -3,6 +3,7 @@ noinst_LTLIBRARIES  = libdialogs.la  libdialogs_la_SOURCES =					\  	about.h about.c						\ +	add_shellcode.h add_shellcode.c		\  	binparts.h binparts.c				\  	export.h export.c					\  	plugins.h plugins.c diff --git a/src/editor.c b/src/editor.c index 4211b73..ee1684a 100644 --- a/src/editor.c +++ b/src/editor.c @@ -52,6 +52,7 @@  #include "gtkext/gtkviewpanel.h"  #include "debug/debugger.h" +#include "dialogs/add_shellcode.h"  #include "dialogs/binparts.h"  #include "dialogs/export.h"  #include "dialogs/plugins.h" @@ -65,8 +66,6 @@ -void sigchld_handler(int num); -  /* Construit la fenêtre de l'éditeur. */ @@ -106,6 +105,9 @@ void mcb_view_code(GtkCheckMenuItem *, gpointer);  /* Affiche la boîte d'ajout d'un binaire au projet courant. */  void mcb_project_add_binary(GtkMenuItem *, gpointer); +/* Réagit au menu "Projet -> Ajouter un binaire -> Shellcode". */ +static void mcb_project_add_binary_shellcode(GtkMenuItem *, GObject *); +  /* Retire un binaire du projet courant. */  void mcb_project_remove_binary(GtkMenuItem *, gpointer); @@ -377,6 +379,15 @@ GtkWidget *create_editor(void)      submenuitem = qck_create_menu_item(NULL, NULL, _("Add a binary..."), G_CALLBACK(mcb_project_add_binary), result);      gtk_container_add(GTK_CONTAINER(menubar), submenuitem); +    submenuitem = qck_create_menu_item(NULL, NULL, _("Add a binary"), NULL, NULL); +    gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + +    submenubar = gtk_menu_new(); +    gtk_menu_item_set_submenu(GTK_MENU_ITEM(submenuitem), submenubar); + +    submenuitem = qck_create_menu_item(NULL, NULL, _("Shellcode"), G_CALLBACK(mcb_project_add_binary_shellcode), result); +    gtk_container_add(GTK_CONTAINER(submenubar), submenuitem); +      submenuitem = qck_create_menu_item(G_OBJECT(result), "menu_prj_remove_bin", _("Remove a binary"), NULL, NULL);      gtk_container_add(GTK_CONTAINER(menubar), submenuitem); @@ -1032,6 +1043,26 @@ void mcb_project_add_binary(GtkMenuItem *menuitem, gpointer data)  /******************************************************************************  *                                                                             *  *  Paramètres  : menuitem = élément de menu sélectionné.                      * +*                ref      = adresse de l'espace de référencement global.      * +*                                                                             * +*  Description : Réagit au menu "Projet -> Ajouter un binaire -> Shellcode".  * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void mcb_project_add_binary_shellcode(GtkMenuItem *menuitem, GObject *ref) +{ +    run_add_shellcode_assistant(get_current_openida_project(), GTK_WINDOW(ref)); + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : menuitem = élément de menu sélectionné.                      *  *                data     = adresse de l'espace de référencement global.      *  *                                                                             *  *  Description : Retire un binaire du projet courant.                         * diff --git a/src/format/part.c b/src/format/part.c index 006cb75..371c1ef 100644 --- a/src/format/part.c +++ b/src/format/part.c @@ -220,7 +220,7 @@ bool g_binary_part_save_to_xml(const GBinPart *part, xmlDocPtr xdoc, xmlNodePtr      node = add_node_to_node(xdoc, parent, "Part");      if (node == NULL) return false; -    result = add_string_attribute_to_node(node, "name", part->name); +    result = _add_string_attribute_to_node(node, "name", part->name);      result &= add_long_attribute_to_node(node, "offset", part->offset);      result &= add_long_attribute_to_node(node, "size", part->size); diff --git a/src/gtkext/easygtk.c b/src/gtkext/easygtk.c index 15071e0..3c8a29f 100644 --- a/src/gtkext/easygtk.c +++ b/src/gtkext/easygtk.c @@ -276,6 +276,47 @@ GtkWidget *qck_create_entry(GObject *object, const char *name, const char *text)  *                                                                             *  *  Paramètres  : object  = espace dédié à l'inscription de références.        *  *                name    = nom à donner au nouveau composant.                 * +*                handler = éventuelle fonction de sélection associée.         * +*                data    = données à transmettre avec l'événement si besoin.  * +*                                                                             * +*  Description : Crée et enregistre un composant 'GtkTextView'.               * +*                                                                             * +*  Retour      : Champ de saisie mis en place.                                * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +GtkWidget *qck_create_textview(GObject *object, const char *name, GCallback handler, gpointer data) +{ +    GtkWidget *result;                      /* Résultat à renvoyer         */ +    GtkTextBuffer *buffer;                  /* Tampon créé en interne GTK  */ + +    result = gtk_text_view_new(); + +    if (G_IS_OBJECT(object) && name != NULL) +    { +        gtk_widget_ref(result); +        g_object_set_data_full(object, name, result, (GtkDestroyNotify)g_object_unref); +    } + +    gtk_widget_show(result); + +    if (handler != NULL) +    { +        buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(result)); +        g_signal_connect(buffer, "changed", handler, data); +    } + +	return result; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : object  = espace dédié à l'inscription de références.        * +*                name    = nom à donner au nouveau composant.                 *  *                caption = intitulé du bouton à créer.                        *  *                handler = éventuelle fonction de sélection associée.         *  *                data    = données à transmettre avec l'événement si besoin.  * diff --git a/src/gtkext/easygtk.h b/src/gtkext/easygtk.h index 13a415a..51b9c67 100644 --- a/src/gtkext/easygtk.h +++ b/src/gtkext/easygtk.h @@ -50,6 +50,9 @@ GtkWidget *qck_create_label(GObject *, const char *, const char *);  /* Crée et enregistre un composant 'GtkEntry'. */  GtkWidget *qck_create_entry(GObject *, const char *, const char *); +/* Crée et enregistre un composant 'GtkTextView'. */ +GtkWidget *qck_create_textview(GObject *, const char *, GCallback, gpointer); +  /* Crée et enregistre un composant 'GtkButton'. */  GtkWidget *qck_create_button(GObject *, const char *, const char *, GCallback, gpointer);  | 
