电子科技大学逆向工程实验报告作业资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子科技大学
实
验
报
告
学生姓名:马侬
学号:20152*03**0*
指导教师:何兴高
日期:2016.7.15
一.题目名称:简易记事本软件逆向分析
二.题目内容
由于记事本功能简单,稍有经验的程序员都可以开发出与记事本功能近似的小软件,所以在一些编程语言工具书上也会出现仿照记事本功能作为参考的示例。为了便于分析因此选取了一个简易的记事本,因此本实验将着重研究从源程序到机器码的详细过程而不注重程序本身的功能。另一方面简易源程序代码约130多行。本实验目的是了解源程序是怎么一步步变成机器码的又是怎么在计算机上运行起来的。
三.知识点及介绍
利用逆向工程技术,从可运行的程序系统出发,运用解密、反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等。随着用户需求的复杂度越来越高软件开发的难度也在不断地上升快速高效的软件开发已成为项目成败的关键之一。为了提高程序员的产品率开发工具的选择尤为重要因为开发工具的自动化程度可以大大减少程序员繁琐重复的工作使其集中关注他所面临的特定领域的问题。为此当前的IDE不可避地要向用户隐藏着大量的操作细节而这些细节包含了大量的有价值的技术。
四.工具及介绍:
在对软件进行逆向工程时,不可避免地需要用到多种工具,工具的合理使用,可以加快调试速度,提高逆向工程的效率。对于逆向工程的调试环节来说,没有动态调试器将使用的调试工作很难进行。可以看出,各种有效的工具在逆向工程中占据着相当重要的地位,有必要对它们的用法做一探讨。
PE Explorer简介:PE Explorer是功能超强的可视化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文件以文字可读的方式显示出来。Microsoft COFF 二进制文件转储器(DUMPBIN.EXE) 显示有关通用对象文件格式(COFF) 二进制文件的信息。可以使用DUMPBIN 检查COFF 对象文件、标准COFF 对象库、可执行文件和动态链接库(DLL)。具有提供此DLL中所输出的符号的清单的功能。
LINK.exe 将通用对象文件格式(COFF) 对象文件和库链接起来,以创建可执行(.exe) 文件或动态链接库(DLL)。
五.源程序
notepad.cpp:
notepad::notepad(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::notepad)
{
ui->setupUi(this);
this->setWindowTitle("new file");
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()
{
delete ui;
}
void notepad::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void notepad::NewFile(){
this->setWindowTitle("new file");
ui->Text->clear();
}
void notepad::OpenFile()
{
QString filename = QFileDialog::getOpenFileName
( this, "get file",QDir::currentPath(), "(*.*)");