【破文标题】Ease OGG TO RM Converter 2.70 算法分析
【破文作者】tianxj
【作者邮箱】tianxj_2007@126.com
【作者主页】WwW.ChiNaPYG.CoM
【破解工具】PEiD,OD
【破解平台】盗版Windows XP sp2
【软件名称】Ease OGG TO RM Converter 2.70  
【软件类别】音频转换  
【软件授权】共享版 
【运行环境】Win9x/Me/NT/2000/XP/2003  
【软件语言】英文  
【软件大小】5810KB  
【更新时间】2008-11-5  
【保护方式】注册码
【软件简介】Ease OGG TO RM Converter是一个音频转换工具。可批量转换直接播放RMVB,OGG支持RM, RMVB, OGG 格式之间转换。它建立一个小的ID3编辑器,您可以添加/编辑标题,艺术家,专辑,年份,流派,评论资料纳入档案您建立与小编辑。 
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
**************************************************************
一、运行程序,进行注册,输入错误的注册信息进行检测,有提示信息
"Invalid register code! Please retry!"
**************************************************************
二、用PEiD对OGG TO RM Converter.exe查壳,为 Borland Delphi 6.0 - 7.0
**************************************************************
三、运行OD,打开OGG TO RM Converter.exe,右键超级字串参考查找ASCII.
==============================================================

代码:
004AE83C  /.  55            PUSH EBP
004AE83D  |.  8BEC          MOV EBP,ESP
004AE83F  |.  33C9          XOR ECX,ECX
004AE841  |.  51            PUSH ECX
004AE842  |.  51            PUSH ECX
004AE843  |.  51            PUSH ECX
004AE844  |.  51            PUSH ECX
004AE845  |.  51            PUSH ECX
004AE846  |.  51            PUSH ECX
004AE847  |.  51            PUSH ECX
004AE848  |.  53            PUSH EBX
004AE849  |.  56            PUSH ESI
004AE84A  |.  57            PUSH EDI
004AE84B  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
004AE84E  |.  33C0          XOR EAX,EAX
004AE850  |.  55            PUSH EBP
004AE851  |.  68 65EA4A00   PUSH OGG_TO_R.004AEA65
004AE856  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
004AE859  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
004AE85C  |.  B3 01         MOV BL,1
004AE85E  |.  FF05 FC7D4B00 INC DWORD PTR DS:[4B7DFC]
004AE864  |.  833D FC7D4B00>CMP DWORD PTR DS:[4B7DFC],3
004AE86B  |.  7E 1D         JLE SHORT OGG_TO_R.004AE88A
004AE86D  |.  6A 00         PUSH 0                                   ; /Arg1 = 00000000
004AE86F  |.  66:8B0D 74EA4>MOV CX,WORD PTR DS:[4AEA74]              ; |
004AE876  |.  B2 02         MOV DL,2                                 ; |
004AE878  |.  B8 80EA4A00   MOV EAX,OGG_TO_R.004AEA80                ; |Invalid register code! Please retry!
004AE87D  |.  E8 4E74F8FF   CALL OGG_TO_R.00435CD0                   ; \OGG_TO_R.00435CD0
004AE882  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AE885  |.  E8 1221FDFF   CALL OGG_TO_R.0048099C
004AE88A  |>  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
004AE88D  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AE890  |.  8B80 10030000 MOV EAX,DWORD PTR DS:[EAX+310]
004AE896  |.  E8 C15BFBFF   CALL OGG_TO_R.0046445C
004AE89B  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  //用户名
004AE89E  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
004AE8A1  |.  E8 4EA0F5FF   CALL OGG_TO_R.004088F4
004AE8A6  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
004AE8A9  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
004AE8AC  |.  E8 77A0F5FF   CALL OGG_TO_R.00408928
004AE8B1  |.  8B55 EC       MOV EDX,DWORD PTR SS:[EBP-14]            ;  //用户名
004AE8B4  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
004AE8B7  |.  E8 345AF5FF   CALL OGG_TO_R.004042F0
004AE8BC  |.  BF 15000000   MOV EDI,15
004AE8C1  |.  BE F05E4B00   MOV ESI,OGG_TO_R.004B5EF0                ;  VS88T6-Vs6
004AE8C6  |>  8B45 F8       /MOV EAX,DWORD PTR SS:[EBP-8]            ;  //用户名
004AE8C9  |.  8B16          |MOV EDX,DWORD PTR DS:[ESI]
004AE8CB  |.  E8 945DF5FF   |CALL OGG_TO_R.00404664                  ;  //比较CALL
004AE8D0  |.  75 04         |JNZ SHORT OGG_TO_R.004AE8D6             ;  //不等则跳
004AE8D2  |.  33DB          |XOR EBX,EBX
004AE8D4  |.  EB 06         |JMP SHORT OGG_TO_R.004AE8DC
004AE8D6  |>  83C6 04       |ADD ESI,4
004AE8D9  |.  4F            |DEC EDI
004AE8DA  |.^ 75 EA         \JNZ SHORT OGG_TO_R.004AE8C6             ;  //循环,比较输入的用户名是否在内置的用户名库之中
004AE8DC  |>  84DB          TEST BL,BL
004AE8DE  |.  74 1A         JE SHORT OGG_TO_R.004AE8FA
004AE8E0  |.  6A 00         PUSH 0                                   ; /Arg1 = 00000000
004AE8E2  |.  66:8B0D 74EA4>MOV CX,WORD PTR DS:[4AEA74]              ; |
004AE8E9  |.  B2 02         MOV DL,2                                 ; |
004AE8EB  |.  B8 80EA4A00   MOV EAX,OGG_TO_R.004AEA80                ; |Invalid register code! Please retry!
004AE8F0  |.  E8 DB73F8FF   CALL OGG_TO_R.00435CD0                   ; \OGG_TO_R.00435CD0
004AE8F5  |.  E9 30010000   JMP OGG_TO_R.004AEA2A
004AE8FA  |>  8D55 E8       LEA EDX,DWORD PTR SS:[EBP-18]
004AE8FD  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AE900  |.  8B80 14030000 MOV EAX,DWORD PTR DS:[EAX+314]
004AE906  |.  E8 515BFBFF   CALL OGG_TO_R.0046445C
004AE90B  |.  8B45 E8       MOV EAX,DWORD PTR SS:[EBP-18]            ;  //试练码
004AE90E  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
004AE911  |.  E8 DE9FF5FF   CALL OGG_TO_R.004088F4
004AE916  |.  8D55 E4       LEA EDX,DWORD PTR SS:[EBP-1C]
004AE919  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
004AE91C  |.  E8 07A0F5FF   CALL OGG_TO_R.00408928
004AE921  |.  8B55 E4       MOV EDX,DWORD PTR SS:[EBP-1C]
004AE924  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
004AE927  |.  E8 C459F5FF   CALL OGG_TO_R.004042F0
004AE92C  |.  837D F8 00    CMP DWORD PTR SS:[EBP-8],0
004AE930  |.  0F84 F4000000 JE OGG_TO_R.004AEA2A                     ;  //用户名为空则跳
004AE936  |.  837D F4 00    CMP DWORD PTR SS:[EBP-C],0
004AE93A  |.  0F84 EA000000 JE OGG_TO_R.004AEA2A                     ;  //注册码为空则跳
004AE940  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
004AE943  |.  E8 D05BF5FF   CALL OGG_TO_R.00404518
004AE948  |.  85C0          TEST EAX,EAX
004AE94A  |.  7E 35         JLE SHORT OGG_TO_R.004AE981
004AE94C  |.  BA 01000000   MOV EDX,1
004AE951  |>  8B4D F4       /MOV ECX,DWORD PTR SS:[EBP-C]            ;  //试练码
004AE954  |.  0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:[ECX+EDX-1]       ;  //逐位取注册码ASCII码
004AE959  |.  83F9 30       |CMP ECX,30
004AE95C  |.  7C 05         |JL SHORT OGG_TO_R.004AE963              ;  //小于"0"则跳
004AE95E  |.  83F9 39       |CMP ECX,39
004AE961  |.  7E 1A         |JLE SHORT OGG_TO_R.004AE97D             ;  //小于等于"9"则跳
004AE963  |>  6A 00         |PUSH 0                                  ; /Arg1 = 00000000
004AE965  |.  66:8B0D 74EA4>|MOV CX,WORD PTR DS:[4AEA74]             ; |
004AE96C  |.  B2 02         |MOV DL,2                                ; |
004AE96E  |.  B8 80EA4A00   |MOV EAX,OGG_TO_R.004AEA80               ; |Invalid register code! Please retry!
004AE973  |.  E8 5873F8FF   |CALL OGG_TO_R.00435CD0                  ; \OGG_TO_R.00435CD0
004AE978  |.  E9 AD000000   |JMP OGG_TO_R.004AEA2A
004AE97D  |>  42            |INC EDX
004AE97E  |.  48            |DEC EAX
004AE97F  |.^ 75 D0         \JNZ SHORT OGG_TO_R.004AE951             ;  //循环,比较注册码里的字符是否全是数字
004AE981  |>  33DB          XOR EBX,EBX                              ;  //EBX=0
004AE983  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ;  //用户名
004AE986  |.  E8 8D5BF5FF   CALL OGG_TO_R.00404518
004AE98B  |.  85C0          TEST EAX,EAX
004AE98D  |.  7E 13         JLE SHORT OGG_TO_R.004AE9A2
004AE98F  |.  BF 01000000   MOV EDI,1
004AE994  |>  8B55 F8       /MOV EDX,DWORD PTR SS:[EBP-8]            ;  //用户名
004AE997  |.  0FB6543A FF   |MOVZX EDX,BYTE PTR DS:[EDX+EDI-1]       ;  //逐位取用户名ASCII码
004AE99C  |.  03DA          |ADD EBX,EDX                             ;  //EBX=EBX+EDX
004AE99E  |.  47            |INC EDI
004AE99F  |.  48            |DEC EAX
004AE9A0  |.^ 75 F2         \JNZ SHORT OGG_TO_R.004AE994             ;  //循环,累加用户名ASCII码
004AE9A2  |>  69C3 A3EF0700 IMUL EAX,EBX,7EFA3                       ;  //EAX=EBX*7EFA3
004AE9A8  |.  05 D5020000   ADD EAX,2D5                              ;  //EAX=EAX+2D5
004AE9AD  |.  D1F8          SAR EAX,1                                ;  //EAX右移1位
004AE9AF  |.  79 03         JNS SHORT OGG_TO_R.004AE9B4
004AE9B1  |.  83D0 00       ADC EAX,0
004AE9B4  |>  8BD8          MOV EBX,EAX                              ;  EBX=EAX
004AE9B6  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  //试练码
004AE9B9  |.  E8 F2A2F5FF   CALL OGG_TO_R.00408CB0                   ;  //试练码转16进制
004AE9BE  |.  3BD8          CMP EBX,EAX                              ;  //关键比较,真假码的16进制比较
004AE9C0  |.  75 53         JNZ SHORT OGG_TO_R.004AEA15              ;  //关键跳转
004AE9C2  |.  6A 00         PUSH 0                                   ; /Arg1 = 00000000
004AE9C4  |.  66:8B0D 74EA4>MOV CX,WORD PTR DS:[4AEA74]              ; |
004AE9CB  |.  B2 02         MOV DL,2                                 ; |
004AE9CD  |.  B8 B0EA4A00   MOV EAX,OGG_TO_R.004AEAB0                ; |Congratuation! You have successfully registered!
004AE9D2  |.  E8 F972F8FF   CALL OGG_TO_R.00435CD0                   ; \OGG_TO_R.00435CD0
004AE9D7  |.  A1 74624B00   MOV EAX,DWORD PTR DS:[4B6274]
004AE9DC  |.  C600 01       MOV BYTE PTR DS:[EAX],1
004AE9DF  |.  A1 88634B00   MOV EAX,DWORD PTR DS:[4B6388]
004AE9E4  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
004AE9E6  |.  33C9          XOR ECX,ECX
004AE9E8  |.  BA 04000000   MOV EDX,4
004AE9ED  |.  8B18          MOV EBX,DWORD PTR DS:[EAX]
004AE9EF  |.  FF53 14       CALL DWORD PTR DS:[EBX+14]
004AE9F2  |.  8B15 74624B00 MOV EDX,DWORD PTR DS:[4B6274]            ;  OGG_TO_R.004B81D4
004AE9F8  |.  A1 88634B00   MOV EAX,DWORD PTR DS:[4B6388]
004AE9FD  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
004AE9FF  |.  B9 01000000   MOV ECX,1
004AEA04  |.  E8 3B04F7FF   CALL OGG_TO_R.0041EE44
004AEA09  |.  A1 F87D4B00   MOV EAX,DWORD PTR DS:[4B7DF8]
004AEA0E  |.  E8 891FFDFF   CALL OGG_TO_R.0048099C
004AEA13  |.  EB 15         JMP SHORT OGG_TO_R.004AEA2A
004AEA15  |>  6A 00         PUSH 0                                   ; /Arg1 = 00000000
004AEA17  |.  66:8B0D 74EA4>MOV CX,WORD PTR DS:[4AEA74]              ; |
004AEA1E  |.  B2 02         MOV DL,2                                 ; |
004AEA20  |.  B8 80EA4A00   MOV EAX,OGG_TO_R.004AEA80                ; |Invalid register code! Please retry!
004AEA25  |.  E8 A672F8FF   CALL OGG_TO_R.00435CD0                   ; \OGG_TO_R.00435CD0
004AEA2A  |>  33C0          XOR EAX,EAX
004AEA2C  |.  5A            POP EDX
004AEA2D  |.  59            POP ECX
004AEA2E  |.  59            POP ECX
004AEA2F  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
004AEA32  |.  68 6CEA4A00   PUSH OGG_TO_R.004AEA6C
004AEA37  |>  8D45 E4       LEA EAX,DWORD PTR SS:[EBP-1C]
004AEA3A  |.  E8 1958F5FF   CALL OGG_TO_R.00404258
004AEA3F  |.  8D45 E8       LEA EAX,DWORD PTR SS:[EBP-18]
004AEA42  |.  E8 1158F5FF   CALL OGG_TO_R.00404258
004AEA47  |.  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
004AEA4A  |.  E8 0958F5FF   CALL OGG_TO_R.00404258
004AEA4F  |.  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
004AEA52  |.  E8 0158F5FF   CALL OGG_TO_R.00404258
004AEA57  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
004AEA5A  |.  BA 02000000   MOV EDX,2
004AEA5F  |.  E8 1858F5FF   CALL OGG_TO_R.0040427C
004AEA64  \.  C3            RETN
004AEA65   .^ E9 3251F5FF   JMP OGG_TO_R.00403B9C
004AEA6A   .^ EB CB         JMP SHORT OGG_TO_R.004AEA37
004AEA6C   .  5F            POP EDI
004AEA6D   .  5E            POP ESI
004AEA6E   .  5B            POP EBX
004AEA6F   .  8BE5          MOV ESP,EBP
004AEA71   .  5D            POP EBP
004AEA72   .  C3            RETN
==============================================================
内置的用户名
004AE694  56 53 38 38 54 36 2D 56 73 36 00 00 FF FF FF FF  VS88T6-Vs6..
004AE6A4  0A 00 00 00 54 56 36 53 50 36 2D 54 56 36 00 00  ....TV6SP6-TV6..
004AE6B4  FF FF FF FF 0A 00 00 00 53 31 52 39 50 36 2D 53  ....S1R9P6-S
004AE6C4  56 30 00 00 FF FF FF FF 0A 00 00 00 54 44 52 49  V0......TDRI
004AE6D4  70 36 2D 53 54 36 00 00 FF FF FF FF 0A 00 00 00  p6-ST6......
004AE6E4  54 44 52 36 54 55 2D 45 56 53 00 00 FF FF FF FF  TDR6TU-EVS..
004AE6F4  0A 00 00 00 54 44 52 55 70 36 2D 53 54 31 00 00  ....TDRUp6-ST1..
004AE704  FF FF FF FF 0A 00 00 00 54 73 66 48 70 36 2D 56  ....TsfHp6-V
004AE714  31 31 00 00 FF FF FF FF 0A 00 00 00 42 38 66 59  11......B8fY
004AE724  70 36 2D 56 49 31 00 00 FF FF FF FF 0A 00 00 00  p6-VI1......
004AE734  42 38 54 44 70 36 2D 56 50 31 00 00 FF FF FF FF  B8TDp6-VP1..
004AE744  0A 00 00 00 42 53 34 35 66 36 2D 50 42 31 00 00  ....BS45f6-PB1..
004AE754  FF FF FF FF 0A 00 00 00 4F 73 72 66 36 70 2D 56  ....Osrf6p-V
004AE764  4C 31 00 00 FF FF FF FF 0A 00 00 00 4F 66 72 51  L1......OfrQ
004AE774  70 36 2D 56 39 31 00 00 FF FF FF FF 0A 00 00 00  p6-V91......
004AE784  45 53 72 67 70 36 2D 37 37 31 00 00 FF FF FF FF  ESrgp6-771..
004AE794  0A 00 00 00 49 55 72 67 36 36 2D 56 50 37 00 00  ....IUrg66-VP7..
004AE7A4  FF FF FF FF 0A 00 00 00 49 55 44 4B 54 36 2D 42  ....IUDKT6-B
004AE7B4  58 31 00 00 FF FF FF FF 0A 00 00 00 44 55 49 48  X1......DUIH
004AE7C4  54 36 2D 74 56 31 00 00 FF FF FF FF 0A 00 00 00  T6-tV1......
004AE7D4  53 31 45 49 54 36 2D 44 56 31 00 00 FF FF FF FF  S1EIT6-DV1..
004AE7E4  09 00 00 00 53 4E 4D 53 36 2D 44 56 31 00 00 00  ....SNMS6-DV1...
004AE7F4  FF FF FF FF 0A 00 00 00 53 4E 57 49 53 36 2D 54  ....SNWIS6-T
004AE804  4E 31 00 00 FF FF FF FF 0A 00 00 00 53 4E 57 49  N1......SNWI
004AE814  53 36 2D 4D 4F 33 00 00 FF FF FF FF 0A 00 00 00  S6-MO3......
004AE824  54 44 56 54 53 36 2D 4D 4D 33 00 00 A1 F8 7D 4B  TDVTS6-MM3..▲}K
**************************************************************  
【破解总结】
--------------------------------------------------------------
【算法总结】
用户名必须是内置用户名中的一个,然后经过累加用户名ASC值,乘以7EFA3,加上2D5,右移1位后,与注册码16进制比较
--------------------------------------------------------------
【算法注册机】
〖易语言代码〗
代码:
.版本 2

.子程序 _按钮1_被单击
.局部变量 Name, 文本型, , "21"
.局部变量 Code, 文本型
.局部变量 x, 整数型
.局部变量 y, 整数型
.局部变量 i, 整数型
.局部变量 n, 整数型

置随机数种子 ()
n = 取随机数 (1, 21)
Name [1] = “VS88T6-Vs6”
Name [2] = “TV6SP6-TV6”
Name [3] = “S1R9P6-SV0”
Name [4] = “TDRIp6-ST6”
Name [5] = “TDR6TU-EVS”
Name [6] = “TDRUp6-ST1”
Name [7] = “TsfHp6-V11”
Name [8] = “B8fYp6-VI1”
Name [9] = “B8TDp6-VP1”
Name [10] = “BS45f6-PB1”
Name [11] = “Osrf6p-VL1”
Name [12] = “OfrQp6-V91”
Name [13] = “ESrgp6-771”
Name [14] = “IUrg66-VP7”
Name [15] = “IUDKT6-BX1”
Name [16] = “DUIHT6-tV1”
Name [17] = “S1EIT6-DV1”
Name [18] = “SNMS6-DV1”
Name [19] = “SNWIS6-TN1”
Name [20] = “SNWIS6-MO3”
Name [21] = “TDVTS6-MM3”
编辑框1.内容 = Name [n]
x = 0
.计次循环首 (取文本长度 (编辑框1.内容), i)
    x = x + 取代码 (编辑框1.内容, i)
.计次循环尾 ()
y = 右移 (x × 十六进制到十进制 (“7EFA3”) + 十六进制到十进制 (“2D5”), 1)
编辑框2.内容 = 到文本 (y)


.子程序 十六进制到十进制, 整数型
.参数 十六进制文本, 文本型
.局部变量 文本, 文本型
.局部变量 最终值, 整数型
.局部变量 i, 整数型, , , 中间循环变量
.局部变量 临时数值, 文本型, , , 每一位上的值

文本 = 到小写 (十六进制文本)
.变量循环首 (1, 取文本长度 (文本), 1, i)
    临时数值 = 取文本中间 (文本, i, 1)
    .如果 (取代码 (临时数值, ) ≥ 取代码 (“a”, ) 且 取代码 (临时数值, ) ≤ 取代码 (“f”, ))
        最终值 = 最终值 + (取代码 (临时数值, ) - 取代码 (“a”, ) + 10) × 求次方 (16, 取文本长度 (文本) - i)
    .否则
        最终值 = 最终值 + 到数值 (临时数值) × 求次方 (16, 取文本长度 (文本) - i)
    .如果结束

.变量循环尾 ()
返回 (最终值)
--------------------------------------------------------------
感谢飘云老大、猫老大、Nisy老大以及很多前辈们的学习教程以及徐超等所有帮助过我的论坛兄弟姐妹们!谢谢
--------------------------------------------------------------
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

     _/_/_/   _/   _/   _/_/_/ 
    _/   _/  _/  _/    _/       
   _/_/_/    _/_/     _/_/_/_/ 
  _/         _/      _/    _/
 _/         _/      _/_/_/ _/    tianxj