您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 电子科技大学逆向工程实验报告作业
电子科技大学学生姓名:马侬学号:20152*03**0*指导教师:何兴高日期:2016.7.15实验报告一.题目名称:简易记事本软件逆向分析二.题目内容由于记事本功能简单,稍有经验的程序员都可以开发出与记事本功能近似的小软件,所以在一些编程语言工具书上也会出现仿照记事本功能作为参考的示例。为了便于分析因此选取了一个简易的记事本,因此本实验将着重研究从源程序到机器码的详细过程而不注重程序本身的功能。另一方面简易源程序代码约130多行。本实验目的是了解源程序是怎么一步步变成机器码的又是怎么在计算机上运行起来的。三.知识点及介绍利用逆向工程技术,从可运行的程序系统出发,运用解密、反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等。随着用户需求的复杂度越来越高软件开发的难度也在不断地上升快速高效的软件开发已成为项目成败的关键之一。为了提高程序员的产品率开发工具的选择尤为重要因为开发工具的自动化程度可以大大减少程序员繁琐重复的工作使其集中关注他所面临的特定领域的问题。为此当前的IDE不可避地要向用户隐藏着大量的操作细节而这些细节包含了大量的有价值的技术。四.工具及介绍:在对软件进行逆向工程时,不可避免地需要用到多种工具,工具的合理使用,可以加快调试速度,提高逆向工程的效率。对于逆向工程的调试环节来说,没有动态调试器将使用的调试工作很难进行。可以看出,各种有效的工具在逆向工程中占据着相当重要的地位,有必要对它们的用法做一探讨。PEExplorer简介:PEExplorer是功能超强的可视化Delphi、C++、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。功能极为强大的可视化汉化集成工具,可直接浏览、修改软件资源,包括菜单、对话框、字符串表等;另外,还具备有W32DASM软件的反编译能力和PEditor软件的PE文件头编辑功能,可以更容易的分析源代码,修复损坏了的资源,可以处理PE格式的文件如:EXE、DLL、DRV、BPL、DPL、SYS、CPL、OCX、SCR等32位可执行程序。该软件支持插件,你可以通过增加插件加强该软件的功能,原公司在该工具中捆绑了UPX的脱壳插件、扫描器和反汇编器.,出口,进口和延迟导入表的功能,使您可以查看所有的可执行文件使用的外部功能,和其中包含的DLL或库的基础上进行分类的结果。这里一个非常有用的功能是语法的Viewer,它显示功能的调用语法,它知道和可以让你扩大自己的定义的语法数据库。非常好用。Dumpbin是VC自带的二进制转储工具可以将PE/COFF文件以文字可读的方式显示出来。MicrosoftCOFF二进制文件转储器(DUMPBIN.EXE)显示有关通用对象文件格式(COFF)二进制文件的信息。可以使用DUMPBIN检查COFF对象文件、标准COFF对象库、可执行文件和动态链接库(DLL)。具有提供此DLL中所输出的符号的清单的功能。LINK.exe将通用对象文件格式(COFF)对象文件和库链接起来,以创建可执行(.exe)文件或动态链接库(DLL)。五.源程序notepad.cpp:notepad::notepad(QWidget*parent):QMainWindow(parent),ui(newUi::notepad){ui-setupUi(this);this-setWindowTitle(newfile);QObject::connect(ui-NewFileaction,SIGNAL(triggered()),this,SLOT(NewFile()));QObject::connect(ui-OpenFileaction,SIGNAL(triggered()),this,SLOT(OpenFile()));QObject::connect(ui-SaveFileaction,SIGNAL(triggered()),this,SLOT(SaveFile()));QObject::connect(ui-SaveAsFileaction,SIGNAL(triggered()),this,SLOT(SaveAsFile()));QObject::connect(ui-Coloraction,SIGNAL(triggered()),this,SLOT(SetColor()));QObject::connect(ui-Fontaction,SIGNAL(triggered()),this,SLOT(SetFont()));QObject::connect(ui-Aboutaction,SIGNAL(triggered()),this,SLOT(About()));QObject::connect(ui-Helpaction,SIGNAL(triggered()),this,SLOT(Help()));}notepad::~notepad(){deleteui;}voidnotepad::changeEvent(QEvent*e){QMainWindow::changeEvent(e);switch(e-type()){caseQEvent::LanguageChange:ui-retranslateUi(this);break;default:break;}}voidnotepad::NewFile(){this-setWindowTitle(newfile);ui-Text-clear();}voidnotepad::OpenFile(){QStringfilename=QFileDialog::getOpenFileName(this,getfile,QDir::currentPath(),(*.*));if(!filename.isEmpty()){QFile*file=newQFile;file-setFileName(filename);if(file-open(QIODevice::ReadOnly)==true){QTextStreamin(file);ui-Text-setText(in.readAll());this-setWindowTitle(filename);}else{QMessageBox::information(this,ERROROccurs,filenotexist);}file-close();deletefile;}}voidnotepad::SaveFile(){QStringfilename=this-windowTitle();//if(filename.compare(newfile)!=0)//{QFile*file=newQFile;file-setFileName(filename);if(file-open(QIODevice::WriteOnly)==true){QTextStreamout(file);outText-toPlainText();file-close();deletefile;}else{QMessageBox::information(this,ERROROccurs,fileopenerror);}//}}voidnotepad::SaveAsFile(){QStringfilename=QFileDialog::getSaveFileName(this,savefile,QDir::currentPath());QFile*file=newQFile;file-setFileName(filename);if(file-open(QIODevice::WriteOnly)==true){QTextStreamout(file);outText-toPlainText();file-close();deletefile;}else{QMessageBox::information(this,ERROROccurs,fileopenerror);}}voidnotepad::SetColor(){QColorcolor=QColorDialog::getColor(Qt::white,this);if(color.isValid()==true){ui-Text-setTextColor(color);}else{QMessageBox::information(this,ERROROccurs,setcolorerror);}}voidnotepad::SetFont(){boolok;QFontfont=QFontDialog::getFont(&ok,QFont(Arial,18),this,setfont);if(ok){ui-Text-setFont(font);}else{QMessageBox::information(this,ERROROccurs,setfonterror);}}voidnotepad::About(){Dialogmychild;mychild.exec();}voidnotepad::Help(){QDesktopServices::openUrl(QUrl());}六.过程及分析1)平台介绍操作系统:WindowsXPProfessionalwithSP3开发工具:VisualStudio2005ProfessionalEdition开发语言:VC++源文件:notepad.cpp约130行2)程序的编译与链接目标程序运行。整个程序包含9个函数,源程序被编译成机器码,在这个过程中除了词法分析、语法分析、语义分析、机器码生成外,最需要程序员关注的是程序的链接过程。每个C/C++源文件是一个独立的编译模块,也就是说每个文件会首先被编译成目标文件,如这里的*.obj文件,这个过程是编译器的工作。在目标文件中源程序的函数已被翻译成了机器码。此外目标文件还包含最重要的一个信息就是重定位信息,这里的重定位信息一般是指静态重定位信息。静态重定位信息包含了怎样修改引用数据和子程序的指令以及数据的重定位信息。为什么要包含重定位信息呢?前面已提到,每个源文件是一个独立的编译模块,那么如果在这个源文件中的函数调用了另外一个源文件中的函数或引用了它的变量时,那么在编译本源文件时是无法知道那个函数的地址的。因些在生成这些指令时,只能放占位符这样的信息。当进入链接过程的时假,链接器除了要进行空间分配外,就是要进行符号的解析和符号的重定位。在汇编级或机器指令级,实质上已经没有了函数的概念了。因为函数本身是作为高级语言的一种抽象,现在目标文件中只是一堆机器码。为了表示一个指令序列或数据空间,用使用了符号这一术语。链接器的空间分配是指根据PE文件格式规范生成可执行文件,在这个过程中如果安排指令和数据以及动态重定位等等的过程。简单地讲,符号解析是指将找到各模块间相互引用的函数符号,符号重定位就是将前面提到的指令占位符号修改成正常的指令。当然还包括数据的重定位,相象一下程序引用了一个动态链接库里的变量。象这些同样要生成重定位信息。为了减少干扰,将源程序进行Release编译。在工程的Release目录可以看到notepad.obj文件。在开始MicrosoftVisualStudio2005-VisualStudioTools-VisualStudio2005CommandPrompt,启动命令提示符。然后执行dumpbin命令,导出符号信息。由于导出信息很多,只列出如下几个符号:0D500000000SECT30notype()External|_WinMain@1601D00000000SECT5notype()External|?GetFileName@@YAXXZ(void__cdeclGetFileName(void))07D000000
本文标题:电子科技大学逆向工程实验报告作业
链接地址:https://www.777doc.com/doc-4995699 .html