电子科技大学逆向工程实验报告作业_第1页
电子科技大学逆向工程实验报告作业_第2页
电子科技大学逆向工程实验报告作业_第3页
电子科技大学逆向工程实验报告作业_第4页
电子科技大学逆向工程实验报告作业_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子科技大学实验报告 学生姓名:马侬学 号:20152*03*0* 指导教师:何兴高 日 期:2016.7.15一 题目名称:简易记事本软件逆向分析二 题目内容由于记事本功能简单,稍有经验的程序员都可以开发出与记事本功能近似的小软件,所以在一些编程语言工具书上也会出现仿照记事本功能作为参考的示例。为了便于分析因此选取了一个简易的记事本,因此本实验将着重研究从源程序到机器码的详细过程而不注重程序本身的功能。另一方面简易源程序代码约130多行。本实验目的是了解源程序是怎么一步步变成机器码的又是怎么在计算机上运行起来的。 三 知识点及介绍利用逆向工程技术,从可运行的程序系统出发,运用解密、反汇编、系

2、统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等。随着用户需求的复杂度越来越高软件开发的难度也在不断地上升快速高效的软件开发已成为项目成败的关键之一。为了提高程序员的产品率开发工具的选择尤为重要因为开发工具的自动化程度可以大大减少程序员繁琐重复的工作使其集中关注他所面临的特定领域的问题。为此当前的IDE不可避地要向用户隐藏着大量的操作细节而这些细节包含了大量的有价值的技术。 四 工具及介绍:在对软件进行逆向工程时,不可避免地需要用到多种工具,工具的合理使用,可以加快调试速度,提高逆

3、向工程的效率。对于逆向工程的调试环节来说,没有动态调试器将使用的调试工作很难进行。可以看出,各种有效的工具在逆向工程中占据着相当重要的地位,有必要对它们的用法做一探讨。PE Explorer简介:PE Explorer是功能超强的可视化Delphi、C+、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。功能极为强大的可视化汉化集成工具,可直接浏览、修改软件资源,包括菜单、对话框、字符串表等; 另外,还具备有 W32DASM 软件的反编译能力和PEditor 软件的 PE 文件头编辑功能,可以更容易的分析源代码,修复损坏了的资源,可以处理 PE 格式的文件如:EXE、DLL、

4、DRV、BPL、DPL、SYS、CPL、OCX、SCR 等 32 位可执行程序。该软件支持插件,你可以通过增加插件加强该软件的功能, 原公司在该工具中捆绑了 UPX 的脱壳插件、扫描器和反汇编器.,出口, 进口和延迟导入表的功能,使您可以查看所有的可执行文件使用的外部功能,和其中包含的DLL或库的基础上进行分类的结果。 这里一个非常有用的功能是语法的Viewer,它显示功能的调用语法,它知道和可以让你扩大自己的定义的语法数据库。非常好用。Dumpbin是VC自带的二进制转储工具可以将PE/COFF文件以文字可读的方式显示出来。Microsoft COFF 二进制文件转储器 (DUMP

5、BIN.EXE) 显示有关通用对象文件格式 (COFF) 二进制文件的信息。可以使用 DUMPBIN 检查 COFF 对象文件、标准 COFF 对象库、可执行文件和动态链接库 (DLL)。具有提供此DLL中所输出的符号的清单的功能。LINK.exe 将通用对象文件格式 (COFF) 对象文件和库链接起来,以创建可执行 (.exe) 文件或动态链接库 (DLL)。 五 源程序notepad.cpp:notepad:notepad(QWidget *parent) :    QMainWindow(parent),    ui(new U

6、i:notepad)    ui->setupUi(this);    this->setWindowTitle("new file");    QObject:connect(ui->NewFileaction, SIGNAL(triggered(),                  &

7、#160;  this, SLOT(NewFile();    QObject:connect(ui->OpenFileaction, SIGNAL(triggered(),                     this, SLOT(OpenFile();    QObject:connect(ui->SaveF

8、ileaction, SIGNAL(triggered(),                     this, SLOT(SaveFile();    QObject:connect(ui->SaveAsFileaction, SIGNAL(triggered(),        

9、             this, SLOT(SaveAsFile();    QObject:connect(ui->Coloraction, SIGNAL(triggered(),                     this, SL

10、OT(SetColor();    QObject:connect(ui->Fontaction, SIGNAL(triggered(),                     this, SLOT(SetFont();    QObject:connect(ui->Aboutaction, SIGNAL(triggered

11、(),                     this, SLOT(About();    QObject:connect(ui->Helpaction, SIGNAL(triggered(),              

12、       this, SLOT(Help();notepad:notepad()    delete ui;void notepad:changeEvent(QEvent *e)    QMainWindow:changeEvent(e);    switch (e->type()     case QEvent:LanguageChange:     &#

13、160;  ui->retranslateUi(this);        break;    default:        break;    void notepad:NewFile()    this->setWindowTitle("new file");    ui->Text-

14、>clear();void notepad:OpenFile()    QString filename = QFileDialog:getOpenFileName                       ( this, "get file",QDir:currentPath(), "(*.*)")

15、;    if (!filename.isEmpty()            QFile *file = new QFile;        file->setFileName(filename);        if (file->open(QIODevice:ReadOnly) = true) 

16、60;                  QTextStream in(file);            ui->Text->setText(in.readAll();            this-&g

17、t;setWindowTitle(filename);                else                    QMessageBox:information(this, "ERROR Occurs", "file not ex

18、ist");                file->close();        delete file;    void notepad:SaveFile()    QString filename = this->windowTitle(); /   if (pare

19、("new file") != 0)  /          QFile *file = new QFile;        file->setFileName(filename);        if (file->open(QIODevice:WriteOnly) = true)    

20、60;               QTextStream out(file);            out<Text->toPlainText();            file->close();  &#

21、160;         delete file;                else                    QMessageBox:information(this, "

22、;ERROR Occurs", "file open error");         /   void notepad:SaveAsFile()    QString filename = QFileDialog:getSaveFileName                &

23、#160;      ( this, "save file",QDir:currentPath();    QFile *file = new QFile;    file->setFileName(filename);    if (file->open(QIODevice:WriteOnly) = true)          &#

24、160; QTextStream out(file);        out<Text->toPlainText();        file->close();        delete file;        else        

25、    QMessageBox:information(this, "ERROR Occurs", "file open error");    void notepad:SetColor()    QColor color = QColorDialog:getColor(Qt:white, this);    if (color.isValid() = true)       

26、;     ui->Text->setTextColor(color);        else            QMessageBox:information(this, "ERROR Occurs", "set color error");    void notepad:SetFont() &#

27、160;  bool ok;    QFont font = QFontDialog:getFont(&ok, QFont("Arial", 18), this, "set font");    if (ok)            ui->Text->setFont(font);        else&#

28、160;           QMessageBox:information(this, "ERROR Occurs", "set font error");    void notepad:About()    Dialog mychild;    mychild.exec();void notepad:Help()    QDesktopSer

29、vices:openUrl(QUrl("");六 过程及分析1)平台介绍操作系统:Windows XP Professional with SP3开发工具:Visual Studio 2005 Professional Edition开发语言:VC+源文件:notepad.cpp约130行2)程序的编译与链接目标程序运行。整个程序包含9个函数,源程序被编译成机器码,在这个过程中除了词法分析、语法分析、语义分析、机器码生成外,最需要程序员关注的是程序的链接过程。每个C/C+源文件是一个独立的编译模块,也就是说每个文件会首先被编译成目标文件,如这里的*.obj文件,这个过程是编

30、译器的工作。在目标文件中源程序的函数已被翻译成了机器码。此外目标文件还包含最重要的一个信息就是重定位信息,这里的重定位信息一般是指静态重定位信息。静态重定位信息包含了怎样修改引用数据和子程序的指令以及数据的重定位信息。为什么要包含重定位信息呢?前面已提到,每个源文件是一个独立的编译模块,那么如果在这个源文件中的函数调用了另外一个源文件中的函数或引用了它的变量时,那么在编译本源文件时是无法知道那个函数的地址的。因些在生成这些指令时,只能放占位符这样的信息。当进入链接过程的时假,链接器除了要进行空间分配外,就是要进行符号的解析和符号的重定位。在汇编级或机器指令级,实质上已经没有了函数的概念了。因为

31、函数本身是作为高级语言的一种抽象,现在目标文件中只是一堆机器码。为了表示一个指令序列或数据空间,用使用了符号这一术语。链接器的空间分配是指根据PE文件格式规范生成可执行文件,在这个过程中如果安排指令和数据以及动态重定位等等的过程。简单地讲,符号解析是指将找到各模块间相互引用的函数符号,符号重定位就是将前面提到的指令占位符号修改成正常的指令。当然还包括数据的重定位,相象一下程序引用了一个动态链接库里的变量。象这些同样要生成重定位信息。为了减少干扰,将源程序进行Release编译。在工程的Release目录可以看到notepad.obj文件。在"开始">"Mic

32、rosoftVisualStudio2005"->"VisualStudioTools"->"VisualStudio2005 CommandPrompt",启动命令提示符。然后执行dumpbin命令,导出符号信息。由于导出信息很多,只列出如下几个符号:0D500000000SECT30notype()External|_WinMain1601D00000000SECT5notype()External|?GetFileNameYAXXZ(void_cdeclGetFileName(void)07D00000000SECT21not

33、ype()External|?WndProcYGJPAUHWND_IIJZ(long_stdcallWndProc(structHWND_*,unsignedint,unsignedint,long)02500000000SECT8notype()External|?FileToEditBoxYA_NPAUHWND_PADZ(bool_cdeclFileToEditBox(structHWND_*,char*)这里源程序中自定义的函数,它的名称已经是面目全非了。这象处理的原因在于,C+的函数重载导致的。函数重载使得,相同函数名称却有不同的函数签明。所以不经过处理,在下层就无法知道确切的函数。因

34、此,为了使每个函数的标识唯一,就要对函数名称进行易容处理(mangle),相反的过程叫作复容处理(demangle)。3)PE/COFF格式VC/C+链接器,生成的可执行文件是PE格式,PE格式一类文件的规范,这个规范明确指定了在Windows平台可执行程序文件的内部结构,主机针对x86保护模式的程序。COFF就是目标文件*.obj的格式规范。PE文件另一个名称就是映象文件,说它是映象文件是因为操作系统的加载器把它加载到内存后,会形成一个它的映象。但内存映象与文件并不一定一致辞。如调试符号信息一般不会被加载到内存,它主要由调试器使用。常见文件就是*.dll和*.exe类型的文件。而*.com并

35、不是PE文件,但它也是可执行文件,它运行的环境是虚拟8086模式,并非保护模式。由PE格式的布局图。PE文件使用的是一个平面地址空间,所有代码和数据都合并在一起,组成一个很大的结构。主要有:.text是在编译或汇编结束时产生的一种块,它的内容全是指令代码;.rdata是运行期只读数据;.data是初始化的数据块;.bss是未初始化的数据节;.idata包含其它外来DLL的函数及数据信息,即输入表;.rsrc包含模块的全部资源:如图标、菜单、位图等。现在使用PEExplorer对编译的notepad.exe程序进行逆向。如图5所示。由图可以知道程序入口点是0x000028DFh。当程序被加载到内存执行时,第一条指令将从这里取得。注意,这个地址是相对虚拟地址(RVM),程序的入口点地址还要道基地址才能得出。PEExplorer逆向notepad.exe和数据目录节区头数据,分别是读到了数据目录和区段头信息。4)调用协定调用协定规定了函数调用的参数传递方式及返回值的传递方式。它是应用程序二进制兼容的必要面规范。常见的调用协定有如下方式:1_stdcall用于调用Win32API函数。采用_stdcal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论