Programming 版 (精华区)

发信人: Mice (鼠儿), 信区: Programming
标  题: 加密&解密----(25)
发信站: 紫丁香 (Sun Sep 14 16:09:38 1997)


讲了好多理论! 现在就让我举一个实例来看看! 

要讲的GAME 是 " 侠 影 记 " !!! .... 喂 . 喂! 不要走啊! 虽然这东东不怎么好玩 
但看在它的密码简单的非常适合用来给初学者实习用就勉强把它载入HD 吧! 
(因为笔者很懒! 所以仅列出重要的部份! 建议你最好跟著我一起做! 这样会比较清楚) 

首先当然先试试投机法有没有用! 先试试GAMETOOLS的吧! 

1. 它会把答错的数值放在一个位址, 赶快把它找出来吧! 
2. 选 [ AUTO ] 看看那个程式段会增加他的次数 
3. 哇! 找到下一面 那一列了! 

866B:2F43 MOV AX,000A 
866B:2F46 MOV CS:[ 2F41 ],AX 
866B:2F4A MOV AX,000C 
∶ 
∶ 
∶ 
866B:2FE0 MOV CS:[2F39],AX 
866B:2FE4 MOV AX,CS:[2F39] 
866B:2FE8 CMP AX,CS:[2F37] 
866B:2FED JZ 300A 
866B:2FEF   INC Word Ptr CS:[ 2F41 ] ;把 2F41 的值加一 
866B:2FF4 CMP Word Ptr CS:[ 2F41 ] , +0D ;比较次数是否为13 
866B:2FFA JZ 2FFF ;是的话则跳到 2FFF 
866B:2FFC JMP 2F4A ;无条件跳到 2F4A 
∶ 
∶ 
∶ 
866B:300A CALL 853A:15EE 
866B:300F RET 


既然知道 [ 2F41 ] 放的东东是错误的次数而 那行行又去增加它! 
可知我们现在身处於错误的程式段中! 往前找找看看是那里带我们 
来这的! 哇! 运气好好喔! 刚好上面那个就很可疑!想想... 那不 
是和我以前提过的基本类形中的一种很像! 只不过它是不正确的话 
就继续往下执行! 所以试著把 866B:2FED 的JZ改为JMP(无条 
件跳跃),在填入一次密码看看! 哇! 成功了!终於可以进游戏了! 
但! 千万注意一点! 先把机器码抄下来! 不然要怎样用PCTOOLS 来 
改呢? 

想想! 这样还是要看密码画面啊! 有没有能不看密码画面的改法呢? 
在仔细的研就上面的程式码! 在 866B:2FFC 这行不是会跳到 2F4A 
吗? 先想想它能成立的前提, 是不是要 CS:[ 2F41 ] 不等於四 时 
才会跳回去! 其目地在於再问一次密码不是吗? 所以! 我们可以很 
肯定, 886B:2F4A 的前几行是寻问密码的开头! 为什么说是前几行 
呢? 想想! 在 866B:2FF4 时 比较的是 [2F41] 的值是不是等於14 
而你若不在寻问密码的回圈外设初值的话 那这回圈在某种情况下会 
一直在里面绕跑不出来了! 所以再往前看一下! 果然,前两行就是用 
来设定[2F41]的初值的! 所以我们终於可以肯定 CS:2F43 是程式的 
开头! 现在我们就来把带我们到 CS:2F43 的那个 CALL 找出来! 
方法有2: 
1. 向下找一个 RET 的 ASM 命令 在其上下一个 
HERE 的命令 执行完後在下一个 T 的指令 
就能回到那个 CALL 的下面一行了! 
2. 重新TRACE一次! 看哪个CALL 会把我们带到 
CS:2F43 ! 

经过一番努力! 终於找到下面那些东东了! 


866B:1757 56 PUSH SI 
866B:1758 EBEB17 CALL ⒉F⒋⒊ 
866B:175B BB0000 MOV BX,0000 
866B:175E 9A0A0F3A85 CALL 853A:0F0A 

试试把 866B:1758 的 CALL 改为 NOP ! P.S 我们可以看到 CS:1758 的机器码 
占了 3 BYTE 所以我们要填入 3 个NOP 因为NOP 仅占 1 BYTE! 
哈哈哈! 果然没密码画面了! 好高兴! 进游戏玩了一下也都没事! 所以说! 
可以进入最後一步骤了! 

4. 把PCTOOLS 找出来! 开始找 *.EXE AND *.COM 找你刚抄下的机器码(前後最好 

试试把 866B:1758 的 CALL 改为 NOP ! P.S 我们可以看到 CS:1758 的机器码 
占了 3 BYTE 所以我们要填入 3 个NOP 因为NOP 仅占 1 BYTE! 
哈哈哈! 果然没密码画面了! 好高兴! 进游戏玩了一下也都没事! 所以说! 
可以进入最後一步骤了! 

4. 把PCTOOLS 找出来! 开始找 *.EXE AND *.COM 找你刚抄下的机器码(前後最好)

 
--
我是一只好老鼠!

※ 来源:.紫丁香 pclinux.hit.edu.cn.[FROM: 202.118.226.75]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.273毫秒