运行程序后,显示如下的图片点击确定之后,显示如下的图片这里我们首先想要将第一个窗口:Get rid of all Nags and find the right registration code!该窗口的内容进行去除掉这里首先我们将所有的rtcMsgBox打上断点的标记紧接着我们对程序进行运行,发现如图所示的位置调用api之后会显示相应的窗口的标记1.第一次尝试:将00402CFE位置的程序改为add esp,14,nop,nop指令修改之后发现程序无法正常运行原因:调用api之后会有相应的返回值,返回值会存入相应的寄存器之中,但是将call <jmp.&MSVBVM50.#595>修改之后调用rtcMessageBox的返回值未能正确的存储在寄存器之中,所以此种方法行不通2.第二次尝试-我们向上寻找,去找寻程序的入口位置,发现程序的入口位置在如图所示的地方标记断点后,再次重复运行程序,当程序运行到如图所示的入口地址位置时观察栈中的相应内容由于返回地址会压入栈中,所以此时可以看到栈的返回地址为7401E5A9也就是说运行完程序之后会返回7401E5A9的地址,这里我们为了找出运行该程序之前栈中的情况,在7401E5A9前面的7401E5A7地址处打上断点(在运行完程序的这一句打上断点,否则这里不知道为什么断点打不上去,如果有大佬请指教下)再次运行到地址为7401E5A7处的call eax语句的时候,按f7进入该程序之中运行,可以看到运行的为图中所示的语句由于程序运行采用的是stdcall的调用方式,所以栈由被调用者负责清理,这里的sub dword ptr ss:[esp+4],33可以看出栈顶有4自己的数据,所以将起始位置的代码改为retn 4(retn4 4 相当于pop ip,add sp, 4,也就是在返回的同时释放了参数使用的栈空间,windows api中常见的stdcall就是这种调用形式,所以省去了函数调用外的一条add指令)此时再次运行相应的程序,会发现开始的那个烦人的窗口被去除掉了
此时我们尝试着去输入相应的密码,这里我们输入abcd123进行尝试发现弹出相应的窗口查找到相应的字符串,并在相应位置打上断点运行到相应位置的时候,往上稍微移动即找出正确的字符串
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)