逆向分析技术基础

课题内容:

请使用IDA等工具逆向分析Sample_1、Sample_2以及Sample_3这三个exe文件。
说明:
1、IDA查看地址方法:Options->General,在Line prefixes前面打勾。
2、Sample_1分析范围:0x00401000至0x0040104A;

Sample_2分析范围:0x00401000至0x0040105E;

Sample_3分析范围:0x00401000至0x00401062。
3、报告中需写出关键API函数的功能、重点参数的含义以及流程跳转逻辑等

提示

部分汇编指令表:

汇编指令表(部分)

解题:

Example1

IDA分析程序截图:

IDA工具分析

分析:

由IDA反汇编程序对Example1程序的分析我们可以看到,该程序运行时有两种形态,分别为”Hello!2012“和“Hello!Windows”两种形态。因此大胆猜测该程序运行时可能输出两种语句,并且需要一定的条件进行触发。值得注意的,在汇编语言中,参数是按照从后往前的顺序依次入栈的汇编,所以代码的读取是从下到上的。

IDA分析过程

从这两个框中的汇编代码我们可以了解到调用了call(调用Function):MessageBoxW,在百度中我们查到了该代码行为调用对话框:

因此可以得出该EXE(疑似)应该是调用了Windows对话框并显示“Hello!Windows”或者“Hello!2012”两个语句。

接下来分析上部方的代码,触发该疑似EXE文件显示不同文字的条件在代码中有所体现:

先注意这部分代码的上半部分:

Push为入栈;call为调用Function即调用函数;mov为将后面的值存入前面的值中,个人理解为赋值。那么这些代码就变得稍微可读了。再配合代码从下到上读,这部分代码即:

  • 设置一个变量”MESSAGE“,
  • 推入值为0的uType;
  • 再次定义第二个变量并命名为”2012“;
  • 从cmd命令行中获取输入的值赋值给eax。

Test的作用为将值与0进行比较并根据结果设置标志;Jnz为当ZF为0跳转到指定的地址。

由此我们可以比较清楚的了解该程序的运行机理为:判断输入指令,若为2012则直接执行接下来的代码输出Hello!2012;否则跳到地址00401035处执行代码,输出输出Hello!Windows。而逆向生成的伪代码也印证了这一结论。

那么在虚拟机上运行的效果如何呢:

运行程序截图:

未输入是情况

输入2012是情况

因此可以得出,该程序是一个无毒无害的HelloWorld小程序,而变量”Message“原来时对话框的名字。

Example2

该程序看起来比Example1要复杂一些,接下来将进行分析,首先放上分析程序的截图:

本题要求分析地址为:0x00401000至0x0040105E;

分析:

  • A.   有了Example1的实例分析我们对一些指令有了些了解。但是Example2中还是出现了一些新的指令需要我们自行查询:HInstance:对应的资源是instance.句柄实际上是一个 无符号长整数即unsigned int;GetModuleFileNameA :获取当前运行程序的绝对路径;_SHGetSpecialFolderPath:_该api用来获取指定的系统路径;lstrcat:该函数将字符串lpString2附加在另一个字符串lpString1后面。lstrcmpA:该函数比较两个参数地址保存的值。B.从这部分代码我们可以看到,该程序在前期执行时赋予两个值并对两个值进行判断,若两个赋予值的地址不相同则在该文件的目录下产生0.exe文件。
  • B.从这部分代码我们可以看到,该程序在前期执行时赋予两个值并对两个值进行判断,若两个赋予值的地址不相同则在该文件的目录下产生0.exe文件。

下面为逆向工程产生的伪代码

程序运行时截图:

Example3

分析程序截图:

本题要求分析范围:0x00401000至0x00401062

分析:

此Example与前面的第二例比较相似,不过还是多了没见过的指令:

Copyfile:copyfile是C++的一种函数,原型为BOOL CopyFile,返回值为BOOL,非零表示成功,零表示失败,程序例“CopyFile(“C:\\File1.txt”,”C:\\File2.txt”,TRUE)”。

SHGetFolderPath:获取系统各文件夹路径

Lea:LEA是微机8086/8088系列的一条指令,取自英语Load effect address——取有效地址

通过对代码的分析得出一下运行方式:

寻找指定的文件夹中(lpNewFileName)是否存在指定的文件(lpExistingFileName),当文件夹中文件不存在时使用copyfileW复制文件\\wsample01b.ex至指定文件夹,反之则不进行操做。

以下为逆向工程产生的源代码:

伪代码我们也可以看到,印证了该文件会向指定文件夹复制拷贝文件。

运行时截图:

出现了和Example1相同的对话框,但是开启该软件时火绒报警,在自启动对话框创建一个自己的文件:

该程序将自己复制到windows的自启动目录达到了自启动的作用,这将在接下来的学习中进行过分析。

感想

这次试验初步接触了汇编语言也了解到汇编语言的困难,接下来的学习将会比较困难,也会有许多麻烦需要克服。

2020年9月30日星期三


逆向分析技术基础
http://blask.cn/2020/10/22/逆向分析技术基础/
作者
Wayne Li
发布于
2020年10月22日
许可协议