一般来说,逆向分析并不是对那些庞大的程序进行完整的逆向,只是分析特定位置的一个或几个函数。

首先从静态分析 CRUEHEAD’s CRACKME 这个程序开始。

程序加载

打开菜单上的 VIEW-OPEN SUBVIEW-SEGMENTS,可以看到已经自动加载的程序区块。

image.png

HEADER段是没有加载的,IDA仅仅自动加载了一些可执行的区段。想要加载HEADER段需要手动加载。

在区段的名称(NAME)一列后面,是区段起始(START)和终点(END)的地址。RWX 这一列显示初始状态下这个区段是否有读 READ(R)、写 WRITE(W)以及执行 EXECUTION(X)权限。

后面的 D 和 L 两列分别对应于 DEBUGGER(调试器)和 LOADER(加载器)。

第一列(D)为空,只有程序在调试模式时才会填充已经加载的区段。L 这一列显示了加载器创建的区段。其他列的内容不是那么重要。

在这个例子里面,加载 HEADER 区段也不是那么有意义。依然介绍一下如何加载 HEADER 段。

重新加载 CRACKME.exe 程序。

image.png

选择手动加载(MANUAL LOAD),点击 OK。

按照程序提示,输入加载的基址:

image.png

在Windows操作系统中,程序的加载基址通常取决于程序的位数和其他因素。

  1. 32位程序:默认的加载基址通常是0x00400000。这个地址是Windows为32位应用程序预留的空间。
  2. 64位程序:64位应用程序的默认加载基址是0x0000000140000000。这个地址是Windows为64位应用程序预留的空间。

不过,实际加载基址可能会因为地址空间随机化(ASLR)等安全机制而有所不同。系统可能会在运行时选择不同的地址来加载程序,以提高安全性

在接下来弹出的每一个对话框上点击 OK 加载所有区段: