Z卡上~ROM是直接通过DS内置BIOS内的初始化代码载入到内存中的~而在烧录卡上~ROM的载入则始终是靠烧录卡的模拟完成~尽管现在技术已经模拟的很牛×了~但是注定还是出现了一个人们平时压根不会注意到的纰漏~那就是Secure Area~
The Secure Area is located in ROM at 4000h..7FFFh, it can contain normal program code and data, however, it can be used only for ARM9 boot code, it cannot be used for ARM7 boot code, icon/title, filesystem, or other data.
以上这段是在GBATEK中对Secure Area的解释~大致意思是说~这是一段被定义在ROM偏移量4000h..7FFFh处的区域~用作存放ARM9的启动代码~
这里要特别注意这段话的最后一句~这段区域绝对不能为ARM7启动代码~图标标题~文件~或者其他任何数据~……意思是说~放在ROM这个地方的数据是仅仅能被DS的BIOS在开机载入时访问的~其他任何时候都无法访问该区域~
这点在通常情况都会被人们给忽视掉~因为从来没有游戏或者程序将数据写入该区域并在主程序中试图访问该区域~……因此~也从来没有烧录卡为该区域写验证模拟~
那么如果说真的有游戏无聊到在程序中试图访问该段地址会得到什么样的结果呢?~用NO$GBA测试后~结果是无论读取的是8000h前的任何地址的数据~最终返回的必然是以8000h为开头的200字节(ROM访问以200字节为单位)~……
相信说到这里~看懂了的人已经能猜到这次娴熟的SE所玩弄的手腕了吧~
DQ5的烧录检测程序~依次访问0000h,0200h,0400h,8000h,8200h,8400h这6个地址~然后对输出的200字节取特征码~……根据前面的理论~如果使用的是Z版卡的话~这里将出现的结果是0000h,0200h,0400h,8000h得到的结果全部一致~而8200h,8400h则顺利读取到其他数值~
但是由于前面也说到~没有任何烧录有设计过该段区域的溢出检测~事实上就连IDEAS都没有该检测~所以在烧录卡上运行的结果便会是这6个值全部不同~(因为烧录卡允许游戏读取ROM的Secure Area~)……
因此~只要这里依次查看这6个输出值~就能很清楚的检测出玩家是在使用烧录还是用Z卡了~……