ezConverter V2.0 简体中文版的破解
注册机c++下得源码 后记:终于写完了。注册成功后将erf.dat中注册码部分用ultraedit稍微改一下,就可重复注册。呵呵水平有限,大家凑合看吧!献丑了!!!注册机书写中。
软件简介:支持的格式多,可将 asf,wmv,wma,wav, mp3、mpeg,dat,dvd,avi,cd音轨,磁带,话筒等 转换为:wma, mp3, wav 及20多种音频格式.可从音频硬件采集声音(包括话筒,线路输入,混音器、磁带等)然后存为 20多种格式,你甚至可以将录音机里的广播录制到电脑里并存成mp3文件!完全支持第三方免费编解码器,将你电脑潜在的转换,功能发挥到极致.速度极快,比一般的转换器快出30%.没有复杂的操作,极易使用.新2.0版本加入了“智能解码器匹配”技术,解决了非标准格式和未知格式文件的处理.例如很多数码摄像机都采用非标准asf,mpeg4作为存储格式,大部分转换软件都是无法正确读取这些格式的。
未注册版本30次限制。本文解决了注册码算法和解除次数限制的问题。
下载网址: http://www.skycn.com/soft/11099.html
破解声明:只为技术而破解!
破解工具:Fi ,OD1.09d汉化中文版
前言:本软件经fi检测,无壳vc作品,先运行一下,了解一下情况。知己知彼百战不钛吗!要求注册用户名大于6位。输完后要求重启验证。一般的重启验证程序。肯定有一个地方保存输入的注册信息。一般是注册表中或者文件中!记下相关得出错信息,然后 呵呵C32ASM,反汇编一无所获!没办法只有慢慢的试着找断点。这时可用filemon等文件检测工具,但我的这个不太好使。呵呵!NND。(我开始用万能断点,跟了好半天!) 先用od载入把。搜索――当前模块中的名称――在一堆函数中找到了GetCurrentDirectoryA 这个函数,是对文件进行操作的。然后查找导入参考把。只有一个地方调用了这个函数。设断点。载入程序
程序断在这
004056D2 . FF15 68F04000 CALL DWORD PTR DS:[<&KERNEL32.GetCurrent>; GetCurrentDirectoryA
004056D8 . 8BCE MOV ECX,ESI
004056DA . E8 41070000 CALL ezConver.00405E20 //你要在上面的地方设断点的话这里是关键一定要更进,所用的秘密都藏在这 call (1)
004056DF . 84C0 TEST AL,AL
004056E1 0F85 C3000000 JNZ ezConver.004057AA //注册判断,关键跳转
以上部分的作用,且听下面分解先看看跟进取得结果把
………………………省略call (1)的n行代码
00405E56 |. 0F88 19030000 JS ezConver.00406175
00405E5C |. 68 FC334100 PUSH ezConver.004133FC ; /FileName = "kernel32.dll"
00405E61 |. FF15 30F04000 CALL DWORD PTR DS:[<&KERNEL32.LoadLibrar>; LoadLibraryA
00405E67 |. 8BE8 MOV EBP,EAX
00405E69 |. 68 F0334100 PUSH ezConver.004133F0 ; /ProcNameOrOrdinal = "ReadFile" 开始时也可用bpx ReadFile在此处设断
00405E6E |. 55 PUSH EBP ; |hModule
00405E6F |. FFD6 CALL ESI ; GetProcAddress
00405E71 |. 68 E4334100 PUSH ezConver.004133E4 ; /ProcNameOrOrdinal = "CreateFileA"
00405E76 |. 55 PUSH EBP ; |hModule
00405E77 |. 8BD8 MOV EBX,EAX ; |
00405E79 |. FFD6 CALL ESI ; GetProcAddress
00405E7B |. 68 D8334100 PUSH ezConver.004133D8 ; /ProcNameOrOrdinal = "WriteFile"
00405E80 |. 55 PUSH EBP ; |hModule
00405E81 |. 8BF8 MOV EDI,EAX ; |
00405E83 |. FFD6 CALL ESI ; GetProcAddress
00405E85 |. 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00405E89 |. E8 1A740000 CALL <JMP.&MFC42.#540>
00405E8E |. 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
00405E92 |. 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]
00405E96 |. 81C1 C4000000 ADD ECX,0C4
00405E9C |. C78424 3001000>MOV DWORD PTR SS:[ESP+130],0
00405EA7 |. 51 PUSH ECX
00405EA8 |. 68 CC334100 PUSH ezConver.004133CC ; ASCII "%serf.dat"
//读了当前目录下得这个文件用ultraEdit32查看其中内容,会发现你输入的注册信息
//rk.dat中也保存着注册信息
00405F79 |. 52 PUSH EDX ; |pLastAccess
00405F7A |. 50 PUSH EAX ; |pCreationTime
00405F7B |. 56 PUSH ESI ; |hFile
00405F7C |. FF15 80F04000 CALL DWORD PTR DS:[<&KERNEL32.SetFileTim>; SetFileTime
00405F82 |. 56 PUSH ESI ; /hObject
00405F83 |. FF15 78F04000 CALL DWORD PTR DS:[<&KERNEL32.CloseHandl>; CloseHandle
00405F89 |. 55 PUSH EBP ; /hLibModule
00405F8A |. FF15 38F04000 CALL DWORD PTR DS:[<&KERNEL32.FreeLibrar>; FreeLibrary
00405F90 |. 83CD FF OR EBP,FFFFFFFF
00405F93 |. 8D7C24 40 LEA EDI,DWORD PTR SS:[ESP+40] 用户名入栈
00405F97 |. 8BCD MOV ECX,EBP
00405F99 |. 33C0 XOR EAX,EAX
00405F9B |. F2:AE REPNE SCAS BYTE PTR ES:[EDI] 检查是否为空
00405F9D |. F7D1 NOT ECX
00405F9F |. 49 DEC ECX
00405FA0 |. 83F9 01 CMP ECX,1
00405FA3 |. 0F82 BC010000 JB ezConver.00406165
00405FA9 |. 8D7C24 64 LEA EDI,DWORD PTR SS:[ESP+64] 序列号入栈
00405FAD |. 8BCD MOV ECX,EBP
00405FAF |. F2:AE REPNE SCAS BYTE PTR ES:[EDI] 检查是否为空
00405FB1 |. F7D1 NOT ECX
00405FB3 |. 49 DEC ECX
00405FB4 |. 83F9 01 CMP ECX,1
00405FB7 |. 0F82 A8010000 JB ezConver.00406165
00405FBD |. 8D7C24 40 LEA EDI,DWORD PTR SS:[ESP+40] 用户名入栈
00405FC1 |. 8BCD MOV ECX,EBP
00405FC3 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
一下是关键,我开始是将断点设在这里
00405FC5 |. 8B1D A8F44000 MOV EBX,DWORD PTR DS:[<&USER32.CharUpper>; USER32.CharUpperA
00405FCB |. 8BF5 MOV ESI,EBP
00405FCD |. F7D1 NOT ECX
00405FCF |. 49 DEC ECX
00405FD0 |. 8BF9 MOV EDI,ECX edi中存的是长度
00405FD2 |. 8D4C24 40 LEA ECX,DWORD PTR SS:[ESP+40]
00405FD6 |. 51 PUSH ECX ; /StringOrChar = "tsinghua"
00405FD7 |. FFD3 CALL EBX ; CharUpperA
//该call的作用是将用户名的小写字母部分转化为大写
00405FD9 |. 33C9 XOR ECX,ECX 将ecx清零,用作计数器
00405FDB |. 85FF TEST EDI,EDI //测试用户名是否为0
00405FDD |. 7E 6B JLE SHORT ezConver.0040604A 不跳
00405FDF |> 8BC1 /MOV EAX,ECX //
00405FE1 |. BD 03000000 |MOV EBP,3 //将3放进ebp中作为除数
00405FE6 |. 99 |CDQ
00405FE7 |. F7FD |IDIV EBP //整除 余数放在edx中
00405FE9 |. 46 |INC ESI //每次加初始值为-1,她就是以后你注册码的长度
最终结果为用户名长度减1
00405FEA |. 85D2 |TEST EDX,EDX //判断余数是否为0
00405FEC |. 75 17 |JNZ SHORT ezConver.00406005 //如果不等于零则跳00406005
00405FEE |. 8A440C 40 |MOV AL,BYTE PTR SS:[ESP+ECX+40] 将该位的字符存入eax的低位
00405FF2 |. 0FBED0 |MOVSX EDX,AL 将eax的低位转移到edx中
00405FF5 |. 83EA 05 |SUB EDX,5 edx=edx-5
00405FF8 |. 83FA 41 |CMP EDX,41 比较该位减5后与’A’的大小
00405FFB |. 7E 04 |JLE SHORT ezConver.00406001 //如果小于’A’跳走
00405FFD |. 2C 05 |SUB AL,5 否则减5
00405FFF |. EB 3A |JMP SHORT ezConver.0040603B
00406001 |> 04 05 |ADD AL,5 如果小于’A’将他加5
00406003 |. EB 36 |JMP SHORT ezConver.0040603B
00406005 |> 83FA 01 |CMP EDX,1 //将余数和1比较
00406008 |. 75 17 |JNZ SHORT ezConver.00406021 不等于1跳走
0040600A |. 8A440C 40 |MOV AL,BYTE PTR SS:[ESP+ECX+40] 将此位的字符存到al中
0040600E |. 0FBED0 |MOVSX EDX,AL
00406011 |. 83C2 07 |ADD EDX,7 将此位的字符加7
00406014 |. 83FA 5A |CMP EDX,5A 然后与’Z’比较
00406017 |. 7D 04 |JGE SHORT ezConver.0040601D如果大于等于’Z’跳走
00406019 |. 04 07 |ADD AL,7 如果小于则将这一位的字符加7
0040601B |. EB 1E |JMP SHORT ezConver.0040603B
0040601D |> 2C 07 |SUB AL,7 将这一位上的字符减去7
0040601F |. EB 1A |JMP SHORT ezConver.0040603B 结束这一位的处理
00406021 |> 83FA 02 |CMP EDX,2 将余数和2比较
00406024 |. 75 1C |JNZ SHORT ezConver.00406042 不等于2的话跳走
00406026 |. 8A440C 40 |MOV AL,BYTE PTR SS:[ESP+ECX+40] 取字符
0040602A |. 0FBED0 |MOVSX EDX,AL
0040602D |. 83EA 09 |SUB EDX,9 将Edx-9
00406030 |. 83FA 41 |CMP EDX,41 与’A’比较
00406033 |. 7E 04 |JLE SHORT ezConver.00406039 小于等于’A’的话跳走
00406035 |. 2C 09 |SUB AL,9 大于’A’将这一位字符减9
00406037 |. EB 02 |JMP SHORT ezConver.0040603B
00406039 |> 04 09 |ADD AL,9 小于的’A’话将这一位字符加9’
0040603B |> 888434 8800000>|MOV BYTE PTR SS:[ESP+ESI+88],AL
00406042 |> 41 |INC ECX ecx+1每取完一位计数器加一
00406043 |. 3BCF |CMP ECX,EDI //看用户名是否计算完毕
00406045 |.^7C 98 JL SHORT ezConver.00405FDF//没算完的话跳回去继续循环
上面的循环就是对对用户名进行变换,具体的算法如下
假设用户名数组array[]=’tsinghua’;
i=0,3,6,9 array[i]=’T’ i/3 ==0 先判断余数是否为0 判断’T-5’与’A’的大小(其实就是看他是不是大写字母)如果是大于A的就将他-5 ,”T”-5==’O’如果小于就加5
i=1,4,7,11 array[i]=’S’ i/3 余数==1,跳到第二分之判断’S+7’与’Z’的大小如果小于就将他加7否则就减5
i=2,5,8….array[i]=’I’ i/3 余数为2 跳到第三分之判断’I’-9与’A’比较大于就将他减9小于就加9;
经转化后”TSINHUA”---转化为“OLRINQPH”
00406047 |. 83CD FF OR EBP,FFFFFFFF
0040604A |> DD05 00FE4000 FLD QWORD PTR DS:[40FE00] 浮点操作
00406050 |. 33C0 XOR EAX,EAX 清零
00406052 |. 85F6 TEST ESI,ESI
00406054 |. 7E 17 JLE SHORT ezConver.0040606D
00406056 |> 0FBE8C04 88000>/MOVSX ECX,BYTE PTR SS:[ESP+EAX+88]
0040605E |. 894C24 14 |MOV DWORD PTR SS:[ESP+14],ECX
00406062 |. 40 |INC EAX
00406063 |. DB4424 14 |FILD DWORD PTR SS:[ESP+14]
FILD src 装入整数到st(0) st(0) <- src (mem16/mem32/mem64)
00406067 |. 3BC6 |CMP EAX,ESI
00406069 |. DEC1 |FADDP ST(1),ST 将用户名经过转换后的字符串的前esi位字符(用户名长度减1)的十进制累加存到st(1)中,此处是浮点预算
0040606B |.^7C E9 JL SHORT ezConver.00406056
st【0】的结果是549.000000000000000000
0040606D |> D9C0 FLD ST
FLD src 装入实数到st(0) st(0) <- src (mem32/mem64/mem80)
0040606F |. D9FE FSIN
FSIN 正弦函数sin st(0) <- SIN( st(0) )
00406071 |. D9FF FCOS
FCOS 余弦函数Cos st(0) <- COS( st(0) )
00406073 |. D9FE FSIN
00406075 |. D9FF FCOS
00406077 |. D9FE FSIN
00406079 |. DD5424 14 FST QWORD PTR SS:[ESP+14]
FST dest 保存实数st(0)到dest dest <- st(0) (mem32/mem64
0040607D |. DC1D 00FE4000 FCOMP QWORD PTR DS:[40FE00] 将结果和0比较
FCOM 实数比较 将标志位设置为 st(0) - st(1) 的结果标志位
FCOM op 实数比较 将标志位设置为 st(0) - op (mem32/mem64)的结果标志位
00406083 |. DFE0 FSTSW AX ax得知等于7注册码长度
FSTSW AX 保存状态字的值到AX AX<- MSW
FSTSW dest 保存状态字的值到dest dest<-MSW (mem16)
00406085 |. F6C4 01 TEST AH,1
00406088 |. 74 23 JE SHORT ezConver.004060AD //以下这段我在破解是跳过去了。我想作用和上面差不多
0040608A |> DC0D F8FD4000 /FMUL QWORD PTR DS:[40FDF8]
00406090 |. D9C0 |FLD ST
00406092 |. D9FE |FSIN
00406094 |. D9FF |FCOS
00406096 |. D9FE |FSIN
00406098 |. D9FF |FCOS
0040609A |. D9FE |FSIN
0040609C |. DD5424 14 |FST QWORD PTR SS:[ESP+14]
004060A0 |. DC1D 00FE4000 |FCOMP QWORD PTR DS:[40FE00]
004060A6 |. DFE0 |FSTSW AX
004060A8 |. F6C4 01 |TEST AH,1
004060AB |.^75 DD JNZ SHORT ezConver.0040608A
004060AD |> 8B5424 18 MOV EDX,DWORD PTR SS:[ESP+18]
004060B1 |. 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]
004060B5 |. 52 PUSH EDX
004060B6 |. 50 PUSH EAX ; /<%.14f>
004060B7 |. 8D8C24 E000000>LEA ECX,DWORD PTR SS:[ESP+E0] ; |
004060BE |. 68 C4334100 PUSH ezConver.004133C4 ; |format = "%.14f"
004060C3 |. 51 PUSH ECX ; |s
004060C4 |. DDD8 FSTP ST ; |
004060C6 |. FF15 34F44000 CALL DWORD PTR DS:[<&MSVCRT.sprintf>] ; sprintf
004060CC |. 8DBC24 E800000>LEA EDI,DWORD PTR SS:[ESP+E8]
将算出的浮点结果的前十四位转移到edi中
内存中 【 0012F2EC 0012F3D4 ASCII "0.69642527979317"】
004060D3 |. 8BCD MOV ECX,EBP
004060D5 |. 33C0 XOR EAX,EAX
004060D7 |. 83C4 10 ADD ESP,10
004060DA |. 33D2 XOR EDX,EDX
004060DC |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
004060DE |. F7D1 NOT ECX
004060E0 |. 49 DEC ECX
004060E1 |. 83E9 02 SUB ECX,2 //这上面是做些判断
004060E4 |. 74 27 JE SHORT ezConver.0040610D
//以下循环是关键他求出了注册码
//依次取小数部分的每一位
004060E6 |> 8A8414 DA00000>/MOV AL,BYTE PTR SS:[ESP+EDX+DA]
004060ED |. 8DBC24 D800000>|LEA EDI,DWORD PTR SS:[ESP+D8]
004060F4 |. 04 41 |ADD AL,41 将每一为的ascii值加上41
004060F6 |. 8BCD |MOV ECX,EBP
004060F8 |. 888414 8800000>|MOV BYTE PTR SS:[ESP+EDX+88],AL 保存计算结果
004060FF |. 33C0 |XOR EAX,EAX
00406101 |. 42 |INC EDX
00406102 |. F2:AE |REPNE SCAS BYTE PTR ES:[EDI]
00406104 |. F7D1 |NOT ECX
00406106 |. 83C1 FD |ADD ECX,-3
00406109 |. 3BD1 |CMP EDX,ECX
0040610B |.^72 D9 JB SHORT ezConver.004060E6
第一位 ‘6’+41=77―――w
第二为 ‘9’+41=7a―――z
第三为 ‘6’+41=77―――w
0040610D |> 8D8C24 8800000>LEA ECX,DWORD PTR SS:[ESP+88]
运算以后的结果存入ecx中
00406114 |. C68434 8800000>MOV BYTE PTR SS:[ESP+ESI+88],0
只取计算结果的前esi中存的位数再这里是7 实际是用户名长度减1
0040611C |. 51 PUSH ECX
0040611D |. FFD3 CALL EBX 将这些字符转化为大写字母
0040611F |. 8D7C24 64 LEA EDI,DWORD PTR SS:[ESP+64]
将输入的假序列号入栈
00406123 |. 8BCD MOV ECX,EBP
00406125 |. 33C0 XOR EAX,EAX
00406127 |. 8DB424 8800000>LEA ESI,DWORD PTR SS:[ESP+88]
0040612E |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00406130 |. F7D1 NOT ECX
00406132 |. 49 DEC ECX
00406133 |. 8D7C24 64 LEA EDI,DWORD PTR SS:[ESP+64]
00406137 |. 33D2 XOR EDX,EDX
00406139 |. 89AC24 3001000>MOV DWORD PTR SS:[ESP+130],EBP
00406140 |. F3:A6 REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS:> 比较
00406142 |. 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00406146 |. 75 28 JNZ SHORT ezConver.00406170 //关键跳转
00406148 |. E8 43710000 CALL <JMP.&MFC42.#800>
0040614D |. B0 01 MOV AL,1
0040614F |. 8B8C24 2801000>MOV ECX,DWORD PTR SS:[ESP+128]
00406156 |. 64:890D 000000>MOV DWORD PTR FS:[0],ECX
0040615D |. 5F POP EDI
0040615E |. 5E POP ESI
0040615F |. 5D POP EBP
00406160 |. 5B POP EBX
00406161 |. 8BE5 MOV ESP,EBP
00406163 |. 5D POP EBP
00406164 |. C3 RETN
00406165 |> 89AC24 3001000>MOV DWORD PTR SS:[ESP+130],EBP
0040616C |> 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00406170 |> E8 1B710000 CALL <JMP.&MFC42.#800>
00406175 |> 8B8C24 2801000>MOV ECX,DWORD PTR SS:[ESP+128]
0040617C |. 5F POP EDI
0040617D |. 32C0 XOR AL,AL
0040617F |. 64:890D 000000>MOV DWORD PTR FS:[0],ECX
00406186 |. 5E POP ESI
00406187 |. 5D POP EBP
00406188 |. 5B POP EBX
00406189 |. 8BE5 MOV ESP,EBP
0040618B |. 5D POP EBP
0040618C . C3 RETN
0040618D 90 NOP
0040618E 90 NOP
0040618F 90 NOP
00406190 > C3 RETN
00406191 90 NOP
004056D2 . FF15 68F04000 CALL DWORD PTR DS:[<&KERNEL32.GetCurrent>; GetCurrentDirectoryA
004056D8 . 8BCE MOV ECX,ESI
004056DA . E8 41070000 CALL ezConver.00405E20
004056DF . 84C0 TEST AL,AL
程序返回到这
004056E1 0F85 C3000000 JNZ ezConver.004057AA //因该是关键跳转了爆破的话改这
004056E7 . 57 PUSH EDI ; /Arg1
004056E8 . 8BCE MOV ECX,ESI ; |
004056EA . E8 610D0000 CALL ezConver.00406450 ; ezConver.00406450
004056EF . B9 1E000000 MOV ECX,1E 30次限制呵呵把它改为无穷大你也可以随便使用
004056F4 . 2BC8 SUB ECX,EAX eax中存的是你已经使用的次数
004056F6 . 83F9 9C CMP ECX,-64
004056F9 . 898E C4010000 MOV DWORD PTR DS:[ESI+1C4],ECX
004056FF . 0F8C B9010000 JL ezConver.004058BE
00405705 . 83F9 01 CMP ECX,1
00405708 . 7D 53 JGE SHORT ezConver.0040575D
等于0你就不能用了
0040570A . 57 PUSH EDI
0040570B . 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
0040570F . E8 2C780000 CALL ezConver.0040CF40
00405714 . 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00405718 . 89BC24 C40A000>MOV DWORD PTR SS:[ESP+AC4],EDI
0040571F . E8 347A0000 CALL <JMP.&MFC42.#2514>
00405724 . 8D4C24 74 LEA ECX,DWORD PTR SS:[ESP+74]
00405728 . C78424 C40A000>MOV DWORD PTR SS:[ESP+AC4],2
00405733 . E8 587B0000 CALL <JMP.&MFC42.#800>
00405738 . 8D4C24 70 LEA ECX,DWORD PTR SS:[ESP+70]
0040573C . C68424 C40A000>MOV BYTE PTR SS:[ESP+AC4],1
00405744 . E8 477B0000 CALL <JMP.&MFC42.#800>
00405749 . C78424 C40A000>MOV DWORD PTR SS:[ESP+AC4],-1
00405754 . 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00405758 . E9 5C010000 JMP ezConver.004058B9
0040575D > 8D4C24 08 LEA ECX,DWORD PTR SS:[ESP+8]
00405761 . E8 427B0000 CALL <JMP.&MFC42.#540>
00405766 . 8B8E C4010000 MOV ECX,DWORD PTR DS:[ESI+1C4]
0040576C . 8D5424 08 LEA EDX,DWORD PTR SS:[ESP+8]
00405770 . 51 PUSH ECX
00405771 . 68 92000000 PUSH 92
00405776 . 52 PUSH EDX
00405777 . C78424 D00A000>MOV DWORD PTR SS:[ESP+AD0],3
00405782 . E8 917D0000 CALL <JMP.&MFC42.#2817>
00405787 . 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]
0040578B . 83C4 0C ADD ESP,0C
0040578E . 57 PUSH EDI
0040578F . 57 PUSH EDI
00405790 . 50 PUSH EAX
00405791 . E8 7C7D0000 CALL <JMP.&MFC42.#1200> 未注册版本
00405796 . 8D4C24 08 LEA ECX,DWORD PTR SS:[ESP+8]
0040579A . C78424 C40A000>MOV DWORD PTR SS:[ESP+AC4],-1
004057A5 . E8 E67A0000 CALL <JMP.&MFC42.#800>
004057AA > 8BCE MOV ECX,ESI //注册正确从这进去
004057AC . E8 5F020000 CALL ezConver.00405A10
#include <stdio.h>
#include "iostream.h"
#include "windows.h"
#include "math.h"
void main( void )
{
char *s,buffer[200],ch;
s=new char[20];
cout<<"Ê&È&ÓÃ&§Ã&"<<endl;
gets(s);
double temp=0.0;
int i=0,len=-1;
CharUpper(s); //½&Ð&Ð&×&&&Î&&óÐ&
while (*(s+i)!=' ')
{
len++;ch=*(s+i);
if (i%3==0)
{
if((ch-5)>65) *(s+i)=*(s+i)-5;
else *(s+i)=*(s+i)+5;
}
if (i%3==1)
{
if ((ch+7)<90) {*(s+i)=*(s+i)+7;
}
else *(s+i)=*(s+i)-7;
}
if (i%3==2)
{
if ((ch-9)>65) { *(s+i)=*(s+i)-9;
}
else *(s+i)=*(s+i)+9;
}
i++;
}
i=0;
cout<<s<<endl;
while(*(s+i)!=' '&&i<len)
{
ch=*(s+i);
temp+=ch;
i++;
}
temp=sin(temp);
temp=cos(temp);
temp=sin(temp);
temp=cos(temp);
temp=sin(temp);
sprintf(buffer,"%1.14f
",temp);
for(i=0;i<len;i++)
s[i]=buffer[i+2]+65;
CharUpper(s);
cout<<"×&²áÂ&:";
cout<<s;
}
几组可用的注册码 tsinghua -----WZWUSVS
mejy12 -------WTRTV