var Old_espvar cur_addrvar old_eipmov old_esp,esp //保存当前的eip,和esp,脚本运行完后我们要还原它们mov old_eip,eipmov cur_addr,00466114 //00450114是IAT的起始地址-4loop:mov esp,old_esp //还原一下esp//在解密真实函数地址的时候会push一个值,我们要还原它add cur_addr,4 //IAT 笫一个地址cmp cur_addr,00466708 ;004516d4是IAT末尾+4jae exit //到达 IAT末尾就结束cmp [cur_addr],10000000 //因为有一些函数没有被壳处理掉,所以我们不需要还原jae loopcmp [cur_addr],0 // 有一些是作为一个dll的结束标志,其值为0,我们不需要处理je loopmov eip,[cur_addr] ;在目的地址新建EIPsti //F7两步到 retn,栈顶会出现真实函数地址stimov [cur_addr],[esp] //把真实函数地址写回去jmp loopexit:mov esp,old_esp //还原esp,eipmov eip,old_eipret
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)