|
这张表包括了每一个INT 3的类型号。它们的顺序和Table 1是一样的,也就是取决于INT 3的地址,所以 0C属于Table 1中的第一个INT 3以此类推。
我们使用变量X来描述在两张表中属于同一个INT 3值,可以表示为:
TABLE 1
Table 1的起始值 + X * 4
TABLE 2
Table 2的起始值+ X
所以如果X=0
Table1=3E5cE8 + 0 * 4= 3e5ce8
Table2= 3e6480 + 0 =3e6480
这表明当X=0时,第一个INT 3在Table 1 中属于它的值是 [3e5ce8]=00401565 在table 2中是 [3e6480]=0c 。
X=1 将是第二个INT 3
Table 1=3E5cE8 + 1 * 4=[ 3e5cec]=00401633
Table 2= 3e6480 + 1 =[3e6481]=04
我希望你能够明白这些,因为这对你有用。
这部分可能不易理解,所以需要仔细地阅读。 我们需要搞清楚Table 2那些值的含义。它们是一些取决于标志值的跳转。

PUSH ECX 保存它从Table 2获得的将要被执行的属于INT 3的条件跳转。这里,它的值是04 ,所以我们需要知道它是什么样的条件跳转,因为04代表相同的条件跳转。我们进入那个 Call 然后看到:
005C7507 |。 FF248D C8765C> JMP DWORD PTR DS:[ECX*4+5C76C8]
这里我们看到了一个取决于ECX的值的跳转。取决于表中ECX的值和4的乘积+ 5C76C8的值,它将跳转到不同的地址。很容易通过改变ECX的值来看看它究竟 跳向何方,然后在OLLYDBG中加注解。

这回如果ECX=04它将跳向5C750E。写下它,然后试着从00 改到11。


如果我们依次尝试其它的值,我们将的到列表如下:
0 前往

1 前往

以此类推


上一页 1 2 3 4 5 6 下一页 |