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 Pjkn蔿妛?哵C_?
004D59C0: 3D 46 AE 4E 5C 66 3C 58 10 34 A9 37 52 25 E8 79 =F甆\f<X.4?R%鑩
004D59D0: A4 4E 68 17 E2 6C 19 0F B5 6A 8B 52 B8 26 15 54 h.鈒..礿婻?.T
004D59E0: 81 27 27 4F 2A 15 30 64 1E 4C C6 2C 26 3B ED 51 ?'O*.0d.L?&;鞶
004D59F0: 10 0F AF 3D 69 00 67 0A 1B 7C 68 25 F2 65 EF 07 ..?i.g..|h%騟?
004D5A00: 56 6C 7A 40 B7 5E F7 17 81 44 74 39 96 20 2F 38 Vlz@穅?丏t9?/8
004D5A10: 98 6D 32 6F 8E 01 ED 4E A8 3B 5F 10 2F 35 D2 42 榤2o?鞱?_./5褺
004D5A20: E2 36 39 10 4F 7E AB 35 EE 7A 94 58 FF 28 95 66 ?9.O~?顉擷.(昮
004D5A30: 82 20 22 5D BE 60 65 7F 32 65 F1 73 EC 36 46 51 ?"]綻e.2e駍?FQ
004D5A40: 8A 05 35 17 81 6D A4 44 5A 7D 48 74 FE 59 49 00 ?5.乵Z}Ht.YI.
004D5A50: 51 22 EF 6B A4 74 C6 0B CD 4C DF 67 E4 67 15 71 Q"飇?蚅遟鋑.q
004D5A60: F2 02 80 29 18 34 7C 21 FA 59 F0 75 70 3B B4 21 ?).4|!鶼饀p;?
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 ?&^媡lZ?.T續&r
004D5AA0: D8 71 83 08 EB 0D 6D 41 E9 3B E1 2C 61 1A 94 2B 豵??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 醗漸.H鱳?,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 ?蔔1GD.cwp.?{@
004D5AF0: 89 14 E0 41 09 1E F3 7A 39 76 C8 5B A4 3C 66 5E ?郃..髗9v萚?f^
004D5B00: 54 01 5A 40 88 0A 2D 5A E2 54 4D 0B 1E 0A 60 26 T.Z@?-Z釺M...`&
004D5B10: A6 4A 24 69 6C 48 3F 24 F5 65 B2 1A 88 62 D0 1D $ilH?$鮡?坆?
004D5B20: C9 24 DE 51 53 7F CA 28 12 67 A4 4B 63 11 B2 30 ?轖S.?.gc.?
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?6m鹟qp//Fc鶵
004D5B60: 23 09 46 1B B7 39 C7 47 9B 69 85 47 45 2D 81 60 #.F.?荊沬匞E-乣
004D5B70: 88 30 AE 7D 37 2F 9E 1D 99 1F 85 6F D8 05 8C 59 ?畗7/??卭?孻
004D5B80: 92 5F 8C 3A 2B 51 98 0A 9F 4A 11 59 DB 47 10 5C 抇?+Q?烰.Y跥.\
③例如:
姓 名:华仔[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.43 中文阅读程序--注册破解全攻略 一 (13千字)
- 作 者:-1212-
- 时 间:2001-4-14 0:51:06
- 链 接:http://bbs.pediy.com