Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!-- http://www.forum-invaders.com.br/vb/showthread.php/40289-C%C3%B3digo-Fonte-Mult-Loader -->
- Outro programa que fiz para matar o tempo (é semelhante ao meu outro projeto em Delphi que pode ser visto <a href="http://www.forum-invaders.com.br/vb/showthread.php/40266-Source-Mult-Patcher?p=287277&viewfull=1#post287277" target="_blank">aqui</a>).<br>
- <div style="text-align: center;"><img src="http://dl.dropbox.com/u/1227623/Imagens/Outros/Invaders/Loader.jpg" alt="" border="0"></div><br>
- <hr><br>
- É um Loader para múltiplos programas, ele carrega as informações de um Xml com o seguinte formato.<br>
- <br>
- <ul><li style="">Nó <b><App></b> = Nó base de cada aplicação.<br>
- <ul><li style="">Atributo <b>Name</b> = Nome da aplicação.</li><li style="">Atributo <b>Args</b> = Argumentos que serão passados para a aplicação.</li><li style="">Atributo <b>Suspend</b> = Informa se o processo deve ser criado suspenso, antes de escrever as mudanças na memoria (Padrão false).<br>
- <ul><li style="">Nó <b><Binary></b> (Podem existir múltiplos nós para um mesmo arquivo) = Dados a serem escritos na memoria formatados byte a byte "AA FF 11"...<br>
- <ul><li style="">Atributo <b>Offset</b> = Posição a partir dá qual escrever os dados na memoria.</li><li style="">Atributo <b>Repeat</b> = Quantidade de vezes que a sequencia deve ser repetida (Padrão 1).</li><li style="">Atributo <b>AllAccess</b> = Indica se deve ser concedido acesso de Leitura/Escrita/Execução a esta parte da memoria (Padrão false).</li></ul></li><li style="">Nó <b><String></b> (Podem existir múltiplos nós para um mesmo arquivo) = Semelhante ao <Binary> podem tem como valor uma string a ser escrita na memoria.<br>
- <ul><li style="">Atributo <b>Offset</b> = Posição a partir dá qual escrever os dados na memoria.</li><li style="">Atributo <b>Repeat</b> = Quantidade de vezes que a string será repetida na memoria (o caractere Nulo é acrescentado ao final), (Padrão 1).</li><li style="">Atributo <b>AllAccess</b> = Indica se deve ser concedido acesso de Leitura/Escrita/Execução a esta parte da memoria (Padrão false).</li></ul></li></ul></li></ul></li></ul><br>
- <br>
- Obs: Todo dado numero deve ser informado no formato hexadecimal (Offset, Bytes, Repeat).<br>
- <br>
- <div class="bbcode_container">
- <div class="bbcode_description">Código PHP:</div>
- <div class="bbcode_code" style="height:132px;"><code><code><span style="color: #000000">
- <span style="color: #0000BB"></span><span style="color: #007700"><</span><span style="color: #0000BB">Applications</span><span style="color: #007700">>
- <br> <</span><span style="color: #0000BB">App Name</span><span style="color: #007700">=</span><span style="color: #DD0000">"AppName" </span><span style="color: #0000BB">Args</span><span style="color: #007700">=</span><span style="color: #DD0000">"-safe"</span><span style="color: #007700">>
- <br> <</span><span style="color: #0000BB">Binary Offset</span><span style="color: #007700">=</span><span style="color: #DD0000">"1111"</span><span style="color: #007700">></span><span style="color: #0000BB">01 02 03 04 05 06 07 09 10</span><span style="color: #007700"></</span><span style="color: #0000BB">Binary</span><span style="color: #007700">>
- <br> </</span><span style="color: #0000BB">App</span><span style="color: #007700">>
- <br> <</span><span style="color: #0000BB">App Name</span><span style="color: #007700">=</span><span style="color: #DD0000">"Test" </span><span style="color: #0000BB">Args</span><span style="color: #007700">=</span><span style="color: #DD0000">"-s" </span><span style="color: #0000BB">Suspend</span><span style="color: #007700">=</span><span style="color: #DD0000">"true"</span><span style="color: #007700">>
- <br> <</span><span style="color: #0000BB">String Offset</span><span style="color: #007700">=</span><span style="color: #DD0000">"403027" </span><span style="color: #0000BB">Repeat</span><span style="color: #007700">=</span><span style="color: #DD0000">"2"</span><span style="color: #007700">></span><span style="color: #0000BB">era</span><span style="color: #007700"></</span><span style="color: #0000BB">String</span><span style="color: #007700">>
- <br> <</span><span style="color: #0000BB">Binary Offset</span><span style="color: #007700">=</span><span style="color: #DD0000">"40302D" </span><span style="color: #0000BB">AllAccess</span><span style="color: #007700">=</span><span style="color: #DD0000">"true"</span><span style="color: #007700">></span><span style="color: #0000BB">53 53 53 53 53</span><span style="color: #007700"></</span><span style="color: #0000BB">Binary</span><span style="color: #007700">>
- <br> </</span><span style="color: #0000BB">App</span><span style="color: #007700">>
- <br></</span><span style="color: #0000BB">Applications</span><span style="color: #007700">>
- <br></span><span style="color: #0000BB"></span>
- </span>
- </code></code></div>
- </div><hr><br>
- <div style="text-align: center;"><a href="http://dl.dropbox.com/u/1227623/Downloads/Invaders/Loader.7z" target="_blank" rel="nofollow"><img src="http://dl.dropbox.com/u/1227623/Imagens/download-icone.jpg" alt="" border="0"></a><br>
- <a href="http://dl.dropbox.com/u/1227623/Downloads/Invaders/Loader.7z" target="_blank" rel="nofollow"><b>Download</b></a></div><br>
- <hr><br>
- Somente para constar foi feito em <b>C++</b> com <b>Qt 4.7</b>.<br>
- <br>
- <b>Header</b> MainWindow<br>
- <div class="bbcode_container">
- <div class="bbcode_description">Código PHP:</div>
- <div class="bbcode_code" style="height:372px;"><code><code><span style="color: #000000">
- <span style="color: #0000BB"></span><span style="color: #FF8000">#ifndef MAINWINDOW_H
- <br>#define MAINWINDOW_H
- <br>
- <br>#include "appinfo.h"
- <br>
- <br>#include <QMainWindow>
- <br>
- <br>#include <QtXml/QXmlStreamReader>
- <br>#include <QFile>
- <br>#include <QProcess>
- <br>#include <QFileDialog>
- <br>#include <QMessageBox>
- <br>#include <windows.h>
- <br>
- <br></span><span style="color: #007700">namespace </span><span style="color: #0000BB">Ui </span><span style="color: #007700">{
- <br>class </span><span style="color: #0000BB">MainWindow</span><span style="color: #007700">;
- <br>}
- <br>
- <br>class </span><span style="color: #0000BB">MainWindow </span><span style="color: #007700">: public </span><span style="color: #0000BB">QMainWindow
- <br></span><span style="color: #007700">{
- <br> </span><span style="color: #0000BB">Q_OBJECT
- <br>
- <br></span><span style="color: #007700">public:
- <br> </span><span style="color: #0000BB">explicit MainWindow</span><span style="color: #007700">(</span><span style="color: #0000BB">QWidget </span><span style="color: #007700">*</span><span style="color: #0000BB">parent </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">);
- <br> ~</span><span style="color: #0000BB">MainWindow</span><span style="color: #007700">();
- <br>
- <br>private </span><span style="color: #0000BB">slots</span><span style="color: #007700">:
- <br> </span><span style="color: #0000BB">void on_btnLoad_clicked</span><span style="color: #007700">();
- <br>
- <br> </span><span style="color: #0000BB">void on_btnAbout_clicked</span><span style="color: #007700">();
- <br>
- <br>private:
- <br> </span><span style="color: #0000BB">Ui</span><span style="color: #007700">::</span><span style="color: #0000BB">MainWindow </span><span style="color: #007700">*</span><span style="color: #0000BB">ui</span><span style="color: #007700">;
- <br>
- <br> </span><span style="color: #0000BB">QVector</span><span style="color: #007700"><</span><span style="color: #0000BB">AppInfo</span><span style="color: #007700">> </span><span style="color: #0000BB">Apps</span><span style="color: #007700">;
- <br>
- <br> </span><span style="color: #0000BB">void LoadXml</span><span style="color: #007700">();
- <br>};
- <br>
- <br></span><span style="color: #FF8000">#endif // MAINWINDOW_H
- <br></span><span style="color: #0000BB"></span>
- </span>
- </code></code></div>
- </div><b>Source</b> MainWindow<br>
- <div class="bbcode_container">
- <div class="bbcode_description">Código PHP:</div>
- <div class="bbcode_code" style="height:372px;"><code><code><span style="color: #000000">
- <span style="color: #0000BB"></span><span style="color: #FF8000">#include "mainwindow.h"
- <br>#include "ui_mainwindow.h"
- <br>
- <br></span><span style="color: #0000BB">MainWindow</span><span style="color: #007700">::</span><span style="color: #0000BB">MainWindow</span><span style="color: #007700">(</span><span style="color: #0000BB">QWidget </span><span style="color: #007700">*</span><span style="color: #0000BB">parent</span><span style="color: #007700">) :
- <br> </span><span style="color: #0000BB">QMainWindow</span><span style="color: #007700">(</span><span style="color: #0000BB">parent</span><span style="color: #007700">),
- <br> </span><span style="color: #0000BB">ui</span><span style="color: #007700">(new </span><span style="color: #0000BB">Ui</span><span style="color: #007700">::</span><span style="color: #0000BB">MainWindow</span><span style="color: #007700">)
- <br>{
- <br> </span><span style="color: #0000BB">ui</span><span style="color: #007700">-></span><span style="color: #0000BB">setupUi</span><span style="color: #007700">(</span><span style="color: #0000BB">this</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">QWidget</span><span style="color: #007700">::</span><span style="color: #0000BB">setWindowFlags</span><span style="color: #007700">(</span><span style="color: #0000BB">Qt</span><span style="color: #007700">::</span><span style="color: #0000BB">WindowMinimizeButtonHint </span><span style="color: #007700">| </span><span style="color: #0000BB">Qt</span><span style="color: #007700">::</span><span style="color: #0000BB">MSWindowsFixedSizeDialogHint</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">LoadXml</span><span style="color: #007700">();
- <br>}
- <br>
- <br></span><span style="color: #0000BB">MainWindow</span><span style="color: #007700">::~</span><span style="color: #0000BB">MainWindow</span><span style="color: #007700">()
- <br>{
- <br> </span><span style="color: #0000BB">delete ui</span><span style="color: #007700">;
- <br>}
- <br>
- <br></span><span style="color: #0000BB">void MainWindow</span><span style="color: #007700">::</span><span style="color: #0000BB">LoadXml</span><span style="color: #007700">()
- <br>{
- <br> </span><span style="color: #0000BB">QFile file</span><span style="color: #007700">(</span><span style="color: #DD0000">"./Applications.xml"</span><span style="color: #007700">);
- <br>
- <br> </span><span style="color: #0000BB">file</span><span style="color: #007700">.</span><span style="color: #0000BB">open</span><span style="color: #007700">(</span><span style="color: #0000BB">QIODevice</span><span style="color: #007700">::</span><span style="color: #0000BB">ReadOnly </span><span style="color: #007700">| </span><span style="color: #0000BB">QIODevice</span><span style="color: #007700">::</span><span style="color: #0000BB">Text</span><span style="color: #007700">);
- <br>
- <br> if(</span><span style="color: #0000BB">file</span><span style="color: #007700">.</span><span style="color: #0000BB">error</span><span style="color: #007700">())
- <br> {
- <br> </span><span style="color: #0000BB">ui</span><span style="color: #007700">-></span><span style="color: #0000BB">cmbApp</span><span style="color: #007700">-></span><span style="color: #0000BB">addItem</span><span style="color: #007700">(</span><span style="color: #DD0000">"Error"</span><span style="color: #007700">);
- <br> return;
- <br> }
- <br>
- <br> </span><span style="color: #0000BB">QXmlStreamReader xml</span><span style="color: #007700">(&</span><span style="color: #0000BB">file</span><span style="color: #007700">);
- <br>
- <br> </span><span style="color: #0000BB">AppInfo appinfo</span><span style="color: #007700">;
- <br> </span><span style="color: #0000BB">OffsetData offset</span><span style="color: #007700">;
- <br>
- <br> if(</span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">hasError</span><span style="color: #007700">())
- <br> {
- <br> </span><span style="color: #0000BB">ui</span><span style="color: #007700">-></span><span style="color: #0000BB">cmbApp</span><span style="color: #007700">-></span><span style="color: #0000BB">addItem</span><span style="color: #007700">(</span><span style="color: #DD0000">"Error"</span><span style="color: #007700">);
- <br> return;
- <br> }
- <br>
- <br> while(!</span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">atEnd</span><span style="color: #007700">())
- <br> {
- <br> if(</span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">readNext</span><span style="color: #007700">() == </span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">StartDocument</span><span style="color: #007700">)
- <br> {
- <br> continue;
- <br> }
- <br>
- <br> if(</span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">name</span><span style="color: #007700">() == </span><span style="color: #DD0000">"App"</span><span style="color: #007700">)
- <br> {
- <br> if(</span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">isStartElement</span><span style="color: #007700">())
- <br> {
- <br> </span><span style="color: #0000BB">appinfo</span><span style="color: #007700">.</span><span style="color: #0000BB">Offsets</span><span style="color: #007700">.</span><span style="color: #0000BB">clear</span><span style="color: #007700">();
- <br> </span><span style="color: #0000BB">appinfo</span><span style="color: #007700">.</span><span style="color: #0000BB">Name</span><span style="color: #007700">.</span><span style="color: #0000BB">clear</span><span style="color: #007700">();
- <br> </span><span style="color: #0000BB">appinfo</span><span style="color: #007700">.</span><span style="color: #0000BB">Args</span><span style="color: #007700">.</span><span style="color: #0000BB">clear</span><span style="color: #007700">();
- <br> </span><span style="color: #0000BB">appinfo</span><span style="color: #007700">.</span><span style="color: #0000BB">Suspended </span><span style="color: #007700">= </span><span style="color: #0000BB">false</span><span style="color: #007700">;
- <br>
- <br> </span><span style="color: #FF8000">//ui->cmbApp->addItem(xml.attributes().value("Name").toString());
- <br> </span><span style="color: #0000BB">appinfo</span><span style="color: #007700">.</span><span style="color: #0000BB">Name </span><span style="color: #007700">= </span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">attributes</span><span style="color: #007700">().</span><span style="color: #0000BB">value</span><span style="color: #007700">(</span><span style="color: #DD0000">"Name"</span><span style="color: #007700">).</span><span style="color: #0000BB">toString</span><span style="color: #007700">();
- <br> </span><span style="color: #0000BB">appinfo</span><span style="color: #007700">.</span><span style="color: #0000BB">Args </span><span style="color: #007700">= </span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">attributes</span><span style="color: #007700">().</span><span style="color: #0000BB">value</span><span style="color: #007700">(</span><span style="color: #DD0000">"Args"</span><span style="color: #007700">).</span><span style="color: #0000BB">toString</span><span style="color: #007700">();
- <br> </span><span style="color: #0000BB">appinfo</span><span style="color: #007700">.</span><span style="color: #0000BB">Suspended </span><span style="color: #007700">= (</span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">attributes</span><span style="color: #007700">().</span><span style="color: #0000BB">value</span><span style="color: #007700">(</span><span style="color: #DD0000">"Suspend"</span><span style="color: #007700">) == </span><span style="color: #DD0000">"true"</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">ui</span><span style="color: #007700">-></span><span style="color: #0000BB">cmbApp</span><span style="color: #007700">-></span><span style="color: #0000BB">addItem</span><span style="color: #007700">(</span><span style="color: #0000BB">appinfo</span><span style="color: #007700">.</span><span style="color: #0000BB">Name</span><span style="color: #007700">);
- <br> }
- <br> else if(</span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">isEndElement</span><span style="color: #007700">())
- <br> {
- <br> </span><span style="color: #0000BB">Apps</span><span style="color: #007700">.</span><span style="color: #0000BB">append</span><span style="color: #007700">(</span><span style="color: #0000BB">appinfo</span><span style="color: #007700">);
- <br> }
- <br> }
- <br> else if(</span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">name</span><span style="color: #007700">() == </span><span style="color: #DD0000">"Binary" </span><span style="color: #007700">&& </span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">isStartElement</span><span style="color: #007700">())
- <br> {
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Data</span><span style="color: #007700">.</span><span style="color: #0000BB">clear</span><span style="color: #007700">();
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Offset </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">AllAccess </span><span style="color: #007700">= </span><span style="color: #0000BB">false</span><span style="color: #007700">;
- <br>
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Offset </span><span style="color: #007700">= </span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">attributes</span><span style="color: #007700">().</span><span style="color: #0000BB">value</span><span style="color: #007700">(</span><span style="color: #DD0000">"Offset"</span><span style="color: #007700">).</span><span style="color: #0000BB">toString</span><span style="color: #007700">().</span><span style="color: #0000BB">toInt</span><span style="color: #007700">(</span><span style="color: #0000BB">NULL</span><span style="color: #007700">, </span><span style="color: #0000BB">16</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">AllAccess </span><span style="color: #007700">= (</span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">attributes</span><span style="color: #007700">().</span><span style="color: #0000BB">value</span><span style="color: #007700">(</span><span style="color: #DD0000">"AllAccess"</span><span style="color: #007700">) == </span><span style="color: #DD0000">"true"</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">qint16 repeat </span><span style="color: #007700">= </span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">attributes</span><span style="color: #007700">().</span><span style="color: #0000BB">value</span><span style="color: #007700">(</span><span style="color: #DD0000">"Repeat"</span><span style="color: #007700">).</span><span style="color: #0000BB">toString</span><span style="color: #007700">().</span><span style="color: #0000BB">toInt</span><span style="color: #007700">(</span><span style="color: #0000BB">NULL</span><span style="color: #007700">, </span><span style="color: #0000BB">16</span><span style="color: #007700">);
- <br>
- <br> if(</span><span style="color: #0000BB">repeat </span><span style="color: #007700">== </span><span style="color: #0000BB">0</span><span style="color: #007700">)
- <br> {
- <br> </span><span style="color: #0000BB">repeat </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;
- <br> }
- <br>
- <br> </span><span style="color: #0000BB">QStringList bytes </span><span style="color: #007700">= </span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">readElementText</span><span style="color: #007700">().</span><span style="color: #0000BB">split</span><span style="color: #007700">(</span><span style="color: #DD0000">' '</span><span style="color: #007700">);
- <br>
- <br> for(</span><span style="color: #0000BB">qint16 i </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">i </span><span style="color: #007700">< </span><span style="color: #0000BB">repeat</span><span style="color: #007700">; </span><span style="color: #0000BB">i</span><span style="color: #007700">++)
- <br> {
- <br> foreach(</span><span style="color: #0000BB">QString byte</span><span style="color: #007700">, </span><span style="color: #0000BB">bytes</span><span style="color: #007700">)
- <br> {
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Data</span><span style="color: #007700">.</span><span style="color: #0000BB">append</span><span style="color: #007700">(</span><span style="color: #0000BB">byte</span><span style="color: #007700">.</span><span style="color: #0000BB">toInt</span><span style="color: #007700">(</span><span style="color: #0000BB">NULL</span><span style="color: #007700">, </span><span style="color: #0000BB">16</span><span style="color: #007700">));
- <br> }
- <br> }
- <br>
- <br> </span><span style="color: #0000BB">appinfo</span><span style="color: #007700">.</span><span style="color: #0000BB">Offsets</span><span style="color: #007700">.</span><span style="color: #0000BB">append</span><span style="color: #007700">(</span><span style="color: #0000BB">offset</span><span style="color: #007700">);
- <br> }
- <br> else if(</span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">name</span><span style="color: #007700">() == </span><span style="color: #DD0000">"String" </span><span style="color: #007700">&& </span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">isStartElement</span><span style="color: #007700">())
- <br> {
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Data</span><span style="color: #007700">.</span><span style="color: #0000BB">clear</span><span style="color: #007700">();
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Offset </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">AllAccess </span><span style="color: #007700">= </span><span style="color: #0000BB">false</span><span style="color: #007700">;
- <br>
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Offset </span><span style="color: #007700">= </span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">attributes</span><span style="color: #007700">().</span><span style="color: #0000BB">value</span><span style="color: #007700">(</span><span style="color: #DD0000">"Offset"</span><span style="color: #007700">).</span><span style="color: #0000BB">toString</span><span style="color: #007700">().</span><span style="color: #0000BB">toInt</span><span style="color: #007700">(</span><span style="color: #0000BB">NULL</span><span style="color: #007700">, </span><span style="color: #0000BB">16</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">AllAccess </span><span style="color: #007700">= (</span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">attributes</span><span style="color: #007700">().</span><span style="color: #0000BB">value</span><span style="color: #007700">(</span><span style="color: #DD0000">"AllAccess"</span><span style="color: #007700">) == </span><span style="color: #DD0000">"true"</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">qint16 repeat </span><span style="color: #007700">= </span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">attributes</span><span style="color: #007700">().</span><span style="color: #0000BB">value</span><span style="color: #007700">(</span><span style="color: #DD0000">"Repeat"</span><span style="color: #007700">).</span><span style="color: #0000BB">toString</span><span style="color: #007700">().</span><span style="color: #0000BB">toInt</span><span style="color: #007700">(</span><span style="color: #0000BB">NULL</span><span style="color: #007700">, </span><span style="color: #0000BB">16</span><span style="color: #007700">);
- <br>
- <br> if(</span><span style="color: #0000BB">repeat </span><span style="color: #007700">== </span><span style="color: #0000BB">0</span><span style="color: #007700">)
- <br> {
- <br> </span><span style="color: #0000BB">repeat </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;
- <br> }
- <br>
- <br> </span><span style="color: #0000BB">QString temp </span><span style="color: #007700">= </span><span style="color: #0000BB">xml</span><span style="color: #007700">.</span><span style="color: #0000BB">readElementText</span><span style="color: #007700">();
- <br>
- <br> for(</span><span style="color: #0000BB">qint16 i </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">i </span><span style="color: #007700">< </span><span style="color: #0000BB">repeat</span><span style="color: #007700">; </span><span style="color: #0000BB">i</span><span style="color: #007700">++)
- <br> {
- <br> foreach(</span><span style="color: #0000BB">char byte</span><span style="color: #007700">, </span><span style="color: #0000BB">temp</span><span style="color: #007700">.</span><span style="color: #0000BB">toAscii</span><span style="color: #007700">())
- <br> {
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Data</span><span style="color: #007700">.</span><span style="color: #0000BB">append</span><span style="color: #007700">(</span><span style="color: #0000BB">byte</span><span style="color: #007700">);
- <br> }
- <br> }
- <br>
- <br> </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Data</span><span style="color: #007700">.</span><span style="color: #0000BB">append</span><span style="color: #007700">(</span><span style="color: #DD0000">'\0'</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">appinfo</span><span style="color: #007700">.</span><span style="color: #0000BB">Offsets</span><span style="color: #007700">.</span><span style="color: #0000BB">append</span><span style="color: #007700">(</span><span style="color: #0000BB">offset</span><span style="color: #007700">);
- <br> }
- <br> }
- <br>}
- <br>
- <br></span><span style="color: #0000BB">void MainWindow</span><span style="color: #007700">::</span><span style="color: #0000BB">on_btnLoad_clicked</span><span style="color: #007700">()
- <br>{
- <br> </span><span style="color: #0000BB">QFileDialog dialog</span><span style="color: #007700">(</span><span style="color: #0000BB">ui</span><span style="color: #007700">-></span><span style="color: #0000BB">centralWidget</span><span style="color: #007700">, </span><span style="color: #0000BB">Qt</span><span style="color: #007700">::</span><span style="color: #0000BB">Popup</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">QString filename</span><span style="color: #007700">;
- <br>
- <br> </span><span style="color: #0000BB">filename </span><span style="color: #007700">= </span><span style="color: #0000BB">dialog</span><span style="color: #007700">.</span><span style="color: #0000BB">getOpenFileName</span><span style="color: #007700">(</span><span style="color: #0000BB">this</span><span style="color: #007700">, (</span><span style="color: #DD0000">"Select the executable of " </span><span style="color: #007700">+ </span><span style="color: #0000BB">Apps</span><span style="color: #007700">[</span><span style="color: #0000BB">ui</span><span style="color: #007700">-></span><span style="color: #0000BB">cmbApp</span><span style="color: #007700">-></span><span style="color: #0000BB">currentIndex</span><span style="color: #007700">()].</span><span style="color: #0000BB">Name</span><span style="color: #007700">),
- <br> </span><span style="color: #DD0000">""</span><span style="color: #007700">, </span><span style="color: #DD0000">"Executable(*.exe);;Any(*.*)"</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">QFileDialog</span><span style="color: #007700">::</span><span style="color: #0000BB">DontConfirmOverwrite</span><span style="color: #007700">);
- <br>
- <br> if(!</span><span style="color: #0000BB">filename</span><span style="color: #007700">.</span><span style="color: #0000BB">isEmpty</span><span style="color: #007700">())
- <br> {
- <br> </span><span style="color: #0000BB">AppInfo app </span><span style="color: #007700">= </span><span style="color: #0000BB">Apps</span><span style="color: #007700">[</span><span style="color: #0000BB">ui</span><span style="color: #007700">-></span><span style="color: #0000BB">cmbApp</span><span style="color: #007700">-></span><span style="color: #0000BB">currentIndex</span><span style="color: #007700">()];
- <br>
- <br> </span><span style="color: #0000BB">PROCESS_INFORMATION proc_info</span><span style="color: #007700">;
- <br> </span><span style="color: #0000BB">STARTUPINFO start_info</span><span style="color: #007700">;
- <br>
- <br> </span><span style="color: #0000BB">ZeroMemory</span><span style="color: #007700">(&</span><span style="color: #0000BB">proc_info</span><span style="color: #007700">,</span><span style="color: #0000BB">sizeof</span><span style="color: #007700">(</span><span style="color: #0000BB">proc_info</span><span style="color: #007700">));
- <br> </span><span style="color: #0000BB">ZeroMemory</span><span style="color: #007700">(&</span><span style="color: #0000BB">start_info</span><span style="color: #007700">, </span><span style="color: #0000BB">sizeof</span><span style="color: #007700">(</span><span style="color: #0000BB">start_info</span><span style="color: #007700">));
- <br> </span><span style="color: #0000BB">start_info</span><span style="color: #007700">.</span><span style="color: #0000BB">cb </span><span style="color: #007700">= </span><span style="color: #0000BB">sizeof</span><span style="color: #007700">(</span><span style="color: #0000BB">start_info</span><span style="color: #007700">);
- <br>
- <br> </span><span style="color: #0000BB">CreateProcess</span><span style="color: #007700">(</span><span style="color: #0000BB">static_cast</span><span style="color: #007700"><</span><span style="color: #0000BB">LPCWSTR</span><span style="color: #007700">>(</span><span style="color: #0000BB">filename</span><span style="color: #007700">.</span><span style="color: #0000BB">toStdWString</span><span style="color: #007700">().</span><span style="color: #0000BB">c_str</span><span style="color: #007700">()), </span><span style="color: #0000BB">const_cast</span><span style="color: #007700"><</span><span style="color: #0000BB">LPWSTR</span><span style="color: #007700">>(</span><span style="color: #0000BB">app</span><span style="color: #007700">.</span><span style="color: #0000BB">Args</span><span style="color: #007700">.</span><span style="color: #0000BB">toStdWString</span><span style="color: #007700">().</span><span style="color: #0000BB">c_str</span><span style="color: #007700">()),
- <br> </span><span style="color: #0000BB">NULL</span><span style="color: #007700">, </span><span style="color: #0000BB">NULL</span><span style="color: #007700">, </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">, </span><span style="color: #0000BB">app</span><span style="color: #007700">.</span><span style="color: #0000BB">Suspended</span><span style="color: #007700">?</span><span style="color: #0000BB">CREATE_SUSPENDED</span><span style="color: #007700">:</span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">NULL</span><span style="color: #007700">, </span><span style="color: #0000BB">NULL</span><span style="color: #007700">, &</span><span style="color: #0000BB">start_info</span><span style="color: #007700">,&</span><span style="color: #0000BB">proc_info</span><span style="color: #007700">);
- <br>
- <br> </span><span style="color: #0000BB">HANDLE hproc </span><span style="color: #007700">= </span><span style="color: #0000BB">OpenProcess</span><span style="color: #007700">(</span><span style="color: #0000BB">PROCESS_ALL_ACCESS</span><span style="color: #007700">, </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">, </span><span style="color: #0000BB">proc_info</span><span style="color: #007700">.</span><span style="color: #0000BB">dwProcessId</span><span style="color: #007700">);
- <br>
- <br> if(!</span><span style="color: #0000BB">hproc</span><span style="color: #007700">)
- <br> {
- <br> </span><span style="color: #0000BB">hproc </span><span style="color: #007700">= </span><span style="color: #0000BB">proc_info</span><span style="color: #007700">.</span><span style="color: #0000BB">hProcess</span><span style="color: #007700">;
- <br> }
- <br>
- <br> if(</span><span style="color: #0000BB">hproc</span><span style="color: #007700">)
- <br> {
- <br> foreach(</span><span style="color: #0000BB">OffsetData offset</span><span style="color: #007700">, </span><span style="color: #0000BB">app</span><span style="color: #007700">.</span><span style="color: #0000BB">Offsets</span><span style="color: #007700">)
- <br> {
- <br> </span><span style="color: #0000BB">DWORD old_protect </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;
- <br>
- <br> if(</span><span style="color: #0000BB">VirtualProtectEx</span><span style="color: #007700">(</span><span style="color: #0000BB">hproc</span><span style="color: #007700">, (</span><span style="color: #0000BB">void</span><span style="color: #007700">*)</span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Offset</span><span style="color: #007700">, </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Data</span><span style="color: #007700">.</span><span style="color: #0000BB">size</span><span style="color: #007700">(), </span><span style="color: #0000BB">PAGE_EXECUTE_READWRITE</span><span style="color: #007700">, &</span><span style="color: #0000BB">old_protect</span><span style="color: #007700">))
- <br> {
- <br> for(</span><span style="color: #0000BB">qint16 i </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">i </span><span style="color: #007700">< </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Data</span><span style="color: #007700">.</span><span style="color: #0000BB">count</span><span style="color: #007700">(); </span><span style="color: #0000BB">i</span><span style="color: #007700">++)
- <br> {
- <br> </span><span style="color: #0000BB">char temp </span><span style="color: #007700">= </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Data</span><span style="color: #007700">[</span><span style="color: #0000BB">i</span><span style="color: #007700">];
- <br>
- <br> if(!</span><span style="color: #0000BB">WriteProcessMemory</span><span style="color: #007700">(</span><span style="color: #0000BB">hproc</span><span style="color: #007700">, (</span><span style="color: #0000BB">void</span><span style="color: #007700">*)(</span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Offset </span><span style="color: #007700">+ </span><span style="color: #0000BB">i</span><span style="color: #007700">), </span><span style="color: #0000BB">static_cast</span><span style="color: #007700"><</span><span style="color: #0000BB">LPCVOID</span><span style="color: #007700">>(&</span><span style="color: #0000BB">temp</span><span style="color: #007700">), </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">NULL</span><span style="color: #007700">))
- <br> {
- <br> </span><span style="color: #0000BB">TerminateProcess</span><span style="color: #007700">(</span><span style="color: #0000BB">proc_info</span><span style="color: #007700">.</span><span style="color: #0000BB">hProcess</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">qDebug</span><span style="color: #007700">(</span><span style="color: #DD0000">"Write Error %d"</span><span style="color: #007700">, </span><span style="color: #0000BB">GetLastError</span><span style="color: #007700">());
- <br> </span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">(</span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">::</span><span style="color: #0000BB">Critical</span><span style="color: #007700">,
- <br> </span><span style="color: #DD0000">"Load error"</span><span style="color: #007700">, </span><span style="color: #0000BB">QString</span><span style="color: #007700">(
- <br> </span><span style="color: #DD0000">"Failed to write memory\nError code %1\nProcess Handle %2\nOffset %3\nData size %4\n"</span><span style="color: #007700">)
- <br> .</span><span style="color: #0000BB">arg</span><span style="color: #007700">(</span><span style="color: #0000BB">GetLastError</span><span style="color: #007700">()).</span><span style="color: #0000BB">arg</span><span style="color: #007700">((int)</span><span style="color: #0000BB">hproc</span><span style="color: #007700">).</span><span style="color: #0000BB">arg</span><span style="color: #007700">(</span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Offset</span><span style="color: #007700">).</span><span style="color: #0000BB">arg</span><span style="color: #007700">(</span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Data</span><span style="color: #007700">.</span><span style="color: #0000BB">size</span><span style="color: #007700">()),
- <br> </span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">::</span><span style="color: #0000BB">Ok</span><span style="color: #007700">, </span><span style="color: #0000BB">this</span><span style="color: #007700">, </span><span style="color: #0000BB">Qt</span><span style="color: #007700">::</span><span style="color: #0000BB">Popup </span><span style="color: #007700">| </span><span style="color: #0000BB">Qt</span><span style="color: #007700">::</span><span style="color: #0000BB">MSWindowsFixedSizeDialogHint</span><span style="color: #007700">).</span><span style="color: #0000BB">exec</span><span style="color: #007700">();
- <br> return;
- <br> }
- <br> }
- <br>
- <br> if(!</span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">AllAccess</span><span style="color: #007700">)
- <br> {
- <br> </span><span style="color: #0000BB">DWORD trash </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;
- <br> </span><span style="color: #0000BB">VirtualProtectEx</span><span style="color: #007700">(</span><span style="color: #0000BB">hproc</span><span style="color: #007700">, (</span><span style="color: #0000BB">void</span><span style="color: #007700">*)</span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Offset</span><span style="color: #007700">, </span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Data</span><span style="color: #007700">.</span><span style="color: #0000BB">size</span><span style="color: #007700">(), </span><span style="color: #0000BB">old_protect</span><span style="color: #007700">, &</span><span style="color: #0000BB">trash</span><span style="color: #007700">);
- <br> }
- <br> }
- <br> else
- <br> {
- <br> </span><span style="color: #0000BB">TerminateProcess</span><span style="color: #007700">(</span><span style="color: #0000BB">proc_info</span><span style="color: #007700">.</span><span style="color: #0000BB">hProcess</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">qDebug</span><span style="color: #007700">(</span><span style="color: #DD0000">"Set Memory attributes error %d"</span><span style="color: #007700">, </span><span style="color: #0000BB">GetLastError</span><span style="color: #007700">());
- <br> </span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">(</span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">::</span><span style="color: #0000BB">Critical</span><span style="color: #007700">,
- <br> </span><span style="color: #DD0000">"Load error"</span><span style="color: #007700">, </span><span style="color: #0000BB">QString</span><span style="color: #007700">(
- <br> </span><span style="color: #DD0000">"Failed to set memory attributes\nError code %1\nProcess Handle %2\nOffset %3\nData size %4\n"</span><span style="color: #007700">)
- <br> .</span><span style="color: #0000BB">arg</span><span style="color: #007700">(</span><span style="color: #0000BB">GetLastError</span><span style="color: #007700">()).</span><span style="color: #0000BB">arg</span><span style="color: #007700">((int)</span><span style="color: #0000BB">hproc</span><span style="color: #007700">).</span><span style="color: #0000BB">arg</span><span style="color: #007700">(</span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Offset</span><span style="color: #007700">).</span><span style="color: #0000BB">arg</span><span style="color: #007700">(</span><span style="color: #0000BB">offset</span><span style="color: #007700">.</span><span style="color: #0000BB">Data</span><span style="color: #007700">.</span><span style="color: #0000BB">size</span><span style="color: #007700">()),
- <br> </span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">::</span><span style="color: #0000BB">Ok</span><span style="color: #007700">, </span><span style="color: #0000BB">this</span><span style="color: #007700">, </span><span style="color: #0000BB">Qt</span><span style="color: #007700">::</span><span style="color: #0000BB">Popup </span><span style="color: #007700">| </span><span style="color: #0000BB">Qt</span><span style="color: #007700">::</span><span style="color: #0000BB">MSWindowsFixedSizeDialogHint</span><span style="color: #007700">).</span><span style="color: #0000BB">exec</span><span style="color: #007700">();
- <br> return;
- <br> }
- <br> }
- <br>
- <br> if(</span><span style="color: #0000BB">app</span><span style="color: #007700">.</span><span style="color: #0000BB">Suspended</span><span style="color: #007700">)
- <br> {
- <br> </span><span style="color: #0000BB">ResumeThread</span><span style="color: #007700">(</span><span style="color: #0000BB">proc_info</span><span style="color: #007700">.</span><span style="color: #0000BB">hThread</span><span style="color: #007700">);
- <br> }
- <br>
- <br> </span><span style="color: #0000BB">CloseHandle</span><span style="color: #007700">(</span><span style="color: #0000BB">hproc</span><span style="color: #007700">);
- <br> }
- <br> else
- <br> {
- <br> </span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">(</span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">::</span><span style="color: #0000BB">Critical</span><span style="color: #007700">,
- <br> </span><span style="color: #DD0000">"Load error"</span><span style="color: #007700">, </span><span style="color: #0000BB">QString</span><span style="color: #007700">(
- <br> </span><span style="color: #DD0000">"Cant open handle\nError code %1"</span><span style="color: #007700">).</span><span style="color: #0000BB">arg</span><span style="color: #007700">(</span><span style="color: #0000BB">GetLastError</span><span style="color: #007700">()),
- <br> </span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">::</span><span style="color: #0000BB">Ok</span><span style="color: #007700">, </span><span style="color: #0000BB">this</span><span style="color: #007700">, </span><span style="color: #0000BB">Qt</span><span style="color: #007700">::</span><span style="color: #0000BB">Popup </span><span style="color: #007700">| </span><span style="color: #0000BB">Qt</span><span style="color: #007700">::</span><span style="color: #0000BB">MSWindowsFixedSizeDialogHint</span><span style="color: #007700">).</span><span style="color: #0000BB">exec</span><span style="color: #007700">();
- <br> }
- <br>
- <br> </span><span style="color: #0000BB">CloseHandle</span><span style="color: #007700">(</span><span style="color: #0000BB">proc_info</span><span style="color: #007700">.</span><span style="color: #0000BB">hProcess</span><span style="color: #007700">);
- <br> </span><span style="color: #0000BB">CloseHandle</span><span style="color: #007700">(</span><span style="color: #0000BB">proc_info</span><span style="color: #007700">.</span><span style="color: #0000BB">hThread</span><span style="color: #007700">);
- <br> }
- <br>}
- <br>
- <br></span><span style="color: #0000BB">void MainWindow</span><span style="color: #007700">::</span><span style="color: #0000BB">on_btnAbout_clicked</span><span style="color: #007700">()
- <br>{
- <br> </span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">(</span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">::</span><span style="color: #0000BB">Information</span><span style="color: #007700">,
- <br> </span><span style="color: #DD0000">"About"</span><span style="color: #007700">, </span><span style="color: #DD0000">"By Hacker_wap\nhttp://www.forum-invaders.com.br"</span><span style="color: #007700">,
- <br> </span><span style="color: #0000BB">QMessageBox</span><span style="color: #007700">::</span><span style="color: #0000BB">Ok</span><span style="color: #007700">, </span><span style="color: #0000BB">this</span><span style="color: #007700">, </span><span style="color: #0000BB">Qt</span><span style="color: #007700">::</span><span style="color: #0000BB">Popup </span><span style="color: #007700">| </span><span style="color: #0000BB">Qt</span><span style="color: #007700">::</span><span style="color: #0000BB">MSWindowsFixedSizeDialogHint</span><span style="color: #007700">).</span><span style="color: #0000BB">exec</span><span style="color: #007700">();
- <br>}
- <br></span><span style="color: #0000BB"></span>
- </span>
- </code></code></div>
- </div><b>Header</b> AppInfo<br>
- <div class="bbcode_container">
- <div class="bbcode_description">Código PHP:</div>
- <div class="bbcode_code" style="height:348px;"><code><code><span style="color: #000000">
- <span style="color: #0000BB"></span><span style="color: #FF8000">#ifndef APPINFO_H
- <br>#define APPINFO_H
- <br>
- <br>#include <QByteArray>
- <br>#include <QVector>
- <br>#include <Qstring>
- <br>
- <br>
- <br></span><span style="color: #0000BB">struct OffsetData
- <br></span><span style="color: #007700">{
- <br> </span><span style="color: #0000BB">qint32 Offset</span><span style="color: #007700">;
- <br> </span><span style="color: #0000BB">bool AllAccess</span><span style="color: #007700">;
- <br> </span><span style="color: #0000BB">QByteArray Data</span><span style="color: #007700">;
- <br>};
- <br>
- <br></span><span style="color: #0000BB">struct AppInfo
- <br></span><span style="color: #007700">{
- <br> </span><span style="color: #0000BB">QString Name</span><span style="color: #007700">;
- <br> </span><span style="color: #0000BB">QString Args</span><span style="color: #007700">;
- <br> </span><span style="color: #0000BB">bool Suspended</span><span style="color: #007700">;
- <br> </span><span style="color: #0000BB">QString VersionOrHash</span><span style="color: #007700">;
- <br> </span><span style="color: #0000BB">QVector</span><span style="color: #007700"><</span><span style="color: #0000BB">OffsetData</span><span style="color: #007700">> </span><span style="color: #0000BB">Offsets</span><span style="color: #007700">;
- <br>};
- <br>
- <br></span><span style="color: #FF8000">//QVector<AppInfo> AppDatas;
- <br>
- <br>#endif // APPINFO_H
- <br></span><span style="color: #0000BB"></span>
- </span>
- </code></code></div>
- </div>Espero que tenha alguma utilidade para alguém <img src="images/smilies/smile.gif" alt="" title="Sorrindo" class="inlineimg" border="0">.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement