里诺进销存管理软件算法分析
【破文标题】里诺进销存管理软件算法分析【破文作者】黑夜彩虹
【破解工具】OD
【破解平台】Windows 2K&XP
【软件名称】里诺进销存管理软件(单机版)V2.75
【软件大小】
【原版下载】Google
【保护方式】注册码
【软件简介】里诺进销存管理系统是是一个集“进、销、存、财”四位一体的全功能商贸管理软件。软件界面设计简洁,美观。其人性化
的软件流程,使普通用户不需培训也能很快掌握软件操作使用方法,上手极易。强大报表与集成查询功能是本软件的最大特
色,所有功能在用户需要的使用地方自然体现,不用打开多个窗口重复查询。
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
【破解过程】
一、安装软件后,运行注册有错误提示。PEiD查无壳。
软件是Borland Delphi 6.0 - 7.0编写。
运行,注册名:VXin 试练码:123456
二、OD载入后,超级ASCII参串
****************************
从而找到程序注册检测代码段:
超级字串参考+ , 条目 5341
地址=00655B04
反汇编=PUSH jxc.00655BE0
文本字串=注册成功,本程序所有功能限制下次启动时将被自动解除,欢迎您成为我们正式版本用户! //双击
00655A5D .E8 A6020000 CALL jxc.00655D08 //这里下断(关键CALL)
00655A62 .84C0 TEST AL,AL
00655A64 .0F84 DB000000 JE jxc.00655B45 //这里比较,相等就跳,跳则死
00655A6A .33C0 XOR EAX,EAX
...............中间代码省略........................
00655AF8 .E8 67E0DAFF CALL jxc.00403B64
00655AFD .6A 40 PUSH 40
00655AFF .68 D45B6500 PUSH jxc.00655BD4 ;软件注册
00655B04 .68 E05B6500 PUSH jxc.00655BE0 ;注册成功,本程序所有功能限制下次启动时将被自动解除,欢迎您成为我们正式版本用户!
00655B09 .8B45 FC MOV EAX,DWORD PTR SS:
00655B0C .E8 6793E3FF CALL jxc.0048EE78
00655B11 .50 PUSH EAX ; |hOwner
00655B12 .E8 9925DBFF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
...............中间代码省略........................
00655B43 . /EB 1A JMP SHORT jxc.00655B5F
00655B45 > |6A 40 PUSH 40
00655B47 . |68 D45B6500 PUSH jxc.00655BD4 ;软件注册
00655B4C . |68 305C6500 PUSH jxc.00655C30 ;注册失败,请检查您的注册名和注册码!
00655B51 . |8B45 FC MOV EAX,DWORD PTR SS:
00655B54 . |E8 1F93E3FF CALL jxc.0048EE78
00655B59 . |50 PUSH EAX ; |hOwner
00655B5A . |E8 5125DBFF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
运行,停在下断处,F7跟进
00655D08/$55 PUSH EBP
00655D09|.8BEC MOV EBP,ESP
00655D0B|.B9 04000000 MOV ECX,4
...............中间省略N行代码..............
00655D27|.64:8920 MOV DWORD PTR FS:,ESP
00655D2A|.8D55 F8 LEA EDX,DWORD PTR SS:
00655D2D|.8B86 08030000 MOV EAX,DWORD PTR DS: ;DS:=0156EAF8, (ASCII "LZG") 不管,继续单步
00655D33|.E8 3827E3FF CALL jxc.00488470 ;EAX 0156EAF8 ASCII "LZG"
00655D38|.8B45 F8 MOV EAX,DWORD PTR SS: ;堆栈 SS:=0156EA8C, (ASCII "123456")
00655D3B|.8D55 FC LEA EDX,DWORD PTR SS: ;EAX 0156EA8C ASCII "123456"
00655D3E|.E8 093DDBFF CALL jxc.00409A4C
00655D43|.8B45 FC MOV EAX,DWORD PTR SS: ;堆栈 SS:=01566A4C, (ASCII "123456")
00655D46|.50 PUSH EAX ;EAX 01566A4C ASCII "123456"
00655D47|.8D55 EC LEA EDX,DWORD PTR SS:
00655D4A|.8B86 04030000 MOV EAX,DWORD PTR DS: ;DS:=0156E7AC, (ASCII "LZG") EAX=01566A4C, (ASCII "123456")
00655D50|.E8 1B27E3FF CALL jxc.00488470 ;EAX 0156E7AC ASCII "LZG"
00655D55|.8B45 EC MOV EAX,DWORD PTR SS: ;堆栈 SS:=014ED60C, (ASCII "VXin")
00655D58|.8D55 F0 LEA EDX,DWORD PTR SS: ;EAX 014ED60C ASCII "VXin"
00655D5B|.E8 EC3CDBFF CALL jxc.00409A4C
00655D60|.8B55 F0 MOV EDX,DWORD PTR SS: ;堆栈 SS:=014D1C60, (ASCII "VXin")
00655D63|.8D4D F4 LEA ECX,DWORD PTR SS: ;EDX 014D1C60 ASCII "VXin"
00655D66|.8BC6 MOV EAX,ESI
00655D68|.E8 FF000000 CALL jxc.00655E6C ;F7
00655D6D|.8B55 F4 MOV EDX,DWORD PTR SS: ;堆栈 SS:=01561BC0, (ASCII "JXCw-E696268d5-8767")
00655D70|.58 POP EAX ;ASCII码压入EDX
00655D71|.E8 EEF0DAFF CALL jxc.00404E64
00655D76|.75 50 JNZ SHORT jxc.00655DC8 ;比较,不等则跳
00655D78|.B3 01 MOV BL,1
...............中间省略N行代码..............
00655E83|.8BF9 MOV EDI,ECX
00655E85|.8955 FC MOV DWORD PTR SS:,EDX ;EDX=014D1C60, (ASCII "VXin")
00655E88|.8B45 FC MOV EAX,DWORD PTR SS: ;堆栈 SS:=014D1C60, (ASCII "VXin")
00655E8B|.E8 78F0DAFF CALL jxc.00404F08 ;EAX 014D1C60 ASCII "VXin"
00655E90|.33C0 XOR EAX,EAX ;EAX=014D1C60, (ASCII "VXin")
00655E92|.55 PUSH EBP
00655E93|.68 2D606500 PUSH jxc.0065602D
00655E98|.64:FF30 PUSH DWORD PTR FS:
00655E9B|.64:8920 MOV DWORD PTR FS:,ESP
00655E9E|.8BC7 MOV EAX,EDI
00655EA0|.E8 B3EBDAFF CALL jxc.00404A58
00655EA5|.8B45 FC MOV EAX,DWORD PTR SS: ;堆栈 SS:=014D1C60, (ASCII "VXin")
00655EA8|.E8 6BEEDAFF CALL jxc.00404D18 ;EAX 014D1C60 ASCII "VXin"
00655EAD|.8BF0 MOV ESI,EAX
00655EAF|.85F6 TEST ESI,ESI
00655EB1|.7E 26 JLE SHORT jxc.00655ED9
00655EB3|.BB 01000000 MOV EBX,1
00655EB8|>8D4D EC /LEA ECX,DWORD PTR SS:
00655EBB|.8B45 FC |MOV EAX,DWORD PTR SS: ;堆栈 SS:=014D1C60, (ASCII "VXin")
00655EBE|.0FB64418 FF |MOVZX EAX,BYTE PTR DS: ;循环取用户名的ASCII码
00655EC3|.33D2 |XOR EDX,EDX ;
00655EC5|.E8 9A42DBFF |CALL jxc.0040A164
00655ECA|.8B55 EC |MOV EDX,DWORD PTR SS: ;ASCII码入EDX
00655ECD|.8D45 F8 |LEA EAX,DWORD PTR SS:
00655ED0|.E8 4BEEDAFF |CALL jxc.00404D20
00655ED5|.43 |INC EBX
00655ED6|.4E |DEC ESI
00655ED7|.^ 75 DF \JNZ SHORT jxc.00655EB8
00655ED9|>8B45 F8 MOV EAX,DWORD PTR SS: ;堆栈 SS:=014ED7AC, (ASCII "5658696E")
00655EDC|.E8 37EEDAFF CALL jxc.00404D18
00655EE1|.8BF0 MOV ESI,EAX
00655EE3|.85F6 TEST ESI,ESI
00655EE5|.7E 2C JLE SHORT jxc.00655F13
00655EE7|.BB 01000000 MOV EBX,1
00655EEC|>8B45 F8 /MOV EAX,DWORD PTR SS: ;堆栈 SS:=014ED7AC, (ASCII "5658696E")
00655EEF|.E8 24EEDAFF |CALL jxc.00404D18
00655EF4|.2BC3 |SUB EAX,EBX
00655EF6|.8B55 F8 |MOV EDX,DWORD PTR SS: ;堆栈 SS:=014ED7AC, (ASCII "5658696E") EDX=014ED7B2, (ASCII "6E")
00655EF9|.8A1402 |MOV DL,BYTE PTR DS: ;ASCII码,由尾至头重新排列
00655EFC|.8D45 E8 |LEA EAX,DWORD PTR SS:
00655EFF|.E8 3CEDDAFF |CALL jxc.00404C40
00655F04|.8B55 E8 |MOV EDX,DWORD PTR SS:
00655F07|.8D45 F4 |LEA EAX,DWORD PTR SS:
00655F0A|.E8 11EEDAFF |CALL jxc.00404D20
00655F0F|.43 |INC EBX
00655F10|.4E |DEC ESI
00655F11|.^ 75 D9 \JNZ SHORT jxc.00655EEC
00655F13|>8D45 F8 LEA EAX,DWORD PTR SS:
00655F16|.50 PUSH EAX
00655F17|.B9 04000000 MOV ECX,4
00655F1C|.BA 01000000 MOV EDX,1
00655F21|.8B45 F4 MOV EAX,DWORD PTR SS: ;堆栈 SS:=01565830, (ASCII "E6968565")
00655F24|.E8 4FF0DAFF CALL jxc.00404F78 ;EAX 01565830 ASCII "E6968565"
00655F29|.8D45 F4 LEA EAX,DWORD PTR SS:
00655F2C|.50 PUSH EAX
00655F2D|.B9 04000000 MOV ECX,4
00655F32|.BA 05000000 MOV EDX,5
00655F37|.8B45 F4 MOV EAX,DWORD PTR SS: ;堆栈 SS:=01565830, (ASCII "E6968565")
00655F3A|.E8 39F0DAFF CALL jxc.00404F78 ;EAX 01565830 ASCII "E6968565"
00655F3F|.8B45 F8 MOV EAX,DWORD PTR SS: ;堆栈 SS:=0156D880, (ASCII "E696")
00655F42|.E8 D1EDDAFF CALL jxc.00404D18 ;EAX 0156D880 ASCII "E696"
00655F47|.83F8 04 CMP EAX,4
00655F4A|.7D 2F JGE SHORT jxc.00655F7B
...............中间省略N行代码..............
00655F79|.^ 75 E0 \JNZ SHORT jxc.00655F5B
00655F7B|>8B45 F4 MOV EAX,DWORD PTR SS: ;堆栈 SS:=0156DC80, (ASCII "8565")
00655F7E|.E8 95EDDAFF CALL jxc.00404D18
00655F83|.83F8 04 CMP EAX,4
...............中间省略N行代码..............
00655FB5|.^ 75 E0 \JNZ SHORT jxc.00655F97
00655FB7|>8D45 F0 LEA EAX,DWORD PTR SS:
00655FBA|.BA 44606500 MOV EDX,jxc.00656044 ;00656044=jxc.00656044 (ASCII "JXCw268d58k")
00655FBF|.E8 2CEBDAFF CALL jxc.00404AF0 ;EDX 00656044 ASCII "JXCw268d58k"
00655FC4|.8D45 DC LEA EAX,DWORD PTR SS:
00655FC7|.50 PUSH EAX
00655FC8|.B9 04000000 MOV ECX,4
00655FCD|.BA 01000000 MOV EDX,1
00655FD2|.8B45 F0 MOV EAX,DWORD PTR SS: ;堆栈 SS:=00656044 (jxc.00656044), ASCII "JXCw268d58k"
00655FD5|.E8 9EEFDAFF CALL jxc.00404F78 ;EAX 00656044 ASCII "JXCw268d58k"
00655FDA|.FF75 DC PUSH DWORD PTR SS: ;堆栈 SS:=0156505C, (ASCII "JXCw")
00655FDD|.68 58606500 PUSH jxc.00656058 ;-
00655FE2|.FF75 F8 PUSH DWORD PTR SS: ;堆栈 SS:=0156D880, (ASCII "E696")
00655FE5|.8D45 D8 LEA EAX,DWORD PTR SS:
00655FE8|.50 PUSH EAX
00655FE9|.B9 05000000 MOV ECX,5
00655FEE|.BA 05000000 MOV EDX,5
00655FF3|.8B45 F0 MOV EAX,DWORD PTR SS: ;堆栈 SS:=00656044 (jxc.00656044), ASCII "JXCw268d58k"
00655FF6|.E8 7DEFDAFF CALL jxc.00404F78 ;EAX 00656044 ASCII "JXCw268d58k"
00655FFB|.FF75 D8 PUSH DWORD PTR SS: ;堆栈 SS:=0156C7AC, (ASCII "268d5")
00655FFE|.68 58606500 PUSH jxc.00656058 ;-
00656003|.FF75 F4 PUSH DWORD PTR SS: ;堆栈 SS:=0156DC80, (ASCII "8565")
00656006|.8BC7 MOV EAX,EDI
00656008|.BA 06000000 MOV EDX,6
0065600D|.E8 C6EDDAFF CALL jxc.00404DD8
00656012|.33C0 XOR EAX,EAX
00656014|.5A POP EDX
00656015|.59 POP ECX
00656016|.59 POP ECX
00656017|.64:8910 MOV DWORD PTR FS:,EDX
0065601A|.68 34606500 PUSH jxc.00656034
0065601F|>8D45 D8 LEA EAX,DWORD PTR SS:
00656022|.BA 0A000000 MOV EDX,0A
00656027|.E8 50EADAFF CALL jxc.00404A7C
0065602C\.C3 RETN ;EDX 014D1C60 ASCII "VXin"
0065602D .^ E9 C6E2DAFF JMP jxc.004042F8
00656032 .^ EB EB JMP SHORT jxc.0065601F
00656034 .5F POP EDI
00656035 .5E POP ESI
00656036 .5B POP EBX
00656037 .8BE5 MOV ESP,EBP
00656039 .5D POP EBP
0065603A .C3 RETN
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
【算法小结】
用户名:VXin注册码:JXCw-E696268d5-8565
V=56
X=58
i=69
n=6E
注册码的格式:JXCw 268d5 //固定格式
1、循环取用户名的ASCII码(16进制) 为code1 则等于:5658696E
2、将ASCII码从尾到头重新排列 为code2 则等于:E6968565
3、取ASCII码前4位 为code3 则等于:E696
4、取ASCII码第位5到第8位 为code4 则等于:8565
最后:JXCw- 加 code3 加268d5 加 - 加code4就是注册码了
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
第一写算法分析,感谢你看到这里!
【版权声明】本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[ 本帖最后由 黑夜彩虹 于 2006-7-2 14:39 编辑 ] 写得很详细,是我们学习的好教程。
再写个注册机让我们学习学习,就更好了。 学习了。。。。 谢谢了学习下 谢谢,有很多的问题要问:
一是注册码的格式是怎么看出来的;
二是那个固定的注册字符又在哪里看到的; 不错不错,楼主分析得很详细!
试着成功追出“里诺仓库管理软件 V3.50 ”的注册码 楼主,此一步您只分析到了第一层的验证机制。当数据库记录达到300条后还有会另外的一层验证机制。 是的~
基本上没有人破解出 第2道 ~
^_^
楼主的破解 直接用老版本的注册机就可以了
原理一样~ 暗桩没破呀,现在好麻烦
页:
[1]