首页
课程
问答
CTF
社区
招聘
看雪峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
看雪峰会
看雪商城
证书查询
社区
软件逆向
发新帖
0
7
[原创]音乐海盗 V1.32 的注册
发表于: 2005-10-26 07:17
9789
[原创]音乐海盗 V1.32 的注册
wenglingok
26
2005-10-26 07:17
9789
【破文作者】 rdsnow[BCG][PYG][D.4s]
【作者主页】
http://rdsnow.ys168.com
【 E-mail 】 [email]rdsnow@163.com[/email]
【 作者QQ 】 83757177
【文章题目】 音乐海盗 V1.32 的注册
【软件名称】 音乐海盗1.32
【下载地址】
http://www.enowsoft.com/asp_7i24_com/enowsoft/reg_yyhd/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
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
收藏
・
0
免费
・
7
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
飘零丶
为你点赞~
2023-10-25 00:32
Youlor
为你点赞~
2023-7-19 00:04
伟叔叔
为你点赞~
2023-4-20 00:05
心游尘世外
为你点赞~
2023-4-8 00:45
一笑人间万事
为你点赞~
2023-4-6 00:59
QinBeast
为你点赞~
2023-3-20 02:42
shinratensei
为你点赞~
2023-3-20 02:42
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
最新回复
(
11
)
pendan2001
雪 币:
61
活跃值:
(160)
能力值:
( LV9,RANK:170 )
在线值:
发帖
25
回帖
1180
粉丝
0
关注
私信
pendan2001
4
2
楼
2005-10-26 07:39
0
lnn1123
雪 币:
234
活跃值:
(370)
能力值:
( LV9,RANK:530 )
在线值:
发帖
39
回帖
765
粉丝
0
关注
私信
lnn1123
13
3
楼
2005-10-26 12:29
0
hbqjxhw
雪 币:
313
活跃值:
(250)
能力值:
( LV9,RANK:650 )
在线值:
发帖
44
回帖
311
粉丝
0
关注
私信
hbqjxhw
16
4
楼
先收藏,再支持多谢多谢
2005-10-26 12:29
0
冷血书生
雪 币:
443
活跃值:
(200)
能力值:
( LV9,RANK:1140 )
在线值:
发帖
53
回帖
1135
粉丝
2
关注
私信
冷血书生
28
5
楼
强!!
收藏下来慢慢啃!!!
2005-10-27 10:03
0
wrong
雪 币:
200
活跃值:
(22)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
6
粉丝
0
关注
私信
wrong
6
楼
好文呀,现在是1.38了,不知好破不?
2005-10-27 10:16
0
ljy3282393
雪 币:
214
活跃值:
(15)
能力值:
( LV4,RANK:50 )
在线值:
发帖
2
回帖
426
粉丝
1
关注
私信
ljy3282393
1
7
楼
先收藏,再支持
2005-10-27 13:13
0
laofy
雪 币:
206
活跃值:
(26)
能力值:
( LV2,RANK:10 )
在线值:
发帖
7
回帖
35
粉丝
0
关注
私信
laofy
8
楼
很详细,谢谢楼主。努力学习ing
2005-10-27 15:02
0
ww990
雪 币:
217
活跃值:
(81)
能力值:
( LV4,RANK:50 )
在线值:
发帖
19
回帖
285
粉丝
0
关注
私信
ww990
1
9
楼
不用realplay就是不行
2005-10-27 15:08
0
frip
雪 币:
215
活跃值:
(27)
能力值:
( LV2,RANK:10 )
在线值:
发帖
2
回帖
60
粉丝
0
关注
私信
frip
10
楼
学习; 了
2005-10-27 15:09
0
wuxch
雪 币:
200
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
6
粉丝
0
关注
私信
wuxch
11
楼
适合我这样水平的人
2005-11-22 23:50
0
疯狂菜鸟
雪 币:
0
能力值:
(RANK:10 )
在线值:
发帖
48
回帖
410
粉丝
0
关注
私信
疯狂菜鸟
12
楼
请问
记得选上:宽字符串
什么时候要选 记得选上:宽字符串
什么时候不选?有什么依据?
2006-12-30 21:03
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
wenglingok
26
52
发帖
679
回帖
1060
RANK
关注
私信
他的文章
[原创]Python模拟登陆某网教师教育网
7017
[原创]**阅卷系统 V8.1 寻找暗桩
6098
[原创]Vista 的扫雷
22161
[原创]简单RSA128的笔记
11616
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
返回
顶部