爬爬虫 发表于 2007-3-14 23:51:21

三六七超市管理系统2007日用品版v3.5.2.0算法分析

标 题: 【原创】三六七超市管理系统2007日用品版v3.5.2.0算法分析
作 者: KuNgBiM
时 间: 2007-03-13,19:50
链 接: http://bbs.pediy.com/showthread.php?threadid=40987

【文章标题】: 三六七超市管理系统2007日用品版v3.5.2.0算法分析
【文章作者】: KuNgBiM
【作者邮箱】: [email protected]
【作者主页】: http://www.crkcn.com
【软件名称】: 三六七超市管理系统2007日用品版v3.5.2.0
【软件大小】: 7.10MB
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 2.12
【保护方式】: 序列号+功能限制
【编写语言】: Borland Delphi 4.0 - 5.0
【使用工具】: OD
【操作平台】: 盗版XPsp2
【软件介绍】: (略)
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
试炼信息:
   
用户名:KuNgBiM
试炼码:99999999999999999999999999
   
程序ASPack 2.12加壳,脱之~~OD装载程序,利用字符插件搜索来到:

006D10FC|> \8D55 F0      lea   edx, dword ptr     ;查找后来到这里设断,F9运行
006D10FF|.8B83 DC020000mov   eax, dword ptr
006D1105|.E8 2E71D6FF    call    00438238                   ;获取用户名
006D110A|.8B45 F0      mov   eax, dword ptr     ;ASCII "KuNgBiM"
006D110D|.8D55 FC      lea   edx, dword ptr
006D1110|.E8 038CD3FF    call    00409D18
006D1115|.8D55 EC      lea   edx, dword ptr
006D1118|.8B83 E0020000mov   eax, dword ptr
006D111E|.E8 1571D6FF    call    00438238                   ;获取试炼码
006D1123|.8B45 EC      mov   eax, dword ptr     ;ASCII "99999999999999999999999999"
006D1126|.8D55 F8      lea   edx, dword ptr
006D1129|.E8 EA8BD3FF    call    00409D18
006D112E|.837D FC 00   cmp   dword ptr , 0       ;用户名是否为0
006D1132|.0F84 B5000000je      006D11ED                   ;跳则GAME OVER
006D1138|.837D F8 00   cmp   dword ptr , 0       ;试炼码是否为0
006D113C|.74 7C          je      short 006D11BA             ;跳则GAME OVER
006D113E|.8B4D F8      mov   ecx, dword ptr
006D1141|.8B55 FC      mov   edx, dword ptr
006D1144|.8BC3         mov   eax, ebx
006D1146|.E8 05020000    call    006D1350                   ;★算法CALL,跟进★
006D114B|.84C0         test    al, al
006D114D|.74 38          je      short 006D1187             ;跳则GAME OVER
006D114F|.8B83 EC020000mov   eax, dword ptr
006D1155|.8B40 58      mov   eax, dword ptr
006D1158|.BA 00800000    mov   edx, 8000
006D115D|.E8 BABFD4FF    call    0041D11C
006D1162|.BA 7C126D00    mov   edx, 006D127C            ;注册成功,我们将为您提供更多的专业服务
006D1167|.8B83 EC020000mov   eax, dword ptr
006D116D|.E8 F670D6FF    call    00438268
006D1172|.BA 5C126D00    mov   edx, 006D125C            ;关闭
006D1177|.8B83 E4020000mov   eax, dword ptr
006D117D|.E8 E670D6FF    call    00438268
006D1182|.E9 97000000    jmp   006D121E
006D1187|>8B83 EC020000mov   eax, dword ptr
006D118D|.8B40 58      mov   eax, dword ptr
006D1190|.BA FF000000    mov   edx, 0FF
006D1195|.E8 82BFD4FF    call    0041D11C
006D119A|.BA AC126D00    mov   edx, 006D12AC            ;注册码验证失败
006D119F|.8B83 EC020000mov   eax, dword ptr
006D11A5|.E8 BE70D6FF    call    00438268
006D11AA|.8B83 E0020000mov   eax, dword ptr
006D11B0|.8B10         mov   edx, dword ptr
006D11B2|.FF92 B0000000call    dword ptr
006D11B8|.EB 64          jmp   short 006D121E
006D11BA|>8B83 EC020000mov   eax, dword ptr
006D11C0|.8B40 58      mov   eax, dword ptr
006D11C3|.BA FF000000    mov   edx, 0FF
006D11C8|.E8 4FBFD4FF    call    0041D11C
006D11CD|.BA C4126D00    mov   edx, 006D12C4            ;注册码必须填写
006D11D2|.8B83 EC020000mov   eax, dword ptr
006D11D8|.E8 8B70D6FF    call    00438268
006D11DD|.8B83 E0020000mov   eax, dword ptr
006D11E3|.8B10         mov   edx, dword ptr
006D11E5|.FF92 B0000000call    dword ptr
006D11EB|.EB 31          jmp   short 006D121E
006D11ED|>8B83 EC020000mov   eax, dword ptr
006D11F3|.8B40 58      mov   eax, dword ptr
006D11F6|.BA FF000000    mov   edx, 0FF
006D11FB|.E8 1CBFD4FF    call    0041D11C
006D1200|.BA DC126D00    mov   edx, 006D12DC            ;公司名称必须填写
006D1205|.8B83 EC020000mov   eax, dword ptr
006D120B|.E8 5870D6FF    call    00438268
006D1210|.8B83 DC020000mov   eax, dword ptr
006D1216|.8B10         mov   edx, dword ptr
006D1218|.FF92 B0000000call    dword ptr
006D121E|>33C0         xor   eax, eax
006D1220|.5A             pop   edx
006D1221|.59             pop   ecx
006D1222|.59             pop   ecx
006D1223|.64:8910      mov   dword ptr fs:, edx
006D1226|.68 4D126D00    push    006D124D
006D122B|>8D45 EC      lea   eax, dword ptr
006D122E|.BA 03000000    mov   edx, 3
006D1233|.E8 102CD3FF    call    00403E48
006D1238|.8D45 F8      lea   eax, dword ptr
006D123B|.BA 02000000    mov   edx, 2
006D1240|.E8 032CD3FF    call    00403E48
006D1245\.C3             retn
006D1246   .^ E9 3926D3FF    jmp   00403884
006D124B   .^ EB DE          jmp   short 006D122B
006D124D   .5B             pop   ebx
006D124E   .8BE5         mov   esp, ebp
006D1250   .5D             pop   ebp
006D1251   .C3             retn                               ;挂掉!

跟进:006D1146

006D1350   $55             push    ebp                        ;跟进来到
006D1351   .8BEC         mov   ebp, esp
006D1353   .51             push    ecx
006D1354   .B9 08000000    mov   ecx, 8
006D1359   >6A 00          push    0
006D135B   .6A 00          push    0
006D135D   .49             dec   ecx
006D135E   .^ 75 F9          jnz   short 006D1359
006D1360   .51             push    ecx
006D1361   .874D FC      xchg    dword ptr , ecx
006D1364   .53             push    ebx
006D1365   .56             push    esi
006D1366   .57             push    edi
006D1367   .894D F4      mov   dword ptr , ecx
006D136A   .8955 F8      mov   dword ptr , edx
006D136D   .8945 FC      mov   dword ptr , eax
006D1370   .8B45 F8      mov   eax, dword ptr
006D1373   .E8 F02ED3FF    call    00404268
006D1378   .8B45 F4      mov   eax, dword ptr
006D137B   .E8 E82ED3FF    call    00404268
006D1380   .33C0         xor   eax, eax
006D1382   .55             push    ebp
006D1383   .68 72156D00    push    006D1572
006D1388   .64:FF30      push    dword ptr fs:
006D138B   .64:8920      mov   dword ptr fs:, esp
006D138E   .33C0         xor   eax, eax
006D1390   .55             push    ebp
006D1391   .68 F9146D00    push    006D14F9
006D1396   .64:FF30      push    dword ptr fs:
006D1399   .64:8920      mov   dword ptr fs:, esp
006D139C   .A1 34EB7700    mov   eax, dword ptr
006D13A1   .8B00         mov   eax, dword ptr
006D13A3   .05 6C030000    add   eax, 36C
006D13A8   .8B55 F8      mov   edx, dword ptr
006D13AB   .E8 C82AD3FF    call    00403E78                   ;获取固定字符串
006D13B0   .8D45 DC      lea   eax, dword ptr
006D13B3   .B9 8C156D00    mov   ecx, 006D158C            ;spadger
006D13B8   .8B55 F8      mov   edx, dword ptr
006D13BB   .E8 402DD3FF    call    00404100                   ;用户名+固定字符串
006D13C0   .8B55 DC      mov   edx, dword ptr
006D13C3   .8D45 E0      lea   eax, dword ptr
006D13C6   .E8 3932D3FF    call    00404604                   ;验证是否组合成功(算法CALL)
006D13CB   .8B45 E0      mov   eax, dword ptr     ;UNICODE "KuNgBiMspadger"
006D13CE   .8D55 E4      lea   edx, dword ptr
006D13D1   .E8 2E56FFFF    call    006C6A04                   ;算法结果A=LCase(MD5(用户名+固定字符串))
006D13D6   .8B45 E4      mov   eax, dword ptr     ;UNICODE "a3e0585a9dabdd33d619dd0c19744feb"
006D13D9   .8D55 E8      lea   edx, dword ptr
006D13DC   .E8 2356FFFF    call    006C6A04                   ;算法结果B=LCase(MD5(算法结果A))
006D13E1   .8B55 E8      mov   edx, dword ptr     ;ASCII "c74b4952dec5b0c61a77a2754beacd87"
006D13E4   .8D45 F0      lea   eax, dword ptr
006D13E7   .E8 902CD3FF    call    0040407C                   ;从算法结果B中开始重新组合注册码
006D13EC   .8D45 D8      lea   eax, dword ptr
006D13EF   .50             push    eax
006D13F0   .B9 05000000    mov   ecx, 5                     ;取5位
006D13F5   .33D2         xor   edx, edx                   ;从首位取
006D13F7   .8B45 F0      mov   eax, dword ptr     ;ASCII "c74b4952dec5b0c61a77a2754beacd87"
006D13FA   .E8 BD2ED3FF    call    004042BC                   ;取位作为★注册码A段★
006D13FF   .FF75 D8      push    dword ptr          ;ASCII "c74b4"
006D1402   .68 9C156D00    push    006D159C                   ;取“-”并连接
006D1407   .8D45 D4      lea   eax, dword ptr
006D140A   .50             push    eax
006D140B   .B9 05000000    mov   ecx, 5                     ;取5位
006D1410   .BA 05000000    mov   edx, 5                     ;从第5位取
006D1415   .8B45 F0      mov   eax, dword ptr     ;ASCII "c74b4952dec5b0c61a77a2754beacd87"
006D1418   .E8 9F2ED3FF    call    004042BC                   ;取位作为★注册码B段★
006D141D   .FF75 D4      push    dword ptr          ;ASCII "4952d"
006D1420   .68 9C156D00    push    006D159C                   ;取“-”并连接
006D1425   .8D45 D0      lea   eax, dword ptr
006D1428   .50             push    eax
006D1429   .B9 05000000    mov   ecx, 5                     ;取5位
006D142E   .BA 0A000000    mov   edx, 0A                  ;从第10位取
006D1433   .8B45 F0      mov   eax, dword ptr     ;ASCII "c74b4952dec5b0c61a77a2754beacd87"
006D1436   .E8 812ED3FF    call    004042BC                   ;取位作为★注册码C段★
006D143B   .FF75 D0      push    dword ptr          ;ASCII "ec5b0"
006D143E   .68 9C156D00    push    006D159C                   ;取“-”并连接
006D1443   .8D45 CC      lea   eax, dword ptr
006D1446   .50             push    eax
006D1447   .B9 05000000    mov   ecx, 5                     ;取5位
006D144C   .BA 0F000000    mov   edx, 0F                  ;从第15位取
006D1451   .8B45 F0      mov   eax, dword ptr     ;ASCII "c74b4952dec5b0c61a77a2754beacd87"
006D1454   .E8 632ED3FF    call    004042BC                   ;取位作为★注册码D段★
006D1459   .FF75 CC      push    dword ptr          ;ASCII "c61a7"
006D145C   .8D45 EC      lea   eax, dword ptr
006D145F   .BA 07000000    mov   edx, 7
006D1464   .E8 0B2DD3FF    call    00404174
006D1469   .8D45 C4      lea   eax, dword ptr
006D146C   .8B55 F4      mov   edx, dword ptr
006D146F   .E8 9031D3FF    call    00404604
006D1474   .8B45 C4      mov   eax, dword ptr
006D1477   .8D55 C8      lea   edx, dword ptr
006D147A   .E8 8555FFFF    call    006C6A04
006D147F   .8B45 C8      mov   eax, dword ptr
006D1482   .50             push    eax
006D1483   .8D45 BC      lea   eax, dword ptr
006D1486   .8B55 EC      mov   edx, dword ptr
006D1489   .E8 7631D3FF    call    00404604                   ;重新组合后的注册码(真码)
006D148E   .8B45 BC      mov   eax, dword ptr     ;UNICODE "c74b4-4952d-ec5b0-c61a7"
006D1491   .8D55 C0      lea   edx, dword ptr
006D1494   .E8 6B55FFFF    call    006C6A04                   ;LCase(MD5(真码))
006D1499   .8B55 C0      mov   edx, dword ptr     ;UNICODE "b8eb02c9081b4b60a410bb9ebf41e1f2"
006D149C   .58             pop   eax                        ;UNICODE "c220732ec07b22455c4761dcc7f924f9"
006D149D   .E8 3632D3FF    call    004046D8                   ;验证不等则挂
006D14A2   .75 3F          jnz   short 006D14E3             ;跳则GAME OVER
006D14A4   .68 A8156D00    push    006D15A8                   ;update info_shop set s_usetimes=88,s_regname="
006D14A9   .FF75 F8      push    dword ptr
006D14AC   .68 E0156D00    push    006D15E0                   ;",s_regno="
006D14B1   .FF75 F4      push    dword ptr
006D14B4   .68 F4156D00    push    006D15F4                   ;"
006D14B9   .8D45 B8      lea   eax, dword ptr
006D14BC   .BA 05000000    mov   edx, 5
006D14C1   .E8 AE2CD3FF    call    00404174
006D14C6   .8B55 B8      mov   edx, dword ptr
006D14C9   .A1 34EB7700    mov   eax, dword ptr
006D14CE   .8B00         mov   eax, dword ptr
006D14D0   .E8 23660800    call    00757AF8
006D14D5   .8B45 FC      mov   eax, dword ptr
006D14D8   .C680 F4020000 >mov   byte ptr , 1
006D14DF   .B3 01          mov   bl, 1
006D14E1   .EB 0C          jmp   short 006D14EF
006D14E3   >8B45 FC      mov   eax, dword ptr
006D14E6   .C680 F4020000 >mov   byte ptr , 0
006D14ED   .33DB         xor   ebx, ebx
006D14EF   >33C0         xor   eax, eax
006D14F1   .5A             pop   edx
006D14F2   .59             pop   ecx
006D14F3   .59             pop   ecx
006D14F4   .64:8910      mov   dword ptr fs:, edx
006D14F7   .EB 2F          jmp   short 006D1528
006D14F9   .^ E9 D220D3FF    jmp   004035D0
006D14FE   .E8 8DBDD3FF    call    0040D290
006D1503   .8B50 04      mov   edx, dword ptr
006D1506   .A1 34EB7700    mov   eax, dword ptr
006D150B   .8B00         mov   eax, dword ptr
006D150D   .B9 00166D00    mov   ecx, 006D1600            ;请输入用户名和密码,点击登录
006D1512   .E8 89630800    call    007578A0
006D1517   .8B45 FC      mov   eax, dword ptr
006D151A   .C680 F4020000 >mov   byte ptr , 0
006D1521   .33DB         xor   ebx, ebx
006D1523   .E8 0424D3FF    call    0040392C
006D1528   >33C0         xor   eax, eax
006D152A   .5A             pop   edx
006D152B   .59             pop   ecx
006D152C   .59             pop   ecx
006D152D   .64:8910      mov   dword ptr fs:, edx
006D1530   .68 79156D00    push    006D1579
006D1535   >8D45 B8      lea   eax, dword ptr
006D1538   .E8 E728D3FF    call    00403E24
006D153D   .8D45 BC      lea   eax, dword ptr
006D1540   .BA 04000000    mov   edx, 4
006D1545   .E8 5E2FD3FF    call    004044A8
006D154A   .8D45 CC      lea   eax, dword ptr
006D154D   .BA 05000000    mov   edx, 5
006D1552   .E8 F128D3FF    call    00403E48
006D1557   .8D45 E0      lea   eax, dword ptr
006D155A   .BA 03000000    mov   edx, 3
006D155F   .E8 442FD3FF    call    004044A8
006D1564   .8D45 EC      lea   eax, dword ptr
006D1567   .BA 04000000    mov   edx, 4
006D156C   .E8 D728D3FF    call    00403E48
006D1571   .C3             retn
006D1572   .^ E9 0D23D3FF    jmp   00403884
006D1577   .^ EB BC          jmp   short 006D1535
006D1579   .8BC3         mov   eax, ebx
006D157B   .5F             pop   edi
006D157C   .5E             pop   esi
006D157D   .5B             pop   ebx
006D157E   .8BE5         mov   esp, ebp
006D1580   .5D             pop   ebp
006D1581   .C3             retn                               ;返回验证信息

跟进“call    00404604”

006C6A04/$55             push    ebp                        ;算法模块库
006C6A05|.8BEC         mov   ebp, esp
006C6A07|.83C4 E4      add   esp, -1C
006C6A0A|.53             push    ebx
006C6A0B|.33C9         xor   ecx, ecx
006C6A0D|.894D F8      mov   dword ptr , ecx
006C6A10|.894D E4      mov   dword ptr , ecx
006C6A13|.8BDA         mov   ebx, edx
006C6A15|.8945 FC      mov   dword ptr , eax
006C6A18|.8D45 FC      lea   eax, dword ptr
006C6A1B|.E8 34DED3FF    call    00404854
006C6A20|.33C0         xor   eax, eax
006C6A22|.55             push    ebp
006C6A23|.68 836A6C00    push    006C6A83
006C6A28|.64:FF30      push    dword ptr fs:
006C6A2B|.64:8920      mov   dword ptr fs:, esp
006C6A2E|.8D45 E4      lea   eax, dword ptr
006C6A31|.8B55 FC      mov   edx, dword ptr
006C6A34|.E8 43D6D3FF    call    0040407C
006C6A39|.8B45 E4      mov   eax, dword ptr
006C6A3C|.50             push    eax
006C6A3D|.8D45 E8      lea   eax, dword ptr
006C6A40|.50             push    eax
006C6A41|.E8 9EFEFFFF    call    006C68E4
006C6A46|.8D45 E8      lea   eax, dword ptr
006C6A49|.50             push    eax
006C6A4A|.8D45 F8      lea   eax, dword ptr
006C6A4D|.50             push    eax
006C6A4E|.E8 01FFFFFF    call    006C6954                   ;★调用算法模块,跟进★
006C6A53|.8B55 F8      mov   edx, dword ptr    ;计算结果
006C6A56|.8BC3         mov   eax, ebx
006C6A58|.E8 A7DBD3FF    call    00404604
006C6A5D|.33C0         xor   eax, eax
006C6A5F|.5A             pop   edx
006C6A60|.59             pop   ecx
006C6A61|.59             pop   ecx
006C6A62|.64:8910      mov   dword ptr fs:, edx
006C6A65|.68 8A6A6C00    push    006C6A8A
006C6A6A|>8D45 E4      lea   eax, dword ptr
006C6A6D|.E8 B2D3D3FF    call    00403E24
006C6A72|.8D45 F8      lea   eax, dword ptr
006C6A75|.E8 AAD3D3FF    call    00403E24
006C6A7A|.8D45 FC      lea   eax, dword ptr
006C6A7D|.E8 0EDAD3FF    call    00404490
006C6A82\.C3             retn
006C6A83   .^ E9 FCCDD3FF    jmp   00403884
006C6A88   .^ EB E0          jmp   short 006C6A6A
006C6A8A   .5B             pop   ebx
006C6A8B   .8BE5         mov   esp, ebp
006C6A8D   .5D             pop   ebp
006C6A8E   .C3             retn                               ;计算结果返回上一级

跟进:006C6A4E

006C6954/$55             push    ebp                        ;调用MD5算法模块
006C6955|.8BEC         mov   ebp, esp
006C6957|.83C4 E8      add   esp, -18
006C695A|.53             push    ebx
006C695B|.56             push    esi
006C695C|.57             push    edi
006C695D|.33C0         xor   eax, eax
006C695F|.8945 EC      mov   dword ptr , eax
006C6962|.8945 E8      mov   dword ptr , eax
006C6965|.8B75 0C      mov   esi, dword ptr
006C6968|.8D7D F0      lea   edi, dword ptr
006C696B|.B9 04000000    mov   ecx, 4
006C6970|.F3:A5          rep   movs dword ptr es:, d>
006C6972|.8B7D 08      mov   edi, dword ptr
006C6975|.33C0         xor   eax, eax
006C6977|.55             push    ebp
006C6978|.68 F4696C00    push    006C69F4
006C697D|.64:FF30      push    dword ptr fs:
006C6980|.64:8920      mov   dword ptr fs:, esp
006C6983|.8BC7         mov   eax, edi
006C6985|.E8 9AD4D3FF    call    00403E24
006C698A|.B3 10          mov   bl, 10
006C698C|.8D75 F0      lea   esi, dword ptr
006C698F|>FF37         /push    dword ptr
006C6991|.8D45 EC      |lea   eax, dword ptr
006C6994|.33D2         |xor   edx, edx
006C6996|.8A16         |mov   dl, byte ptr
006C6998|.C1EA 04      |shr   edx, 4
006C699B|.83E2 0F      |and   edx, 0F
006C699E|.8A92 B0E57700|mov   dl, byte ptr
006C69A4|.E8 23D6D3FF    |call    00403FCC
006C69A9|.FF75 EC      |push    dword ptr
006C69AC|.8D45 E8      |lea   eax, dword ptr
006C69AF|.8A16         |mov   dl, byte ptr
006C69B1|.80E2 0F      |and   dl, 0F
006C69B4|.81E2 FF000000|and   edx, 0FF
006C69BA|.8A92 B0E57700|mov   dl, byte ptr
006C69C0|.E8 07D6D3FF    |call    00403FCC
006C69C5|.FF75 E8      |push    dword ptr
006C69C8|.8BC7         |mov   eax, edi
006C69CA|.BA 03000000    |mov   edx, 3
006C69CF|.E8 A0D7D3FF    |call    00404174
006C69D4|.46             |inc   esi
006C69D5|.FECB         |dec   bl
006C69D7|.^ 75 B6          \jnz   short 006C698F
006C69D9|.33C0         xor   eax, eax
006C69DB|.5A             pop   edx
006C69DC|.59             pop   ecx
006C69DD|.59             pop   ecx
006C69DE|.64:8910      mov   dword ptr fs:, edx
006C69E1|.68 FB696C00    push    006C69FB
006C69E6|>8D45 E8      lea   eax, dword ptr
006C69E9|.BA 02000000    mov   edx, 2
006C69EE|.E8 55D4D3FF    call    00403E48
006C69F3\.C3             retn
006C69F4   .^ E9 8BCED3FF    jmp   00403884
006C69F9   .^ EB EB          jmp   short 006C69E6
006C69FB   .5F             pop   edi
006C69FC   .5E             pop   esi
006C69FD   .5B             pop   ebx
006C69FE   .8BE5         mov   esp, ebp
006C6A00   .5D             pop   ebp
006C6A01   .C2 0800      retn    8                        ;计算完毕返回

【算法总结】

密码表计算式:

LCase(MD5(LCase(MD5(用户名+“spadger”))))

注册码段计算式:

A:Mid(密码表,5)
B:Mid(密码表,5,5)
C:Mid(密码表,10,5)
D:Mid(密码表,15,5)

注册码组合方式:A-B-C-D

----------------------------------------------------------------------------------------------
【经验总结】

不总结了。。。上面都能看懂吧`````这次注册机就不写了`````需要的自己写吧`````

感谢qIwEiXuE、loveboom、闪电狼、AvAtEr{RES}、逐浪、夜凉如水及所有D.C.Team朋友们陪我闲聊!!

----------------------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年03月13日 PM 07:37:57

zsl01 发表于 2008-9-23 08:25:33

很好的分析,学习了。
页: [1]
查看完整版本: 三六七超市管理系统2007日用品版v3.5.2.0算法分析