逆向工程
- 格式:docx
- 大小:2.01 MB
- 文档页数:16
目录 目录 第一章 课题综述 ...................................................... 1 1.1课题名称 ............................................................ 1 1.2课题介绍 ............................................................ 1 1.3 知识点及介绍 ....................................................... 1 1.4 工具及介绍 ......................................................... 1 第二章 逆向过程及分析 ................................................. 4 2.1 实验内容 ........................................................... 4 2.2 过程及分析 ......................................................... 4 2.2.1逆向目的 ........................................................ 4 2.2.2 逆向过程 ....................................................... 4 第三章 实验总结 ...................................................... 0 3.1实验结果总结 ..................................................... 15 3.2 实验心得与体会 ................................................... 15 第一章课题综述
1 第一章 课题综述
1.1课题名称 课题名称:简单软件的脱壳与汉化。
1.2课题介绍 需要完成以下工作:通过一些常用的逆向软件对简单的英文界面软件进行汉化使软件能被不懂英文的人群所使用,若此软件被加壳了,则对其进行脱壳处理,再进行界面汉化。然后对课堂的小程序KEY4完成破解,跳过验证。
1.3知识点及介绍 首先使用查壳工具,检测软件是否被加壳了,若加壳了则需要对其进行脱壳,在确定无壳之后就可以使用软件对其进行汉化处理。 (1)查壳原理:PEiD软件可以通过探测大多数的 PE 文件封包器、加密器和编译器识别其是否加壳以及使用什么语言等。当前可以探测 600 多个不同签名。 (2)脱壳原理:在本课题中遇到的主要为Asp加壳方式,可以采用专用的Asp脱壳软件以及手动脱壳,在本课题中采用手动脱壳的办法对软件进行脱壳处理。其原理最重要的就是想办法寻找到整个软件的OEP,也就是程序的入口点,在找到程序的入口点后就可以通过OLLYDbg将其从入口点将软件剥离出来,就成功的获取到脱壳成功的软件。 (3)汉化原理:使用软件获取到其资源文件,然后将其翻译为中文然后替换即可。 (4)ESP定律:首先了解两个汇编常识。 ①call命令 a.向堆栈中压入下一行程序的地址; b.JMP到call的子程序地址处。 例如: 逆向工程课程实验报告 2 00401029.E8 DA240A00 call 004A3508 0040102E.5A pop edx 在执行了00401029以后,程序会将0040102E压入堆栈,然后JMP到004A3508地址处。 ②RETN命令 与call对应的就是RETN了。对于RETN我们可以这样来理解: a.将当前的ESP中指向的地址出栈; b.JMP到这个地址。 这个就完成了一次调用子程序的过程。在这里关键的地方是:如果我们要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RETN这条指令之前,ESP指向的是我们压入栈中的地址。这也就是著名的“堆栈平衡”原理。 ③小结: 我们可以把壳假设为一个子程序,当壳把代码解压前和解压后,他必须要做的是遵循堆栈平衡的原理。 因为大家对ESP理解各有异同,但是,大同小异!一般理解可以为: a、在命令行下断hr esp-4(此时的ESP就是OD载入后当前显示的值)。 b、hr ESP(关键标志下一行代码所指示的ESP值(单步通过))。
1.4 工具及介绍 本课题涉及的工具总共有三个,分别是PEiD、PE Explorer、OLLYDbg。 (1)PEiD(PE Identifier):是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE文档的加壳类型和签名。 ①能够查询出来exe程序是否加壳,如果exe程序加壳了,就要先脱壳才能找到需要汉化的英文内容。 ②查壳工具能给查询出来exe程序使用那些编程语言编写的,才能够对症下药,使用不同的汉化工具,比如:有些NET语言写的软件,就要用到NET反编译工具才能够汉化。 (2)PE Explorer:功能极为强大的可视化汉化集成工具,可直接浏览、修改软件资源,包括菜单、对话框、字符串表等; 另外,还具备有 W32DASM 软件的反逆向工程课程实验报告 3 编译能力和PEditor 软件的 PE 文件头编辑功能,可以更容易的分析源代码,修复损坏了的资源,可以处理 PE 格式的文件如:EXE、DLL、DRV、BPL、DPL、SYS、CPL、OCX、SCR 等 32 位可执行程序。该软件支持插件,你可以通过增加插件加强该软件的功能, 原公司在该工具中捆绑了 UPX 的脱壳插件、扫描器和反汇编器.,非常好用。 (3)OLLYDbg:OllyDbg是一种具有可视化界面的32位汇编分析调试器,是一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring3级调试器,非常容易上手,己代替SoftICE成为当今最为流行的调试解密工具了。同时还支持插件扩展功能,是目前最强大的调试工具。OllyDbg最大的优点在于它供了强大的代码分析能力的反汇编器。 逆向工程课程实验报告
4 第二章 逆向过程及分析
2.1 实验内容 首先对需要汉化的软件使用PEiD软件进行“查壳”,即确定软件是否加壳,如果加壳了,就使用相关软件对其进行处理脱壳,脱壳完成之后使用PE Explorer软件查看其软件资源,修改实现汉化操作。
2.2 过程及分析 2.2.1逆向目的 将软件汉化,若有壳则对其进行去壳处理,原始界面如下图2-1原始界面所示:
图2- 1原始界面图 2.2.2汉化逆向过程 (1)首先使用PEiD软件查看该软件是否加壳。打开PEiD软件,直接浏览需要“查壳”的软件的路径下,如下图2-2查壳结果所示: 逆向工程课程实验报告 5 图2- 2查壳结果 分析:使用软件打开需要查壳的软件,然后就可以自PEiD界面看到PESniffe
后面输出ASPack v2.12(如上图红圈所示),这一项表明此软件是经过加壳了的,所加的壳的类别为Asp。所以我们下一步需要对其进行“脱壳”处理。 (2)“脱壳”处理 脱壳是使用“ESP”定律进行“脱壳”。首先使用OLLYDbg导入软件,如下图2-3软件导入界面所示:
图2- 3软件导入界面 然后我们按下F8或者点菜单栏的单步步过。按下之后右边的ESP以及EIP会同
时变红。变成了红色代表有新的数据压入。多个寄存器中除了EIP外只有ESP红色才行。其他变红则不能使用ESP定律脱壳。然后记录下ESP的数值,如下图2-4所示,ESP的值为:0019FF64。 逆向工程课程实验报告 6 图2- 4 然后在指令框内输入:dd0019FFEC来显示堆栈格式数据,然后在地址上右键选择断点>硬件访问>字,的方式来插入硬件断点,如下图2-5断点插入所示。
图2- 5断点插入 然后按F9继续运行程序,运行到断点处就自动停止了。停止之后删除掉加入的
硬件断点,不然脱壳后的程序会出现异常,如下图2-6所示点击红色线条圈起来的按钮即可将断点删除。 逆向工程课程实验报告
7 图2- 6断点插入 然后继续使用F8单步执行,寻找OEP(程序入口地址),截图如下2-7程序入口
地址图,然后点击程序入口地址,右键>用OllyDump脱壳调试进程,如下图2-8脱壳调试选择图所示:
图2- 7程序入口地址图 逆向工程课程实验报告
8 图2- 8脱壳调试选择图 进入脱壳调试界面,选择程序文件输出的位置,然后将名字重命名为“无壳.exe”,保存在D/work/无壳.exe如下图2-9脱壳调试界面与2-10文件输出界面所示。 逆向工程课程实验报告
9 图2- 9脱壳调试界面 图2- 10文件输出界面 至此,我们已经完成了该软件的手动脱壳过程,现在我们重新使用PEiD对已经
经过脱壳的软件进行查壳,看软件脱壳操作是否成功,结果如下图2-11查壳截图所示,软件已经成功脱壳。