elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  MySql Browser C++ y Qt
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: MySql Browser C++ y Qt  (Leído 3,219 veces)
43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 503



Ver Perfil
MySql Browser C++ y Qt
« en: 9 Marzo 2011, 07:29 »

Bueno por si a alguien le sirve dejo el source de un programita que hice para navegar en las bases de datos de algun servidor con MySql, puesto que ya existe mas de uno para windows, pero no encontre uno sencillo para Linux entonces me decidi a crearlo, mas que todo su uso esta destinado cuando se obtiene algun usuario y password para una BD o si se logra crear alguno por inyeccion SQL.
Todavia no estan implementados los threads para su uso, esto porque al menos en slackware no se nota el proceso de conexion y listado, pero en Windows si se nota un poco,

El code esta un poco desordenado y falta pulir algunas cosas, mas que todo respecto a las clases que utiliza, pero lo dejo por si alguien quiere mejorarlo o modificarlo.

Para windows se necesita compilar el plugin de mysql para que cargue el driver de conexion, el modo de hacerlo se lo encuentra con google.

Enlace de decarga del proyecto:
http://www.4shared.com/file/MxfRUC9d/MySql2tar.html

Unas capturas:





Saluos.


En línea


-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W
newprogQt

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: MySql Browser C++ y Qt
« Respuesta #1 en: 5 Abril 2011, 03:47 »

Perdon por revivir el tema, pero podés subir los archivos en zip porque tengo windows y lo que ponés es para linux y podés decirme como compilar el driver mysql porque no puedo correr los ejemplos de los tutos que encontre ni me corren los tutos para compilar mysql.
Gracias


En línea

43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 503



Ver Perfil
Re: MySql Browser C++ y Qt
« Respuesta #2 en: 7 Abril 2011, 04:00 »

Loa archivos .tar pueden abrirse con Winrar sin problemas, pero mejor te dejo el code asi lo armas directamente:

sql.h

Código
  1. #ifndef SQL_H
  2. #define SQL_H
  3. #include <QtSql>
  4. #include <QSqlDatabase>
  5. #include <QSqlQuery>
  6. #include <QMessageBox>
  7. #include <QListWidget>
  8. #include <QTreeWidget>
  9. #include <QtGui>
  10. class QTreeWidgetItem;
  11. class cMySql
  12. {
  13. public:
  14.    cMySql(){cItem=0;};
  15.    bool createConeccion(const QString sServer, const QString sBD, const QString sUser, const QString sPassword);
  16.    void closeConeccion();
  17.    void listBD(QListWidget *listQuery);
  18.    void listTables(QListWidget *listQuery, const QString sBD);
  19.    void listRows(QTreeWidget *qtWidget, QTreeWidgetItem *qtrItem, const QString sBD, const QString sTable, QIcon iconItem);
  20.    void editResults(const QString sBD, const QString sTable, const QString s1erColumn, const QString sColumn, QString sId, const QString sNewValue);
  21.    void MessageBox(const QString sTitle, const QString sMessage);
  22. private:
  23.    QSqlDatabase db;
  24.    QTreeWidgetItem *cItem;
  25. };
  26.  
  27. #endif // SQL_H
  28.  

sql.cpp

Código
  1. #include "sql.h"
  2. bool cMySql::createConeccion(const QString sServer, const QString sBD, const QString sUser, const QString sPassword)
  3. {
  4.    db = QSqlDatabase::addDatabase("QMYSQL");
  5.    db.setHostName(sServer);
  6.    db.setDatabaseName(sBD);
  7.    db.setUserName(sUser);
  8.    db.setPassword(sPassword);
  9.    db.setPort(3306);
  10.    if (!db.open()) {
  11.        MessageBox("Error al acceder a la Base de Datos",db.lastError().text());
  12.        return false;
  13.        }    
  14.    return true;
  15. }
  16. void cMySql::listBD(QListWidget *listQuery)
  17. {
  18.    listQuery->clear();    
  19.    QSqlQuery query;
  20.    query.exec("show databases");
  21.    while (query.next()) {
  22.        listQuery->addItem(query.value(0).toString());
  23.        qApp->processEvents(QEventLoop::AllEvents);
  24.    }
  25. }
  26. void cMySql::listTables(QListWidget *listQuery, const QString sBD)
  27. {
  28.    listQuery->clear();
  29.    QSqlQuery query;
  30.    query.exec("use " + sBD);
  31.    query.exec("SHOW TABLES");
  32.    while (query.next()) {
  33.        listQuery->addItem(query.value(0).toString());
  34.        qApp->processEvents(QEventLoop::AllEvents);
  35.    }
  36. }
  37. void cMySql::listRows(QTreeWidget *qtWidget, QTreeWidgetItem *qtrItem, const QString sBD, const QString sTable, QIcon iconItem)
  38. {
  39.    qtWidget->clear();    
  40.    for(int i=0;i<qtrItem->columnCount();i++)
  41.    {
  42.        qtrItem->setText(i, QApplication::translate("window", (const char *) "", 0, QApplication::UnicodeUTF8));
  43.    }
  44.    int i =0;
  45.    QSqlQuery query;
  46.    QSqlQuery query1;
  47.    query.exec("use " + sBD);
  48.    query.exec("DESCRIBE " + sTable);
  49.    while (query.next()) {    
  50.        qtrItem->setIcon(i, iconItem);
  51.        qtrItem->setText(i, QApplication::translate("window", (const char *) query.value(0).toString().toLatin1().data(), 0, QApplication::UnicodeUTF8));                
  52.        i++;
  53.        qApp->processEvents(QEventLoop::AllEvents);
  54.    }
  55.    qtWidget->setColumnCount(7);
  56.  
  57.    query1.exec("SELECT * FROM " + sTable);
  58.      while (query1.next()) {
  59.          cItem = new QTreeWidgetItem(qtWidget);
  60.          for(int j=0; j<i;j++)
  61.          {
  62.              const QString setData = query1.value(j).toString();
  63.              cItem->setText(j,(const char *)setData.toLatin1().data());
  64.              qApp->processEvents(QEventLoop::AllEvents);
  65.          }
  66.          qApp->processEvents(QEventLoop::AllEvents);
  67.        }    
  68. }
  69. void cMySql::editResults(QString sBD, QString sTable, QString s1erColumn, QString sColumn, QString sId, QString sNewValue)
  70. {
  71.    QSqlQuery query;
  72.    query.exec("use " + sBD);
  73.    if(query.exec("UPDATE " + sTable + " SET " + sColumn + "='" + sNewValue + "' WHERE " + s1erColumn + "=" + sId))
  74.        MessageBox("Edicion Correcta","Se actualizo el valor: " + sNewValue);
  75.    else MessageBox("error",query.lastError().text());
  76. }
  77.  
  78. void cMySql::closeConeccion()
  79. {
  80.    if(db.isOpen())db.close();
  81. }
  82. void cMySql::MessageBox(const QString sTitle, const QString sMessage)
  83. {
  84.    QMessageBox mBox;
  85.    mBox.setWindowTitle(sTitle);
  86.    mBox.setText(sTitle);
  87.    mBox.setInformativeText( sMessage);
  88.    mBox.setStandardButtons(QMessageBox::Ok);
  89.    mBox.setDefaultButton(QMessageBox::Ok);
  90.    mBox.setIcon(QMessageBox::Information);
  91.    mBox.exec();
  92. }
  93.  

window.h

Código
  1. #ifndef WINDOW_H
  2. #define WINDOW_H
  3. #include <QDialog>
  4. #include <QIcon>
  5. #include "sql.h"
  6. class QLineEdit;
  7. class QLabel;
  8. class QPushButton;
  9. class QGroupBox;
  10. class QListWidget;
  11. class QTreeWidget;
  12. class QTreeWidgetItem;
  13. class  QTreeWidgetItem;
  14. class QStandardItemModel;
  15. class dWindow: public QDialog
  16. {
  17.    Q_OBJECT
  18. public:
  19.    dWindow(QWidget *parent = 0);
  20.    ~dWindow();
  21.    void createTreeResult(const QString &sColumn, const int iTotal);
  22.    void setDataTreeResult(QTreeWidget *qtWidget, const QString &sData, int iColumna);
  23. protected:
  24.    void closeEvent(QCloseEvent *event);
  25. private slots:
  26.    void vQueryClicked();
  27.    void vQuery(const QString sServer, const QString sBD, const QString sUser, const QString sPassword);
  28.    void on_listBD_itemClicked();
  29.    void on_listTables_itemClicked();
  30.    void on_treeResult_itemClicked();
  31. private:
  32.    QLabel *labelUser;
  33.    QLabel *labelPassword;
  34.    QLabel *labelBD;
  35.    QLabel *labelServer;
  36.    QLabel *labelResBD;
  37.    QLabel *labelTables;
  38.    QLabel *labelRows;
  39.    QLineEdit *lineUser;
  40.    QLineEdit *linePassword;
  41.    QLineEdit *lineBD;
  42.    QLineEdit *lineServer;
  43.    QPushButton *butQuery;
  44.    QPushButton *butExit;
  45.    QGroupBox *groupBox;
  46.    QGroupBox *groupBox1;
  47.    QGroupBox *groupBox2;
  48.    QListWidget *listBD;
  49.    QListWidget *listTables;
  50.    QTreeWidget *treeResult;
  51.    QTreeWidgetItem *qtrItem;    
  52.    QIcon icon;
  53.    QIcon iconItem;
  54.    QTreeWidgetItem *cItem;
  55.    QStandardItemModel *model;
  56.    cMySql mysql;
  57. };
  58. #endif // WINDOW_H
  59.  

window.cpp

icon e iconItem usan archivos de recursos (find.png, items.png) que puedes agregarlos en el proyecto con las imagenes que gustes.

Código
  1. #include <QtGui>
  2. #include "window.h"
  3. #define MAX_LENGHT 20
  4. dWindow::dWindow(QWidget *parent)
  5.    :QDialog(parent)
  6. {
  7.    QFont fuente;
  8.    fuente.setFamily(QString::fromUtf8("Modern No. 20"));
  9.    fuente.setPointSize(14);
  10.    fuente.setBold(true);
  11.    fuente.setItalic(true);
  12.    fuente.setWeight(60);
  13.  
  14.    QFont fuente2;
  15.    fuente2.setFamily(QString::fromUtf8("MS Shell Dlg 2"));
  16.    fuente2.setPointSize(10);
  17.    fuente2.setBold(true);
  18.    fuente2.setWeight(50);
  19.  
  20.    QDesktopWidget *d = QApplication::desktop();
  21.    int ancho = d->width();
  22.    int alto = d->height();
  23.  
  24.    //Añadimos el icono del archivo de recursos
  25.    icon.addFile(QString::fromUtf8(":/icos/iconos/find.png"), QSize(), QIcon::Selected, QIcon::On);
  26.    iconItem.addFile(QString::fromUtf8(":/icos/iconos/items.png"), QSize(), QIcon::Selected, QIcon::On);
  27.  
  28.    //GROUPBOX PARA LA CONEXION
  29.    groupBox = new QGroupBox(this);
  30.    groupBox->setObjectName(QString::fromUtf8("gbDatos"));
  31.    groupBox->setGeometry(QRect(10, 10, 780, 100)); //X,Y,ANCHO,ALTO
  32.  
  33.    labelUser = new QLabel(tr("USUARIO"),groupBox);
  34.    labelUser->setGeometry(QRect(10, 20, 130, 25));
  35.  
  36.    lineUser = new QLineEdit(groupBox);
  37.    lineUser->setGeometry(QRect(10, 50, 130, 20));
  38.  
  39.    labelPassword = new QLabel(tr("PASSWORD"),groupBox);
  40.    labelPassword->setGeometry(QRect(145, 20, 130, 20));
  41.  
  42.    linePassword = new QLineEdit(groupBox);
  43.    linePassword->setEchoMode(QLineEdit::Password);
  44.    linePassword->setGeometry(QRect(145, 50, 130, 20));
  45.  
  46.    labelBD = new QLabel(tr("BASE DE DATOS"),groupBox);
  47.    labelBD->setGeometry(QRect(280, 20, 170, 25));
  48.  
  49.    lineBD = new QLineEdit(groupBox);
  50.    lineBD->setGeometry(QRect(280, 50, 170, 20));
  51.  
  52.    labelServer = new QLabel(tr("SERVIDOR"),groupBox);
  53.    labelServer->setGeometry(QRect(455, 20, 130, 25));
  54.  
  55.    lineServer = new QLineEdit(groupBox);
  56.    lineServer->setGeometry(QRect(455, 50, 170, 20));
  57.  
  58.    //buttons
  59.    butQuery = new QPushButton(tr("Iniciar consulta"),groupBox);
  60.    butQuery->setGeometry(QRect(630, 14, 145, 35));
  61.    butExit = new QPushButton(tr("Salir"),groupBox);
  62.    butExit->setGeometry(QRect(630, 58, 145, 35));
  63.  
  64.    //GROUPBOX PARA LOS RESULTADOS
  65.    groupBox1 = new QGroupBox(this);
  66.    groupBox1->setObjectName(QString::fromUtf8("gbResultado"));
  67.    groupBox1->setGeometry(QRect(10, 115, 780, 105));
  68.  
  69.    labelResBD = new QLabel(tr("Lista Bases de Datos"),groupBox1);
  70.    labelResBD->setGeometry(QRect(60, 20, 200, 25));
  71.    labelTables = new QLabel(tr("Lista Tablas de la Base de Datos"),groupBox1);
  72.    labelTables->setGeometry(QRect(450, 20, 300, 25));
  73.  
  74.    listBD = new QListWidget(groupBox1);
  75.    listBD->setGeometry(QRect(10, 45, 370, 50));
  76.  
  77.    listTables = new QListWidget(groupBox1);
  78.    listTables->setGeometry(QRect(395, 45, 370, 50));
  79.  
  80.    //GROUPBOX PARA LOS RESULTADOS DE LOS DATOS
  81.    groupBox2 = new QGroupBox(this);
  82.    groupBox2->setObjectName(QString::fromUtf8("gbDatos"));
  83.    groupBox2->setGeometry(QRect(10, 230, 780, 350));
  84.  
  85.    labelRows = new QLabel(tr("Lista datos encontrados en las tablas de la Base de Datos"),groupBox2);
  86.    labelRows->setGeometry(QRect(150, 20, 500, 25));
  87.  
  88.    treeResult = new QTreeWidget(groupBox2);
  89.    qtrItem = new QTreeWidgetItem();
  90.    model = new QStandardItemModel(treeResult);
  91.    treeResult->setHeaderItem(qtrItem);
  92.    treeResult->setObjectName(QString::fromUtf8("treeResult"));
  93.    treeResult->setGeometry(QRect(10, 45, 760, 300));    
  94.    treeResult->header()->setClickable(true);
  95.    QString iniciar = "";
  96.    createTreeResult(iniciar,7);
  97.  
  98.    //INCLUYENDO LA FUENTE DE LETRA
  99.    groupBox->setFont(fuente);
  100.    groupBox1->setFont(fuente);
  101.    groupBox2->setFont(fuente);
  102.    listBD->setFont(fuente2);
  103.    listTables->setFont(fuente2);
  104.    treeResult->setFont(fuente2);
  105.  
  106.    //Seteamos el maximo tamaño y numero de caracteres que puenden ingresar
  107.    lineUser->setMaxLength(MAX_LENGHT);
  108.    linePassword->setMaxLength(MAX_LENGHT);    
  109.    lineBD->setMaxLength(MAX_LENGHT);
  110.    lineServer->setMaxLength(MAX_LENGHT);
  111.  
  112.  
  113.    connect(butQuery,SIGNAL(clicked()),this,SLOT(vQueryClicked()));
  114.    connect(butExit,SIGNAL(clicked()),this,SLOT(close()));
  115.    connect(listBD,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(on_listBD_itemClicked()));
  116.    connect(listTables,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(on_listTables_itemClicked()));
  117.    connect(treeResult,SIGNAL(clicked(QModelIndex)),this,SLOT(on_treeResult_itemClicked()));
  118.  
  119.    groupBox->setTitle(QApplication::translate("Inicio", "REQUISITOS PARA INGRESAR A LA BASE DE DATOS", 0, QApplication::UnicodeUTF8));
  120.    groupBox1->setTitle(QApplication::translate("Inicio", "RESULTADOS DEL ESCANEO AL SERVIDOR DE BASE DE DATOS", 0, QApplication::UnicodeUTF8));
  121.    groupBox2->setTitle(QApplication::translate("Inicio", "RESULTADOS DE LA CONSULTA A LA TABLA EN LA BASE DE DATOS", 0, QApplication::UnicodeUTF8));
  122.    setWindowTitle(tr("MYSQL BROWSER BY 43H4FH44H45H4CH49H56H45H"));
  123.    Qt::WindowFlags f = Qt::Window ;
  124.    setWindowFlags(f);
  125.    setGeometry((ancho)-1100,(alto)-700,800,600);
  126.    setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 255);"));
  127.    setMaximumSize(800,600);
  128.    setMinimumSize(800,600);
  129.    setWindowIcon(icon);
  130. }
  131. dWindow::~dWindow()
  132. {
  133.    delete labelUser;
  134.    delete labelPassword;
  135.    delete labelBD;
  136.    delete labelServer;
  137.    delete labelResBD;
  138.    delete labelTables;
  139.    delete labelRows;
  140.    delete lineUser;
  141.    delete linePassword;
  142.    delete lineBD;
  143.    delete lineServer;
  144.    delete butQuery;
  145.    delete butExit;
  146.    delete groupBox;
  147.    delete groupBox1;
  148.    delete groupBox2;
  149.    delete listBD;
  150.    delete listTables;
  151.    delete treeResult;
  152.    delete qtrItem;
  153.    delete cItem;
  154.    delete model;
  155. }
  156.  
  157. void dWindow::vQueryClicked()
  158. {
  159.    listTables->clear();
  160.    listBD->clear();
  161.    treeResult->clear();
  162.    if(!lineServer->text().isEmpty() || !lineBD->text().isEmpty() || !lineUser->text().isEmpty()|| !linePassword->text().isEmpty())
  163.        {
  164.            vQuery(lineServer->text(),lineBD->text(),lineUser->text(),linePassword->text());
  165.        }
  166.    else mysql.MessageBox("Error en los Datos Ingresados", "Llene todos los datos antes de realizar la conexion");
  167. }
  168. void dWindow::vQuery(const QString sServer, const QString sBD, const QString sUser, const QString sPassword)
  169. {    
  170.    if(mysql.createConeccion(sServer,sBD,sUser,sPassword))
  171.    {
  172.        butQuery->setDisabled(true);
  173.        lineServer->setDisabled(true);
  174.        lineBD->setDisabled(true);
  175.        lineUser->setDisabled(true);
  176.        linePassword->setDisabled(true);
  177.        mysql.listBD(listBD);
  178.    }
  179. }
  180. void dWindow::on_listBD_itemClicked()
  181. {
  182.    listBD->setDisabled(true);
  183.    listTables->setDisabled(true);
  184.    treeResult->setDisabled(true);
  185.    listTables->clear();
  186.    treeResult->clear();
  187.    QListWidgetItem *curitem = listBD->currentItem();
  188.    QString text = curitem->text();
  189.    mysql.listTables(listTables,text);
  190.    listBD->setEnabled(true);
  191.    listTables->setEnabled(true);
  192. }
  193. void dWindow::on_listTables_itemClicked()
  194. {
  195.    listBD->setDisabled(true);
  196.    listTables->setDisabled(true);
  197.    treeResult->setDisabled(true);
  198.    treeResult->clear();
  199.    QListWidgetItem *curitem = listBD->currentItem();
  200.    QListWidgetItem *curitem2 = listTables->currentItem();
  201.    QString text = curitem->text();
  202.    listTables->setDisabled(true);
  203.    mysql.listRows(treeResult,qtrItem,text,curitem2->text(),iconItem);
  204.    listTables->setEnabled(true);
  205.    listBD->setEnabled(true);
  206.    treeResult->setEnabled(true);
  207. }
  208. void dWindow::on_treeResult_itemClicked()
  209. {
  210.    bool ok;
  211.    QString edit = QInputDialog::getText(this, tr("¿Desea editar este valor?"),tr("Valor Actual: ") + treeResult->currentIndex().data(Qt::DisplayRole).toString(),QLineEdit::Normal,treeResult->currentIndex().data(2).toString(),&ok,Qt::Dialog);
  212.    if (ok)
  213.    {
  214.       treeResult->currentItem()->setData(treeResult->currentIndex().column(),Qt::EditRole,edit);
  215.       mysql.editResults(listBD->currentItem()->text(),
  216.                         listTables->currentItem()->text(),
  217.                          qtrItem->data(0,Qt::DisplayRole).toString(),
  218.                          qtrItem->data(treeResult->currentIndex().column(),Qt::DisplayRole).toString(),
  219.                          treeResult->currentItem()->data(0,Qt::DisplayRole).toString(),edit);
  220.    }
  221. }
  222. void dWindow::createTreeResult(const QString &sColumn, int iTotal)
  223. {
  224.     for(int i=0;i<iTotal;i++)
  225.    {
  226.        qtrItem->setIcon(i, iconItem);
  227.        qtrItem->setText(i, QApplication::translate("window", (const char *) sColumn.toLatin1().data(), 0, QApplication::UnicodeUTF8));
  228.     }
  229. }
  230. void dWindow::closeEvent(QCloseEvent *event)
  231. {
  232.    mysql.closeConeccion();
  233.    event->accept();
  234. }
  235.  

main.cpp

Código
  1. #include <QtGui>
  2. #include "window.h"
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    QApplication app(argc, argv);
  7.    dWindow *win = new dWindow;
  8.    win->show();
  9.        return app.exec();
  10. }

Para compilar, el modo mas sencillo que encontre fue instalar el QT SDK http://qt.nokia.com/downloads/ (LGPL), luego instalar MySQL Server 5.1 (mysql-essential-5.1.55-win32.msi) en la ruta que gustes.

Luego entrar a Qt Command Prompt (si es win vista o 7 como admin).
Código
  1. configure -release -qt-sql-mysql -l mysql -I D:/MySQL/include -L D:/MySQL/lib/opt -static

En mi caso lo tenia instalado en la unidad D con win XP en la ruta MySQL, luego:

Código
  1. mingw32-make

Con eso bastaria para crear el plugin mysql.

Aqui te dejo un ejemplo compilado para windows por si quieres verlo.

http://www.4shared.com/file/RNFigoAz/Mysql.html

Bueno puedes mejorar varias cosas, asi que ahi te lo dejo  :P

Saludos.
En línea


-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
bt browser 2.0
Hacking Mobile
051r15 3 6,014 Último mensaje 20 Julio 2007, 20:56
por Nakp
Web Browser
Programación Visual Basic
pungados 6 2,058 Último mensaje 3 Diciembre 2007, 20:58
por pungados
Web Browser
.NET (C#, VB.NET, ASP)
Braayhaan 0 1,205 Último mensaje 6 Septiembre 2010, 16:43
por Braayhaan
Conexion en Mysql Query Browser
Bases de Datos
negux 2 3,759 Último mensaje 22 Febrero 2011, 17:40
por Nakp
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines