奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 安全技术 >> 汉化破解 >> 音乐海盗 V1.32 的破解过程
安全技术
安全资讯
病毒预警
漏洞发布
安全教学
工具介绍
漏洞利用
病毒防范
入侵检测
防火墙
安全防范
汉化破解
攻击实例
加密解密
  • 完全破解灰鸽子成为会

  • 迅雷5.0.0.72 广告条移

  • 网页加密和破解篇

  • 破解QQ密码完全剖析

  • 免费在线电影破解((最

  • 汉化软件照样破

  • 实战破解交换机密码

  • QQ聊天霸王 V2.06 脱壳

  • 音乐海盗 V1.32 的破解过程
    字体:

    中华网络安全联盟    作者:佚名    来源:网络    时间:2006-3-19

    作者:未知 文章来源:看雪
    【破文作者】 rdsnow[BCG][PYG][D.4s]

    【作者主页】 http://rdsnow.ys168.com

    【 E-mail 】 rdsnow@163.com

    【 作者QQ 】 83757177

    【文章题目】 音乐海盗 V1.32 的注册

    【软件名称】 音乐海盗1.32

    【下载地址】 http://www.enowsoft.com/asp_7i24_co...reg_yyhd132.exe

    ----------------------------------------------------------------------------------------------
    【加密方式】 序列号

    【破解工具】 ODbyDYK v1.10[05.09]

    【软件限制】 功能限制

    【破解平台】 Microsoft Windows XP SP2

    ----------------------------------------------------------------------------------------------
    【软件简介】

    音乐海盗拥有五大功能:(1)在网上找歌听歌,下载歌曲,搜索mp3和歌词,功能强大齐全,曾把一个网友感动流泪;(2)可以在线播放几百个国内外网上电视,连接率95%以上,高速清晰,看过的人都说好;(3)上千部高速度高清晰电影,在线播放,还可以下载,并且不定期增加更多的影片,用过的人都说爽;(4)提供了数量众多的精彩绝伦的当今流行的MTV,既可以在线播放,也可以随意下载,而且还在不间断增加;(5)几千部各类精彩Flash,包你一次看个够,下载个够!

    【文章简介】

    呵呵,这个版本是一个注册用户发给我的下载地址,只有这个地址下载到的才是完整版,其他的都是试用版的。

    Microsoft Visual Basic 5.0 / 6.0,其他没有什么说的,原因是最近被壳搞得头大,来个简单的,全当灌水吧!高手勿进。

    ----------------------------------------------------------------------------------------------
    【破解过程】

    程序启动时会弹出一个输入对话框,让你输入注册码

    于是输入假码,命令行下断:bp rtcInputBox

    运行程序,中断,并返回到程序领空,来到这里:

    007C0E5F52PUSH EDX
    007C0E60FF15 88104000 CALL DWORD PTR DS:[〈&MSVBVM60.#596〉]; MSVBVM60.rtcInputBox
    007C0E668BD0MOV EDX,EAX
    007C0E688D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
    007C0E6BFFD3CALL EBX
    007C0E6D8D85 4CFFFFFF LEA EAX,DWORD PTR SS:[EBP-B4]
    007C0E7350PUSH EAX

    ………………
    省略中间一大段次要代码

    007C0EDB52PUSH EDX
    007C0EDC8D45 9C LEA EAX,DWORD PTR SS:[EBP-64]
    007C0EDF50PUSH EAX
    007C0EE0FFD3CALL EBX
    007C0EE28D4D AC LEA ECX,DWORD PTR SS:[EBP-54]
    007C0EE551PUSH ECX; 假注册码
    007C0EE68D55 9C LEA EDX,DWORD PTR SS:[EBP-64]
    007C0EE952PUSH EDX; 真注册码
    007C0EEAFF15 D4104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaVarTstEq〉] ; MSVBVM60.__vbaVarTstEq,真假注册码比较
    007C0EF066:8BD8 MOV BX,AX
    007C0EF38D45 9C LEA EAX,DWORD PTR SS:[EBP-64]
    007C0EF650PUSH EAX
    007C0EF78D4D AC LEA ECX,DWORD PTR SS:[EBP-54]
    007C0EFA51PUSH ECX
    007C0EFB6A 02 PUSH 2
    007C0EFDFFD7CALL EDI; MSVBVM60.__vbaFreeVarList
    007C0EFF83C4 0C ADD ESP,0C
    007C0F0266:85DB TEST BX,BX
    007C0F050F84 B0010000 JE 音乐海盗.007C10BB; 关键跳转
    007C0F0B8B55 E0 MOV EDX,DWORD PTR SS:[EBP-20]
    007C0F0E52PUSH EDX
    007C0F0F56PUSH ESI
    007C0F106A FF PUSH -1
    007C0F126A 02 PUSH 2
    007C0F14FF15 80114000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaFileOpen〉] ; MSVBVM60.__vbaFileOpen
    007C0F1A8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C]
    007C0F1D50PUSH EAX
    007C0F1E56PUSH ESI
    007C0F1F68 64F74000 PUSH 音乐海盗.0040F764
    007C0F24FF15 30114000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaPrintFile〉]; MSVBVM60.__vbaPrintFile
    007C0F2A83C4 0C ADD ESP,0C
    007C0F2D56PUSH ESI
    007C0F2EFF15 C0104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaFileClose〉]; MSVBVM60.__vbaFileClose
    007C0F34BA 08104100 MOV EDX,音乐海盗.00411008
    007C0F398D4D CC LEA ECX,DWORD PTR SS:[EBP-34]
    007C0F3CFF15 9C114000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaStrCopy〉]; MSVBVM60.__vbaStrCopy
    007C0F42B8 04000280 MOV EAX,80020004

    ……………………

    007C0F7C51PUSH ECX
    007C0F7D6A 40 PUSH 40
    007C0F7F8D95 3CFFFFFF LEA EDX,DWORD PTR SS:[EBP-C4]
    007C0F8552PUSH EDX; 注册成功的对话框
    007C0F86FF15 7C104000 CALL DWORD PTR DS:[〈&MSVBVM60.#595〉]; MSVBVM60.rtcMsgBox
    007C0F8C8D45 8C LEA EAX,DWORD PTR SS:[EBP-74]

    其实直接在__vbaVarTstEq上下断,就可以看到注册码了。


    不过瘾,那就继续分析程序的注册码是怎么形成的:

    程序在不同的电脑上有不同的注册码,可能跟硬盘序列号有关,于是命令行下断:bp GetVolumeInformationA

    中断后,来到这里:

    007BFD0B .50PUSH EAX
    007BFD0C .E8 BBF2C4FF CALL 音乐海盗.0040EFCC;读取程序所在分区的硬盘序列号

    偶的硬盘序号:80D252D7

    下面的注释中的数据是偶机器上得到的:

    007BFD11 .FF15 60104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaSetSystemErr〉;MSVBVM60.__vbaSetSystemError
    007BFD17 .8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C]
    007BFD1A .52PUSH EDX
    007BFD1B .8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
    007BFD1E .50PUSH EAX
    007BFD1F .FF15 2C114000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaStrToUnicode〉;MSVBVM60.__vbaStrToUnicode
    007BFD25 .8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
    007BFD28 .8B35 14124000 MOV ESI,DWORD PTR DS:[〈&MSVBVM60.__vbaFreeStr〉] ;MSVBVM60.__vbaFreeStr
    007BFD2E .FFD6CALL ESI;〈&MSVBVM60.__vbaFreeStr〉
    007BFD30 .6A 06 PUSH 6;堆栈中压入6
    007BFD32 .8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20]
    007BFD35 .51PUSH ECX;硬盘序号转换成10进制字符串得到"-2133699881"
    007BFD36 .FF15 18104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaStrI4〉];MSVBVM60.__vbaStrI4
    007BFD3C .8BD0MOV EDX,EAX
    007BFD3E .8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
    007BFD41 .8B3D F8114000 MOV EDI,DWORD PTR DS:[〈&MSVBVM60.__vbaStrMove〉] ;MSVBVM60.__vbaStrMove
    007BFD47 .FFD7CALL EDI;〈&MSVBVM60.__vbaStrMove〉
    007BFD49 .50PUSH EAX;上面堆栈中压入6,这里取硬盘序号的前6位"-21336"
    007BFD4A .FF15 E4114000 CALL DWORD PTR DS:[〈&MSVBVM60.#616〉];MSVBVM60.rtcLeftCharBstr
    007BFD50 .8BD0MOV EDX,EAX
    007BFD52 .8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
    007BFD55 .FFD7CALL EDI;〈&MSVBVM60.__vbaStrMove〉
    007BFD57 .8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
    007BFD5A .FFD6CALL ESI;〈&MSVBVM60.__vbaFreeStr〉
    007BFD5C .FF15 78104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaExitProc〉] ;MSVBVM60.__vbaExitProc
    007BFD62 .68 A7FD7B00 PUSH 音乐海盗.007BFDA7
    007BFD67 .EB 34 JMP SHORT 音乐海盗.007BFD9D
    007BFD69 .BA 14FF4000 MOV EDX,音乐海盗.0040FF14
    007BFD6E .8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
    007BFD71 .FF15 9C114000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaStrCopy〉];MSVBVM60.__vbaStrCopy
    007BFD77 .FF15 78104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaExitProc〉] ;MSVBVM60.__vbaExitProc
    007BFD7D .68 A7FD7B00 PUSH 音乐海盗.007BFDA7
    007BFD82 .EB 19 JMP SHORT 音乐海盗.007BFD9D
    007BFD84 .F645 F4 04TEST BYTE PTR SS:[EBP-C],4
    007BFD88 .74 09 JE SHORT 音乐海盗.007BFD93
    007BFD8A .8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
    007BFD8D .FF15 14124000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaFreeStr〉];MSVBVM60.__vbaFreeStr
    007BFD93 〉8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
    007BFD96 .FF15 14124000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaFreeStr〉];MSVBVM60.__vbaFreeStr
    007BFD9C .C3RETN
    007BFD9D 〉8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
    007BFDA0 .FF15 14124000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaFreeStr〉];MSVBVM60.__vbaFreeStr
    007BFDA6 .C3RETN

    这段代码是:取程序所在分区的序列号:80D2-52D7

    转为10进制字符串得到:"-2133699881"

    再取前6位得到:"-21336"

    跟出 RETN 继续对"-21336"处理:

    007C08F0 〉6A 01 PUSH 1;取出"-21336"的第一位"-"
    007C08F2 .8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C]
    007C08F5 .50PUSH EAX
    007C08F6 .8B3D E4114000 MOV EDI,DWORD PTR DS:[〈&MSVBVM60.#616〉] ;MSVBVM60.rtcLeftCharBstr
    007C08FC .FFD7CALL EDI;〈&MSVBVM60.#616〉
    007C08FE .8BD0MOV EDX,EAX
    007C0900 .8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
    007C0903 .FFD3CALL EBX
    007C0905 .50PUSH EAX
    007C0906 .68 84FA4000 PUSH 音乐海盗.0040FA84
    007C090B .FFD6CALL ESI;判断第一位是不是"-"
    007C090D .8BF0MOV ESI,EAX
    007C090F .F7DENEG ESI
    007C0911 .1BF6SBB ESI,ESI
    007C0913 .46INC ESI
    007C0914 .F7DENEG ESI
    007C0916 .8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
    007C0919 .FF15 14124000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaFreeStr〉];MSVBVM60.__vbaFreeStr
    007C091F .66:85F6 TEST SI,SI
    007C0922 .74 2F JE SHORT 音乐海盗.007C0953;不是"-"就跳走
    007C0924 .68 BC0F4100 PUSH 音乐海盗.00410FBC
    007C0929 .6A 05 PUSH 5;取后5位"21336"
    007C092B .8B4D D4 MOV ECX,DWORD PTR SS:[EBP-2C]
    007C092E .51PUSH ECX
    007C092F .FF15 F0114000 CALL DWORD PTR DS:[〈&MSVBVM60.#618〉];MSVBVM60.rtcRightCharBstr
    007C0935 .8BD0MOV EDX,EAX
    007C0937 .8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
    007C093A .FFD3CALL EBX
    007C093C .50PUSH EAX;"1"+后5位,得到"121336"
    007C093D .FF15 54104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaStrCat〉] ;MSVBVM60.__vbaStrCat
    007C0943 .8BD0MOV EDX,EAX
    007C0945 .8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
    007C0948 .FFD3CALL EBX
    007C094A .8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
    007C094D .FF15 14124000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaFreeStr〉];MSVBVM60.__vbaFreeStr

    这里就是如果硬盘序号是负数,那么就用"1"替换掉"-"号

    我电脑上得到的是"-21336"前面有"-"用"1"换掉,得到"121336"

    如果前面没有"-"则没有这个操作

    007C0953 〉6A 03 PUSH 3; 取"121336"的后三位"336"
    007C0955 .8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C]
    007C0958 .52PUSH EDX
    007C0959 .FF15 F0114000 CALL DWORD PTR DS:[〈&MSVBVM60.#618〉];MSVBVM60.rtcRightCharBstr
    007C095F .8BD0MOV EDX,EAX
    007C0961 .8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
    007C0964 .FFD3CALL EBX
    007C0966 .50PUSH EAX
    007C0967 .6A 03 PUSH 3;取"121336"的前三位"121"
    007C0969 .8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C]
    007C096C .50PUSH EAX
    007C096D .FFD7CALL EDI
    007C096F .8BD0MOV EDX,EAX
    007C0971 .8D4D C4 LEA ECX,DWORD PTR SS:[EBP-3C]
    007C0974 .FFD3CALL EBX
    007C0976 .50PUSH EAX;"336"+"121"="336121"
    007C0977 .FF15 54104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaStrCat〉] ;MSVBVM60.__vbaStrCat
    007C097D .8BD0MOV EDX,EAX
    007C097F .8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
    007C0982 .FFD3CALL EBX
    007C0984 .8D4D C4 LEA ECX,DWORD PTR SS:[EBP-3C]
    007C0987 .51PUSH ECX
    007C0988 .8D55 C8 LEA EDX,DWORD PTR SS:[EBP-38]
    007C098B .52PUSH EDX
    007C098C .6A 02 PUSH 2
    007C098E .FF15 A8114000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaFreeStrList〉〉;MSVBVM60.__vbaFreeStrList
    007C0994 .83C4 0C ADD ESP,0C
    007C0997 .8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
    007C099A .50PUSH EAX;字符串-〉整数,"336121"得到0x520F9
    007C099B .FF15 A0114000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaI4Str〉];MSVBVM60.__vbaI4Str
    007C09A1 .69C0 FE010000 IMUL EAX,EAX,1FE;0x520F9 × 0x1FE = 0xA37B00E
    007C09A7 .0F80 90080000 JO 音乐海盗.007C123D
    007C09AD .50PUSH EAX;再转为10进制字符串得到"171421710"
    007C09AE .FF15 18104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaStrI4〉];MSVBVM60.__vbaStrI4

    上面拿"121336"的前三位和后三位交换得到"336121"

    336121×510=171421710

    得到的"171421710"就是我机器上的注册码了。

    ----------------------------------------------------------------------------------------------
    【破解心得】

    个人觉得VB程序的流程中不断地在调用VB的函数库,只要熟悉一些常用的函数库,那么它的注册流程基本上就暴露出来的。

    中断地址:7C09B4
    中断次数:1
    第一字节:8B
    指令长度:2

    注册码保存为:内存方式
    寄存器:EAX

    记得选上:宽字符串

    算法比较简单,算法注册机懒得写了

    ----------------------------------------------------------------------------------------------
    【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)

    【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
    ----------------------------------------------------------------------------------------------
     文章写于2005-10-18 18:28:50
    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.