飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7323|回复: 18

[原创] KeyMake编写算法注册机学习之〖KeyGen For 钢琴曲大全 1.03〗

[复制链接]
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2009-10-3 19:44:36 | 显示全部楼层 |阅读模式
    【破文标题】KeyMake编写算法注册机之〖KeyGen For 钢琴曲大全 1.03〗
    【破文作者】WildCatIII[D.4s][PYG]
    【特别感谢】萧萧黄叶兄弟用易语言写了这个程序的KeyGen,本人抱着试试的态度而完成的这个汇编语言算法注册机,希望大家喜欢。在此感谢萧萧黄叶兄弟。
    破解工具】PEiD,OD,KeyMake
    【破解平台】Windows XP
    【软件名称】钢琴曲大全 1.03安装目录下的musicreg.exe
    【软件大小】900KB
    【原版下载】http://www.onlinedown.net/soft/69913.htm
    【保护方式】注册码
    【软件简介】钢琴曲大全(钢琴音乐大辞典)收集了从文艺复兴时期到现代3490首经典(古典)钢琴音乐、钢琴曲,并收集整理了作曲家、演奏家、写作年份、曲目类型、作品号,有清晰明了的目录(作曲家、演奏家、写作年份、曲目类型、作品号)、作曲家生平、中文与原文对照,非常方便的查询搜索系统能快速的查找作曲家、演奏家、写作年份、曲目类型、作品号。播放系统可以单/多首连续循环播放。试用版的曲库只有**的德国组曲中BWV.825下面的6个乐章!
    【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
    ------------------------------------------------------------------------
    【破解过程】一、PEiD查无壳,用OD载入运行,输入机器码:ZXB-0001,假码:987点确定,软件报错。返回OD,F12暂停程序,观察到堆栈窗口友好提示:
    0012FD60  |0042923E  返回到 musicreg.0042923E 来自 musicreg.00429148
    0012FD64  |FFFFFFFF
    0012FD68  |FFFFFFFF
    0012FD6C  |00000000
    0012FD70  |0042922B  返回到 musicreg.0042922B 来自 musicreg.0042922C
    0012FD74  |00481E14  返回到 musicreg.00481E14 来自 musicreg.00429220 //在这里返回
    0012FD78  |0012FDBC  指向下一个 SEH 记录的指针
    0012FD7C  |00481E49  SE处理程序
    0012FD80  |0012FDA4
    0012FD84  |00A6461C
    0012FD88  |00000000
    0012FD8C  |00000000
    0012FD90  |00A67214  ASCII "987"
    0012FD94  |00A6D728  ASCII "987"
    0012FD98  |00A6DC9C  ASCII "ZXB-0001"
    0012FD9C  |00A64C68  ASCII "987"
    0012FDA0  |00A6C9A8  ASCII "ZXB-0001"
    0012FDA4  ]0012FDD4
    0012FDA8  |004379FE  返回到 musicreg.004379FE
    返回到这里:
    00481E14  |> \33C0          XOR EAX,EAX   看到EAX清零的操作,应该上面就有一些相关注册的提示,往上看:
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    00481D09  |.  55            PUSH EBP                                 ;  在这下断
    00481D0A  |.  68 491E4800   PUSH musicreg.00481E49
    00481D0F  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
    00481D12  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
    00481D15  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
    00481D18  |.  8B83 00030000 MOV EAX,DWORD PTR DS:[EBX+300]
    00481D1E  |.  E8 4147FBFF   CALL musicreg.00436464
    00481D23  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  机器码:ASCII "ZXB-0001"
    00481D26  |.  8D55 FC       LEA EDX,DWORD PTR SS:[EBP-4]
    00481D29  |.  E8 A662F8FF   CALL musicreg.00407FD4
    00481D2E  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    00481D31  |.  8B83 04030000 MOV EAX,DWORD PTR DS:[EBX+304]
    00481D37  |.  E8 2847FBFF   CALL musicreg.00436464
    00481D3C  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  假码:ASCII "987"
    00481D3F  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
    00481D42  |.  E8 8D62F8FF   CALL musicreg.00407FD4
    00481D47  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
    00481D4A  |.  8B83 04030000 MOV EAX,DWORD PTR DS:[EBX+304]
    00481D50  |.  E8 0F47FBFF   CALL musicreg.00436464
    00481D55  |.  837D EC 00    CMP DWORD PTR SS:[EBP-14],0
    00481D59  |.  75 0F         JNZ SHORT musicreg.00481D6A              ;  假码有没有输,有就跳。
    00481D5B  |.  B8 601E4800   MOV EAX,musicreg.00481E60
    00481D60  |.  E8 BB74FAFF   CALL musicreg.00429220
    00481D65  |.  E9 AA000000   JMP musicreg.00481E14
    00481D6A  |>  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]             ;  跳来这,假码放EDX
    00481D6D  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  机器码放EAX
    00481D70  |.  E8 FFF8FFFF   CALL musicreg.00481674                   ;  关键CALL,跟进。
    00481D75  |.  84C0          TEST AL,AL
    00481D77  |.  0F84 8D000000 JE musicreg.00481E0A                     ;  注册成功否?
    00481D7D  |.  E8 3EF8FFFF   CALL musicreg.004815C0
    00481D82  |.  84C0          TEST AL,AL
    00481D84  |.  74 78         JE SHORT musicreg.00481DFE
    00481D86  |.  6A 04         PUSH 4
    00481D88  |.  68 701E4800   PUSH musicreg.00481E70
    00481D8D  |.  68 781E4800   PUSH musicreg.00481E78
    00481D92  |.  8BC3          MOV EAX,EBX
    00481D94  |.  E8 A7AEFBFF   CALL musicreg.0043CC40
    00481D99  |.  50            PUSH EAX                                 ; |hOwner
    00481D9A  |.  E8 C94BF8FF   CALL <JMP.&user32.MessageBoxA>           ; \MessageBoxA
    00481D9F  |.  83F8 06       CMP EAX,6
    00481DA2  |.  75 70         JNZ SHORT musicreg.00481E14
    00481DA4  |.  6A 01         PUSH 1
    00481DA6  |.  68 981E4800   PUSH musicreg.00481E98
    00481DAB  |.  68 981E4800   PUSH musicreg.00481E98
    00481DB0  |.  8D55 E4       LEA EDX,DWORD PTR SS:[EBP-1C]
    00481DB3  |.  A1 FC424800   MOV EAX,DWORD PTR DS:[4842FC]
    00481DB8  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
    00481DBA  |.  E8 F145FDFF   CALL musicreg.004563B0
    00481DBF  |.  8B45 E4       MOV EAX,DWORD PTR SS:[EBP-1C]
    00481DC2  |.  8D55 E8       LEA EDX,DWORD PTR SS:[EBP-18]
    00481DC5  |.  E8 8268F8FF   CALL musicreg.0040864C
    00481DCA  |.  8D45 E8       LEA EAX,DWORD PTR SS:[EBP-18]
    00481DCD  |.  BA A41E4800   MOV EDX,musicreg.00481EA4                ;  ASCII "music.exe"
    00481DD2  |.  E8 9924F8FF   CALL musicreg.00404270
    00481DD7  |.  8B45 E8       MOV EAX,DWORD PTR SS:[EBP-18]
    00481DDA  |.  E8 8926F8FF   CALL musicreg.00404468
    00481DDF  |.  50            PUSH EAX                                 ; |FileName
    00481DE0  |.  68 B01E4800   PUSH musicreg.00481EB0                   ; |Operation = "open"
    00481DE5  |.  E8 2E49F8FF   CALL <JMP.&user32.GetActiveWindow>       ; |[GetActiveWindow
    00481DEA  |.  50            PUSH EAX                                 ; |hWnd
    00481DEB  |.  E8 A461FAFF   CALL <JMP.&shell32.ShellExecuteA>        ; \ShellExecuteA
    00481DF0  |.  A1 FC424800   MOV EAX,DWORD PTR DS:[4842FC]
    00481DF5  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
    00481DF7  |.  E8 9040FDFF   CALL musicreg.00455E8C
    00481DFC  |.  EB 16         JMP SHORT musicreg.00481E14
    00481DFE  |>  B8 C01E4800   MOV EAX,musicreg.00481EC0
    00481E03  |.  E8 1874FAFF   CALL musicreg.00429220
    00481E08  |.  EB 0A         JMP SHORT musicreg.00481E14
    00481E0A  |>  B8 FC1E4800   MOV EAX,musicreg.00481EFC
    00481E0F  |.  E8 0C74FAFF   CALL musicreg.00429220
    00481E14  |>  33C0          XOR EAX,EAX                              ;  返回这里
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    跟进算法CALL:
    +++++++++++++
    00481674  /$  55            PUSH EBP                                 ;  跟进关键CALL来到这里,接着分析。
    00481675  |.  8BEC          MOV EBP,ESP
    00481677  |.  B9 0A000000   MOV ECX,0A
    0048167C  |>  6A 00         /PUSH 0
    0048167E  |.  6A 00         |PUSH 0
    00481680  |.  49            |DEC ECX
    00481681  |.^ 75 F9         \JNZ SHORT musicreg.0048167C
    00481683  |.  53            PUSH EBX
    00481684  |.  56            PUSH ESI
    00481685  |.  57            PUSH EDI
    00481686  |.  8955 F8       MOV DWORD PTR SS:[EBP-8],EDX
    00481689  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
    0048168C  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
    0048168F  |.  E8 C42DF8FF   CALL musicreg.00404458
    00481694  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
    00481697  |.  E8 BC2DF8FF   CALL musicreg.00404458
    0048169C  |.  33C0          XOR EAX,EAX
    0048169E  |.  55            PUSH EBP                                 ;  这里F4一次略过上面代码。
    0048169F  |.  68 591A4800   PUSH musicreg.00481A59
    004816A4  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
    004816A7  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
    004816AA  |.  33DB          XOR EBX,EBX
    004816AC  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
    004816AF  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]             ;  机器码,KeyMake里可以先使用MOV [EBP-4],EAX把机器码放到[EBP-4]的位置,在这里才可以调用。
    004816B2  |.  E8 8929F8FF   CALL musicreg.00404040
    004816B7  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  机器码ASCII "ZXB-0001"
    004816BA  |.  E8 A92BF8FF   CALL musicreg.00404268
    004816BF  |.  8BF0          MOV ESI,EAX                              ;  位数放ESI
    004816C1  |.  85F6          TEST ESI,ESI                             ;  检测小于或等于0不,也就是判定机器码存在不。
    004816C3  |.  7E 33         JLE SHORT musicreg.004816F8              ;  有就不跳。
    004816C5  |.  BF 01000000   MOV EDI,1                                ;  初始EDI=1,接下来开始进入循环。
    004816CA  |>  8D45 E0       /LEA EAX,DWORD PTR SS:[EBP-20]
    004816CD  |.  50            |PUSH EAX
    004816CE  |.  B9 01000000   |MOV ECX,1                               ;  ECX=1
    004816D3  |.  8BD7          |MOV EDX,EDI                             ;  EDX=EDI
    004816D5  |.  8B45 F4       |MOV EAX,DWORD PTR SS:[EBP-C]            ;  机器码
    004816D8  |.  E8 EB2DF8FF   |CALL musicreg.004044C8
    004816DD  |.  8B45 E0       |MOV EAX,DWORD PTR SS:[EBP-20]
    004816E0  |.  E8 832DF8FF   |CALL musicreg.00404468
    004816E5  |.  8A00          |MOV AL,BYTE PTR DS:[EAX]                ;  逐位取ASCII,放到AL中
    004816E7  |.  25 FF000000   |AND EAX,0FF                             ;  EAX与0FFH,作用就是只保留AL的值,EAX前面的值清零
    004816EC  |.  03D8          |ADD EBX,EAX                             ;  EBX=EBX+EAX
    004816EE  |.  81C3 04040000 |ADD EBX,404                             ;  EBX=EBX+404H,由此可见EBX累加的是最终值
    004816F4  |.  47            |INC EDI                                 ;  指针开始指向下一位机器码
    004816F5  |.  4E            |DEC ESI                                 ;  ESI减一,作为这个循环的判断条件。
    004816F6  |.^ 75 D2         \JNZ SHORT musicreg.004816CA             ;  往回跳,直至循环完机器码才不跳。
    004816F8  |>  D1EB          SHR EBX,1                                ;  循环出来EBX=2202H,右移一位,也就是除以2,结果=1101H
    004816FA  |.  81F3 DA870C00 XOR EBX,0C87DA                           ;  EBX与0C87DAH异或,结果=0C96DBH
    00481700  |.  03DB          ADD EBX,EBX                              ;  EBX=EBX+EBX=192DB6H
    00481702  |.  81CB 94850C00 OR EBX,0C8594                            ;  EBX与0C8594H,结果=1DADB6H
    00481708  |.  D1EB          SHR EBX,1                                ;  EBX再右移一位,结果=0EDH6DBH
    0048170A  |.  81C3 BA040000 ADD EBX,4BA                              ;  EBX=EBX+4BAH=0EDB95H
    00481710  |.  81F3 E0E00800 XOR EBX,8E0E0                            ;  EBX与8E0E0H=63B75H
    00481716  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]            ;  EDX指向[EBP-10]
    00481719  |.  8BC3          MOV EAX,EBX                              ;  EAX=EBX
    0048171B  |.  E8 B469F8FF   CALL musicreg.004080D4                   ;  跟踪到下面,发现这个CALL就是把EAX的16进制值转成10进制,放到[EBP-10]的位置。
    00481720  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  得到10进制值ASCII "408437"设为Str1,它是注册码的组成部分。现在放到EAX中,又开始新的运算。。。
    00481723  |.  33DB          XOR EBX,EBX                              ;  以下运算略过,在KeyMake里照抄到00481829地址即可。
    00481725  |.  8A58 05       MOV BL,BYTE PTR DS:[EAX+5]
    00481728  |.  8BC3          MOV EAX,EBX
    0048172A  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
    0048172D  |.  33C9          XOR ECX,ECX
    0048172F  |.  8A4A 02       MOV CL,BYTE PTR DS:[EDX+2]
    00481732  |.  03C1          ADD EAX,ECX
    00481734  |.  03C3          ADD EAX,EBX
    00481736  |.  BE 05000000   MOV ESI,5
    0048173B  |.  99            CDQ
    0048173C  |.  F7FE          IDIV ESI
    0048173E  |.  80C2 61       ADD DL,61
    00481741  |.  8855 E6       MOV BYTE PTR SS:[EBP-1A],DL              ;  DL=62 ('b')注册码合成符,放在[EBP-1A]位置,以下类同。
    00481744  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
    00481747  |.  0FB670 01     MOVZX ESI,BYTE PTR DS:[EAX+1]
    0048174B  |.  8BC6          MOV EAX,ESI
    0048174D  |.  03C6          ADD EAX,ESI
    0048174F  |.  BF 05000000   MOV EDI,5
    00481754  |.  99            CDQ
    00481755  |.  F7FF          IDIV EDI
    00481757  |.  80C2 61       ADD DL,61
    0048175A  |.  8855 E7       MOV BYTE PTR SS:[EBP-19],DL              ;  DL=62 ('b')-->[EBP-19]
    0048175D  |.  8BC3          MOV EAX,EBX
    0048175F  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
    00481762  |.  0FB63A        MOVZX EDI,BYTE PTR DS:[EDX]
    00481765  |.  03C7          ADD EAX,EDI
    00481767  |.  51            PUSH ECX
    00481768  |.  B9 05000000   MOV ECX,5
    0048176D  |.  99            CDQ
    0048176E  |.  F7F9          IDIV ECX
    00481770  |.  59            POP ECX
    00481771  |.  80C2 61       ADD DL,61
    00481774  |.  8855 E8       MOV BYTE PTR SS:[EBP-18],DL              ;  DL=63 ('c')-->[EBP-18]
    00481777  |.  8BC7          MOV EAX,EDI
    00481779  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
    0048177C  |.  0FB652 04     MOVZX EDX,BYTE PTR DS:[EDX+4]
    00481780  |.  03C2          ADD EAX,EDX
    00481782  |.  03C1          ADD EAX,ECX
    00481784  |.  51            PUSH ECX
    00481785  |.  B9 05000000   MOV ECX,5
    0048178A  |.  99            CDQ
    0048178B  |.  F7F9          IDIV ECX
    0048178D  |.  59            POP ECX
    0048178E  |.  80C2 61       ADD DL,61
    00481791  |.  8855 E9       MOV BYTE PTR SS:[EBP-17],DL              ;  DL=65 ('e')-->[EBP-17]
    00481794  |.  8BC1          MOV EAX,ECX
    00481796  |.  03C3          ADD EAX,EBX
    00481798  |.  51            PUSH ECX
    00481799  |.  B9 05000000   MOV ECX,5
    0048179E  |.  99            CDQ
    0048179F  |.  F7F9          IDIV ECX
    004817A1  |.  59            POP ECX
    004817A2  |.  80C2 61       ADD DL,61
    004817A5  |.  8855 EA       MOV BYTE PTR SS:[EBP-16],DL              ;  DL=62 ('b')-->[EBP-16]
    004817A8  |.  8BC1          MOV EAX,ECX
    004817AA  |.  03C6          ADD EAX,ESI
    004817AC  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
    004817AF  |.  0FB652 05     MOVZX EDX,BYTE PTR DS:[EDX+5]
    004817B3  |.  03C2          ADD EAX,EDX
    004817B5  |.  51            PUSH ECX
    004817B6  |.  B9 05000000   MOV ECX,5
    004817BB  |.  99            CDQ
    004817BC  |.  F7F9          IDIV ECX
    004817BE  |.  59            POP ECX
    004817BF  |.  80C2 61       ADD DL,61
    004817C2  |.  8855 EB       MOV BYTE PTR SS:[EBP-15],DL              ;  DL=65 ('e')-->[EBP-15]
    004817C5  |.  8BC1          MOV EAX,ECX
    004817C7  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
    004817CA  |.  0FB652 04     MOVZX EDX,BYTE PTR DS:[EDX+4]
    004817CE  |.  03C2          ADD EAX,EDX
    004817D0  |.  51            PUSH ECX
    004817D1  |.  B9 05000000   MOV ECX,5
    004817D6  |.  99            CDQ
    004817D7  |.  F7F9          IDIV ECX
    004817D9  |.  59            POP ECX
    004817DA  |.  80C2 61       ADD DL,61
    004817DD  |.  8855 EC       MOV BYTE PTR SS:[EBP-14],DL              ;  DL=63 ('c')-->[EBP-14]
    004817E0  |.  8BC7          MOV EAX,EDI
    004817E2  |.  03C7          ADD EAX,EDI
    004817E4  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
    004817E7  |.  0FB652 02     MOVZX EDX,BYTE PTR DS:[EDX+2]
    004817EB  |.  03C2          ADD EAX,EDX
    004817ED  |.  BF 05000000   MOV EDI,5
    004817F2  |.  99            CDQ
    004817F3  |.  F7FF          IDIV EDI
    004817F5  |.  80C2 61       ADD DL,61
    004817F8  |.  8855 ED       MOV BYTE PTR SS:[EBP-13],DL              ;  DL=61 ('a')-->[EBP-13]
    004817FB  |.  8BC6          MOV EAX,ESI
    004817FD  |.  03C1          ADD EAX,ECX
    004817FF  |.  B9 05000000   MOV ECX,5
    00481804  |.  99            CDQ
    00481805  |.  F7F9          IDIV ECX
    00481807  |.  80C2 61       ADD DL,61
    0048180A  |.  8855 EE       MOV BYTE PTR SS:[EBP-12],DL              ;  DL=65 ('e')-->[EBP-12]
    0048180D  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
    00481810  |.  0FB640 04     MOVZX EAX,BYTE PTR DS:[EAX+4]
    00481814  |.  03C3          ADD EAX,EBX
    00481816  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
    00481819  |.  0FB612        MOVZX EDX,BYTE PTR DS:[EDX]
    0048181C  |.  03C2          ADD EAX,EDX
    0048181E  |.  B9 05000000   MOV ECX,5
    00481823  |.  99            CDQ
    00481824  |.  F7F9          IDIV ECX
    00481826  |.  80C2 61       ADD DL,61
    00481829  |.  8855 EF       MOV BYTE PTR SS:[EBP-11],DL              ;  DL=64 ('d')-->[EBP-11],一共10个字符,设为Str2
    0048182C  |.  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]            ;  以下代码是将Str2穿插到Str1的过程。
    0048182F  |.  8A55 ED       MOV DL,BYTE PTR SS:[EBP-13]              ;  [EBP-13]值SS:[0012FD5D]=61 ('a')
    00481832  |.  E8 5929F8FF   CALL musicreg.00404190
    00481837  |.  8B45 DC       MOV EAX,DWORD PTR SS:[EBP-24]
    0048183A  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    0048183D  |.  B9 01000000   MOV ECX,1                                ;  所放位置=1
    00481842  |.  E8 092DF8FF   CALL musicreg.00404550
    00481847  |.  8D45 D8       LEA EAX,DWORD PTR SS:[EBP-28]
    0048184A  |.  8A55 EB       MOV DL,BYTE PTR SS:[EBP-15]              ;  [EBP-15]值SS:[0012FD5B]=65 ('e')
    0048184D  |.  E8 3E29F8FF   CALL musicreg.00404190
    00481852  |.  8B45 D8       MOV EAX,DWORD PTR SS:[EBP-28]
    00481855  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    00481858  |.  B9 02000000   MOV ECX,2                                ;  所放位置=2
    0048185D  |.  E8 EE2CF8FF   CALL musicreg.00404550
    00481862  |.  8D45 D4       LEA EAX,DWORD PTR SS:[EBP-2C]
    00481865  |.  8A55 EF       MOV DL,BYTE PTR SS:[EBP-11]              ;  [EBP-11]的值 SS:[0012FD5F]=64 ('d')
    00481868  |.  E8 2329F8FF   CALL musicreg.00404190
    0048186D  |.  8B45 D4       MOV EAX,DWORD PTR SS:[EBP-2C]
    00481870  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    00481873  |.  B9 04000000   MOV ECX,4                                ;  所放位置=4,第3位由Str1的第一位组成。大家看堆栈或调试就明白。
    00481878  |.  E8 D32CF8FF   CALL musicreg.00404550
    0048187D  |.  8D45 D0       LEA EAX,DWORD PTR SS:[EBP-30]
    00481880  |.  8A55 E9       MOV DL,BYTE PTR SS:[EBP-17]
    00481883  |.  E8 0829F8FF   CALL musicreg.00404190
    00481888  |.  8B45 D0       MOV EAX,DWORD PTR SS:[EBP-30]
    0048188B  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    0048188E  |.  B9 06000000   MOV ECX,6
    00481893  |.  E8 B82CF8FF   CALL musicreg.00404550
    00481898  |.  8D45 CC       LEA EAX,DWORD PTR SS:[EBP-34]
    0048189B  |.  8A55 E7       MOV DL,BYTE PTR SS:[EBP-19]
    0048189E  |.  E8 ED28F8FF   CALL musicreg.00404190
    004818A3  |.  8B45 CC       MOV EAX,DWORD PTR SS:[EBP-34]
    004818A6  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    004818A9  |.  B9 07000000   MOV ECX,7
    004818AE  |.  E8 9D2CF8FF   CALL musicreg.00404550
    004818B3  |.  8D45 C8       LEA EAX,DWORD PTR SS:[EBP-38]
    004818B6  |.  8A55 EA       MOV DL,BYTE PTR SS:[EBP-16]
    004818B9  |.  E8 D228F8FF   CALL musicreg.00404190
    004818BE  |.  8B45 C8       MOV EAX,DWORD PTR SS:[EBP-38]
    004818C1  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    004818C4  |.  B9 09000000   MOV ECX,9
    004818C9  |.  E8 822CF8FF   CALL musicreg.00404550
    004818CE  |.  8D45 C4       LEA EAX,DWORD PTR SS:[EBP-3C]
    004818D1  |.  8A55 E6       MOV DL,BYTE PTR SS:[EBP-1A]
    004818D4  |.  E8 B728F8FF   CALL musicreg.00404190
    004818D9  |.  8B45 C4       MOV EAX,DWORD PTR SS:[EBP-3C]
    004818DC  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    004818DF  |.  B9 0A000000   MOV ECX,0A
    004818E4  |.  E8 672CF8FF   CALL musicreg.00404550
    004818E9  |.  8D45 C0       LEA EAX,DWORD PTR SS:[EBP-40]
    004818EC  |.  8A55 E8       MOV DL,BYTE PTR SS:[EBP-18]
    004818EF  |.  E8 9C28F8FF   CALL musicreg.00404190
    004818F4  |.  8B45 C0       MOV EAX,DWORD PTR SS:[EBP-40]
    004818F7  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    004818FA  |.  B9 0C000000   MOV ECX,0C
    004818FF  |.  E8 4C2CF8FF   CALL musicreg.00404550
    00481904  |.  8D45 BC       LEA EAX,DWORD PTR SS:[EBP-44]
    00481907  |.  8A55 EE       MOV DL,BYTE PTR SS:[EBP-12]
    0048190A  |.  E8 8128F8FF   CALL musicreg.00404190
    0048190F  |.  8B45 BC       MOV EAX,DWORD PTR SS:[EBP-44]
    00481912  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    00481915  |.  B9 0D000000   MOV ECX,0D
    0048191A  |.  E8 312CF8FF   CALL musicreg.00404550
    0048191F  |.  8D45 B8       LEA EAX,DWORD PTR SS:[EBP-48]
    00481922  |.  8A55 EC       MOV DL,BYTE PTR SS:[EBP-14]              ;  第15位值=[EBP-14]
    00481925  |.  E8 6628F8FF   CALL musicreg.00404190
    0048192A  |.  8B45 B8       MOV EAX,DWORD PTR SS:[EBP-48]
    0048192D  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    00481930  |.  B9 0F000000   MOV ECX,0F                               ;  所放位置=15,第16位由Str1的末位组成,得到ASCII "ae4d0eb8bb4ce3c7",设为Str3。
    00481935  |.  E8 162CF8FF   CALL musicreg.00404550
    0048193A  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    0048193D  |.  B9 08000000   MOV ECX,8                                ;  接下来在Str3中插入一些固定符,ECX=8,即固定符所放位置,后面的字符各后移一位。
    00481942  |.  B8 741A4800   MOV EAX,musicreg.00481A74                ;  第1个固定符为S
    00481947  |.  E8 042CF8FF   CALL musicreg.00404550
    0048194C  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]            ;  从Str3的第8位取符到末位
    0048194F  |.  B9 07000000   MOV ECX,7                                ;  ECX=7
    00481954  |.  B8 801A4800   MOV EAX,musicreg.00481A80                ;  第2个固定符为X
    00481959  |.  E8 F22BF8FF   CALL musicreg.00404550
    0048195E  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    00481961  |.  B9 02000000   MOV ECX,2                                ;  ECX=2
    00481966  |.  B8 8C1A4800   MOV EAX,musicreg.00481A8C                ;  第3个固定符为5
    0048196B  |.  E8 E02BF8FF   CALL musicreg.00404550
    00481970  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    00481973  |.  B9 0C000000   MOV ECX,0C                               ;  ECX=0CH
    00481978  |.  B8 741A4800   MOV EAX,musicreg.00481A74                ;  第4个固定符同第1个为S,因为这里的00481A74和上面相同,下面有的也是一样。
    0048197D  |.  E8 CE2BF8FF   CALL musicreg.00404550
    00481982  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    00481985  |.  B9 06000000   MOV ECX,6                                ;  ECX=6
    0048198A  |.  B8 981A4800   MOV EAX,musicreg.00481A98                ;  第5个固定符为B
    0048198F  |.  E8 BC2BF8FF   CALL musicreg.00404550
    00481994  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    00481997  |.  B9 05000000   MOV ECX,5                                ;  ECX=5
    0048199C  |.  B8 A41A4800   MOV EAX,musicreg.00481AA4                ;  第6个固定符为-
    004819A1  |.  E8 AA2BF8FF   CALL musicreg.00404550
    004819A6  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    004819A9  |.  B9 0A000000   MOV ECX,0A                               ;  ECX=0AH
    004819AE  |.  B8 A41A4800   MOV EAX,musicreg.00481AA4                ;  同第6个
    004819B3  |.  E8 982BF8FF   CALL musicreg.00404550
    004819B8  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    004819BB  |.  B9 0F000000   MOV ECX,0F                               ;  ECX=0FH
    004819C0  |.  B8 A41A4800   MOV EAX,musicreg.00481AA4                ;  同第6个
    004819C5  |.  E8 862BF8FF   CALL musicreg.00404550
    004819CA  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    004819CD  |.  B9 12000000   MOV ECX,12                               ;  ECX=12H
    004819D2  |.  B8 A41A4800   MOV EAX,musicreg.00481AA4                ;  同第6个
    004819D7  |.  E8 742BF8FF   CALL musicreg.00404550
    004819DC  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    004819DF  |.  B9 14000000   MOV ECX,14                               ;  ECX=14H
    004819E4  |.  B8 A41A4800   MOV EAX,musicreg.00481AA4                ;  同第6个
    004819E9  |.  E8 622BF8FF   CALL musicreg.00404550
    004819EE  |.  8D55 B4       LEA EDX,DWORD PTR SS:[EBP-4C]
    004819F1  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  [EBP-10]=小写的真码ASCII "a5e4-dB0e-XbS8-Sb-b-4ce3c7"
    004819F4  |.  E8 CB64F8FF   CALL musicreg.00407EC4
    004819F9  |.  8B55 B4       MOV EDX,DWORD PTR SS:[EBP-4C]            ;  转大写:堆栈 SS:[0012FD24]=00A6804C, (ASCII "A5E4-DB0E-XBS8-SB-B-4CE3C7")
    004819FC  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ;  假码!接下来会发生什么事,相信大家都会预料!
    004819FF  |.  E8 B029F8FF   CALL musicreg.004043B4                   ;  比较CALL
    00481A04  |.  75 29         JNZ SHORT musicreg.00481A2F              ;  注册失败,跳!
    00481A06  |.  B3 01         MOV BL,1                                 ;  如果注册码相等,设BL的标志位为1
    00481A08  |.  B8 E45C4800   MOV EAX,musicreg.00485CE4
    00481A0D  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]
    00481A10  |.  E8 E725F8FF   CALL musicreg.00403FFC
    00481A15  |.  8D55 B0       LEA EDX,DWORD PTR SS:[EBP-50]
    00481A18  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
    00481A1B  |.  E8 A464F8FF   CALL musicreg.00407EC4
    00481A20  |.  8B55 B0       MOV EDX,DWORD PTR SS:[EBP-50]
    00481A23  |.  B8 E85C4800   MOV EAX,musicreg.00485CE8
    00481A28  |.  E8 CF25F8FF   CALL musicreg.00403FFC
    00481A2D  |.  EB 02         JMP SHORT musicreg.00481A31
    00481A2F  |>  33DB          XOR EBX,EBX                              ;  注册失败跳来这,EBX标志为0
    ------------------------------------------------------------------------

    ------------------------------------------------------------------------
    【破解总结】
    简单算法流程以下:
    1、将机器码经一系列运算后,得10进制的字符,设为Str1。
    2、将Str1再次运算得到Str2。
    3、将Str2插入到Str1中,组成一组字符,设为Str3。
    4、将Str3各处插入预设符,转成大写即成注册码。
    KeyGen For 钢琴曲大全 1.03.gif
    【注册机编写】
    KeyMake算法注册机编写以下:
    数据段:
    szHomePage db "https://www.chinapyg.com/",0
    szEmail    db "mailto:XxX@XxX.XxX",0
    szErrMess  db "输入的序列号不正确!",0
    szTemp dd 0
    szXor db "%lu",0
    szCode db 26 dup (0)   ;szCode存放注册码
    ;KeyGener WildCatIII 20090918
    ;引用请保持完整性,谢谢!
    ----------------------------------------
    代码段:
    MOV [EBP-4],EAX    ;机器码(ZXB-0001)放到[EBP-4],模仿00481689
    MOV EDX,[EBP-4]  ;再把它放到EDX,模仿004816AF
    invoke lstrlen,edx  ;计算机器码位数,返回值放在EAX
    MOV ESI,EAX   ;ESI存放机器码位数,模仿004816BF
    XOR EBX,EBX   ;EBX清零,为下面做准备
    MOV EDI,1     ;计数器初始为1
    AT004816CA:           ;循环开始,我习惯在地址004816CA前面加AT,方便使用
    MOV EAX,[EBP-4]       ;机器码
    MOV AL,BYTE PTR DS:[EDI+EAX-1];  逐位取ASCII到AL
    AND EAX,0FFH          ;汇编语言16进制表达法,末位加H;英文开头,前面再补0
    ADD EBX,EAX
    ADD EBX,404H
    INC EDI
    DEC ESI
    JNZ AT004816CA        ;循环
    SHR EBX,1
    XOR EBX,0C87DAH
    ADD EBX,EBX
    OR EBX,0C8594H
    SHR EBX,1
    ADD EBX,4BAH
    XOR EBX,8E0E0H
    MOV EAX,EBX   ;  运算结果16进制放在EBX,放到EAX中,
    PUSH EAX      ;  以下代码转成10进制ASCII码
    LEA EAX,szXor    ;  "%lu"长的无符号十进制整数值,见KeyMake使用说明,以下引用
    ;  数据格式化选项:%d,%i  有符号十进制数值
    ;          %ld,%li 长的有符号十进制整数值
    ;          %u    无符号十进制整数值
    ;          %lu   长的无符号十进制整数值
    ;          %x,%X  十六进制整数值,%x输出小写,%X输出大写
    ;          %lx,%lX 长的十六进制整数值,%lx输出小写,%lX输出大写
    ;          #    0x字符串的前缀数据,一般在显示十六进制值时使用
    PUSH EAX
    LEA EAX,szTemp
    PUSH EAX
    CALL wsprintf
    LEA EAX,szTemp   ; 最终出来的10进制字符
    MOV DWORD PTR SS:[EBP-10H],EAX ;[EBP-10H]暂放10进制数 ASCII "408437"
    ;以下仿抄00481723-0048182C段
    ;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    XOR EBX,EBX
    MOV BL,BYTE PTR DS:[EAX+5]
    MOV EAX,EBX
    mov EDX,DWORD PTR SS:[EBP-10H]
    XOR ECX,ECX
    MOV CL,BYTE PTR DS:[EDX+2]
    ADD EAX,ECX
    ADD EAX,EBX
    MOV ESI,5
    CDQ
    IDIV ESI
    ADD DL,61h
    MOV BYTE PTR SS:[EBP-1Ah],DL              ;  DL=62 ('b')
    MOV EAX,DWORD PTR SS:[EBP-10H]
    MOVZX ESI,BYTE PTR DS:[EAX+1]
    MOV EAX,ESI
    ADD EAX,ESI
    MOV EDI,5
    CDQ
    IDIV EDI
    ADD DL,61h
    MOV BYTE PTR SS:[EBP-19h],DL
    MOV EAX,EBX
    MOV EDX,DWORD PTR SS:[EBP-10H]
    MOVZX EDI,BYTE PTR DS:[EDX]
    ADD EAX,EDI
    PUSH ECX
    MOV ECX,5
    CDQ
    IDIV ECX
    POP ECX
    ADD DL,61h
    MOV BYTE PTR SS:[EBP-18h],DL              ;  DL=63 ('c')
    MOV EAX,EDI
    MOV EDX,DWORD PTR SS:[EBP-10H]
    MOVZX EDX,BYTE PTR DS:[EDX+4]
    ADD EAX,EDX
    ADD EAX,ECX
    PUSH ECX
    MOV ECX,5
    CDQ
    IDIV ECX
    POP ECX
    ADD DL,61h
    MOV BYTE PTR SS:[EBP-17h],DL              ;  DL=65 ('e')
    MOV EAX,ECX
    ADD EAX,EBX
    PUSH ECX
    MOV ECX,5
    CDQ
    IDIV ECX
    POP ECX
    ADD DL,61h
    MOV BYTE PTR SS:[EBP-16h],DL              ;  DL=62 ('b')
    MOV EAX,ECX
    ADD EAX,ESI
    MOV EDX,DWORD PTR SS:[EBP-10H]
    MOVZX EDX,BYTE PTR DS:[EDX+5]
    ADD EAX,EDX
    PUSH ECX
    MOV ECX,5
    CDQ
    IDIV ECX
    POP ECX
    ADD DL,61h
    MOV BYTE PTR SS:[EBP-15h],DL              ;  DL=65 ('e')
    MOV EAX,ECX
    MOV EDX,DWORD PTR SS:[EBP-10H]
    MOVZX EDX,BYTE PTR DS:[EDX+4]
    ADD EAX,EDX
    PUSH ECX
    MOV ECX,5
    CDQ
    IDIV ECX
    POP ECX
    ADD DL,61h
    MOV BYTE PTR SS:[EBP-14h],DL              ;  DL=63 ('c')
    MOV EAX,EDI
    ADD EAX,EDI
    MOV EDX,DWORD PTR SS:[EBP-10H]
    MOVZX EDX,BYTE PTR DS:[EDX+2]
    ADD EAX,EDX
    MOV EDI,5
    CDQ
    IDIV EDI
    ADD DL,61h
    MOV BYTE PTR SS:[EBP-13h],DL              ;  DL=61 ('a')
    MOV EAX,ESI
    ADD EAX,ECX
    MOV ECX,5
    CDQ
    IDIV ECX
    ADD DL,61h
    MOV BYTE PTR SS:[EBP-12h],DL              ;  DL=65 ('e')
    MOV EAX,DWORD PTR SS:[EBP-10H]
    MOVZX EAX,BYTE PTR DS:[EAX+4]
    ADD EAX,EBX
    MOV EDX,DWORD PTR SS:[EBP-10H]
    MOVZX EDX,BYTE PTR DS:[EDX]
    ADD EAX,EDX
    MOV ECX,5
    CDQ
    IDIV ECX
    ADD DL,61h
    MOV BYTE PTR SS:[EBP-11h],DL              ;  DL=64 ('d')
    LEA EAX,DWORD PTR SS:[EBP-24h]
    ;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    MOV ECX,1
    MOV DL,BYTE PTR SS:[EBP-13h]        ;开始组合注册码
    MOV BYTE PTR [szCode+ECX-1],DL          ;第1位
    INC CL                              ;按最终注册码的顺序,与源码有别
    MOV DL,'5'                          ;
    MOV BYTE PTR [szCode+ECX-1],DL          ;
    INC CL
    MOV DL,BYTE PTR SS:[EBP-15h]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV EAX,DWORD PTR SS:[EBP-10H]
    MOV DL,BYTE PTR [EAX]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,'-'
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR SS:[EBP-11h]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,'B'
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR [eax+1]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR SS:[EBP-17h]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,'-'
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,'X'
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR SS:[EBP-19h]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,'S'
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR [eax+2]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,'-'
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL, 'S'
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR SS:[EBP-16h]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,'-'
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR SS:[EBP-1Ah]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,'-'
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR [eax+3]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR SS:[EBP-18h]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR SS:[EBP-12h]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR [EAX+4]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR SS:[EBP-14h]
    MOV BYTE PTR [szCode+ECX-1],DL
    INC CL
    MOV DL,BYTE PTR [EAX+5]
    MOV BYTE PTR [szCode+ECX-1],DL
    LEA EDX,szCode                       ;注册码(小写),放EDX,接着转成大写
    invoke lstrlen,EDX
    XOR EBX,EBX
    DEC EDX
    MOV ESI,1       ;初始ESI=1
    MOV EDI,EAX     ;位数放EDI
    UCASE:
    MOV BL,BYTE PTR [EDX+ESI-1]
    CMP BL,61H ;'a'
    JB NoChange
    CMP BL,7AH ;'z'
    JG NoChange
    SUB BL,20H
    NoChange:
    MOV BYTE PTR [EDX+ESI-1],BL
    INC ESI
    DEC EDI
    JNZ UCASE
    XOR EAX,EAX
    LEA EAX,szCode;
    ------------------------------------------------------------------------
    【版权声明】本破文纯属技术交流,转载请注明作者并保持文章的完整, 谢谢!

    [ 本帖最后由 野猫III 于 2009-10-21 16:31 编辑 ]

    KeyGen For 钢琴曲大全 1.03.rar

    28.18 KB, 下载次数: 26, 下载积分: 飘云币 -2 枚

    musicreg.rar

    334.45 KB, 下载次数: 34, 下载积分: 飘云币 -2 枚

    评分

    参与人数 1威望 +40 飘云币 +40 收起 理由
    飘云 + 40 + 40 强悍!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2024-2-19 17:19
  • 签到天数: 52 天

    [LV.5]常住居民I

    发表于 2009-10-3 20:18:24 | 显示全部楼层
    终于再次见到猫哥大作了
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    7 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2009-10-4 10:37:13 | 显示全部楼层
    强悍,还可以优化~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-4-29 07:52
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2009-10-4 10:39:05 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-14 10:36
  • 签到天数: 44 天

    [LV.5]常住居民I

    发表于 2009-10-4 11:43:03 | 显示全部楼层
    很有内容的教程,
    帅啊~~~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2009-10-4 13:33:46 | 显示全部楼层
    原帖由 飘云 于 2009-10-4 10:37 发表
    强悍,还可以优化~


    /:001 谢谢老大指导!可以将固定符预定义,然后再分别添加上运算后的的Str1及Str2。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-5-16 14:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2009-10-8 11:35:49 | 显示全部楼层
    转大写可以借助API函数的/:017
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2015-9-5 20:32
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2009-10-10 00:56:11 | 显示全部楼层
    过来看NX的东西
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-4-26 10:19
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    发表于 2009-10-10 15:16:48 | 显示全部楼层
    不错不错~就是代码量稍大了点~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2009-10-10 22:15:46 | 显示全部楼层
    原帖由 tianxj 于 2009-10-8 11:35 发表
    转大写可以借助API函数的/:017


    正需要这些内容,分享下。。。呵呵。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表