ReadBOOK v1.43 中文閱讀程式--註冊破解全攻略 一 (13千字)
ReadBOOK v1.43 中文閱讀程式--註冊破解全攻略
作者:華仔
版權:China Cracking Group
時間:2001.04.14
由於本地上網包月制被取消,網費居高不下,太慘了,每週我只爭取到
兩小時的上網時間(沒辦法,都是Money惹的禍)。朋友推薦我用ReadBOOK v1.41
這個軟體在平時多讀點書,軟體還不錯,真正的綠色環保,不在除解
壓目錄之外的地方留下任何痕跡(我喜歡),再一看要註冊(註冊事小,
但有違Cracker的精神),毫不猶豫拉下了它的新版本ReadBOOK v1.43,
心想這下可大展身手了,不想執行一看差點把我氣趴下,居然是什麼
XXXXX專用版本,已不用註冊了(如果你只是想使用這個軟體,強烈建議
你按一下鍵盤上的Back Space鍵),主視窗中XXXXX標語太打眼,這怎
麼行,我一定要註冊它,仔細分析這個軟體,發現它呼叫了oem.4rb這
個外掛,刪除它,我們又成為未註冊版本了。
一、試執行:
進入註冊視窗
使用者名稱:華仔[CCG]
註冊碼:1974923
單擊“填寫完畢”按鈕後,提示:“註冊碼錯誤,請重新填寫註冊碼”。
二、註冊分析:
1、註冊碼無法輸入數字之外的任何字元,故猜測註冊碼可能是十進位制數
(八進位制數和二進位制數也有可能,但這種情況很少見)。
2、確定後馬上彈出註冊錯誤視窗,說明它立即對你輸入的註冊碼進行了
判斷。設斷時可從此下手。
三、實戰:
用W32dsm89反彙編主程式,找關鍵字串“您已經成功地註冊了”,來到以
下一大串程式碼中(分析時我用TRW2000):
:00409FFC BF98444600 mov edi,00464498
*//讀取ReadBook.ini檔案中[File]段
:0040A001 68A0484600 push DWORD 004648A0
*//讀取ReadBook.ini檔案User項
:0040A006 57 push
edi
:0040A007 E8A0D30000 call 004173AC
*//讀取ReadBook.ini檔案User項中的值並送給[ebp+FFFFFF44]
*//取姓名十六進位制ASCII碼,結束以00為標誌,並用20補足128位。
*//BB AA D7 D0 5B 43 43 47 5D 00 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
:0040A00C 83C41C add
esp, 1C
:0040A00F 389D44FFFFFF cmp byte ptr [ebp+FFFFFF44],
bl
*//將[ebp+FFFFFF44]和BL作比較
:0040A015 756D jne
0040A084
*//[ebp+FFFFFF44]不為空則跳到校驗程式碼
..
..
..
..
:0040A084 8D8544FFFFFF LEA EAX,[EBP+FFFFFF44]
:0040A08A 50 PUSH
EAX
:0040A08B E8E6A30200 CALL 00434476
*//將大寫字母轉換為小寫,其它型別字元不轉換。
*//BB AA D7 D0 5B 63 63 67 5D 00 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
:0040A090 8B854CFFFFFF MOV EAX,[EBP+FFFFFF4C]
*//以姓名第12位開始向前依次取四位並送給EAX
*//2020005D
:0040A096 8B8D48FFFFFF MOV ECX,[EBP+FFFFFF48]
*//以姓名第8位開始向前依次取四位並送給ECX
*//6763635B
:0040A09C 8BB544FFFFFF MOV ESI,[EBP+FFFFFF44]
*//以姓名第4位開始向前依次取四位並送給ESI
*//D0D7AABB
:0040A0A2 03C8 ADD
ECX,EAX
*//簡單的加法運算:ECX=ECX+EAX=6763635B+2020005D=878363B8
:0040A0A4 038D50FFFFFF ADD ECX,[EBP+FFFFFF50]
*//取姓名第16位開始向前依次取四位與ECX相加,再將結果送給ECX
*//ECX=ECX+[EBP+FFFFFF50]=878363B8+20202020=A7A383D8
:0040A0AA 69F631750000 IMUL ESI,ESI,7531
*//帶符號數乘法運算:ESI=ESI*7531=D0D7AABB*7531=8A4F24CB
:0040A0B0 69C931750000 IMUL ECX,ECX,7531
*//ECX=ECX*7531=A7A383D8*7531=D18DF458
:0040A0B6 C704240C434600 MOV DWORD [ESP],0046430C
:0040A0BD 68B5000000 PUSH DWORD B5
:0040A0C2 53 PUSH
EBX
:0040A0C3 2BF1 SUB
ESI,ECX
*//減法運算:ESI=ESI-ECX=8A4F24CB-D18DF458=B8C13073
:0040A0C5 FF1534224500 CALL `KERNEL32!FindResourceA`
*//函式說明:在模組中尋找資源
:0040A0CB 50 PUSH
EAX
:0040A0CC 53 PUSH
EBX
:0040A0CD FF153C224500 CALL `KERNEL32!LoadResource`
*//函式說明:返回資源控制程式碼
:0040A0D3 6894484600 PUSH DWORD 00464894
*//讀取ReadBook.ini檔案
:0040A0D8 57 PUSH
EDI
:0040A0D9 8945EC MOV
[EBP-14],EAX
*//將EAX的值送給[EBP-14]
:0040A0DC E8EDD20000 CALL 004173CE
*//讀取ReadBook.ini檔案中Register的值並送給EAX
:0040A0E1 6880484600 PUSH DWORD 00464880
:0040A0E6 57 PUSH
EDI
:0040A0E7 8945F8 MOV
[EBP-08],EAX
*//將EAX的值送給[EBP-08]
:0040A0EA C745F012320000 MOV DWORD [EBP-10],3212
:0040A0F1 C745E434120000 MOV DWORD [EBP-1C],1234
:0040A0F8 C745E888880000 MOV DWORD [EBP-18],8888
:0040A0FF C745F423230000 MOV DWORD [EBP-0C],2323
:0040A106 E8C3D20000 CALL 004173CE
:0040A10B 83C410 ADD
ESP,BYTE +10
:0040A10E 85C0 TEST
EAX,EAX
:0040A110 7524 JNZ
0040A136
:0040A112 8D45F4 LEA
EAX,[EBP-0C]
:0040A115 50 PUSH
EAX
:0040A116 8D45E8 LEA
EAX,[EBP-18]
:0040A119 50 PUSH
EAX
:0040A11A 8D45E4 LEA
EAX,[EBP-1C]
:0040A11D 50 PUSH
EAX
:0040A11E 8D45F0 LEA
EAX,[EBP-10]
:0040A121 50 PUSH
EAX
:0040A122 6860474600 PUSH DWORD 00464760
*//取硬碟磁碟機代號C:
:0040A127 FF15F8214500 CALL `KERNEL32!GetDiskFreeSpaceA`
*//函式說明:獲取磁碟剩餘空間
:0040A12D 8B45F4 MOV
EAX,[EBP-0C]
:0040A130 0FAF45F0 IMUL EAX,[EBP-10]
:0040A134 EB19 JMP
SHORT 0040A14F
:0040A136 8D45C4 LEA
EAX,[EBP-3C]
:0040A139 C745C420000000 MOV DWORD [EBP-3C],20
:0040A140 50 PUSH
EAX
:0040A141 FF15F0214500 CALL `KERNEL32!GlobalMemoryStatus`
*//函式說明:檢查記憶體狀態
:0040A147 8B45D0 MOV
EAX,[EBP-30]
:0040A14A 05CCEDFFFF ADD EAX,FFFFEDCC
:0040A14F F7D0 NOT
EAX
:0040A151 3145F8 XOR
[EBP-08],EAX
:0040A154 33C0 XOR
EAX,EAX
*//EAX=0
:0040A156 A3FC644600 MOV [004664FC],EAX
*//將EAX的值送給[004664FC]
:0040A15B 3975F8 CMP
[EBP-08],ESI
*//將[EBP-08](假註冊碼的十六進位制)和ESI(真註冊碼)比較
:0040A15E 741D JZ
0040A17D
*//如果相等則跳到註冊成功視窗
*//暴破時此處改為JMP
:0040A160 8B55EC MOV
EDX,[EBP-14]
*//將[EBP-14]的值送給EDX
:0040A163 8BC8 MOV
ECX,EAX
*//將EAX的值送給ECX
:0040A165 83E17F AND
ECX,BYTE +7F
*//邏輯與運算:ECX=ECX AND 7F
:0040A168 03348A ADD
ESI,[EDX+ECX*4]
*//加法運算:ESI=ESI+[EDX+ECX*4]
:0040A16B 40 INC
EAX
*//EAX=EAX+1
:0040A16C 3DFF0F0000 CMP EAX,0FFF
*//比較EAX是否等於FFF
:0040A171 A3FC644600 MOV [004664FC],EAX
*//將EAX送給[004664FC]
:0040A176 72E3 JC
0040A15B
*//EAX不等於FFF則跳
:0040A178 3975F8 CMP
[EBP-08],ESI
*//將[EBP-08](假註冊碼的十六進位制)和ESI(真註冊碼)比較
:0040A17B 7547 JNZ
0040A1C4
*//不相等則跳到註冊不成功視窗
:0040A17D 8B75FC MOV
ESI,[EBP-04]
:0040A180 C705A4974B000100+MOV DWORD [004B97A4],01
:0040A18A FF761C PUSH DWORD
[ESI+1C]
:0040A18D FF1598254500 CALL `USER32!GetMenu`
*//函式說明:返回指定視窗的選單控制程式碼
:0040A193 50 PUSH
EAX
:0040A194 E881270300 CALL 0043C91A
:0040A199 53 PUSH
EBX
:0040A19A 6850800000 PUSH DWORD 8050
:0040A19F FF7004 PUSH DWORD
[EAX+04]
:0040A1A2 FF158C254500 CALL `USER32!RemoveMenu`
*//函式說明:刪除選單項和彈出式選單
:0040A1A8 391DA8974B00 CMP [004B97A8],EBX
:0040A1AE 744C JZ
0040A1FC
:0040A1B0 53 PUSH
EBX
:0040A1B1 6878484600 PUSH DWORD 00464878
**//祝賀
:0040A1B6 6864484600 PUSH DWORD 00464864
*//您已經成功地註冊了!
:0040A1BB 8BCE MOV
ECX,ESI
:0040A1BD E819000300 CALL 0043A1DB
:0040A1C2 EB38 JMP
SHORT 0040A1FC
:0040A1C4 53 PUSH
EBX
:0040A1C5 68A0484600 PUSH DWORD 004648A0
:0040A1CA 57 PUSH
EDI
:0040A1CB 891DA4974B00 MOV [004B97A4],EBX
:0040A1D1 E88ED10000 CALL 00417364
:0040A1D6 53 PUSH
EBX
:0040A1D7 6894484600 PUSH DWORD 00464894
:0040A1DC 57 PUSH
EDI
:0040A1DD E882D10000 CALL 00417364
:0040A1E2 8B45FC MOV
EAX,[EBP-04]
:0040A1E5 83C418 ADD
ESP,BYTE +18
:0040A1E8 53 PUSH
EBX
:0040A1E9 6853800000 PUSH DWORD 8053
:0040A1EE 6811010000 PUSH DWORD 0111
:0040A1F3 FF701C PUSH DWORD
[EAX+1C]
:0040A1F6 FF1528264500 CALL `USER32!PostMessageA`
*//函式說明:將訊息加入線索訊息佇列
:0040A1FC 891DA8974B00 MOV [004B97A8],EBX
:0040A202 5F POP
EDI
:0040A203 5E POP
ESI
:0040A204 5B POP
EBX
:0040A205 C9 LEAVE
:0040A206 C3 RET
:0040A207 56 PUSH
ESI
:0040A208 6A00 PUSH
BYTE +00
:0040A20A 68C8484600 PUSH DWORD 004648C8
*//錯了啦!
:0040A20F 8BF1 MOV
ESI,ECX
:0040A211 68A8484600 PUSH DWORD 004648A8
*//註冊碼錯誤,請重新填寫註冊碼!
:0040A216 E8C0FF0200 CALL 0043A1DB
:0040A21B 6A00 PUSH
BYTE +00
:0040A21D 6850800000 PUSH DWORD 8050
:0040A222 6811010000 PUSH DWORD 0111
:0040A227 FF761C PUSH DWORD
[ESI+1C]
:0040A22A FF1528264500 CALL `USER32!PostMessageA`
*//函式說明:將訊息加入線索訊息佇列
:0040A230 5E POP
ESI
:0040A231 C3 RET
四、結論:
1、取姓名十六進位制ASCII碼,結束以00為標誌,並用20補足128位。如姓名中
有大寫字母,先轉換為小寫字母再取。例如:
| 第1位 ==>BB
華-|
| 第2位 ==>AA
| 第3位 ==>D7
仔-|
| 第4位 ==>D0
第5位 [ ==> 5B
第6位 C ==> 43 ==> 63
第7位 C ==> 43 ==> 63
第8位 G ==> 47 ==> 67
第9位 ] ==> 5D
第10位 結束標緻00
第11位 填充20
......
......
第128位 填充20
2、從第四位開始向前取四位,記為SN1,如:
SN1=D0D7AABB
3、從第十六位開始每四位為一組,順序向前取三組,並求出這三組數之和,
記為SN2,如:
SN2=20202020+2020005D+6763635B=A7A383D8
3、將SN1減去SN2的差再乘以7531,記為SN,如:
SN=(SN1-SN2)*7531=(D0D7AABB+A7A383D8)*7531=B8C13073
4、取SN的十進位制數,就是真正的註冊碼之一。
B8C13073 ==> 3099668595
所以完整的註冊碼:
姓 名:華仔[CCG]
註冊碼:3099668595
5、分析0040A160至0040A176程式碼段發現,註冊碼不只一個,還有FFF個。
①演算法:
將0-FFF順序取數並與7F邏輯與運算,將運算結果乘以4再加上EDX=4D5990,
得出密碼錶(我已提取出來供大家參考)偏移量,然後依次取4位(低位在
前、高位在後)最後再加上當前的SN值就得到了一個新的註冊碼。
②密碼錶如下:
0 1 2 3 4
5 6 7 8 9 A B C D E
F
004D5990: 4D 44 07 48 36 6C 81 0B 4B 7C 5A 27 97 31 96 25 MD.H6l?K|Z'??
004D59A0: A6 32 C0 2C 40 05 44 67 E2 7E 7D 3E FD 6D 75 4F ??@.Dg~}>.muO
004D59B0: 50 6A 6B 6E CA 6C 8A 77 E2 13 86 5E 43 5F FA 3B Pjknlw?^C_?
004D59C0: 3D 46 AE 4E 5C 66 3C 58 10 34 A9 37 52 25 E8 79 =FN\f<X.4?R%y
004D59D0: A4 4E 68 17 E2 6C 19 0F B5 6A 8B 52 B8 26 15 54 Nh.l..jR?.T
004D59E0: 81 27 27 4F 2A 15 30 64 1E 4C C6 2C 26 3B ED 51 ?'O*.0d.L?&;Q
004D59F0: 10 0F AF 3D 69 00 67 0A 1B 7C 68 25 F2 65 EF 07 ..?i.g..|h%e?
004D5A00: 56 6C 7A 40 B7 5E F7 17 81 44 74 39 96 20 2F 38 Vlz@^?Dt9?/8
004D5A10: 98 6D 32 6F 8E 01 ED 4E A8 3B 5F 10 2F 35 D2 42 m2o?N?_./5B
004D5A20: E2 36 39 10 4F 7E AB 35 EE 7A 94 58 FF 28 95 66 ?9.O~?zX.(f
004D5A30: 82 20 22 5D BE 60 65 7F 32 65 F1 73 EC 36 46 51 ?"]`e.2es?FQ
004D5A40: 8A 05 35 17 81 6D A4 44 5A 7D 48 74 FE 59 49 00 ?5.mDZ}Ht.YI.
004D5A50: 51 22 EF 6B A4 74 C6 0B CD 4C DF 67 E4 67 15 71 Q"kt?Lgg.q
004D5A60: F2 02 80 29 18 34 7C 21 FA 59 F0 75 70 3B B4 21 ?).4|!Yup;?
004D5A70: CB 01 4B 43 2F 4A 4B 41 CF 2E 2A 4B 17 6F 47 61 ?KC/JKA?*K.oGa
004D5A80: 00 56 69 26 21 38 0C 0E 42 6F 2E 56 72 27 80 70 .Vi&!8..Bo.Vr'p
004D5A90: F6 31 26 5E 8B 74 6C 5A CC 7F 12 54 C0 6D 26 72 ?&^tlZ?.Tm&r
004D5AA0: D8 71 83 08 EB 0D 6D 41 E9 3B E1 2C 61 1A 94 2B q??mA??a.?
004D5AB0: 16 5A B2 1A 25 5D E3 0E 99 3C 19 20 5C 4F 3A 15 .Z?%]??. \O:.
004D5AC0: E1 65 9D 75 01 48 F7 77 E2 2E 2C 41 DA 02 1A 3B eu.Hw?,A?.;
004D5AD0: B0 25 60 4A AB 13 A7 23 4C 3A 01 44 A9 19 4C 6D ?`J??L:.D?Lm
004D5AE0: BD 2D CA 4E 31 47 44 03 63 77 70 19 BA 11 7B 40 ?N1GD.cwp.?{@
004D5AF0: 89 14 E0 41 09 1E F3 7A 39 76 C8 5B A4 3C 66 5E ?A..z9v[?f^
004D5B00: 54 01 5A 40 88 0A 2D 5A E2 54 4D 0B 1E 0A 60 26 T.Z@?-ZTM...`&
004D5B10: A6 4A 24 69 6C 48 3F 24 F5 65 B2 1A 88 62 D0 1D J$ilH?$e?b?
004D5B20: C9 24 DE 51 53 7F CA 28 12 67 A4 4B 63 11 B2 30 ?QS.?.gKc.?
004D5B30: 4C 60 5C 4B 41 75 44 6C 56 47 3F 5B D5 3F 14 42 L`\KAuDlVG?[?.B
004D5B40: 82 38 27 76 1E 51 75 60 E9 7D 96 7E 27 7F 9A 0C ?'v.Qu`}~'.?
004D5B50: 01 32 FA 26 36 6D FB 6C 71 70 2F 2F 46 63 FA 52 .2?6mlqp//FcR
004D5B60: 23 09 46 1B B7 39 C7 47 9B 69 85 47 45 2D 81 60 #.F.?GiGE-`
004D5B70: 88 30 AE 7D 37 2F 9E 1D 99 1F 85 6F D8 05 8C 59 ?}7/??o?Y
004D5B80: 92 5F 8C 3A 2B 51 98 0A 9F 4A 11 59 DB 47 10 5C _?+Q?J.YG.\
③例如:
姓 名:華仔[CCG]
註冊碼:3099668595 ==> B8C13073
註冊碼1 ==> [4D5990+0*4]=4D5990 ==> 4807444D+B8C13073=C874C0 ==> 13137088
註冊碼2 ==> [4D5990+1*4]=4D5994 ==> 0B816C36+C874C0=C49E0F6 ==> 206168310
註冊碼3 ==> [4D5990+2*4]=4D5998 ==> 275A7C4B+C49E0F6=33A45D41 ==> 866409793
註冊碼4 ==> [4D5990+3*4]=4D599C ==> 25963197+33A45D41=593A8ED8 ==> 1497009880
....
....
註冊碼FFF ==> [4D5990+7E*4]=4D5B88 ==> 59114A9F+C53475F9=1E45C098 ==>
507887768
相關文章
- 檔案閱讀器readbook v1.41 c (9千字)2001-03-11
- Readbook 1.31破解心得
(3千字)2000-03-01
- 一種非明碼比較程式的註冊------NS-SHAFT註冊碼破解 (9千字)2015-11-15
- ReadBook v1.41註冊碼演算法,供參考! (1千字)2001-03-31演算法
- FolderView註冊部分的計算 (13千字)2001-05-27View
- 《TxEdit 4.6》的註冊碼破解 (11千字)2001-07-28
- Regediter 1.3 破解(得到註冊碼) (9千字)2002-01-23
- IconToy 3.1 註冊碼快速破解 (11千字)2001-03-02
- 猜數記---BCWIPE註冊半破解 (25千字)2001-04-02
- BabyGame 破解方法及註冊碼錶 (1千字)2001-07-04GAM
- winimp1.11註冊碼破解 (2千字)2000-07-16
- 《ICONSCAN 2.4》註冊碼破解 高手莫入! (3千字)2001-05-06
- 《MAGICWIN RELEASE 1.2》註冊碼破解 高手莫入! (2千字)2001-05-07
- vTuner Plus 3.0 線上註冊的破解方法一:爆破篇 (7千字)2002-06-16
- 交一篇作業---破解Hedit 2.0的註冊碼 (7千字)2001-09-30
- 財智證券結算軟體2.5 破解註冊碼分析!使用ollydbg 破解註冊動畫!高手莫入! (1千字)2001-11-20動畫
- 註冊協議閱讀倒數計時按鈕可用程式碼2017-04-12協議
- SMailserver2.5註冊碼的破解手記 (1千字)2001-03-01AIServer
- 《WinImage v5.00.5007 註冊碼破解》 (7千字)2001-05-10
- SuperCleaner 2.31註冊碼演算法分析 - OCG (13千字)2002-04-02演算法
- ClassExplorer的破解 (13千字)2001-07-29
- javascript強制閱讀註冊協議指定時間程式碼例項2017-04-08JavaScript協議
- 某電子書註冊破解實錄,高手莫入。 (6千字)2002-10-05
- 如何破解《彩票快車黃金版》註冊碼 (1千字)2001-04-21
- 豪傑大眼睛共享版註冊碼破解 (1千字)2001-07-08
- Kugle Regediter 1.0 註冊碼破解法(非明碼) (8千字)2001-11-03
- 黑馬課表管理系統2.6註冊破解 (1千字)2002-01-12
- JProfiler 13 Mac版,JProfiler 13註冊碼2023-04-20Mac
- Vopt99 v4.31的註冊碼破解 (11千字)2000-09-28
- 破解《推箱子》Ver:1.6(230關) 註冊版 (1千字)2001-04-01
- 開心鬥地主1.6標準版 註冊碼破解 (4千字)2001-04-25
- 如何破解Cool ASCII Art Maker V1.21註冊碼 (2千字)2001-05-03ASCII
- 《EASY MP3 2.2》的註冊碼破解 高手莫入! (2千字)2001-05-05
- 轉貼 Ronnier 的 AcqURL 5.1 註冊黑名單的破解 (7千字)2001-05-14
- CuteFTP最新版V4.2.4 線上註冊的破解 (10千字)2001-09-27FTP
- 盲打之友V2.5破解(包括註冊演算法) (11千字)2001-10-29演算法
- 一個ReverseME破解 SynApsus's ReverseME #1 (13千字)2015-11-15
- estiprojm 註冊 (12千字)2001-11-08