-
-
[原创]IDC脚本--寻找UPX壳的OEP
-
发表于:
2015-11-24 15:46
14923
-
OD已经停止更新了,而IDA一直在更新,不知道以后是不是只能用IDA了。。。。
今日突发奇想,想把OD的脱壳脚本转换成IDA的脱壳脚本。。。。
试了好久,踩了不少坑,只能搞定一个UPX的,不敢藏私,放出来权作抛砖引玉!!
脚本加注释:
auto r_esp; //定义变量
auto r_eip;
AddBpt(BeginEA()); //在壳的入口点下断点 IDA的调试器如果入口没有断点就直接运行了
StartDebugger("","",""); //启动调试器
GetDebuggerEvent(WFNE_SUSP,-1); //这个函数比较关键。。。。。
StepOver();
GetDebuggerEvent(WFNE_SUSP,-1);//这里不调用这个函数的话,下面是获取不到esp的值的
r_esp=GetRegValue("esp");
Message("%x\n",r_esp);
AddBptEx(r_esp,4,BPT_WRITE); //添加硬件断点 hw esp
Message("%x\n",MaxEA());
RunTo(MaxEA());
GetDebuggerEvent(WFNE_SUSP,-1);
Message("%x\n",eip);
RunTo(eip+7); //这个地方是JMP 指令的地址 其他情况可能不一样。。。。
GetDebuggerEvent(WFNE_SUSP,-1);
StepOver();
GetDebuggerEvent(WFNE_SUSP,-1);
Message("OEP is %x",eip);
整体思路就是模拟OEP定律,只不过是用IDC脚本写的。
运行方法:shift+F2 调出脚本窗口,复制代码,然后点击按钮 Run
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!