eopenfang 发表于 2006-7-15 12:20:11

爆破CChess v2.1 for Windows CE

昨天拿出N年前买的古董PPC,传上几本电子书,顺便找了个中国象棋游戏CChess v2.1装上,运行后显示未注册只能用7天。可能软件太不出名,没搜到注册码。由于没搞过PPC,也不懂ARM汇编,报着碰运气的观点,用IDA逆向了一下,还真找到关键代码了:

.text:00015018               CMP   R0, R3
.text:0001501C               MOV   R0, R4
.text:00015020               BNE   loc_15058
.text:00015024               LDR   R2, =aCchess2_1_2
.text:00015028               MOV   R3, #0x40
.text:0001502C               LDR   R1, =aRegisterSucces
.text:00015030               BL      _MessageBoxW_CWnd__QAAHPBG0I_Z ; CWnd::MessageBoxW(ushort const *,ushort const *,uint)
.text:00015034               BL      sub_15A94
.text:00015038               LDR   R0, =unk_37858
.text:0001503C               MOV   R1, #0x63
.text:00015040               STR   R1,
.text:00015044               B       loc_15068
.text:00015044 ; -------------------------------------?
.text:00015048 off_15048       DCD unk_37858         ; DATA XREF: sub_14EB8+180r
.text:0001504C off_1504C       DCD aRegisterSucces   ; DATA XREF: sub_14EB8+174r
.text:0001504C                                       ; "Register Success! Thank you!"
.text:00015050 off_15050       DCD aCchess2_1_2      ; DATA XREF: sub_14EB8+16Cr
.text:00015050                                       ; "CChess2.1"
.text:00015054 off_15054       DCD unk_37854         ; DATA XREF: sub_14EB8:loc_14FF8r
.text:00015058 ; -------------------------------------?
.text:00015058
.text:00015058 loc_15058                               ; CODE XREF: sub_14EB8+168j
.text:00015058               LDR   R2, =aCchess2_1_3
.text:0001505C               MOV   R3, #0x10
.text:00015060               LDR   R1, =aRegisterFailed
.text:00015064               BL      _MessageBoxW_CWnd__QAAHPBG0I_Z ; CWnd::MessageBoxW(ushort const *,ushort const *,uint)
.text:00015068
.text:00015068 loc_15068                               ; CODE XREF: sub_14EB8+18Cj
.text:00015068               MOV   R0, R4
.text:0001506C
.text:0001506C loc_1506C                               ; CODE XREF: sub_14EB8+150j
.text:0001506C               MOV   R1, #1
.text:00015070               BL      _EndDialog_CDialog__QAAXH_Z ; CDialog::EndDialog(int)
.text:00015074               B       loc_15298


虽然不懂ARM的汇编,但是发现和MSIL有点相似,LDR代表读取地址,B代码分支(branch)。看来关键的比较就是这句.text:00015020   BNE   loc_15058,不相同则跳到出错框,相等就注册成功,典型的爆破。

下面就是咋修改了,下了ARM指令的说明,没找到NOP类似的空语句,可是发现ARM的指令都是4字节的。晕,那就干脆把BNE换成LDR   R2, =aCchess2_1_2,反正这条语句运行两遍也没关系。

用UltraEdit打开文件,将0x00004420处的0C 00 00 1A换为LDR的数据24 20 9F E5,保存,上传。

注册时啥也不输入,点击register,搞定。呵呵,以后入睡前可以在古董PPC上玩会儿象棋了。

快雪时晴 发表于 2006-7-15 13:54:25

学习,没机会接触WINCE

blueghost 发表于 2006-7-15 22:00:42

同样学习。

yyxljy 发表于 2006-7-16 16:16:19

什么是PPC????

gameness 发表于 2006-7-16 17:54:59

学习学习!!!
页: [1]
查看完整版本: 爆破CChess v2.1 for Windows CE