Jirairya

HelloWorld


逆向工程,一般指,通过分析物体、机械设备或系统,了解其结构、功能、行为等,掌握其中原理、改善不足、添加新意的过程。

先静态分析,收集代码相关信息,然后通过收集到的信息推测程序的结构与行为机制。再进行动态分析代码流、获得内存状态等。

调试HelloWorld.exe程序

0x01 使用OllyDbg调试打开程序

OD界面

  • 代码窗口:默认用于显示反汇编代码,还用于显示各种注释、标签,分析代码时显示循环、跳转位置等信息
  • 寄存器窗口:实时显示CPU寄存器的值,可用于修改特定的寄存器
  • 数据窗口:以Hex/ASCII/Unicode值的形式显示进程的内存地址,也可在此修改内存地址
  • 栈窗口:实时显示ESP寄存器指向的进程栈内存,并允许修改

0x02

目标是找出main()函数调用MessageBox()函数的代码 Alt text

在EP(程序入口点)使用F7单步步入,进入40270C函数 Alt text4027A1地址处又一条RETN指令,它用于返回到函数调用者的下一条指令,一般是被调用函数的最后一句,即返回4011A5地址处。在4027A1地址处的RETN指令上执行F8,继续操作。按F7或者F8执行RETN指令,程序会跳转到4011A5地址处。 Alt text Alt text

执行4011A5地址处的跳转命令JMP 0040104F,跳转到40104F地址处。

Alt text40104F地址开始,每执行一次F7命令就下一移一行代码,移动到401056地址处的CALL 402524函数调用指令,进入402524函数。

Alt text

40254函数不能称为main()函数,在它的代码中并未发现调用MessageBox()API代码。执行Execute till Return(Ctrl+F9)指令,调试转到402568地址处的RETN指令,然后使用F7(或者F8)执行RETN指令,跳出402524函数,返回40105B地址处。先F7进入函数,查看是不是main()函数,不是就直接Ctrl+F9跳出相关函数。

4010E4地址处的CALL Kernel32.GetCommandLineW指令是调用Win32API的代码。直接使用F8跳过该函数。 Alt text 调试正常则会看到以下代码: Alt text

401144地址处有一条CALL 401000指令,用于调用401000函数,使用F7进入401000函数。

Alt text

401000函数处出现了调用MessageBoxW()API的代码,该API函数参数为www.reverse.com和”Hello World”两个字符串,由此可知该函数就是main()函数。


上一篇 webshell

下一篇 Basecamp

Comments

Content