NDS《幻想水浒传12宫》破解纪实

文本解密篇(ASM篇)

  说到ASM,很多朋友肯定都会觉得很神秘,其实就跟调试C++程序差不多,别被吓到了,呵呵。
  我用的是NO$GBA 2.6A共享版,就是大家常说的NO$GBA debug版,

 


  估计很多朋友都没有,不过没关系用ideas也是一样的。诚然NO$GBA比起ideas来是强大很多,但是过分强调工具的好坏是不明智的。就像写C++程序,最重要的不是编译器的好坏,而是程序员的素质^^( ideas的debug可以参见 http://www.ndsbbs.com/read.php?tid=180038&keyword= )
  运行到上述的“文字”画面,将内存dump出来(注意NDS的内存是从0x2000000开始的。另外建议不要只dump 4M,因为当你看见画面时,数据可能已经不在内存了)。
  在dump出的内存中搜索E69687E5AD97,哦耶^^ 找到了

 


  地址为0x10E6D5换算成内存地址为0x210E6D5(加0x2000000,再次强调:NDS的内存从0x2000000开始)。
  在0x210E6D5处设置写入断点[0x210E6D5]! 重新运行游戏。
  在这里中断

  即向r14指向的内存写入数据之后中断。用F7单步走一圈,发现是在一个循环里面,游戏用r3在[r1]处读取数据,然后写入到[r14]。去[r1]处看看


  原来文本在这里就已经解密了。改设断点[211509C]!,追踪解压文本的来源。这次中断在这

  看来是r0的写入导致的,那么现在的目标就是追踪这个r0的来源。
  继续F7,晕……有好多的代码……只好先F8(Run to Sub-return 运行到子函数返回处)了……
  再几次F8之后,一段代码闪现在眼前……

  啊!看见eor(就是C&C++中的异或)了!!!一般解密代码里都会有eor的影子,看来狐狸终于露出尾巴啦,哇咔咔!

Copyright 2008-2009 A.C.G All rights reserved
点击数: