本文以Crackme160中的第二个 Afkayas.1
程序为例子阐述如何找到关键函数与关键跳。
工具IDA pro,x32dbg,PEiD
查壳
使用PEiD,将待检测的程序 Afkayas.1
拖入其中,如下图的红框显示,是一个VB程序,没有壳。
查找关键函数call与关键跳
根据程序运行的结果看,如果是失败会有一个弹框,可以知道在弹框的附近就是关键call和关键跳的位置。在visual c++的程序中弹框的函数一般类似 MessageBox
,在VB程序中是rtcMsgBox
(如果不知道准确的名称,那个弹框名称大致都是 MessageBox
,MsgBox
这类)。
IDA Pro查找关键call函数
将Afkayas.1
程序拖入到IDA中,从导入表中的函数,我们可以找到 rtcMsgBox
这个函数。
双击进去,然后查看哪些地方 引用 这个函数。在对应的那一行使用 ctrl + x
快捷键,就可以出现如下图的引用列表了。下面的这么多列表,我们不知道选择哪个,有一个笨方法就是一般前几个比较像。那么尝试看看。
经过一番有耐心的操作,我们看到如下的图,那么看到跟 Afkayas.1
程序运行的提示差不多。这应该八九不离十了。在IDA中有如下图的流程显示界面,还有按行显示的界面模式,可以按 space(空格键)
快捷键来自由切换。
验证关键call函数
使用x32dbg验证IDA找到的关键call函数是否正确,ctrl+g
快捷键,跳转到IDA中找到的位置。
x32dbg动态调试验证,在需要输入密码的地方随便输入,然后操作ZF标志位,查看是否获得got it弹框。经过验证可以看到got it弹框。