您的位置:首页精文荟萃破解文章 → Mview破解手记

Mview破解手记

时间:2004/10/15 1:00:00来源:本站整理作者:蓝点我要评论(0)

 mView是查看操作系统不能显示的光盘目录(ISO格式)。支持后缀名为FCD和VCD未压缩
虚拟光驱的境像文件和标准的ISO境像文件。适用于WIN95/WIN98/WINNT/WIN2000。
  它可以让您象资源管理器一样的操作被隐藏的文件和目录。能快速的读取文件和目录,
支持多种访问方式。它可以隐藏未压缩虚拟光驱的境像文件中的目录,当您插入虚拟光驱后
不可见,但可以正常的运行和在(MS-DOS下)访问。可保护您的数据。
  当然最实用的功能就是查看加密的光盘的内容,有一个ISOBuster软件虽然可以查看内容,
但是运行加密光盘上的文件时,必须复制到硬盘上,而此软件就没有这个必要,可以通过双击
文件在光盘上直接运行加密光盘上的文件,界面也类似于ISOBuster,非常好用。
  (一)用FI侦测Mview.exe是用Aspack1.07加的壳,用UnAspack脱壳,另存为Mview1.exe。
  (二)运行一遍,发现注册出错的信息为"The registration code error"。
  (三)用W32Dasm打开Mview1.exe。
  串式参考,反复双击发现有两处调用,而"Thank you for register mView,Good luck!"
估计为注册成功的信息,反复双击发现只有一处调用。
  (四)分析
:00403B1E 68C0B44400              push 0044B4C0
:00403B23 53                      push ebx
:00403B24 E8E4A40200              call 0042E00D
:00403B29 E83D000000              call 00403B6B ****关键CALL
:00403B2E 813D7009450095260000    cmp dword ptr [00450970], 00002695 ****判断
:00403B38 5F                      pop edi
:00403B39 5B                      pop ebx
:00403B3A 6AFF                    push FFFFFFFF
:00403B3C 7509                    jne 00403B47 ****不跳就死,一跳就出成功信息
:00403B3E 6A10                    push 00000010
* Possible Reference to String Resource ID=61719: "The registration code error!"
                                  | ****注册失败
:00403B40 6817F10000              push 0000F117
:00403B45 EB1D                    jmp 00403B64
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403B3C(C)
|
:00403B47 6A40                    push 00000040
* Possible Reference to String Resource ID=61720: "Thank you for register mView, Good luck!"
                                  | ****注册成功信息
:00403B49 6818F10000              push 0000F118
:00403B4E E874530200              call 00428EC7
:00403B53 8BCE                    mov ecx, esi
:00403B55 E855D40100              call 00420FAF
:00403B5A 5E                      pop esi
:00403B5B C3                      ret
  (五)用UltraEdit修改,将403B3C处改为强制跳转。
  (六)运行Mview1.exe,注册,显示成功。
  以为至此已破解完成,不料重新运行后还是未注册版本。只好从头来过,经过分析,发现程序将注册名
和注册码保存在注册表中(HKCU\Software\yANmVIEW\mView\OPTION),重新运行程序时(其实在注册时也是
一样),程序读取注册表,再进行判断。没办法,只好用TRW2000跟踪分析。
  (七)运行TRW2000,再运行Mview1.exe,进入注册窗口,填写注册码,不按"OK"按纽,按Ctrl+N进入
TRW2000环境,下万能中断(bpx hmemcpy),F5执行,按"OK"按纽,被截取,单步执行进行分析。
  具体的代码太多,不列出了。发现程序主要进行以下几步:先判断注册名和注册码是否为空,之后将注
册名和注册码写入注册表,接下来就到了上面列出的那部分代码,按F8追进CALL 403B6B,代码如下:
:00403B6B B8209E4300              mov eax, 00439E20
:00403B70 E8DBD30000              call 00410F50
:00403B75 83EC0C                  sub esp, 0000000C
:00403B78 A1F0BD4400              mov eax, dword ptr [0044BDF0]
:00403B7D 53                      push ebx
:00403B7E 56                      push esi
:00403B7F 57                      push edi
:00403B80 8945F0                  mov dword ptr [ebp-10], eax
:00403B83 33DB                    xor ebx, ebx
:00403B85 8945EC                  mov dword ptr [ebp-14], eax
:00403B88 895DFC                  mov dword ptr [ebp-04], ebx
:00403B8B 53                      push ebx
* Possible StringData Ref from Data Obj ->"OPTION"
                                  |
:00403B8C BFD4B34400              mov edi, 0044B3D4
* Possible StringData Ref from Data Obj ->"REGNAME" ****以下代码从注册表中读取注册名
                                  |
:00403B91 68A8B44400              push 0044B4A8
:00403B96 8D45E8                  lea eax, dword ptr [ebp-18]
:00403B99 BE90FE4400              mov esi, 0044FE90
:00403B9E 57                      push edi
:00403B9F 50                      push eax
:00403BA0 8BCE                    mov ecx, esi
:00403BA2 C645FC01                mov [ebp-04], 01
:00403BA6 E85C230300              call 00435F07
:00403BAB 50                      push eax
:00403BAC 8D4DF0                  lea ecx, dword ptr [ebp-10]
:00403BAF C645FC02                mov [ebp-04], 02
:00403BB3 E80AE00100              call 00421BC2
:00403BB8 8D4DE8                  lea ecx, dword ptr [ebp-18]
:00403BBB C645FC01                mov [ebp-04], 01
:00403BBF E8C5DE0100              call 00421A89
:00403BC4 53                      push ebx
* Possible StringData Ref from Data Obj ->"REGCODE" ****以下代码从注册表中读取输入的注册码
                                  |
:00403BC5 68C0B44400              push 0044B4C0
:00403BCA 8D45E8                  lea eax, dword ptr [ebp-18]
:00403BCD 57                      push edi
:00403BCE 50                      push eax
:00403BCF 8BCE                    mov ecx, esi
:00403BD1 E831230300              call 00435F07
:00403BD6 50                      push eax
:00403BD7 8D4DEC                  lea ecx, dword ptr [ebp-14]
:00403BDA C645FC03                mov [ebp-04], 03
:00403BDE E8DFDF0100              call 00421BC2
:00403BE3 8D4DE8                  lea ecx, dword ptr [ebp-18]
:00403BE6 C645FC01                mov [ebp-04], 01
:00403BEA E89ADE0100              call 00421A89
:00403BEF 8B45F0                  mov eax, dword ptr [ebp-10] ****EAX得到姓名地址13E4610
:00403BF2 3958F8                  cmp dword ptr [eax-08], ebx ****判断姓名是否为空(长度为0)
:00403BF5 7476                    je 00403C6D ****为0转403C6D,出错
:00403BF7 8B45EC                  mov eax, dword ptr [ebp-14] ****EAX得到注册码地址13E4660
:00403BFA 3958F8                  cmp dword ptr [eax-08], ebx ****判断注册码是否为空
:00403BFD 746E                    je 00403C6D ****为0转403C6D,出错
* Possible StringData Ref from Data Obj ->"                "
                                  |
:00403BFF 68C8B44400              push 0044B4C8
:00403C04 8D4DF0                  lea ecx, dword ptr [ebp-10] ****ECX为存放姓名地址的单元地址
:00403C07 E87FE10100              call 00421D8B
:00403C0C FF75EC                  push [ebp-14] ****将存放注册码的地址压栈
:00403C0F E85FD90000              call 00411573 ****关键,此处将注册码的10进制数转换为16进制数
:00403C14 8BF0                    mov esi, eax ****将换算过来的16进制数保存到ESI中,用于后面计算
:00403C16 59                      pop ecx
:00403C17 3BF3                    cmp esi, ebx ****判断注册码是否为0,为0则错误
:00403C19 7452                    je 00403C6D
* Possible Reference to Dialog: DialogID_0088, CONTROL_ID:0007, "&(&N)"
                                  |
:00403C1B 6A07                    push 00000007
:00403C1D 5F                      pop edi 给EDI赋值为7,用于后面参与运算时计数用
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403C51(C)
|
:00403C1E 8B45F0                  mov eax, dword ptr [ebp-10] ****程序核心开始,EAX为姓名地址
:00403C21 0FBE0407                movsx eax, byte ptr [edi+eax] ****al得到当前指向姓名的字符
:00403C25 50                      push eax ****注意:不管你输入几位,程序都将运算8次,
:00403C26 E895D80000              call 004114C0 ****不足位用20(空格)代替。下面一段主要用于
:00403C2B 85C0                    test eax, eax ****将小写字母转换为大写字母
:00403C2D 8B45F0                  mov eax, dword ptr [ebp-10]
:00403C30 59                      pop ecx
:00403C31 8A0407                  mov al, byte ptr [edi+eax]
:00403C34 7402                    je 00403C38
:00403C36 2C20                    sub al, 20
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403C34(C)
|
:00403C38 0FB6C0                  movzx eax, al ****得到转换后的数据(指小写转大写)
:00403C3B 2BF0                    sub esi, eax ****前面的ESI减EAX,也就是减去字母的ASCII码
:00403C3D 6A09                    push 00000009
:00403C3F 8BC6                    mov eax, esi ****EAX为ESI
:00403C41 33D2                    xor edx, edx ****EDX置0
:00403C43 59                      pop ecx ****ECX赋值为9
:00403C44 F7F1                    div ecx ****将EDX:EAX除9
:00403C46 85D2                    test edx, edx ****判断是否除尽
:00403C48 7509                    jne 00403C53 ****没有除尽则转向出错
:00403C4A 8BC6                    mov eax, esi
:00403C4C F7F1                    div ecx
:00403C4E 4F                      dec edi ****计数器减1
:00403C4F 8BF0                    mov esi, eax ****ESI得到除9的商
:00403C51 79CB                    jns 00403C1E ****继续循环做直至EDI为0
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403C48(C)
|
:00403C53 F7DE                    neg esi ****如果ESI为0则,取补码后CF=0,否则CF=1,导致下面出错
:00403C55 1BF6                    sbb esi, esi ****如果CF=1,则ESI=FFFFFFFF,否则ESI=0
:00403C57 6A01                    push 00000001 ****而ESI=FFFFFFFF则导致450970单元为2695,注册不成功
:00403C59 6681E682F4              and si, F482
:00403C5E 81C613320000            add esi, 00003213 ****强行修改处
:00403C64 893570094500            mov dword ptr [00450970], esi ****修改地址单位数据
:00403C6A 5E                      pop esi
:00403C6B EB02                    jmp 00403C6F
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00403BF5(C), :00403BFD(C), :00403C19(C)
|
:00403C6D 33F6                    xor esi, esi ****ESI置0
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403C6B(U)
|
:00403C6F 8D4DEC                  lea ecx, dword ptr [ebp-14]
:00403C72 885DFC                  mov byte ptr [ebp-04], bl
:00403C75 E80FDE0100              call 00421A89
:00403C7A 834DFCFF                or dword ptr [ebp-04], FFFFFFFF
:00403C7E 8D4DF0                  lea ecx, dword ptr [ebp-10]
:00403C81 E803DE0100              call 00421A89
:00403C86 8B4DF4                  mov ecx, dword ptr [ebp-0C]
:00403C89 8BC6                    mov eax, esi
:00403C8B 5F                      pop edi
:00403C8C 5E                      pop esi
:00403C8D 5B                      pop ebx
:00403C8E 64890D00000000          mov dword ptr fs:[00000000], ecx
:00403C95 C9                      leave
:00403C96 C3                      ret
  由于代码非常长,而且没有直接出现注册码,所以没办法了,只好进行爆破。由于注册成功与否,
主要是看地址00450970处的数据是否为2695(见403B2E),而修改此地址内容的代码在403C64,但直接
改此句不方便,而上一句对要放入此地址的ESI处理,所以改上一句,将与ESI运算的3213随便改一个数
据,保存。
  (八)运行修改后的Mview1.exe,发现不再出现那个讨厌的要求注册的窗口,通过关于菜单的注册
也是不论输入什么东西都可以成功。
  至此,破解完成。
附记(2001.10.14凌晨1时):
  由于强行破解存在一个问题,就是提示框内仍认为你是未注册的,所以始终觉得不是很舒服,再次
分析源代码,终于发现注册码的算法。具体说明见代码注释。
  根据分析可以发现注册码的算法如下:
  将注册名的ASCII码排序如下:A、B、C、D、E、F、G、H,如果不够8位,则后面补20(即空格)。
计算注册码的方法:((((((A*9+B)*9+C)*9+D)*9+E)*9+F)*9+G)*9+H。最后就是编写一个注册机了,由
于用VB最方便,就用它了。

    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程