【文章标题】: 一个手机游戏追码
【文章作者】: wangdell
【软件名称】: ChessGenius.exe
【下载地址】: 自己搜索下载
【使用工具】: IDA WM5 emulator
【操作平台】: wm
【软件介绍】: 国际象棋
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
   1、准备
    1.1IDA 打开Texttwister.exe。静态分析。
    1.2开Activesync。文件=>连接设置 中 选择DMA。
    1.3开启WM6SDK带的设仿真器管理器,选Pocket pc 20003 SE仿真程序,右键“连接”。
    1.4选Pocket pc 20003 SE仿真程序,右键“插入底座”。等待activysync和仿真器连接和同步。
    1.5真机中试运行后,会马上提示输入用户名和密码提示注册,注册不成功会有失败信息对话框。
   2、分析
    2.1寻找关键代码:通过IDA的imports寻找MessageBoxW,DialogBoxIndirectParamW等函数的引用处,
  并结合在string中搜索错误信息,可找到注册对话框的处理函数如下:
  

代码:
  .text:000169C4                 LDR     R0, [R4,#0x144] ; hModule
  .text:000169C8                 MOV     R2, #5          ; lpType
  .text:000169CC                 MOV     R1, #0x71       ; lpName
  .text:000169D0                 BL      FindResourceW
  .text:000169D4                 MOV     R1, R0          ; hResInfo
  .text:000169D8                 LDR     R0, [R4,#0x144] ; hModule
  .text:000169DC                 BL      LoadResource
  .text:000169E0                 LDR     R3, =dlgproc1   ; lpDialogFunc
  .text:000169E4                 MOV     R1, R0          ; hDialogTemplate
  .text:000169E8                 LDR     R2, [R4,#0x14C] ; hWndParent
  .text:000169EC                 LDR     R0, [R4,#0x144] ; hInstance
  .text:000169F0                 STR     R6, [SP,#0x24+dwInitParam]
  .text:000169F4                 BL      DialogBoxIndirectParamW
  
    2.2 跟踪调试
    进入.text:00014134 位置的dlgproc1。
  
代码:
  .text:00014134 dlgproc1                                ; DATA XREF: sub_168F0:off_16BA0o
  .text:00014134
  .text:00014134 String          = -0x100
  .text:00014134
  .text:00014134                 STMFD   SP!, {R4-R6,LR}
  .text:00014138                 SUB     SP, SP, #0xF0
  .text:0001413C                 MOV     R5, R0
  .text:00014140                 MOV     R6, #1
  .text:00014144                 CMP     R1, #5
  .text:00014148                 BEQ     loc_1435C
  .text:0001414C                 CMP     R1, #0x14
  .text:00014150                 BEQ     loc_14328
  .text:00014154                 CMP     R1, #0x53
  .text:00014158                 BEQ     loc_14318
  .text:0001415C                 MOV     R3, #WM_INITDIALOG
  .text:00014160                 CMP     R1, R3
  .text:00014164                 BEQ     loc_142D0
  .text:00014168                 MOVL    R3, WM_COMMAND
  .text:00014170                 CMP     R1, R3
  .text:00014174                 BNE     loc_1436C
  .text:00014178                 MOV     R3, R2,LSL#16
  .text:0001417C                 LDR     R4, =unk_336D8
  .text:00014180                 MOV     R6, R3,LSR#16
  .text:00014184                 CMP     R6, #1
  .text:00014188                 BEQ     loc_141FC
  .text:0001418C                 CMP     R6, #0xE6
  .text:00014190                 BEQ     loc_141E4
  .text:00014194                 CMP     R6, #0xE7
  .text:00014198                 BEQ     loc_141C4
  .text:0001419C                 CMP     R6, #0xED
  .text:000141A0                 BEQ     loc_141C4
  .text:000141A4                 CMP     R6, #0xF7
  .text:000141A8                 BNE     loc_1436C
  .text:000141AC
  .text:000141AC loc_141AC                               ; CODE XREF: dlgproc1+ECj
  .text:000141AC                                         ; dlgproc1+16Cj
  .text:000141AC                 MOV     R1, R6
  .text:000141B0                 MOV     R0, R5
  .text:000141B4                 BL      sub_11810
  .text:000141B8                 MOV     R0, #1
  .text:000141BC                 B       loc_1444C
  .text:000141BC ; ---------------------------------------------------------------------------
  .text:000141C0 off_141C0       DCD unk_336D8           ; DATA XREF: dlgproc1+48r
  .text:000141C0                                         ; dlgproc1:loc_142D0r ...
  .text:000141C4 ; ---------------------------------------------------------------------------
  .text:000141C4
  .text:000141C4 loc_141C4                               ; CODE XREF: dlgproc1+64j
  .text:000141C4                                         ; dlgproc1+6Cj
  .text:000141C4                 MOV     R3, R2,LSR#16
  .text:000141C8                 MOV     R2, #0x100
  .text:000141CC                 CMP     R3, R2
  .text:000141D0                 BNE     loc_1436C
  .text:000141D4                 MOV     R1, #0          ; st
  .text:000141D8                 MOV     R0, R5          ; hwnd
  .text:000141DC                 BL      SHSipPreference
  .text:000141E0                 B       loc_1436C
  .text:000141E4 ; ---------------------------------------------------------------------------
  .text:000141E4
  .text:000141E4 loc_141E4                               ; CODE XREF: dlgproc1+5Cj
  .text:000141E4                 MOV     R3, #0xA        ; nMaxCount
  .text:000141E8                 ADD     R2, SP, #0x100+String ; lpString
  .text:000141EC                 MOV     R1, #0xE7       ; nIDDlgItem
  .text:000141F0                 MOV     R0, R5          ; hDlg
  .text:000141F4                 BL      GetDlgItemTextW
  .text:000141F8                 B       loc_14224
  .text:000141FC ; ---------------------------------------------------------------------------
  .text:000141FC
  .text:000141FC loc_141FC                               ; CODE XREF: dlgproc1+54j
  .text:000141FC                 MOV     R3, #0xA        ; nMaxCount
  .text:00014200                 ADD     R2, SP, #0x100+String ; lpString
  .text:00014204                 MOV     R1, #0xE7       ; nIDDlgItem
  .text:00014208                 MOV     R0, R5          ; hDlg
  .text:0001420C                 BL      GetDlgItemTextW
  .text:00014210                 ADD     R0, SP, #0x100+String ; wchar_t *
  .text:00014214                 BL      _wtol
  .text:00014218                 LDR     R1, [R4,#0x58]
  .text:0001421C                 CMP     R1, R0
  .text:00014220                 BEQ     loc_141AC
  .text:00014224
  .text:00014224 loc_14224                               ; CODE XREF: dlgproc1+C4j
  .text:00014224                 ADD     R0, SP, #0x100+String ; wchar_t *
  .text:00014228                 BL      _wtol
  .text:0001422C                 MOV     R3, #0x32       ; nMaxCount
  .text:00014230                 STR     R0, [R4,#0x58]
  .text:00014234                 ADD     R2, SP, #0x100+String ; lpString
  .text:00014238                 STR     R0, [R4,#0x158]
  .text:0001423C                 MOV     R1, #0xED       ; nIDDlgItem
  .text:00014240                 MOV     R0, R5          ; hDlg
  .text:00014244                 BL      GetDlgItemTextW
  .text:00014248                 MOV     R2, #0x32       ; count
  .text:0001424C                 ADD     R1, SP, #0x100+String ; wcstr
  .text:00014250                 ADD     R0, R4, #0x15C  ; mbstr
  .text:00014254                 BL      wcstombs
  .text:00014258                 MOV     R0, #3
  .text:0001425C                 BL      sub_17894
  .text:00014260                 LDR     R0, [R4,#0x158]
  .text:00014264                 CMP     R0, #0
  .text:00014268                 BEQ     loc_142A4
  .text:0001426C                 MOV     R12, #0x15C
  .text:00014270                 LDRSB   R0, [R4,R12]
  .text:00014274                 MOV     R3, R0,LSL#24
  .text:00014278                 MOVS    R3, R3,ASR#24
  .text:0001427C                 BEQ     loc_142A4
  .text:00014280                 MOV     R2, #0
  .text:00014284                 ADD     R1, R4, #0x158  ; code_val
  .text:00014288                 ADD     R0, R4, #0x15C  ; *name
  .text:0001428C                 BL      codecheck
  .text:00014290                 MOVS    R3, R0          ; true/false=1/0
  .text:00014294                 BEQ     loc_142A4
  .text:00014298                 MOV     R0, #1
  .text:0001429C                 BL      sub_17894
  .text:000142A0                 B       loc_141AC
  .text:000142A4 ; ---------------------------------------------------------------------------
  .text:000142A4
  .text:000142A4 loc_142A4                               ; CODE XREF: dlgproc1+134j
  .text:000142A4                                         ; dlgproc1+148j ...
  .text:000142A4                 MOV     R1, #1          ; st
  .text:000142A8                 MOV     R0, R5          ; hwnd
  .text:000142AC                 BL      SHSipPreference
  .text:000142B0                 LDR     R2, =aLicenseKeyNotV ; lpCaption
  .text:000142B4                 MOV     R3, #0x30       ; uType
  .text:000142B8                 LDR     R1, =aIfYouHaveRegis ; lpText
  .text:000142BC                 MOV     R0, R5          ; hWnd
  .text:000142C0                 BL      MessageBoxW
  .text:000142C4                 B       loc_1436C
  .text:000142C4 ; ---------------------------------------------------------------------------
  .text:000142C8 ; LPCWSTR off_142C8
  .text:000142C8 off_142C8       DCD aIfYouHaveRegis     ; DATA XREF: dlgproc1+184r
  .text:000142C8                                         ; "If you have registered please check tha"...
  .text:000142CC ; LPCWSTR off_142CC
  .text:000142CC off_142CC       DCD aLicenseKeyNotV     ; DATA XREF: dlgproc1+17Cr
  .text:000142CC                                         ; "License Key not valid"
  .text:000142D0 ; ---------------------------------------------------------------------------
  .text:000142D0
  .text:000142D0 loc_142D0                               ; CODE XREF: dlgproc1+30j
  .text:000142D0                 LDR     R4, =unk_336D8
  .text:000142D4                 MOV     R0, #0
  .text:000142D8                 MOV     R1, #0
  .text:000142DC                 STR     R0, [R4,#0x58]
  .text:000142E0                 LDR     R0, [R4,#0x158]
  .text:000142E4                 CMP     R0, #0
  .text:000142E8                 MOV     R0, R5
  .text:000142EC                 MOVEQ   R1, #1
  .text:000142F0                 BL      sub_140C4
  .text:000142F4                 MOV     R2, #0x32       ; count
  .text:000142F8                 ADD     R1, R4, #0x15C  ; mbstr
  .text:000142FC                 ADD     R0, SP, #0x100+String ; wcstr
  .text:00014300                 BL      mbstowcs
  .text:00014304                 ADD     R2, SP, #0x100+String ; lpString
  .text:00014308                 MOV     R1, #0xED       ; nIDDlgItem
  .text:0001430C                 MOV     R0, R5          ; hDlg
  .text:00014310                 BL      SetDlgItemTextW
  .text:00014314                 B       loc_1439C
  .text:00014318 ; ---------------------------------------------------------------------------
  .text:00014318
  .text:00014318 loc_14318                               ; CODE XREF: dlgproc1+24j
  .text:00014318                 LDR     R0, =aReg
  .text:0001431C                 BL      sub_11748
  .text:00014320                 B       loc_1436C
  .text:00014320 ; ---------------------------------------------------------------------------
  .text:00014324 off_14324       DCD aReg                ; DATA XREF: dlgproc1:loc_14318r
  .text:00014324                                         ; "Reg"
  .text:00014328 ; ---------------------------------------------------------------------------
  .text:00014328
  .text:00014328 loc_14328                               ; CODE XREF: dlgproc1+1Cj
  .text:00014328                 LDR     R0, =unk_336D8
  .text:0001432C                 LDR     R1, [R0,#0x158]
  .text:00014330                 CMP     R1, #0
  .text:00014334                 BEQ     loc_14350
  .text:00014338                 LDR     R0, [R0,#0x14C] ; hwndRequester
  .text:0001433C                 MOV     R1, #8          ; dwState
  .text:00014340                 BL      SHFullScreen
  .text:00014344                 MOV     R1, #8          ; dwState
  .text:00014348                 MOV     R0, R5          ; hwndRequester
  .text:0001434C                 BL      SHFullScreen
  .text:00014350
  .text:00014350 loc_14350                               ; CODE XREF: dlgproc1+200j
  .text:00014350                 MOV     R0, R5
  .text:00014354                 BL      sub_117C4
  .text:00014358                 B       loc_1436C
  .text:0001435C ; ---------------------------------------------------------------------------
  .text:0001435C
  .text:0001435C loc_1435C                               ; CODE XREF: dlgproc1+14j
  .text:0001435C                 LDR     R4, =unk_336D8
  .text:00014360                 LDR     R0, [R4,#0x158]
  .text:00014364                 CMP     R0, #0
  .text:00014368                 BEQ     loc_14374
  .text:0001436C
  .text:0001436C loc_1436C                               ; CODE XREF: dlgproc1+40j
  .text:0001436C                                         ; dlgproc1+74j ...
  .text:0001436C                 MOV     R0, #0
  .text:00014370                 B       loc_1444C
  .text:00014374 ; ---------------------------------------------------------------------------
  .text:00014374
  .text:00014374 loc_14374                               ; CODE XREF: dlgproc1+234j
  .text:00014374                 MOV     R6, #0x71
  .text:00014378                 BL      sub_1169C
  .text:0001437C                 MOVS    R3, R0
  .text:00014380                 LDR     R0, [R4,#0x144]
  .text:00014384                 MOVNE   R6, #0x72
  .text:00014388                 MOV     R3, R6,LSL#16
  .text:0001438C                 MOV     R2, R3,LSR#16
  .text:00014390                 MOV     R1, R5
  .text:00014394                 BL      sub_11000
  .text:00014398                 MOV     R6, #0
  .text:0001439C
  .text:0001439C loc_1439C                               ; CODE XREF: dlgproc1+1E0j
  .text:0001439C                 LDR     R2, =aChessgeniusVer ; lpString
  .text:000143A0                 MOV     R1, #0xEC       ; nIDDlgItem
  .text:000143A4                 MOV     R0, R5          ; hDlg
  .text:000143A8                 BL      SetDlgItemTextW
  .text:000143AC                 LDR     R0, [R4,#0x158]
  .text:000143B0                 CMP     R0, #0
  .text:000143B4                 BNE     loc_14428
  .text:000143B8                 BL      sub_1187C
  .text:000143BC                 CMP     R0, #4
  .text:000143C0                 BLE     loc_143E0
  .text:000143C4                 MOV     R2, R0
  .text:000143C8                 LDR     R1, =aUnregisteredFo ; lpFormat
  .text:000143CC                 ADD     R0, SP, #0x100+String ; lpBuffer
  .text:000143D0                 BL      wsprintfW
  .text:000143D4                 B       loc_143EC
  .text:000143D4 ; ---------------------------------------------------------------------------
  .text:000143D8 ; LPCWSTR lpFormat
  .text:000143D8 lpFormat        DCD aUnregisteredFo     ; DATA XREF: dlgproc1+294r
  .text:000143D8                                         ; "Unregistered for %d days"
  .text:000143DC ; LPCWSTR lpString
  .text:000143DC lpString        DCD aChessgeniusVer     ; DATA XREF: dlgproc1:loc_1439Cr
  .text:000143DC                                         ; "ChessGenius Version 1.90"
  .text:000143E0 ; ---------------------------------------------------------------------------
  .text:000143E0
  .text:000143E0 loc_143E0                               ; CODE XREF: dlgproc1+28Cj
  .text:000143E0                 LDR     R1, =aUnregistered_0 ; lpFormat
  .text:000143E4                 ADD     R0, SP, #0x100+String ; lpBuffer
  .text:000143E8                 BL      wsprintfW
  .text:000143EC
  .text:000143EC loc_143EC                               ; CODE XREF: dlgproc1+2A0j
  .text:000143EC                 ADD     R2, SP, #0x100+String ; lpString
  .text:000143F0                 MOV     R1, #0xF4       ; nIDDlgItem
  .text:000143F4                 MOV     R0, R5          ; hDlg
  .text:000143F8                 BL      SetDlgItemTextW
  .text:000143FC                 LDR     R2, =aToUnlockTheFul ; lpString
  .text:00014400                 MOV     R1, #0xF3       ; nIDDlgItem
  .text:00014404                 MOV     R0, R5          ; hDlg
  .text:00014408                 BL      SetDlgItemTextW
  .text:0001440C                 LDR     R2, =a2006
  .text:00014410                 LDR     R1, =aCopyrightCSLan
  .text:00014414                 B       loc_14430
  .text:00014414 ; ---------------------------------------------------------------------------
  .text:00014418 off_14418       DCD aCopyrightCSLan     ; DATA XREF: dlgproc1+2DCr
  .text:00014418                                         ; "Copyright (c) %S Lang Software Ltd.\nwww"...
  .text:0001441C off_1441C       DCD a2006               ; DATA XREF: dlgproc1+2D8r
  .text:0001441C                                         ; "2006"
  .text:00014420 ; LPCWSTR off_14420
  .text:00014420 off_14420       DCD aToUnlockTheFul     ; DATA XREF: dlgproc1+2C8r
  .text:00014420                                         ; "To unlock the full features register at"...
  .text:00014424 ; LPCWSTR off_14424
  .text:00014424 off_14424       DCD aUnregistered_0     ; DATA XREF: dlgproc1:loc_143E0r
  .text:00014424                                         ; "Unregistered"
  .text:00014428 ; ---------------------------------------------------------------------------
  .text:00014428
  .text:00014428 loc_14428                               ; CODE XREF: dlgproc1+280j
  .text:00014428                 LDR     R2, =a2006_0
  .text:0001442C                 LDR     R1, =aCopyrightCSL_0 ; lpFormat
  .text:00014430
  .text:00014430 loc_14430                               ; CODE XREF: dlgproc1+2E0j
  .text:00014430                 ADD     R0, SP, #0x100+String ; lpBuffer
  .text:00014434                 BL      wsprintfW
  .text:00014438                 ADD     R2, SP, #0x100+String ; lpString
  .text:0001443C                 MOV     R1, #0xF2       ; nIDDlgItem
  .text:00014440                 MOV     R0, R5          ; hDlg
  .text:00014444                 BL      SetDlgItemTextW
  .text:00014448                 MOV     R0, R6
  .text:0001444C
  .text:0001444C loc_1444C                               ; CODE XREF: dlgproc1+88j
  .text:0001444C                                         ; dlgproc1+23Cj
  .text:0001444C                 ADD     SP, SP, #0xF0
  .text:00014450                 LDMFD   SP!, {R4-R6,PC}
  .text:00014450 ; End of function dlgproc1
  
  粗略分析,可看到很多相关api函数,如GetDlgItemText,MessageBox等。
  如:
  
代码:
  .text:000142A4 loc_142A4                               ; CODE XREF: dlgproc1+134j
  .text:000142A4                                         ; dlgproc1+148j ...
  .text:000142A4                 MOV     R1, #1          ; st
  .text:000142A8                 MOV     R0, R5          ; hwnd
  .text:000142AC                 BL      SHSipPreference
  .text:000142B0                 LDR     R2, =aLicenseKeyNotV ; lpCaption
  .text:000142B4                 MOV     R3, #0x30       ; uType
  .text:000142B8                 LDR     R1, =aIfYouHaveRegis ; lpText
  .text:000142BC                 MOV     R0, R5          ; hWnd
  .text:000142C0                 BL      MessageBoxW
  .text:000142C4                 B       loc_1436
  
  这里是错误信息对话框,向上翻找code的检测代码。
  可找到
  
代码:
  .text:00014280                 MOV     R2, #0
  .text:00014284                 ADD     R1, R4, #0x158  ; code_val
  .text:00014288                 ADD     R0, R4, #0x15C  ; *name
  .text:0001428C                 BL      codecheck
  
  进入.text:00017AB8 codecheck
  
代码:
  .text:00017ADC loc_17ADC                               ; CODE XREF: codecheck+90j
  .text:00017ADC                 LDRSB   R4, [R6]        ; *name
  .text:00017AE0                 MOVS    R3, R4
  .text:00017AE4                 BEQ     loc_17B0C
  .text:00017AE8                 ORR     R4, R4, #0x20
  .text:00017AEC                 MOV     R3, R4,LSL#24
  .text:00017AF0                 MOV     R0, R3,ASR#24
  .text:00017AF4                 ADD     R6, R6, #1
  .text:00017AF8                 CMP     R0, #'a'
  .text:00017AFC                 BLT     loc_17B44
  .text:00017B00                 CMP     R0, #'z'
  .text:00017B04                 BGT     loc_17B44
  .text:00017B08                 ADD     R7, R0, R7      ; r7=sum(*name)
  .text:00017B0C
  .text:00017B0C loc_17B0C                               ; CODE XREF: codecheck+2Cj
  .text:00017B0C                 LDR     R3, =__rt_udiv
  .text:00017B10                 ADD     R1, R7, R5
  .text:00017B14                 MOV     R0, #9
  .text:00017B18                 LDR     R3, [R3]
  .text:00017B1C                 MOV     LR, PC
  .text:00017B20                 MOV     PC, R3
  .text:00017B24                 MOVL    R3, 0xE943
  .text:00017B2C                 MOV     R3, R3,ASR R1
  .text:00017B30                 ADD     R2, SP, #0x68+nameval
  .text:00017B34                 MOV     R3, R3,LSL#24
  .text:00017B38                 EOR     R3, R4, R3,ASR#24
  .text:00017B3C                 STRB    R3, [R5,R2]
  .text:00017B40                 ADD     R5, R5, #1
  .text:00017B44
  .text:00017B44 loc_17B44                               ; CODE XREF: codecheck+44j
  .text:00017B44                                         ; codecheck+4Cj
  .text:00017B44                 CMP     R5, #0xF
  .text:00017B48                 BCC     loc_17ADC       ; *name
  .text:00017B4C                 LDR     R6, =unk_27880
  .text:00017B50                 MOV     R4, R11
  .text:00017B54                 MOV     R5, R11
  .text:00017B58
  .text:00017B58 loc_17B58                               ; CODE XREF: codecheck+128j
  .text:00017B58                 CMP     R5, #2
  .text:00017B5C                 BNE     loc_17B98
  .text:00017B60                 LDR     R0, [R8]
  .text:00017B64                 MOVL    R3, 0x1FF
  .text:00017B6C                 ADD     R0, R0, #0x57
  .text:00017B70                 ANDS    R1, R3, R0,LSR#7
  .text:00017B74                 BEQ     loc_17B84
  .text:00017B78
  .text:00017B78 loc_17B78                               ; CODE XREF: codecheck+C8j
  .text:00017B78                 EOR     R0, R1, R0
  .text:00017B7C                 MOVS    R1, R1,LSR#7
  .text:00017B80                 BNE     loc_17B78
  .text:00017B84
  .text:00017B84 loc_17B84                               ; CODE XREF: codecheck+BCj
  .text:00017B84                 AND     R0, R0, #0x7F
  .text:00017B88                 ADD     R2, R0, #1
  .text:00017B8C                 B       loc_17BB0
  .text:00017B8C ; ---------------------------------------------------------------------------
  .text:00017B90 off_17B90       DCD unk_27880           ; DATA XREF: codecheck+94r
  .text:00017B94 off_17B94       DCD __rt_udiv           ; DATA XREF: codecheck:loc_17B0Cr
  .text:00017B98 ; ---------------------------------------------------------------------------
  .text:00017B98
  .text:00017B98 loc_17B98                               ; CODE XREF: codecheck+A4j
  .text:00017B98                 LDRB    R2, [R5,R6]
  .text:00017B9C                 MOV     R1, #0xF
  .text:00017BA0                 ADD     R0, SP, #0x68+nameval
  .text:00017BA4                 BL      codecheck_0     ; 497B
  .text:00017BA8                 MOV     R3, R0,LSL#16
  .text:00017BAC                 MOV     R2, R3,LSR#16
  .text:00017BB0
  .text:00017BB0 loc_17BB0                               ; CODE XREF: codecheck+D4j
  .text:00017BB0                 MOV     R3, R4,LSL#16
  .text:00017BB4                 MOV     R0, R3,LSR#16
  .text:00017BB8                 MOV     R3, #0xFF
  .text:00017BBC                 MOV     R1, R3,LSL R0
  .text:00017BC0                 AND     R3, R1, R2,LSL R0
  .text:00017BC4                 LDR     R2, [R8]        ; code_val
  .text:00017BC8                 AND     R2, R2, R1
  .text:00017BCC                 CMP     R3, R2
  .text:00017BD0                 BNE     loc_17BF0
  .text:00017BD4                 ADD     R5, R5, #1
  .text:00017BD8                 ADD     R4, R4, #8
  .text:00017BDC                 CMP     R5, #3
  .text:00017BE0                 BCC     loc_17B58
  .text:00017BE4                 MOV     R0, #1
  .text:00017BE8
  .text:00017BE8 loc_17BE8                               ; CODE XREF: codecheck+1B0j
  .text:00017BE8                 ADD     SP, SP, #0x44
  .text:00017BEC                 LDMFD   SP!, {R4-R11,PC}
  .text:00017BF0 ; ---------------------------------------------------------------------------
  .text:00017BF0
  .text:00017BF0 loc_17BF0                               ; CODE XREF: codecheck+118j
  .text:00017BF0                 CMP     R10, #1
  .text:00017BF4                 ADD     R0, SP, #0x68+var_58
  .text:00017BF8                 STREQB  R11, [R9]
  .text:00017BFC                 MOV     R4, R11
  .text:00017C00                 BL      reg
  .text:00017C04                 LDRSB   R3, [SP,#0x68+var_58]
  .text:00017C08                 MOV     R3, R3,LSL#24
  .text:00017C0C                 MOVS    R3, R3,ASR#24
  .text:00017C10                 BEQ     loc_17C60
  .text:00017C14                 ADD     R0, SP, #0x68+var_58
  .text:00017C18                 BL      sub_179F4
  .text:00017C1C                 LDR     R3, [R8]
  .text:00017C20                 CMP     R0, R3
  .text:00017C24                 BNE     loc_17C30
  .text:00017C28                 CMP     R0, #0
  .text:00017C2C                 MOVNE   R4, #1
  .text:00017C30
  .text:00017C30 loc_17C30                               ; CODE XREF: codecheck+16Cj
  .text:00017C30                 LDRSB   R3, [R9]
  .text:00017C34                 CMP     R3, #0
  .text:00017C38                 BEQ     loc_17C44
  .text:00017C3C                 CMP     R4, #0
  .text:00017C40                 BEQ     loc_17C60
  .text:00017C44
  .text:00017C44 loc_17C44                               ; CODE XREF: codecheck+180j
  .text:00017C44                 MOV     R2, #0x32       ; size_t
  .text:00017C48                 ADD     R1, SP, #0x68+var_58 ; void *
  .text:00017C4C                 MOV     R0, R9          ; void *
  .text:00017C50                 BL      memcpy
  .text:00017C54                 STRB    R11, [R9,#0x32]
  .text:00017C58                 CMP     R4, #0
  .text:00017C5C                 BNE     loc_17C64
  .text:00017C60
  .text:00017C60 loc_17C60                               ; CODE XREF: codecheck+158j
  .text:00017C60                                         ; codecheck+188j
  .text:00017C60                 STR     R11, [R8]
  .text:00017C64
  .text:00017C64 loc_17C64                               ; CODE XREF: codecheck+1A4j
  .text:00017C64                 MOV     R0, R4
  .text:00017C68                 B       loc_17BE8
  .text:00017C68 ; End of function codecheck
  
  可以看到里面有对name简单的合法字符检查(a-z),及一些变换(移位、异或、加等等)。code要求为数字(0-9)。
  最后,分三个字节,对code_val和name变换得到的BYTE进行比较。
  输入用户名;ww 对应的三次变换分别得到0x4b 0x1b 0x16
  因此可得code应为0x161b4b=1448779。
  
  重新输入用户名ww,注册码:1448779。注册成功。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年03月17日 0:24:34
上传的附件 ChessGenius.rar