level 2
难点估计在找地址上。
如果游戏有改变打开地图按键的选项的话。
你可以尝试更改按键,然后搜按键码。
接着看What Access。
幸运的话,可以直接找到键盘缓存区(也就是按键以后,储存你按键码的特殊内存区域)的按键地址。
然后继续What Access,开关地图,找有没有iret之类的命令。如果有,你需要关注Stack或CS:(E)IP的内容,iret=pop ip, pop cs, popf(但是我至今不知道怎么用CE看CS:IP,或许你可以关注下你的Stack)。如果不出意外,iret回去的地址附近,应该会有int 9之类的命令。然后根据你iret出现的时机,如果是开启地图出现,就往int 9后方找code,可能是call XXX,可能是直接一串Code,需要具体分析。反之就往前找。
这只是一个思路,不知道实际是否可行。我以前学汇编的时候学的16位的,32和64位也只是零碎看了一堆文献。坦白说我自己也没做过类似的骚操作。如果没有很强的汇编基础就不要尝试了……
这是从按键的思路入手,你也可以打开地图,从地图的元素入手
等等。
怎么方便怎么来。只要抓住游戏检测按键,必须和BIOS互动,只要和BIOS互动,就会触发中断程序(int XX)
而中断程序之后肯定会有一个iret配合。
即便你找到了游戏的call XXX,或者说你还原了游戏打开地图的代码,你打算怎样激活这个东西?as we know,ASM脚本是不可以直接激活的,必须和游戏API挂钩,或者外部激活。和游戏API挂钩缺了点意思,CreateThread常常伴随迷之风险,你得根据情况对你的Code进行调整,以防和游戏正常运行的必要寄存器冲突(也就是说,即便游戏用call XXX激活了地图,你也要分析一下这些code,如果寄存器冲突,经常就是游戏崩溃。我能用Lua就用Lua也是因为这个。但是Lua用来处理你的问题,似乎又有点不是那么合适。)
2018年10月01日 01点10分