開心知識問答 V3.0版

看雪資料發表於2015-11-15

破解軟體:開心知識問答 V3.0版
下載網址:http://count.skycn.com/softdown.php?id=4703&url=http://on165-down.skycn.net/down/kxqaV30.exe
破解難度:易
破解工具:TRW1.22
軟體說明:本軟體是一款別俱特色的智力問答遊戲,內容涉及到歷史,經濟,風情,民俗、
地理、人文等多個古今中外各方面的知識,多達4000餘題,並在不斷擴充。讓您在輕鬆娛
樂,益智,搞笑的時候,不知不覺的增長知識!

任意輸入使用者名稱ShenGe和註冊碼12345678,下BPX HMEMCPY,點註冊,程式被中斷,BC *,按7次F12,再按F10,來到如下程式碼處:
0167:00500209  MOV      EAX,[EBP-10]
0167:0050020C  CALL     00404B64             <---取輸入使用者名稱的長度
0167:00500211  MOV      [EBP-08],EAX
0167:00500214  MOV      EBX,[EBP-08]
0167:00500217  TEST     EBX,EBX
0167:00500219  JNG      00500244
0167:0050021B  MOV      ESI,01
0167:00500220  LEA      EAX,[EBP-14]
0167:00500223  PUSH     EAX
0167:00500224  MOV      ECX,01
0167:00500229  MOV      EDX,ESI
0167:0050022B  MOV      EAX,[EBP-10]
0167:0050022E  CALL     00404DBC
0167:00500233  MOV      EAX,[EBP-14]
0167:00500236  MOV      AL,[EAX]             <---取輸入使用者名稱的第一個字元
0167:00500238  AND      EAX,FF               <---擴充套件成字
0167:0050023D  ADD      [EBP-0C],EAX         <---各個字元的和累加到EBP-0C中
0167:00500240  INC      ESI
0167:00500241  DEC      EBX
0167:00500242  JNZ      00500220             <---是否取完
0167:00500244  MOV      EAX,[EBP-0C]         <---取前面算得的累加值  
0167:00500247  IMUL     DWORD [EBP-08]       <---累加值乘以使用者名稱長度
0167:0050024A  ADD      EAX,613E             <---乘積加613E
0167:0050024F  ADD      EAX,03DB             <---再加03DB,我的為7275    
0167:00500254  MOV      [EBP-0C],EAX         <---結果存入EBP-0C中
0167:00500257  LEA      EDX,[EBP-18]
0167:0050025A  MOV      EAX,[EBP-04]
0167:0050025D  MOV      EAX,[EAX+068C]
0167:00500263  CALL     00448850             <---取輸入的假碼
0167:00500268  MOV      EAX,[EBP-18]
0167:0050026B  PUSH     EAX
0167:0050026C  LEA      EDX,[EBP-20]
0167:0050026F  MOV      EAX,[EBP-0C]     <---取上面的值7275到EAX中
0167:00500272  CALL     0040932C         <---7275的十進位制值29301的每位字元轉換
0167:00500277  MOV      EAX,[EBP-20]     成十六進位制,即32 39 33 30 31,存入EAX中
0167:0050027A  LEA      EDX,[EBP-1C]
0167:0050027D  CALL     004EFD8C          <---計算註冊碼的Call
0167:00500282  MOV      EDX,[EBP-1C]      <---此時D EDX可看到真註冊碼
0167:00500285  POP      EAX               <---EAX中為輸入的假註冊碼
0167:00500286  CALL     00404CA8
0167:0050028B  JNZ      005002AF            
0167:0050028D  PUSH     BYTE +40
0167:0050028F  MOV      ECX,00500304
0167:00500294  MOV      EDX,00500310
0167:00500299  MOV      EAX,[0050374C]
0167:0050029E  MOV      EAX,[EAX]
0167:005002A0  CALL     004689F4              <---顯示註冊成功
0167:005002A5  MOV      EAX,[EBP-04]
0167:005002A8  CALL     00500054
0167:005002AD  JMP      SHORT 005002C7
0167:005002AF  PUSH     BYTE +10
0167:005002B1  MOV      ECX,0050034C
0167:005002B6  MOV      EDX,0050035C
0167:005002BB  MOV      EAX,[0050374C]
0167:005002C0  MOV      EAX,[EAX]
0167:005002C2  CALL     004689F4              <---顯示註冊失敗
0167:005002C7  XOR      EAX,EAX
0167:005002C9  POP      EDX
0167:005002CA  POP      ECX
0167:005002CB  POP      ECX
我們跟進上面計算註冊碼的Call,可以看到如下程式碼:
0167:004EFD8C  PUSH     EBP
0167:004EFD8D  MOV      EBP,ESP
0167:004EFD8F  XOR      ECX,ECX
0167:004EFD91  PUSH     ECX
0167:004EFD92  PUSH     ECX
0167:004EFD93  PUSH     ECX
0167:004EFD94  PUSH     ECX
0167:004EFD95  PUSH     ECX
0167:004EFD96  PUSH     ECX
0167:004EFD97  PUSH     ECX
0167:004EFD98  PUSH     EBX
0167:004EFD99  PUSH     ESI
0167:004EFD9A  PUSH     EDI
0167:004EFD9B  MOV      [EBP-08],EDX
0167:004EFD9E  MOV      [EBP-04],EAX
0167:004EFDA1  MOV      EAX,[EBP-04]
0167:004EFDA4  CALL     00404D4C
0167:004EFDA9  XOR      EAX,EAX
0167:004EFDAB  PUSH     EBP
0167:004EFDAC  PUSH     DWORD 004EFEA2
0167:004EFDB1  PUSH     DWORD [FS:EAX]
0167:004EFDB4  MOV      [FS:EAX],ESP
0167:004EFDB7  LEA      EAX,[EBP-0C]
0167:004EFDBA  MOV      EDX,[EBP-04]
0167:004EFDBD  CALL     00404944
0167:004EFDC2  MOV      EAX,[EBP-0C]          <---D EAX可在資料區看到為29301
0167:004EFDC5  CALL     00404B64              <---取EAX的位數  
0167:004EFDCA  TEST     EAX,EAX
0167:004EFDCC  JNG      NEAR 004EFE67
0167:004EFDD2  MOV      [EBP-14],EAX
0167:004EFDD5  MOV      EBX,01                <---EBX=1
0167:004EFDDA  MOV      EDI,EBX               <---EDI=EBX
0167:004EFDDC  IMUL     EDI,EBX               <---EDI=EDI*EBX
0167:004EFDDF  MOV      EAX,EDI               <---EAX=EDI
0167:004EFDE1  IMUL     EBX                   <---EAX=EAX*EBX
0167:004EFDE3  LEA      EDX,[EBX+14]          <---EDX=EBX+14
0167:004EFDE6  MOV      ECX,EDX               <---ECX=EDX
0167:004EFDE8  CDQ                            <---EDX=0
0167:004EFDE9  IDIV     ECX                  
0167:004EFDEB  MOV      ESI,EDX               <---ESI=EDX=EAX mod ECX
0167:004EFDED  MOV      EAX,EDI               <---EAX=EDI
0167:004EFDEF  LEA      EDX,[EBX+0A]          <---EDX=EBX+0A
0167:004EFDF2  MOV      ECX,EDX               <---ECX=EDX
0167:004EFDF4  CDQ    
0167:004EFDF5  IDIV     ECX
0167:004EFDF7  ADD      ESI,EDX               <---ESI=EAX mod ECX +ESI
0167:004EFDF9  MOV      EAX,EBX               <---EAX=EBX
0167:004EFDFB  ADD      EAX,EAX               <---EAX=EAX*2
0167:004EFDFD  ADD      ESI,EAX               <---ESI=ESI+EAX
0167:004EFDFF  INC      ESI                   <---ESI加1
0167:004EFE00  LEA      EAX,[EBP-18]
0167:004EFE03  MOV      EDX,[EBP-0C]
0167:004EFE06  MOVZX    EDX,BYTE [EDX+EBX-01] <---按位取轉換後的值29301
0167:004EFE0B  ADD      EDX,ESI               <---EDX=EDX+ESI
0167:004EFE0D  CALL     00404A8C         <---將EDX中的十六進位制值轉換為相應的字元
0167:004EFE12  MOV      EDX,[EBP-18]          <---結果放在EDX中
0167:004EFE15  LEA      EAX,[EBP-10]
0167:004EFE18  CALL     00404B6C
0167:004EFE1D  MOV      EAX,EBX               <---EAX=EBX
0167:004EFE1F  IMUL     EBX                   <---EAX=EAX*EBX
0167:004EFE21  IMUL     EBX                   <---EAX=EAX*EBX
0167:004EFE23  LEA      EDX,[EBX+0A]          <---EDX=EBX+0A
0167:004EFE26  MOV      ECX,EDX               <---ECX=EDX
0167:004EFE28  CDQ    
0167:004EFE29  IDIV     ECX
0167:004EFE2B  MOV      ESI,EDX               <---ESI=EAX mod ECX
0167:004EFE2D  MOV      EAX,EDI               <---EAX=EDI
0167:004EFE2F  LEA      EDX,[EBX+14]          <---EDX=EBX+14
0167:004EFE32  MOV      ECX,EDX               <---ECX=EDX
0167:004EFE34  CDQ    
0167:004EFE35  IDIV     ECX
0167:004EFE37  ADD      ESI,EDX               <---ESI=ESI+EAX mod ECX
0167:004EFE39  MOV      EAX,EBX               <---EAX=EBX
0167:004EFE3B  ADD      EAX,EAX               <---EAX=EAX*2
0167:004EFE3D  ADD      ESI,EAX               <---ESI=ESI+EAX
0167:004EFE3F  INC      ESI                   <---ESI=ESI+1
0167:004EFE40  LEA      EAX,[EBP-1C]
0167:004EFE43  MOV      EDX,[EBP-0C]
0167:004EFE46  MOVZX    EDX,BYTE [EDX+EBX-01]
0167:004EFE4B  ADD      EDX,ESI               <---EDX=EDX+ESI
0167:004EFE4D  CALL     00404A8C         <---將EDX中的十六進位制值轉換為相應的字元
0167:004EFE52  MOV      EDX,[EBP-1C]
0167:004EFE55  LEA      EAX,[EBP-10]          <----------------------------
0167:004EFE58  CALL     00404B6C
0167:004EFE5D  INC      EBX                    
0167:004EFE5E  DEC      DWORD [EBP-14]       <---透過[EBP-14]中的值進行迴圈控制
0167:004EFE61  JNZ      NEAR 004EFDDA        <---是否取完“29301”    
0167:004EFE67  MOV      EAX,[EBP-08]
0167:004EFE6A  MOV      EDX,[EBP-10]         <---D EDX可看到計算得到的正確註冊碼
0167:004EFE6D  CALL     00404900
0167:004EFE72  XOR      EAX,EAX
0167:004EFE74  POP      EDX
0167:004EFE75  POP      ECX
0167:004EFE76  POP      ECX
0167:004EFE77  MOV      [FS:EAX],EDX
0167:004EFE7A  PUSH     DWORD 004EFEA9
0167:004EFE7F  LEA      EAX,[EBP-1C]
0167:004EFE82  MOV      EDX,02
0167:004EFE87  CALL     004048D0
0167:004EFE8C  LEA      EAX,[EBP-10]
0167:004EFE8F  MOV      EDX,02
0167:004EFE94  CALL     004048D0
0167:004EFE99  LEA      EAX,[EBP-04]
0167:004EFE9C  CALL     004048AC
0167:004EFEA1  RET    
0167:004EFEA2  JMP      00404170
0167:004EFEA7  JMP      SHORT 004EFE7F
0167:004EFEA9  POP      EDI
0167:004EFEAA  POP      ESI
0167:004EFEAB  POP      EBX
0167:004EFEAC  MOV      ESP,EBP
0167:004EFEAE  POP      EBP
0167:004EFEAF  RET    

該程式註冊成功後將註冊資訊儲存在登錄檔的
“HKEY_CURRENT_USER/Software/SysRegistry”中  
我得到的註冊碼為:
使用者名稱:ShenGe
註冊碼:77JJGDKQFA

相關文章