一般来说,逆向分析并不是对那些庞大的程序进行完整的逆向,只是分析特定位置的一个或几个函数。
首先从静态分析 CRUEHEAD’s CRACKME 这个程序开始。
程序加载
打开菜单上的 VIEW-OPEN SUBVIEW-SEGMENTS,可以看到已经自动加载的程序区块。

HEADER段是没有加载的,IDA仅仅自动加载了一些可执行的区段。想要加载HEADER段需要手动加载。
在区段的名称(NAME)一列后面,是区段起始(START)和终点(END)的地址。RWX 这一列显示初始状态下这个区段是否有读 READ(R)、写 WRITE(W)以及执行 EXECUTION(X)权限。
后面的 D 和 L 两列分别对应于 DEBUGGER(调试器)和 LOADER(加载器)。
第一列(D)为空,只有程序在调试模式时才会填充已经加载的区段。L 这一列显示了加载器创建的区段。其他列的内容不是那么重要。
在这个例子里面,加载 HEADER 区段也不是那么有意义。依然介绍一下如何加载 HEADER 段。
重新加载 CRACKME.exe 程序。

选择手动加载(MANUAL LOAD),点击 OK。
按照程序提示,输入加载的基址:

在Windows操作系统中,程序的加载基址通常取决于程序的位数和其他因素。
-
32位程序:默认的加载基址通常是0x00400000。这个地址是Windows为32位应用程序预留的空间。
-
64位程序:64位应用程序的默认加载基址是0x0000000140000000。这个地址是Windows为64位应用程序预留的空间。
不过,实际加载基址可能会因为地址空间随机化(ASLR)等安全机制而有所不同。系统可能会在运行时选择不同的地址来加载程序,以提高安全性
在接下来弹出的每一个对话框上点击 OK 加载所有区段:

完成之后,可以看到:

通常这是操作不必要的,有时候考虑进来会更好。
切到反汇编视图,跳转到 0x400000 位置,也就是程序起始位置:
HEADER:00400000 ;
HEADER:00400000 ; +-------------------------------------------------------------------------+
HEADER:00400000 ; | This file was generated by The Interactive Disassembler (IDA) |
HEADER:00400000 ; | Copyright (c) 2022 Hex-Rays, <support@hex-rays.com> |
HEADER:00400000 ; +-------------------------------------------------------------------------+
HEADER:00400000 ;
HEADER:00400000 ; Input SHA256 : 0C7CDFDB6D4C8876E9C5BAE906FCF1CBF174F019EF45D518954885856501A0BE
HEADER:00400000 ; Input MD5 : 66F573036F8B99863D75743EFF84F15D
HEADER:00400000 ; Input CRC32 : 503D64C9
HEADER:00400000
HEADER:00400000

1883

被折叠的 条评论
为什么被折叠?



