| 修改众 |
08-05-05 20:19 |
[psoemu]让锁定的门开锁
门是锁定还是非锁定,是1个变量的数值决定。 不过直接找这个变量比较困难。因为锁定的门,开锁以后就1直是非锁定状态, 这个值只变化1次,因此很难确定准确的地址。
换个思路。 非锁定的门在走近的时候会自动打开,离开后自动关闭。 稍微想想就知道,这也是1个变量控制的。 而既然都是控制门的,那么应该都在1个数组中。 因此找到这个值后,通过观察法就很容易可以找到开锁的地址了。
首先随便找1非锁定的门。 然后走近它,等门完全打开后,模糊搜索。 然后离开,等门完全关闭,搜索改变的值。 这样反复数次后,就可以找到1个地址。值的变化范围是0-3 仔细观察就发现,0关闭 1正在打开 2开着 3正在关闭 锁定这个值为2,离开后,就看到这个门关不上了。这就确定了这个地址。
之后,find out what write to this address 得到几个对应的代码, 门打开1 :006459b5 - c7 83 ac 00 00 00 01 00 00 00 - mov [ebx+000000ac],00000001 门打开2 :00645f3c - c7 83 ac 00 00 00 02 00 00 00 - mov [ebx+000000ac],00000002 门关闭1:00645a61 - c7 86 ac 00 00 00 03 00 00 00 - mov [esi+000000ac],00000003 门关闭2 :00645a10 - c7 87 ac 00 00 00 00 00 00 00 - mov [edi+000000ac],00000000
结合变量的值,1眼就看的出代码的意思了。 我们注意到,门的状态的偏移量是AC
好了,现在把内存查看器定位到门的状态地址上, 观察1下附近几行的地址。特别需要注意的是0,1,2这样的。发现附近有好几个这种值。 逐一经过测试性的修改,就在下面2行的位置,发现这个值修改为0或者其他值后,门就被锁定打不开了。 也就是说,这就是控制门的锁定的地址 find out what accesses (注意是accesses,因为我们要查找是什么代码会访问这个地址。)
得到对应的代码, 检查门是否锁定 :006195ef - 8b 83 cc 00 00 00 - mov eax,[ebx+000000cc] 汇编查看这条代码,发现这就是1个很小的call,整个call如下 006195e9 - 90 - nop 006195ea - 90 - nop 006195eb - 90 - nop 006195ec - 53 - push ebx 006195ed - 8b d9 - mov ebx,ecx 006195ef - 8b 83 cc 00 00 00 - mov eax,[ebx+000000cc] //访问门锁的状态 006195f5 - 83 f8 01 - cmp eax,01 //等于1则跳 006195f8 - 74 5a - je 00619654 006195fa - 83 f8 02 - cmp eax,02 //既不等于1也不等于2则跳 006195fd - 75 27 - jne 00619626 006195ff - 0f b7 83 c8 00 00 00 - movzx eax,word ptr [ebx+000000c8] 00619606 - 50 - push eax 00619607 - e8 50 ce 1f 00 - call 0081645c 0061960c - 59 - pop ecx 0061960d - 0f b6 c0 - movzx eax,al 00619610 - 83 f8 01 - cmp eax,01 00619613 - 74 57 - je 0061966c 00619615 - 8b 83 d0 00 00 00 - mov eax,[ebx+000000d0] 0061961b - 83 e0 fe - and eax,fe 0061961e - 89 83 d0 00 00 00 - mov [ebx+000000d0],eax 00619624 - 5b - pop ebx 00619625 - c3 - ret
于是我们知道了,1表示门打开,2表示门锁定。还有1种其它值的情况。
那么要做的就非常非常简单了, 修改006195f5: cmp eax,01下面那个跳转的条件 je 00619654 为 jmp 00619654即可。
最后的工作,写成汇编脚本: [ENABLE] 006195f8: jmp 00619654 [DISABLE] 006195f8: je 00619654
到此,这个简单的修改就完成了,运行看看效果吧~ |
|