【破文标题】ImTOO DVD Ripper 2.0.52.630_分析
【破文作者】sailor
【软件名称】ImTOO DVD Ripper
【破解工具】OD等
【破解难度】简单
----------------------------------------------------
软件介绍:
    ImTOO DVD Ripper 有更多的功能设定,以及更方便简单的软件操作接口,能够将 DVD 影片光盘转换成 VCD、SVCD、DivX、MPEG、AVI。
功能方面,除了可以将 DVD 影片转换成高压缩比的高品质 DivX 编码的 AVI 影片外,还可以选择字幕语言或者无字幕、设定转出影片档的分片大小、设定影片为 PAL 或 NTSC 协议、选择音轨音量/频率/杜比环绕效果。

----------------------------------------------------
破解声名:
----------------------------------------------------
【破解分析】
    无壳
1、找注册失败的地方
0040A51B    .  83F8 27         CMP EAX,27                          ;  比较注册码是否有27h位,不是必死
0040A51E    .  0F85 D6050000   JNZ vconvert.0040AAFA
0040A524    .  68 D8BA4900     PUSH vconvert.0049BAD8              ;  ASCII "DVD Ripper"




0040AAFA    >  8D47 F0         LEA EAX,DWORD PTR DS:[EDI-10]       ;  试炼码没有27h位的话,到这里,下去后死
0040AAFD    .  C68424 C4000000>MOV BYTE PTR SS:[ESP+C4],1
0040AB05    .  8D48 0C         LEA ECX,DWORD PTR DS:[EAX+C]
0040AB08    .  8BD6            MOV EDX,ESI
0040AB0A    .  F0:0FC111       LOCK XADD DWORD PTR DS:[ECX],EDX    ;  LOCK 前缀
0040AB0E    .  4A              DEC EDX
0040AB0F    .  85D2            TEST EDX,EDX
0040AB11    .  7F 08           JG SHORT vconvert.0040AB1B
0040AB13    .  8B08            MOV ECX,DWORD PTR DS:[EAX]
0040AB15    .  8B11            MOV EDX,DWORD PTR DS:[ECX]
0040AB17    .  50              PUSH EAX
0040AB18    .  FF52 04         CALL DWORD PTR DS:[EDX+4]
0040AB1B    >  8B4424 1C       MOV EAX,DWORD PTR SS:[ESP+1C]
0040AB1F    .  83C0 F0         ADD EAX,-10
0040AB22    .  C68424 C4000000>MOV BYTE PTR SS:[ESP+C4],0
0040AB2A    .  8D48 0C         LEA ECX,DWORD PTR DS:[EAX+C]
0040AB2D    .  8BD6            MOV EDX,ESI
0040AB2F    .  F0:0FC111       LOCK XADD DWORD PTR DS:[ECX],EDX    ;  LOCK 前缀
0040AB33    .  4A              DEC EDX
0040AB34    .  85D2            TEST EDX,EDX
0040AB36    .  7F 08           JG SHORT vconvert.0040AB40
0040AB38    .  8B08            MOV ECX,DWORD PTR DS:[EAX]
0040AB3A    .  8B11            MOV EDX,DWORD PTR DS:[ECX]
0040AB3C    .  50              PUSH EAX
0040AB3D    .  FF52 04         CALL DWORD PTR DS:[EDX+4]
0040AB40    >  8D45 F0         LEA EAX,DWORD PTR SS:[EBP-10]
0040AB43    .  89B424 C4000000 MOV DWORD PTR SS:[ESP+C4],ESI
0040AB4A    .  8D48 0C         LEA ECX,DWORD PTR DS:[EAX+C]
0040AB4D    .  F0:0FC131       LOCK XADD DWORD PTR DS:[ECX],ESI    ;  LOCK 前缀
0040AB51    .  4E              DEC ESI
0040AB52    .  85F6            TEST ESI,ESI
0040AB54    .  7F 08           JG SHORT vconvert.0040AB5E
0040AB56    .  8B08            MOV ECX,DWORD PTR DS:[EAX]
0040AB58    .  8B11            MOV EDX,DWORD PTR DS:[ECX]
0040AB5A    .  50              PUSH EAX
0040AB5B    .  FF52 04         CALL DWORD PTR DS:[EDX+4]
0040AB5E    >  33C0            XOR EAX,EAX                         ;  注册失败标志
0040AB60    >  8B8C24 BC000000 MOV ECX,DWORD PTR SS:[ESP+BC]
0040AB67    .  5F              POP EDI


2、输入27h位试炼码后,一直走,好久,到了注册码比较的地方
0040A96A    .  E8 71E8FFFF     CALL vconvert.004091E0
0040A96F    .  8B7C24 20       MOV EDI,DWORD PTR SS:[ESP+20]       ;  edi=098765432109876543210987654321098765432
0040A973    .  8B7424 10       MOV ESI,DWORD PTR SS:[ESP+10]       ;  esi=098765432109876543218FA8-A380-36Bf-233A
0040A977    .  57              PUSH EDI
0040A978    .  56              PUSH ESI
0040A979    .  E8 74B30600     CALL vconvert.00475CF2              ;  比较试炼码和注册码
0040A97E    .  83C4 08         ADD ESP,8
0040A981    .  F7D8            NEG EAX
0040A983    .  1AC0            SBB AL,AL
0040A985    .  FEC0            INC AL
0040A987    .  0FB6D8          MOVZX EBX,AL                        ;  是否成功标志
0040A98A    .  8B4424 38       MOV EAX,DWORD PTR SS:[ESP+38]

注册码与试炼码前20位是一样的,后面19位有变化
往前找到内存中第一次出现类似8FA8-A380-36Bf-233A的地方

3、往前来到了
0040A7D0    .  8D8C24 84000000 LEA ECX,DWORD PTR SS:[ESP+84]
0040A7D7    .  E8 B4F10500     CALL vconvert.00469990              ;  重点,关键
0040A7DC    .  8D8C24 80000000 LEA ECX,DWORD PTR SS:[ESP+80]
0040A7E3    .  C68424 C4000000>MOV BYTE PTR SS:[ESP+C4],0D
0040A7EB    .  E8 F0F00500     CALL vconvert.004698E0              ;  eax=85f8af80a53180043c69bcf1283c3eac
0040A7F0    .  50              PUSH EAX                            ;  取出奇数位,再加上-,就是注册码了
0040A7F1    .  8D4C24 3C       LEA ECX,DWORD PTR SS:[ESP+3C]       ;  即8fa8a38036bf233a,再转为大写,再4位一组
0040A7F5    .  E8 0677FFFF     CALL vconvert.00401F00              ;  因此该CALL是关键(进去后发现不是)
0040A7FA    .  8D4C24 10       LEA ECX,DWORD PTR SS:[ESP+10]       ;  观察内存变化情况,发现前面那个CALL才是关键
0040A7FE    .  C68424 C4000000>MOV BYTE PTR SS:[ESP+C4],0E


4、同样原则,最终进入了关键计算处
004699FE   |.  8D7424 14       LEA ESI,DWORD PTR SS:[ESP+14]
00469A02   |.  BF 10000000     MOV EDI,10
00469A07   |>  0FB659 FF       MOVZX EBX,BYTE PTR DS:[ECX-1]             ;  [ecx-2]=31 44 01 44 03 52 05 70 07 65 09 56 02 20 04 69 06 70 08 72 0A
00469A0B   |.  33D2            XOR EDX,EDX                               ;  [ecx-1]=D1D3R5p7e9V2 4i6p8rA
00469A0D   |.  8A71 01         MOV DH,BYTE PTR DS:[ECX+1]
00469A10   |.  83C6 04         ADD ESI,4
00469A13   |.  83C1 04         ADD ECX,4
00469A16   |.  8A51 FC         MOV DL,BYTE PTR DS:[ECX-4]
00469A19   |.  C1E2 08         SHL EDX,8
00469A1C   |.  0BD3            OR EDX,EBX
00469A1E   |.  0FB659 FA       MOVZX EBX,BYTE PTR DS:[ECX-6]
00469A22   |.  C1E2 08         SHL EDX,8
00469A25   |.  0BD3            OR EDX,EBX
00469A27   |.  4F              DEC EDI
00469A28   |.  8956 FC         MOV DWORD PTR DS:[ESI-4],EDX
00469A2B   |.^ 75 DA           JNZ SHORT vconvert.00469A07               ;  下面开始计算注册码,参与计算的字符串由前20位试炼码与两个固定的字符串合成string1
00469A2D   |.  8B70 04         MOV ESI,DWORD PTR DS:[EAX+4]              ;  [eax]=01 23 45 67 89 AB CD EF FE DC BA 98 76 54 32 10
00469A30   |.  8B78 08         MOV EDI,DWORD PTR DS:[EAX+8]
00469A33   |.  8B50 0C         MOV EDX,DWORD PTR DS:[EAX+C]
00469A36   |.  8B00            MOV EAX,DWORD PTR DS:[EAX]
00469A38   |.  8B6C24 14       MOV EBP,DWORD PTR SS:[ESP+14]
/************************************************************/
省略近800条语句,其中没有另外调用任何函数
没错,吓死人。这么长!
不知是作者故意放有一部分垃圾代码还是其它原因,或真的有用
搞得这么“复杂”,却用了个明码比较:(
写注册机用其它语言,可够你累的
用汇编来写,轻松点
加上我自己的垃圾代码,竟然有1000多行,倒
挺佩服自己的,“开发”了一个这么复杂的“产品”
狂吐
/************************************************************/
0046A28B   |.  33F2            XOR ESI,EDX
0046A28D   |.  03F3            ADD ESI,EBX
0046A28F   |.  8D8C31 91D386EB LEA ECX,DWORD PTR DS:[ECX+ESI+EB86D391]
0046A296   |.  8B7424 58       MOV ESI,DWORD PTR SS:[ESP+58]
0046A29A   |.  8B1E            MOV EBX,DWORD PTR DS:[ESI]
0046A29C   |.  03C3            ADD EAX,EBX                               ;  注册码第一部分
0046A29E   |.  8906            MOV DWORD PTR DS:[ESI],EAX
0046A2A0   |.  8BC1            MOV EAX,ECX
0046A2A2   |.  8B5E 04         MOV EBX,DWORD PTR DS:[ESI+4]
0046A2A5   |.  C1E0 15         SHL EAX,15
0046A2A8   |.  C1E9 0B         SHR ECX,0B
0046A2AB   |.  0BC1            OR EAX,ECX
0046A2AD   |.  03C3            ADD EAX,EBX
0046A2AF   |.  03C7            ADD EAX,EDI                               ;  注册码第二部分
0046A2B1   |.  8946 04         MOV DWORD PTR DS:[ESI+4],EAX
0046A2B4   |.  8B46 08         MOV EAX,DWORD PTR DS:[ESI+8]
0046A2B7   |.  03C7            ADD EAX,EDI
0046A2B9   |.  8946 08         MOV DWORD PTR DS:[ESI+8],EAX              ;  注册码第三部分
0046A2BC   |.  8B46 0C         MOV EAX,DWORD PTR DS:[ESI+C]
0046A2BF   |.  5F              POP EDI
0046A2C0   |.  03C2            ADD EAX,EDX                               ;  注册码第四部分
0046A2C2   |.  8946 0C         MOV DWORD PTR DS:[ESI+C],EAX
0046A2C5   |.  5E              POP ESI
0046A2C6   |.  5D              POP EBP
0046A2C7   |.  5B              POP EBX
0046A2C8   |.  83C4 44         ADD ESP,44
0046A2CB   \.  C3              RETN

string1的内容
00126D2C  31 44 01 44 03 52 05 70 07 65 09 56 02 20 04 69  1DDRpe.V i
00126D3C  06 70 08 72 0A 30 30 30 39 38 37 36 35 34 33 32  pr.00098765432
00126D4C  31 30 39 38 37 36 35 34 33 32 31 44 56 44 20 52  10987654321DVD R
00126D5C  69 70 70 65 72 80 00 00 A8 01 00 00 00 00 00 00  ipper..?......


----------------------------------------------------
【总结】
注册码生成过程
1、注册码必须是27h(39)位
2、注册码与用户名无关
3、由任意前20位与DVD Ripper等组成字符串,再与0123456789ABCDEFFEDCBA9876543210计算出32位
4、取32位中的奇数位,分成4组,再用-连接,组成19位
5、加上试炼码20位,组成39位的注册码
----------------------------------------------------
【版权信息】

                                        

本代码的着色效果由xTiNt自动完成

  • 标 题: 答复
  • 作 者:cnbragon
  • 时 间:2005-07-04 14:06

MD5