东方法律宝典 2009注册算法分析
本帖最后由 wgz001 于 2009-4-26 00:14 编辑【破文标题】东方法律宝典 2009注册算法分析
【破文作者】萧萧黄叶
【作者邮箱】
【作者主页】
【破解工具】OllyICE,PEiD v0.94
【破解平台】WinXP
【软件名称】东方法律宝典 2009
【软件大小】
【原版下载】
【保护方式】UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
【软件简介】 东方法律宝典是由东方法眼网站推出的实用法律法规软件,每年推出一个版本,2009版收录1000余部常用法律法规。
建国以来,我国颁布的法律、法规、行政规章、地方法规达几万部,但在互联网上搜索的90%以上都是常用法规。本软件由法律专业人编辑制作,收录了大量实用的国家法律、行政法规、司法解释,及部分常用法律文书,是一部真正的法律大全。
新版东方法律宝典在保持精选常用法律法规、法规内部超链接(如公务员法中有涉及婚姻法和民事诉讼法的内容,则自动加上这两部法律的链接 )等诸多优势的基础上,具有以下新特点:
内容新鲜。面对新的法律法规不断出台的情况,2009版法律宝典收录了最新修正的中华人民共和国刑法完整条文(包含了七次修正的内容,而网上一般都是分别分布,不利于查找使用。),新增加法规300余部,新收录大量行政法规,收录法规截止时间为2009年3月15日。法律宝典收录的法规突出有效性,删除失效法律法规,修正个别法律错误。在2008版的基础上,增加了所有新颁布、新修订的重要法规。
实用性强。新版软件包括了国家司法考试法律法规目录中的所有法规,方便各位司法考试的考生。新版软件中的法规数量大幅度增加在法规的收集上,强化了刑事法律、司法解释、行政法规的内容,软件容量提升50%。
使用方便。绿色软件,软件无需安装,可以在U盘中使用,卸载直接将文件删除即可。既具有通过关键字在软件中搜索所有法规功能,又具有在当前页面搜索的功能,方便查找所需内容。电子书版面增大,法规文字字体调大,适应电脑屏幕分辨率调高的要求。
【破解声明】我是一只小小鸟,只想努力做得更好,飞得更高。
------------------------------------------------------------------------
【破解过程】程序是免安装的,其实就是一本电子书,解压出来,运行看看了,用123注册看看,当然出错了:请到下列网址了解正式版信息。
PEiD v0.94:UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo ,是用UPX压缩壳保护的。
OD载入了,这里是入口:
004C96A0 >60 PUSHAD
004C96A1 BE 00404800 MOV ESI,东方法律.00484000
004C96A6 8DBE 00D0F7FF LEA EDI,DWORD PTR DS:
此时可以进行脱壳了,麻烦,直接运行了,用123注册,确定之前下万能断点,确定后被断在下面了:
77D33566 F3:A5 REP MOVS DWORD PTR ES:,DWORD PTR DS>
77D33568 8BC8 MOV ECX,EAX
77D3356A 83E1 03 AND ECX,3
注意寄存器ESI出现了假码。清除断点,运行返回到主线程:
0045C6DC 8943 0C MOV DWORD PTR DS:,EAX
0045C6DF 8B03 MOV EAX,DWORD PTR DS:
0045C6E1 83F8 0C CMP EAX,0C
继续往回走,一直到这里:
0049882E 8B15 ACFF4900 MOV EDX,DWORD PTR DS: ; 东方法律.004A1D60
00498834 8802 MOV BYTE PTR DS:,AL
00498836 A1 ACFF4900 MOV EAX,DWORD PTR DS:
继续向下走的时候在这里跳出了注册失败的对话框:
00498852 E8 EDA4F9FF CALL 东方法律.00432D44
提示这一部分是算法、比较的中心,在上面下断重新来过:
0049880C 55 PUSH EBP
0049880D 8BEC MOV EBP,ESP
0049880F 6A 00 PUSH 0
00498811 6A 00 PUSH 0
00498813 53 PUSH EBX
00498814 8BD8 MOV EBX,EAX
00498816 33C0 XOR EAX,EAX
00498818 55 PUSH EBP
00498819 68 B2884900 PUSH 东方法律.004988B2
0049881E 64:FF30 PUSH DWORD PTR FS:
00498821 64:8920 MOV DWORD PTR FS:,ESP
00498824 8BC3 MOV EAX,EBX
00498826 8B10 MOV EDX,DWORD PTR DS:
00498828 FF92 04010000 CALL DWORD PTR DS:
0049882E 8B15 ACFF4900 MOV EDX,DWORD PTR DS: ; 东方法律.004A1D60
00498834 8802 MOV BYTE PTR DS:,AL
00498836 A1 ACFF4900 MOV EAX,DWORD PTR DS:
0049883B 8038 00 CMP BYTE PTR DS:,0
0049883E 75 19 JNZ SHORT 东方法律.00498859
00498840 6A 00 PUSH 0
00498842 A1 00044A00 MOV EAX,DWORD PTR DS:
00498847 8B00 MOV EAX,DWORD PTR DS:
00498849 66:8B0D C088490>MOV CX,WORD PTR DS:
00498850 B2 01 MOV DL,1
00498852 E8 EDA4F9FF CALL 东方法律.00432D44
00498857 EB 3E JMP SHORT 东方法律.00498897
刚才就是最下面这个CALL出错的,跳过它也许就注册成功了。一看就知道就是要0049883E 75 19 JNZ SHORT 东方法律.00498859跳转成功,决定它跳与不跳在于00498828 FF92 04010000 CALL DWORD PTR DS:,所以一定要跟进:
00498754 55 PUSH EBP
00498755 8BEC MOV EBP,ESP
00498757 6A 00 PUSH 0
00498759 6A 00 PUSH 0
0049875B 53 PUSH EBX
0049875C 8BD8 MOV EBX,EAX
0049875E 33C0 XOR EAX,EAX
00498760 55 PUSH EBP
00498761 68 B6874900 PUSH 东方法律.004987B6
00498766 64:FF30 PUSH DWORD PTR FS:
00498769 64:8920 MOV DWORD PTR FS:,ESP
0049876C 8D55 FC LEA EDX,DWORD PTR SS:
0049876F 8BC3 MOV EAX,EBX
00498771 8B08 MOV ECX,DWORD PTR DS:
00498773 FF91 F4000000 CALL DWORD PTR DS:
00498779 8B45 FC MOV EAX,DWORD PTR SS: ; 运行到这里时,假码出现在堆栈中。
0049877C 50 PUSH EAX
0049877D 8D55 F8 LEA EDX,DWORD PTR SS:
00498780 8BC3 MOV EAX,EBX
00498782 8B08 MOV ECX,DWORD PTR DS:
00498784 FF91 F8000000 CALL DWORD PTR DS:
0049878A 8B45 F8 MOV EAX,DWORD PTR SS: ; 机器码出现在堆栈中
0049878D 8B8B 20030000 MOV ECX,DWORD PTR DS: ;"lawbookfzzg@2009"这个字符串出现在堆栈中
00498793 5A POP EDX
00498794 E8 B7ECFFFF CALL 东方法律.00497450 ; 注意看寄存器,EAX是机器码,ECX是刚才出现的一个字符串,EDX是假码,什么意思?,当然是要进入这个CALL比较运算了,跟进了。
00498799 8BD8 MOV EBX,EAX
0498794的CALL跟进:
00497450 55 PUSH EBP
00497451 8BEC MOV EBP,ESP
00497453 81C4 FCFEFFFF ADD ESP,-104
00497459 53 PUSH EBX
0049745A 56 PUSH ESI
0049745B 57 PUSH EDI
0049745C 33DB XOR EBX,EBX
0049745E 895D FC MOV DWORD PTR SS:,EBX
00497461 8BF9 MOV EDI,ECX
00497463 8BF2 MOV ESI,EDX
00497465 8BD8 MOV EBX,EAX
00497467 33C0 XOR EAX,EAX
00497469 55 PUSH EBP
0049746A 68 B7744900 PUSH 东方法律.004974B7
0049746F 64:FF30 PUSH DWORD PTR FS:
00497472 64:8920 MOV DWORD PTR FS:,ESP
00497475 8D8D FCFEFFFF LEA ECX,DWORD PTR SS:
0049747B 8BD7 MOV EDX,EDI
0049747D 8BC3 MOV EAX,EBX
0049747F E8 64FEFFFF CALL 东方法律.004972E8 ; 这里继续跟进
00497484 8D95 FCFEFFFF LEA EDX,DWORD PTR SS:
0049747F的CALL跟进:
004972E8 55 PUSH EBP
004972E9 8BEC MOV EBP,ESP
004972EB 83C4 E0 ADD ESP,-20
004972EE 53 PUSH EBX
004972EF 56 PUSH ESI
004972F0 57 PUSH EDI
004972F1 33DB XOR EBX,EBX
004972F3 895D E0 MOV DWORD PTR SS:,EBX
004972F6 895D E4 MOV DWORD PTR SS:,EBX
004972F9 895D E8 MOV DWORD PTR SS:,EBX
004972FC 8BF9 MOV EDI,ECX
004972FE 8955 F8 MOV DWORD PTR SS:,EDX
00497301 8945 FC MOV DWORD PTR SS:,EAX
00497304 8B45 FC MOV EAX,DWORD PTR SS:
00497307 E8 1CD3F6FF CALL 东方法律.00404628 ; 检查机器码否为空
0049730C 8B45 F8 MOV EAX,DWORD PTR SS:
0049730F E8 14D3F6FF CALL 东方法律.00404628 ; 检查刚才的字符串是否为空‘
00497314 33C0 XOR EAX,EAX
00497316 55 PUSH EBP
00497317 68 41744900 PUSH 东方法律.00497441
0049731C 64:FF30 PUSH DWORD PTR FS:
0049731F 64:8920 MOV DWORD PTR FS:,ESP
00497322 837D FC 00 CMP DWORD PTR SS:,0
00497326 74 6F JE SHORT 东方法律.00497397 ; 机器码若为空就跳走不参加运算了。
00497328 BB 01000000 MOV EBX,1
0049732D 8D75 EF LEA ESI,DWORD PTR SS:
00497330 8B45 FC MOV EAX,DWORD PTR SS: ; 开始第一个循环
00497333 E8 00D1F6FF CALL 东方法律.00404438
00497338 50 PUSH EAX
00497339 8BC3 MOV EAX,EBX
0049733B 48 DEC EAX
0049733C 5A POP EDX
0049733D 8BCA MOV ECX,EDX
0049733F 99 CDQ
00497340 F7F9 IDIV ECX
00497342 8B45 FC MOV EAX,DWORD PTR SS:
00497345 8A0410 MOV AL,BYTE PTR DS: ; 依次取机器码的各位ASCII码。
00497348 50 PUSH EAX
00497349 8B45 FC MOV EAX,DWORD PTR SS:
0049734C E8 E7D0F6FF CALL 东方法律.00404438
00497351 5A POP EDX
00497352 32D0 XOR DL,AL ; ASCII码与机器码的个数作异或运算
00497354 32D3 XOR DL,BL ; 上面的结果再与BL作异或运算,BL起始值为1,逐个循环递增。
00497356 8816 MOV BYTE PTR DS:,DL ; 将运算结果保存,设为X(10)
00497358 43 INC EBX
00497359 46 INC ESI
0049735A 83FB 0A CMP EBX,0A
0049735D^ 75 D1 JNZ SHORT 东方法律.00497330 ; 如果EBX不等于A次就继续运算。
0049735F 8B45 FC MOV EAX,DWORD PTR SS:
00497362 E8 D1D0F6FF CALL 东方法律.00404438
00497367 8BF0 MOV ESI,EAX
00497369 85F6 TEST ESI,ESI
0049736B 7E 2A JLE SHORT 东方法律.00497397
0049736D BB 01000000 MOV EBX,1
00497372 8B45 FC MOV EAX,DWORD PTR SS: ; 开始第二个循环
00497375 E8 BED0F6FF CALL 东方法律.00404438
0049737A 2BC3 SUB EAX,EBX
0049737C 8B55 FC MOV EDX,DWORD PTR SS:
0049737F 8A0C02 MOV CL,BYTE PTR DS: ; 倒序取机器码各位的ASCII码
00497382 8BC3 MOV EAX,EBX
00497384 48 DEC EAX
00497385 51 PUSH ECX
00497386 B9 09000000 MOV ECX,9
0049738B 99 CDQ
0049738C F7F9 IDIV ECX
0049738E 59 POP ECX
0049738F 304C15 EF XOR BYTE PTR SS:,CL ; 第一次循环时是用机器码最后一个的ASCII码与上面的结果的第一个进行异或运算。并将结果放在原处。依次类推。
00497393 43 INC EBX
00497394 4E DEC ESI
00497395^ 75 DB JNZ SHORT 东方法律.00497372
00497397 837D F8 00 CMP DWORD PTR SS:,0
0049739B 74 39 JE SHORT 东方法律.004973D6 ; 如果特殊字符串为空就跳走不进行下面的运算了
0049739D BB 01000000 MOV EBX,1
004973A2 8D75 EF LEA ESI,DWORD PTR SS:
004973A5 8B45 F8 MOV EAX,DWORD PTR SS: ; 第三次循环开始
004973A8 E8 8BD0F6FF CALL 东方法律.00404438
004973AD 50 PUSH EAX
004973AE 8BC3 MOV EAX,EBX
004973B0 48 DEC EAX
004973B1 5A POP EDX
004973B2 8BCA MOV ECX,EDX
004973B4 99 CDQ
004973B5 F7F9 IDIV ECX
004973B7 8B45 F8 MOV EAX,DWORD PTR SS:
004973BA 8A0410 MOV AL,BYTE PTR DS: ; 取各执一份字符串的第一位的ASCII码,设为Y(1)
004973BD 3206 XOR AL,BYTE PTR DS: ; Y(1)=Y(1) XOR X(1)
004973BF 50 PUSH EAX
004973C0 8B45 F8 MOV EAX,DWORD PTR SS:
004973C3 E8 70D0F6FF CALL 东方法律.00404438
004973C8 5A POP EDX
004973C9 32D0 XOR DL,AL ; AL为特殊字符串的个数。Y(1)=Y(1) XOR LEN(字符)
004973CB 32D3 XOR DL,BL ; BL初始值为1,循环一次自加1.Y(1)=Y(1) XOR
004973CD 8816 MOV BYTE PTR DS:,DL ; 结果保存起来
004973CF 43 INC EBX
004973D0 46 INC ESI
004973D1 83FB 0A CMP EBX,0A ; 循环九次
004973D4^ 75 CF JNZ SHORT 东方法律.004973A5
004973D6 8D45 E8 LEA EAX,DWORD PTR SS:
004973D9 E8 9ACDF6FF CALL 东方法律.00404178
004973DE BB 09000000 MOV EBX,9
004973E3 8D75 EF LEA ESI,DWORD PTR SS:
004973E6 8D45 E4 LEA EAX,DWORD PTR SS:
004973E9 8A16 MOV DL,BYTE PTR DS:
004973EB E8 70CFF6FF CALL 东方法律.00404360
004973F0 8B55 E4 MOV EDX,DWORD PTR SS:
004973F3 8D45 E8 LEA EAX,DWORD PTR SS:
004973F6 E8 45D0F6FF CALL 东方法律.00404440
004973FB 46 INC ESI
004973FC 4B DEC EBX
004973FD^ 75 E7 JNZ SHORT 东方法律.004973E6
004973FF 8D55 E0 LEA EDX,DWORD PTR SS:
00497402 8B45 E8 MOV EAX,DWORD PTR SS:
00497405 E8 9AFDFFFF CALL 东方法律.004971A4 ; 这里是将刚才计算出来的值再进行一次运算后查表得到注册码
0049740A 8B55 E0 MOV EDX,DWORD PTR SS:
00497405的 CALL跟进:
004971A4 55 PUSH EBP
004971A5 8BEC MOV EBP,ESP
004971A7 83C4 F0 ADD ESP,-10
004971AA 53 PUSH EBX
004971AB 56 PUSH ESI
004971AC 57 PUSH EDI
004971AD 33C9 XOR ECX,ECX
004971AF 894D F0 MOV DWORD PTR SS:,ECX
004971B2 8BFA MOV EDI,EDX
004971B4 8945 FC MOV DWORD PTR SS:,EAX
004971B7 8B45 FC MOV EAX,DWORD PTR SS:
004971BA E8 69D4F6FF CALL 东方法律.00404628
004971BF 33C0 XOR EAX,EAX
004971C1 55 PUSH EBP
004971C2 68 D8724900 PUSH 东方法律.004972D8
004971C7 64:FF30 PUSH DWORD PTR FS:
004971CA 64:8920 MOV DWORD PTR FS:,ESP
004971CD 8BC7 MOV EAX,EDI
004971CF E8 A4CFF6FF CALL 东方法律.00404178
004971D4 E9 D7000000 JMP 东方法律.004972B0
004971D9 8B45 FC MOV EAX,DWORD PTR SS:
004971DC E8 57D2F6FF CALL 东方法律.00404438
004971E1 8BC8 MOV ECX,EAX
004971E3 8BC1 MOV EAX,ECX
004971E5 BB 03000000 MOV EBX,3
004971EA 99 CDQ
004971EB F7FB IDIV EBX
004971ED 85C0 TEST EAX,EAX
004971EF 7E 07 JLE SHORT 东方法律.004971F8
004971F1 BB 03000000 MOV EBX,3
004971F6 EB 02 JMP SHORT 东方法律.004971FA
004971F8 8BD9 MOV EBX,ECX
004971FA 8D45 F9 LEA EAX,DWORD PTR SS:
004971FD 33C9 XOR ECX,ECX
004971FF BA 03000000 MOV EDX,3
00497204 E8 9BBBF6FF CALL 东方法律.00402DA4
00497209 8D45 F5 LEA EAX,DWORD PTR SS:
0049720C B9 40000000 MOV ECX,40
00497211 BA 04000000 MOV EDX,4
00497216 E8 89BBF6FF CALL 东方法律.00402DA4
0049721B 8D45 FC LEA EAX,DWORD PTR SS:
0049721E E8 6DD4F6FF CALL 东方法律.00404690
00497223 8D55 F9 LEA EDX,DWORD PTR SS:
00497226 8BCB MOV ECX,EBX
00497228 E8 5FB7F6FF CALL 东方法律.0040298C ; 将Y()每三个一组进行运算。
0049722D 83FB 03 CMP EBX,3
00497230 7C 08 JL SHORT 东方法律.0049723A
00497232 8A45 FB MOV AL,BYTE PTR SS: ; 取第一组字符的第三位,即Y(3)
00497235 24 3F AND AL,3F ; Y(3)=Y(3) AND 3F
00497237 8845 F8 MOV BYTE PTR SS:,AL ; 保存数值,设为a4
0049723A 83FB 02 CMP EBX,2
0049723D 7C 15 JL SHORT 东方法律.00497254
0049723F 8A45 FA MOV AL,BYTE PTR SS: ; 第一组字符的第二位,Y(2)
00497242 C1E0 02 SHL EAX,2 ; 向左位移
00497245 33D2 XOR EDX,EDX
00497247 8A55 FB MOV DL,BYTE PTR SS:
0049724A C1EA 06 SHR EDX,6 ; 各右位移
0049724D 0AC2 OR AL,DL ; 两者作或运算
0049724F 24 3F AND AL,3F ; 再与3F作and 运算
00497251 8845 F7 MOV BYTE PTR SS:,AL ; 保存数值,设为a3
00497254 8A45 F9 MOV AL,BYTE PTR SS: ; 取第一组字符的第一位,Y(1)
00497257 8BD0 MOV EDX,EAX
00497259 C1E2 04 SHL EDX,4 ; 向左位移
0049725C 33C9 XOR ECX,ECX
0049725E 8A4D FA MOV CL,BYTE PTR SS:
00497261 C1E9 04 SHR ECX,4 ; Y(2)向右位移
00497264 0AD1 OR DL,CL ; 两者作或运算
00497266 80E2 3F AND DL,3F ; 再与3F作and 运算
00497269 8855 F6 MOV BYTE PTR SS:,DL ; 保存数值,设为a2
0049726C 25 FF000000 AND EAX,0FF
00497271 C1E8 02 SHR EAX,2 ; Y(1)向右位移
00497274 24 3F AND AL,3F ; 再与3F作and 运算
00497276 8845 F5 MOV BYTE PTR SS:,AL ; 保存数值,设为a1
00497279 8D45 FC LEA EAX,DWORD PTR SS:
0049727C 8BCB MOV ECX,EBX
0049727E BA 01000000 MOV EDX,1
00497283 E8 50D4F6FF CALL 东方法律.004046D8
00497288 BE 04000000 MOV ESI,4
0049728D 8D5D F5 LEA EBX,DWORD PTR SS:
00497290 8D45 F0 LEA EAX,DWORD PTR SS:
00497293 33D2 XOR EDX,EDX
00497295 8A13 MOV DL,BYTE PTR DS:
00497297 8A92 2DFD4900 MOV DL,BYTE PTR DS: ; EDX=a1~4,到处查表得到字符。
0049729D E8 BED0F6FF CALL 东方法律.00404360
004972A2 8B55 F0 MOV EDX,DWORD PTR SS:
004972A5 8BC7 MOV EAX,EDI
004972A7 E8 94D1F6FF CALL 东方法律.00404440
004972AC 43 INC EBX
004972AD 4E DEC ESI
004972AE^ 75 E0 JNZ SHORT 东方法律.00497290 ; 依次取四个字符
004972B0 837D FC 00 CMP DWORD PTR SS:,0
004972B4^ 0F85 1FFFFFFF JNZ 东方法律.004971D9 ; 所有的字符连接起来就是正确的注册码
004972BA 33C0 XOR EAX,EAX
注册表:
0049FD2C41 49 59 41 47 50 58 44 4A 51 57 4D 48 56 43 4EAIYAGPXDJQWMHVCN
0049FD3C46 55 5A 52 42 4B 45 53 4F 4C 54 74 66 6B 79 73FUZRBKESOLTtfkys
0049FD4C62 6F 68 6C 75 6A 77 65 63 70 6D 69 61 71 6E 64bohlujwecpmiaqnd
0049FD5C78 7A 76 67 72 34 36 2B 30 32 35 37 33 2F 38 31xzvgr46+02573/81
0049FD6C3D 39 =9
------------------------------------------------------------------------
【破解总结】1、先将机器码与某一特殊字符串进行变形,依次取其ASCII码与自身的长度进行异或运算,与一自加数进行异或运算,结果分别设为X()和Y()。
2、倒序取机器码各位的ASCII码与X()的各位进行异或运算。结果为X()。
3、Y()=Y() XOR X()
4、Y()继续运算Y()=Y()XOR LEN(特殊字符),Y()=Y() XOR BL++
5、再将Y()进行一次运算,每三个一组,进行运算得到四个数再去查表,得到正确的注册码。
【补充说明】实际上使用这种软件做的电子书算法都是一样的,而且如果你下载了这个制作电子书的软件你就会得到一个注册机,唯一的区别就是你不知道其他人做电子书时使用的密钥,就是那个特殊字符,有了它就不必自己做注册机了。
------------------------------------------------------------------------
【版权声明】1、本注册机仅限用于学习和研究目的;
2、不得将注册内容用于商业或者非法用途,否则,一切后果请用户自负。
3、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。
4、如果您喜欢该程序,得到更好的正版服务,请支持国软、注册购买。 经典啊~~学习中~~~~ 怎么没源程序?我去下载个看看 喜欢看这些文章!非常有意义 看看怎么样啊!收藏下
页:
[1]