|
一,先来说最新的支持s60-s90多款手机那一版:
还是一样,拿到游戏或软件原版后,不要急着先打开IDA等反编译工具看,先去安装原版,看看它的注册情况到底是如何的.这个游戏运行后,先会弹出一个press ok的按钮,过后才是判断注册与否的分叉,如果没有注册的情况下,那么press ok后会弹出一个注册窗口,要求输入你的注册号或者去try demo(也就是让你去试用一下这个游戏,但你并不是注册用户).如果你是注册用户的话,press ok后将跳过这一个窗口的输入选择,直接进入游戏选单的主界面.
好,到这里,大家大约就可以在脑海里记录下可能会发生的几种破解方案了:一,不去管什么注册不注册,每次都去选择try demo,但要使这个try demo成为无任何限制性使用,从某种意义上讲与正版注册用户享受同样功能;二,去掉那个注册框,版本从第一次安装运行起,程序就一直默认你为注册版;三,第一次运行还是有要注册的窗口,但无论输入什么都会让程序认证注册成功,成为真正注册版.
ok,这就是你的大约思路,也许有些并不正确,因为我们还没有去看程序,但一定有一个是正确的.相信我!呵呵.
正式打开你们手中的ida,看哪个文件?上次我的教程里已经说过了.这次也是看app文件.好,打开它,稍等一下,解析半分钟就会完毕.养成习惯先去看names window的项目,往下拉一拉,才拉几个,就看到一连串令我们兴奋的名字(见图ElfinForest_s90_1.png).我们就看这个IdIncorrect,熟悉啊,我们前面在游戏中随便输入注册号出现错误的提示不就是和它很接近么?ok,双击它,来到IDA View-A,往上跳几次,最后一次跳转就来到了我们的图ElfinForest_s90_2.png的地方,上下看看.我把命令抄一下:
.text:10006AF0 BNE loc_10006BF4 ; Branch .text:10006AF4 ADD R5, R6, #0x2C8 ; Rd = Op1 + Op2 .text:10006AF8 ADD R0, R6, #0x2A0 ; Rd = Op1 + Op2 .text:10006AFC MOV R1, R5 ; Rd = Op2 .text:10006B00 BL sub_1000CD74 ; Branch with Link .text:10006B04 CMP R0, #0 ; Set cond. codes on Op1 - Op2 .text:10006B08 BEQ loc_10006B50 ; Branch .text:10006B0C ADD R4, R6, #0x270 ; Rd = Op1 + Op2 .text:10006B10 ADD R0, SP, #0x10 ; Rd = Op1 + Op2 .text:10006B14 LDR R1, =aIdIncorrect ; Load from Memory .text:10006B18 BL sub_1000C934 ; Branch with Link .text:10006B1C MOV R0, R4 ; Rd = Op2 .text:10006B20 ADD R1, SP, #0x10 ; Rd = Op1 + Op2 .text:10006B24 BL sub_1000CD24 ; Branch with Link
其中的BEQ loc_10006B50我点了一下,大家看到没有,黄色的,这里有一跟跳转线,跟着它往下走几步瞧瞧.哦,大家都能看到了,这个跳转能越过IdIncorrect,而到达Config_dat,RegisterSuccess等等的位置.真是简单啊.如果我们让BEQ loc_10006B50成为无条件跳转命令不就行了?
是的,我们已经做完了,再回到这个位置:
.text:10006B08 BEQ loc_10006B50 ; Branch
记下他的位置00006B84,好的.关闭IDA(不需要它了),打开你们的16进制编辑工具,我喜欢用UltraEdit-32,找到那个位置,ok,原来IDA中看到的BEQ loc_10006B50命令就是由10 00 00 0A组成的.
easy, 改成10 00 00 EA,保存不就完工了么?有人要问只改一个字母么?是的,就改一个字母.我的原则就是能不改就不改,能改一处就改一处.多改无益,当然这个完全视情况而定的.把你的app传入手机覆盖原文件吧,相信我,你已经成功了.
二,我们来看看第二个版本s60版:
一样,看图ElfinForest_s60_1.png,names window的项目IdIncorrect,然后一样在IDA View-A向上跳几次后,来到图ElfinForest_s60_2.png的地方:
.text:10006B60 BNE loc_10006C64 ; Branch .text:10006B64 ADD R5, R6, #0x2C8 ; Rd = Op1 + Op2 .text:10006B68 ADD R0, R6, #0x2A0 ; Rd = Op1 + Op2 .text:10006B6C MOV R1, R5 ; Rd = Op2 .text:10006B70 BL sub_1000CEEC ; Branch with Link .text:10006B74 CMP R0, #0 ; Set cond. codes on Op1 - Op2 .text:10006B78 BEQ loc_10006BC0 ; Branch .text:10006B7C ADD R4, R6, #0x270 ; Rd = Op1 + Op2 .text:10006B80 ADD R0, SP, #0x10 ; Rd = Op1 + Op2 .text:10006B84 LDR R1, =aIdIncorrect ; Load from Memory .text:10006B88 BL sub_1000CA0C ; Branch with Link .text:10006B8C MOV R0, R4 ; Rd = Op2 .text:10006B90 ADD R1, SP, #0x10 ; Rd = Op1 + Op2 .text:10006B94 BL sub_1000CE9C ; Branch with Link
其中的BEQ loc_10006BC0我也点了一下,黄色的,它能跳过我们的IdIncorrect,和上面一样到达Config_dat,RegisterSuccess的位置.所以我们一样把它改为无条件跳转命令即可.
记录下它的位置是00006BF4.关闭IDA,打开UltraEdit-32,找到它,还是10 00 00 0A,改成10 00 00 EA就做完了.这个不多说.
好了,其它方法我自己倒是也都做了一边,你们先跟着我的这个方案做一次,做完后也去尝试其它方案,领略领略破解的无穷乐趣吧!哈哈!
文中所指游戏地址 http://www.sisdown.com/game/act/200509/1325.html |