发表于 2004-8-14 18:171#
楼主流星所有的命令都有个"是否起作用的判定",这个判定是通过跳转指令来控制结果的.举个例子,并非事实:
KICK的判定,成功的话就跳转到执行命令的代码段,不成功则跳转转入SKICK命令的判定,别急~,比如 你输入了 kick 2,则先进行FPS命令的判定,KICK不等于FPS,所以失败了,则转入KICK代码段进行判定,当然是成功了,于是程序转入执行T 2号人物的代码.可如果游戏中没有2号人物,那就是判定失败,判定后就跳到了SKICK判定,可KICK不等于SKICK,所以SKICK判定失败,那就跳到下一个KILL判定,KICK 也不等于KILL,所以继续失败直到所有命令的判定结束.(上面的命令顺序是不准确的,只是为了说明方便)
这个应该是所有命令的判定方法.
接下来,我要说的是CLOSESERVER这个命令,按照顺序,这个命令后应该转入的是cheat命令判定,然后再转入loadsnp 命令判定----loadmyno---.....直到最后. 但是,我在closeserver后面发现了个有趣的代码:
TEST EXI,EXI
JNZ ****(*代表loadsnp的入口地址)
懂汇编的一看就明白了, EXI-EXI是恒等于0的,那后面的JNZ就是永不可能实现的一个跳转.
很明显这里就是流星上市前开发人员动的那点手脚,如果将JNZ改为JE或者JZ的话,那这个跳转就是100%成功的跳转了,隐藏命令的入口就在此.本方法只修改了程序的半个字节.
目前有些人有种修改四个字节启动隐藏命令的方法,我可以说一下,JNZ往后第4个字节就是LOADSNP命令的入口,如果将上面JNZ在内往后共四个字节全改为NOP(NOP代表不执行任何操作,只在内存中占据一定空间),那程序在TEST EXI,EXI后就不进行任何判定,直接进入LOADSNP.此法虽然麻烦了点,但不失为一种启动隐藏命令的方法
东湖坚持技术资源共享,但不推崇"拿来主义",所以我把修改的技术写来,而不会上传某个改好的文件让列位使用,改可以完全通过WINHEX,ULTRAEDIT直接进行改,但研究时却需要通过反汇编来进行.另外流星的主程序段是用类C语言开发的,如果有针对C的反编译工具,研究会更方便些-----
KICK的判定,成功的话就跳转到执行命令的代码段,不成功则跳转转入SKICK命令的判定,别急~,比如 你输入了 kick 2,则先进行FPS命令的判定,KICK不等于FPS,所以失败了,则转入KICK代码段进行判定,当然是成功了,于是程序转入执行T 2号人物的代码.可如果游戏中没有2号人物,那就是判定失败,判定后就跳到了SKICK判定,可KICK不等于SKICK,所以SKICK判定失败,那就跳到下一个KILL判定,KICK 也不等于KILL,所以继续失败直到所有命令的判定结束.(上面的命令顺序是不准确的,只是为了说明方便)
这个应该是所有命令的判定方法.
接下来,我要说的是CLOSESERVER这个命令,按照顺序,这个命令后应该转入的是cheat命令判定,然后再转入loadsnp 命令判定----loadmyno---.....直到最后. 但是,我在closeserver后面发现了个有趣的代码:
TEST EXI,EXI
JNZ ****(*代表loadsnp的入口地址)
懂汇编的一看就明白了, EXI-EXI是恒等于0的,那后面的JNZ就是永不可能实现的一个跳转.
很明显这里就是流星上市前开发人员动的那点手脚,如果将JNZ改为JE或者JZ的话,那这个跳转就是100%成功的跳转了,隐藏命令的入口就在此.本方法只修改了程序的半个字节.
目前有些人有种修改四个字节启动隐藏命令的方法,我可以说一下,JNZ往后第4个字节就是LOADSNP命令的入口,如果将上面JNZ在内往后共四个字节全改为NOP(NOP代表不执行任何操作,只在内存中占据一定空间),那程序在TEST EXI,EXI后就不进行任何判定,直接进入LOADSNP.此法虽然麻烦了点,但不失为一种启动隐藏命令的方法
东湖坚持技术资源共享,但不推崇"拿来主义",所以我把修改的技术写来,而不会上传某个改好的文件让列位使用,改可以完全通过WINHEX,ULTRAEDIT直接进行改,但研究时却需要通过反汇编来进行.另外流星的主程序段是用类C语言开发的,如果有针对C的反编译工具,研究会更方便些-----
签名:~~~~~~~~~~~
UID 8



