diff options
| author | Cyrille Bagard <nocbos@gmail.com> | 2017-10-18 20:50:10 (GMT) | 
|---|---|---|
| committer | Cyrille Bagard <nocbos@gmail.com> | 2017-10-18 20:50:10 (GMT) | 
| commit | dce9d9cdfef1d37ef11a987a21f36e83b6b1944f (patch) | |
| tree | 830623ade20e892954fcbddd3b7b05d09aac1dd7 /plugins/pychrysa | |
| parent | 1e7c7de85438749d3faf7b76984b86a9c088fbc1 (diff) | |
Created plugins for the Dex and Dalvik support.
Diffstat (limited to 'plugins/pychrysa')
| -rw-r--r-- | plugins/pychrysa/format/Makefile.am | 5 | ||||
| -rw-r--r-- | plugins/pychrysa/format/dex/Makefile.am | 16 | ||||
| -rw-r--r-- | plugins/pychrysa/format/dex/class.c | 107 | ||||
| -rw-r--r-- | plugins/pychrysa/format/dex/class.h | 42 | ||||
| -rw-r--r-- | plugins/pychrysa/format/dex/dex.c | 288 | ||||
| -rw-r--r-- | plugins/pychrysa/format/dex/dex.h | 42 | ||||
| -rw-r--r-- | plugins/pychrysa/format/dex/module.c | 86 | ||||
| -rw-r--r-- | plugins/pychrysa/format/dex/module.h | 39 | ||||
| -rw-r--r-- | plugins/pychrysa/format/module.c | 3 | 
9 files changed, 2 insertions, 626 deletions
| diff --git a/plugins/pychrysa/format/Makefile.am b/plugins/pychrysa/format/Makefile.am index 71f0022..e59cf8a 100644 --- a/plugins/pychrysa/format/Makefile.am +++ b/plugins/pychrysa/format/Makefile.am @@ -7,8 +7,7 @@ libpychrysaformat_la_SOURCES =			\  	module.h module.c					\  	symbol.h symbol.c -libpychrysaformat_la_LIBADD =			\ -	dex/libpychrysaformatdex.la +libpychrysaformat_la_LIBADD =   libpychrysaformat_la_LDFLAGS =  @@ -18,4 +17,4 @@ AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_CFLAGS) $(LIBPYGOBJE  AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS) -SUBDIRS = dex +SUBDIRS =  diff --git a/plugins/pychrysa/format/dex/Makefile.am b/plugins/pychrysa/format/dex/Makefile.am deleted file mode 100644 index ebf8966..0000000 --- a/plugins/pychrysa/format/dex/Makefile.am +++ /dev/null @@ -1,16 +0,0 @@ - -noinst_LTLIBRARIES = libpychrysaformatdex.la - -libpychrysaformatdex_la_SOURCES =		\ -	class.h class.c						\ -	dex.h dex.c							\ -	module.h module.c - - -libpychrysaformatdex_la_LDFLAGS =  - - -AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_CFLAGS) $(LIBPYGOBJECT_CFLAGS) \ -	-I../../../../src - -AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS) diff --git a/plugins/pychrysa/format/dex/class.c b/plugins/pychrysa/format/dex/class.c deleted file mode 100644 index 13b1f2a..0000000 --- a/plugins/pychrysa/format/dex/class.c +++ /dev/null @@ -1,107 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * class.c - équivalent Python du fichier "format/dex/class.c" - * - * Copyright (C) 2012-2017 Cyrille Bagard - * - *  This file is part of Chrysalide. - * - *  Chrysalide is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 3 of the License, or - *  (at your option) any later version. - * - *  Chrysalide is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - - -#include "class.h" - - -#include <pygobject.h> - - -#include <format/dex/class.h> - - -#include "../../helpers.h" - - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : -                                                            * -*                                                                             * -*  Description : Fournit un accès à une définition de type à diffuser.        * -*                                                                             * -*  Retour      : Définition d'objet pour Python.                              * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -PyTypeObject *get_python_dex_class_type(void) -{ -    static PyMethodDef py_dex_class_methods[] = { -        { NULL } -    }; - -    static PyGetSetDef py_dex_class_getseters[] = { -        { NULL } -    }; - -    static PyTypeObject py_dex_class_type = { - -        PyVarObject_HEAD_INIT(NULL, 0) - -        .tp_name        = "pychrysalide.format.dex.DexClass", -        .tp_basicsize   = sizeof(PyGObject), - -        .tp_flags       = Py_TPFLAGS_DEFAULT, - -        .tp_doc         = "PyChrysalide Dex class.", - -        .tp_methods     = py_dex_class_methods, -        .tp_getset      = py_dex_class_getseters - -    }; - -    return &py_dex_class_type; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : module = module dont la définition est à compléter.          * -*                                                                             * -*  Description : Prend en charge l'objet 'pychrysalide.format.dex.DexClass'.  * -*                                                                             * -*  Retour      : Bilan de l'opération.                                        * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -bool register_python_dex_class(PyObject *module) -{ -    PyTypeObject *py_dex_class_type;        /* Type Python 'DexClass'      */ -    PyObject *dict;                         /* Dictionnaire du module      */ - -    py_dex_class_type = get_python_dex_class_type(); - -    dict = PyModule_GetDict(module); - -    if (!register_class_for_pygobject(dict, G_TYPE_DEX_CLASS, py_dex_class_type, &PyGObject_Type)) -        return false; - -    return true; - -} diff --git a/plugins/pychrysa/format/dex/class.h b/plugins/pychrysa/format/dex/class.h deleted file mode 100644 index bd2d2a5..0000000 --- a/plugins/pychrysa/format/dex/class.h +++ /dev/null @@ -1,42 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * class.h - prototypes pour l'équivalent Python du fichier "format/dex/class.h" - * - * Copyright (C) 2012-2017 Cyrille Bagard - * - *  This file is part of Chrysalide. - * - *  Chrysalide is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 3 of the License, or - *  (at your option) any later version. - * - *  Chrysalide is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - - -#ifndef _PLUGINS_PYCHRYSA_FORMAT_DEX_CLASS_H -#define _PLUGINS_PYCHRYSA_FORMAT_DEX_CLASS_H - - -#include <Python.h> -#include <stdbool.h> - - - -/* Fournit un accès à une définition de type à diffuser. */ -PyTypeObject *get_python_dex_class_type(void); - -/* Prend en charge l'objet 'pychrysalide.format.dex.DexClass'. */ -bool register_python_dex_class(PyObject *module); - - - -#endif  /* _PLUGINS_PYCHRYSA_FORMAT_DEX_CLASS_H */ diff --git a/plugins/pychrysa/format/dex/dex.c b/plugins/pychrysa/format/dex/dex.c deleted file mode 100644 index 0eaf8a1..0000000 --- a/plugins/pychrysa/format/dex/dex.c +++ /dev/null @@ -1,288 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * dex.c - équivalent Python du fichier "format/dex/dex.c" - * - * Copyright (C) 2012-2017 Cyrille Bagard - * - *  This file is part of Chrysalide. - * - *  Chrysalide is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 3 of the License, or - *  (at your option) any later version. - * - *  Chrysalide is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - - -#include "dex.h" - - -#include <pygobject.h> - - -#include <i18n.h> - - -#include <format/dex/class.h> -#include <format/dex/dex.h> - - -#include "../executable.h" -#include "../../analysis/content.h" -#include "../../helpers.h" - - - -/* Crée un nouvel objet Python de type 'DexFormat'. */ -static PyObject *py_dex_format_new(PyTypeObject *, PyObject *, PyObject *); - -/* Dénombre le nombre de classes trouvées. */ -static PyObject *py_dex_format_count_classes(PyObject *, PyObject *); - -/* Fournit une classe du format chargée en mémoire. */ -static PyObject *py_dex_format_get_class(PyObject *, PyObject *); - - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : type = type de l'objet à instancier.                         * -*                args = arguments fournis à l'appel.                          * -*                kwds = arguments de type key=val fournis.                    * -*                                                                             * -*  Description : Crée un nouvel objet Python de type 'DexFormat'.             * -*                                                                             * -*  Retour      : Instance Python mise en place.                               * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static PyObject *py_dex_format_new(PyTypeObject *type, PyObject *args, PyObject *kwds) -{ -    PyObject *result;                       /* Instance à retourner        */ -    PyObject *content_obj;                  /* Objet pour le contenu       */ -    PyObject *parent_obj;                   /* Objet pour le parent        */ -    PyObject *status_obj;                   /* Objet pour la progression   */ -    int ret;                                /* Bilan de lecture des args.  */ -    GBinContent *content;                   /* Instance GLib du contenu    */ -    GExeFormat *parent;                     /* Instance GLib du parent     */ -    GtkStatusStack *status;                 /* Instance GTK de suivi       */ -    GBinFormat *format;                     /* Création GLib à transmettre */ - -    ret = PyArg_ParseTuple(args, "OOO", &content_obj, &parent_obj, &status_obj); -    if (!ret) return NULL; - -    ret = PyObject_IsInstance(content_obj, (PyObject *)get_python_binary_content_type()); -    if (!ret) -    { -        PyErr_SetString(PyExc_TypeError, _("The first argument must be an instance of BinContent.")); -        return NULL; -    } - -    content = G_BIN_CONTENT(pygobject_get(content_obj)); - -    if (parent_obj == Py_None) -        parent = NULL; - -    else -    { -        ret = PyObject_IsInstance(parent_obj, (PyObject *)get_python_executable_format_type()); -        if (!ret) -        { -            PyErr_SetString(PyExc_TypeError, _("The second argument must be a container format or None.")); -            return NULL; -        } - -        parent = G_EXE_FORMAT(pygobject_get(parent_obj)); - -    } - -    if (status_obj == Py_None) -        status = NULL; - -    else -    { -        ret = PyObject_IsInstance(status_obj, (PyObject *)get_python_binary_content_type()); -        if (!ret) -        { -            PyErr_SetString(PyExc_TypeError, _("The third argument must be a status bar object or None.")); -            return NULL; -        } - -        status = GTK_STATUS_STACK(pygobject_get(status_obj)); - -    } - -    format = g_dex_format_new(content, parent, status); -    if (format == NULL) -    { -        PyErr_SetString(PyExc_RuntimeError, _("Unable to load the DEX format.")); -        return NULL; -    } - -    result = pygobject_new(G_OBJECT(format)); - -    g_object_unref(format); - -    return (PyObject *)result; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : self = classe représentant un binaire.                       * -*                args = arguments fournis à l'appel.                          * -*                                                                             * -*  Description : Dénombre le nombre de classes trouvées.                      * -*                                                                             * -*  Retour      : Quantité de classes présentes.                               * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static PyObject *py_dex_format_count_classes(PyObject *self, PyObject *args) -{ -    PyObject *result;                       /* Trouvailles à retourner     */ -    GDexFormat *format;                     /* Version native              */ -    size_t count;                           /* Quantité à retourner        */ - -    format = G_DEX_FORMAT(pygobject_get(self)); - -    count = g_dex_format_count_classes(format); - -    result = PyLong_FromLong(count); - -    return result; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : self = classe représentant un binaire.                       * -*                args = arguments fournis à l'appel.                          * -*                                                                             * -*  Description : Fournit une classe du format chargée en mémoire.             * -*                                                                             * -*  Retour      : Instance représentant une classe chargée.                    * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static PyObject *py_dex_format_get_class(PyObject *self, PyObject *args) -{ -    PyObject *result;                       /* Trouvailles à retourner     */ -    int ret;                                /* Bilan de lecture des args.  */ -    int index;                              /* Indice de la classe         */ -    GDexFormat *format;                     /* Version native              */ -    GDexClass *class;                       /* Classe à communiquer        */ - -    ret = PyArg_ParseTuple(args, "i", &index); -    if (!ret) Py_RETURN_NONE; - -    format = G_DEX_FORMAT(pygobject_get(self)); - -    class = g_dex_format_get_class(format, index); -    if (class == NULL) Py_RETURN_NONE; - -    result = pygobject_new(G_OBJECT(class)); - -    return result; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : -                                                            * -*                                                                             * -*  Description : Fournit un accès à une définition de type à diffuser.        * -*                                                                             * -*  Retour      : Définition d'objet pour Python.                              * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -PyTypeObject *get_python_dex_format_type(void) -{ -    static PyMethodDef py_dex_format_methods[] = { -        { -            "count_classes", (PyCFunction)py_dex_format_count_classes, -            METH_NOARGS, -            "count_classes($self, /)\n--\n\nCount the quantity of loaded Dex classes." -        }, -        { -            "get_class", (PyCFunction)py_dex_format_get_class, -            METH_VARARGS, -            "get_class($self, index, /)\n--\n\nProvide a given loaded Dex class." -        }, -        { NULL } -    }; - -    static PyGetSetDef py_dex_format_getseters[] = { -        { NULL } -    }; - -    static PyTypeObject py_dex_format_type = { - -        PyVarObject_HEAD_INIT(NULL, 0) - -        .tp_name        = "pychrysalide.format.dex.DexFormat", -        .tp_basicsize   = sizeof(PyGObject), - -        .tp_flags       = Py_TPFLAGS_DEFAULT, - -        .tp_doc         = "PyChrysalide Dex format", - -        .tp_methods     = py_dex_format_methods, -        .tp_getset      = py_dex_format_getseters, -        .tp_new         = (newfunc)py_dex_format_new - -    }; - -    return &py_dex_format_type; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : module = module dont la définition est à compléter.          * -*                                                                             * -*  Description : Prend en charge l'objet 'pychrysalide.format.dex.DexFormat'. * -*                                                                             * -*  Retour      : Bilan de l'opération.                                        * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -bool register_python_dex_format(PyObject *module) -{ -    PyTypeObject *py_dex_format_type;       /* Type Python 'DexFormat'     */ -    PyObject *dict;                         /* Dictionnaire du module      */ - -    py_dex_format_type = get_python_dex_format_type(); - -    dict = PyModule_GetDict(module); - -    if (!register_class_for_pygobject(dict, G_TYPE_DEX_FORMAT, -                                  py_dex_format_type, get_python_executable_format_type())) -        return false; - -    return true; - -} diff --git a/plugins/pychrysa/format/dex/dex.h b/plugins/pychrysa/format/dex/dex.h deleted file mode 100644 index 0871875..0000000 --- a/plugins/pychrysa/format/dex/dex.h +++ /dev/null @@ -1,42 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * dex.h - prototypes pour l'équivalent Python du fichier "format/dex/dex.h" - * - * Copyright (C) 2012-2017 Cyrille Bagard - * - *  This file is part of Chrysalide. - * - *  Chrysalide is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 3 of the License, or - *  (at your option) any later version. - * - *  Chrysalide is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - - -#ifndef _PLUGINS_PYCHRYSA_FORMAT_DEX_DEX_H -#define _PLUGINS_PYCHRYSA_FORMAT_DEX_DEX_H - - -#include <Python.h> -#include <stdbool.h> - - - -/* Fournit un accès à une définition de type à diffuser. */ -PyTypeObject *get_python_dex_format_type(void); - -/* Prend en charge l'objet 'pychrysalide.format.dex.DexFormat'. */ -bool register_python_dex_format(PyObject *); - - - -#endif  /* _PLUGINS_PYCHRYSA_FORMAT_DEX_DEX_H */ diff --git a/plugins/pychrysa/format/dex/module.c b/plugins/pychrysa/format/dex/module.c deleted file mode 100644 index 49004b7..0000000 --- a/plugins/pychrysa/format/dex/module.c +++ /dev/null @@ -1,86 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * module.c - intégration du répertoire dex en tant que module - * - * Copyright (C) 2012-2017 Cyrille Bagard - * - *  This file is part of Chrysalide. - * - *  Chrysalide is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 3 of the License, or - *  (at your option) any later version. - * - *  Chrysalide is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - - -#include "module.h" - - -#include "class.h" -#include "dex.h" - - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : module = module dont la définition est à compléter.          * -*                                                                             * -*  Description : Ajoute le module 'format.dex' au module Python.              * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -bool add_format_dex_module_to_python_module(PyObject *super) -{ -    bool result;                            /* Bilan à retourner           */ -    PyObject *module;                       /* Sous-module mis en place    */ -    int ret;                                /* Bilan d'un appel            */ - -    static PyModuleDef py_chrysalide_dex_module = { - -        .m_base = PyModuleDef_HEAD_INIT, - -        .m_name = "pychrysalide.format.dex", -        .m_doc = "Python module for Chrysalide.format.dex", - -        .m_size = -1, - -    }; - -    result = false; - -    module = PyModule_Create(&py_chrysalide_dex_module); -    if (module == NULL) return false; - -    ret = PyState_AddModule(super, &py_chrysalide_dex_module); -    if (ret != 0) goto loading_failed; - -    ret = _PyImport_FixupBuiltin(module, "pychrysalide.format.dex"); -    if (ret != 0) goto loading_failed; - -    Py_INCREF(module); -    ret = PyModule_AddObject(super, "dex", module); -    if (ret != 0) goto loading_failed; - -    result = true; - -    result &= register_python_dex_class(module); -    result &= register_python_dex_format(module); - - loading_failed: - -    return result; - -} diff --git a/plugins/pychrysa/format/dex/module.h b/plugins/pychrysa/format/dex/module.h deleted file mode 100644 index c43e12a..0000000 --- a/plugins/pychrysa/format/dex/module.h +++ /dev/null @@ -1,39 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * module.h - prototypes pour l'intégration du répertoire dex en tant que module - * - * Copyright (C) 2012-2017 Cyrille Bagard - * - *  This file is part of Chrysalide. - * - *  Chrysalide is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 3 of the License, or - *  (at your option) any later version. - * - *  Chrysalide is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - - -#ifndef _PLUGINS_PYCHRYSA_FORMAT_DEX_MODULE_H -#define _PLUGINS_PYCHRYSA_FORMAT_DEX_MODULE_H - - -#include <Python.h> -#include <stdbool.h> - - - -/* Ajoute le module 'format.dex' au module Python. */ -bool add_format_dex_module_to_python_module(PyObject *); - - - -#endif  /* _PLUGINS_PYCHRYSA_FORMAT_DEX_MODULE_H */ diff --git a/plugins/pychrysa/format/module.c b/plugins/pychrysa/format/module.c index d15fea8..642b1dc 100644 --- a/plugins/pychrysa/format/module.c +++ b/plugins/pychrysa/format/module.c @@ -31,7 +31,6 @@  #include "executable.h"  #include "format.h"  #include "symbol.h" -#include "dex/module.h"  #include "../access.h" @@ -87,8 +86,6 @@ bool add_format_module_to_python_module(PyObject *super)      result &= register_python_executable_format(module);      result &= register_python_binary_symbol(module); -    result &= add_format_dex_module_to_python_module(module); -      if (result)          register_access_to_python_module("pychrysalide.format", module); | 
