网站换程序301,做淘客网站需要企业的域名,网站怎么做反向代理,上海网站建设报价表看zpchcbd师傅的一篇文章看到了这个比较有趣的点。实操跟着过一遍。 准确来说这个不能说是bug#xff0c;这可以是一种刻意为之的手段#xff0c;可以用于加壳、反调试等逆向技术中。
原理#xff1a;
F8步过call的时候#xff0c;其实是在call的…看zpchcbd师傅的一篇文章看到了这个比较有趣的点。实操跟着过一遍。 准确来说这个不能说是bug这可以是一种刻意为之的手段可以用于加壳、反调试等逆向技术中。
原理
F8步过call的时候其实是在call的地址的5处下断点也就是call的下一条指令下断点。 那如果我们在call调用的函数中改变返回地址使得不是默认的5那么F8就形同虚设根本断不到所以程序就直接F9了。 感觉这种完全可以结合SEH来设置[eax2]的eip来做一个反调试再加点junkcode效果应该挺不错。
示例程序
就是瞎改了call结束时的返回地址(通过改变栈顶[rsp]的值)
#includestdio.h
#includeWindows.hint iEax;
int iRet;void _declspec(naked) test01() {printf(Cheat F8 Test...\n);__asm {mov iEax, eax;mov eax, [esp];add eax, 7;mov iRet, eax;push iRet;ret;}
}void test02() {printf(:?);return;
}int main() {int a 0;printf(testing...);test01();a 1;getchar();return 0;
}visual studio编译为32位后x32dbg调试。 在这里
我们直接F8过这个call的话程序会直接运行到最终暂停的点。 对应这里就是这个int 29处因为写asm的时候貌似写出了一些异常不管了。。
也就是说我们F8步过根本没有断到call返回的指令地址而是直接F9了。
如果我们F7步入call然后步过到ret跳出call就会发现能够到call的返回地址处
虽然是个奇怪的地址但确实是断下了。