第19节:反调试之FAKE F8
前面学的汇编如何使用,其实我们学的汇编是学习编程的基础,它能解决的问题很多,我们现在来介绍一下反调试,大家都知道做底层安全的人,如果看汇编代码的话,跟看C语言没有什么区别,如果一款软件不能让它很容易的调试,就要用到反调试功能。
1、单步步入(F7),单步步过(F8)
1)单步步入与单步步过的区别
F7在程序调试中是一行行执行的,F8也是一样的,但是在某些情况下不一样,如:使用到的CALL指令,比如:
CALL 0014843D 按下F8的话是把这整行看成一行来进行执行,如果是按F7的话就不一样了,它会进入0014843D地址位置进行执行。
2)调试器的原理
断点 0xCC
如果想在0014843D下断点,请使用F2键,等程序执行的时候就会断在0014843D的位置,这就是断点。那么断点的本质是什么呢?其实有汇编代码中会出现int 3,当CPU执行的时候,停在调试器里,为什么会停在调试器里后面章节会介绍到。当这个地址在0014843D断下来按F7,会一行行执行看EFL,如果EFL为1后,当前程序就会一行行执行(就会单步执行)。F7就是设置EFL位中的TF位设置成1的时候,CPU就记录单步执行模式。如果遇到CALL指令就不一样了。
2、如何实现简单的反调试功能:
1)例子:
call 0041840D
在0041840D 改成 mov dword ptr ds:[esp],004184FC
ret
这样按F8进行往下执行的话,跟踪就跟踪丢了,那如果是按F7的话任然可以进行跟踪。
2)反调试思路
call—>call
call—>call
call—>call
call call
call—>在这里修改返回值
call
前面学的汇编如何使用,其实我们学的汇编是学习编程的基础,它能解决的问题很多,我们现在来介绍一下反调试,大家都知道做底层安全的人,如果看汇编代码的话,跟看C语言没有什么区别,如果一款软件不能让它很容易的调试,就要用到反调试功能。
1、单步步入(F7),单步步过(F8)
1)单步步入与单步步过的区别
F7在程序调试中是一行行执行的,F8也是一样的,但是在某些情况下不一样,如:使用到的CALL指令,比如:
CALL 0014843D 按下F8的话是把这整行看成一行来进行执行,如果是按F7的话就不一样了,它会进入0014843D地址位置进行执行。
2)调试器的原理
断点 0xCC
如果想在0014843D下断点,请使用F2键,等程序执行的时候就会断在0014843D的位置,这就是断点。那么断点的本质是什么呢?其实有汇编代码中会出现int 3,当CPU执行的时候,停在调试器里,为什么会停在调试器里后面章节会介绍到。当这个地址在0014843D断下来按F7,会一行行执行看EFL,如果EFL为1后,当前程序就会一行行执行(就会单步执行)。F7就是设置EFL位中的TF位设置成1的时候,CPU就记录单步执行模式。如果遇到CALL指令就不一样了。
2、如何实现简单的反调试功能:
1)例子:
call 0041840D
在0041840D 改成 mov dword ptr ds:[esp],004184FC
ret
这样按F8进行往下执行的话,跟踪就跟踪丢了,那如果是按F7的话任然可以进行跟踪。
2)反调试思路
call—>call
call—>call
call—>call
call call
call—>在这里修改返回值
call