龙族首届解密大赛答案之Ultra DVD Creator

本文详细介绍了解锁Ultra DVD Creator软件的过程,包括使用OllyICE等工具分析软件注册机制、找到正确的注册码算法及制作内存注册机的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载地址:
http://www.aone-media.com/ultra_dvdcreator.exe
功能介绍:--建立vcd,dvd,svd,实现磁盘烧录,以及格式转换。
Video Disc Creator
Create video VCD SVD DVD disc from AVI DivX XVid MPEG WMV ASF MOV RM MP4 FLV etc video files. So you can play it on your home DVD Player.
Video Disc Burner
Burn the exist DVD comaptible VOB, VCD compatible MPEG-1 or SVCD compatible MPEG-2 files to VCD/SVCD DVD disc
Mpeg File Converter
Converts the AVI DivX XviD MPG WMV ASF MOV RM MP4 FLV 3GP etc video files to DVD(VOB) or SVCD VCD compatible MPEG files, DVD-Video files, VCD SVCD BIN/CUE

破解思路:
明码比较,找到注册码的地方,实现内存注册机。
破解工具:
OllyICE,fi3.0
1.首先用fi查看是否加壳,并没有加壳,用ollyice加载程序,提示说可能已经被加壳。不用理会,跳过输入注册码的对话框。进入程序点击注册,在输入注册码的地方输入名字和
注册码12345678.程序本身限制最多输入8位。
2.在ollyice中设置弹出对话框的断点,点击注册。
3.拦截之后,来到user32.dll中,取消所以断点。返回到主程序段。
0045E33D /75 04 jnz short Ultra_DV.0045E343
0045E33F |33C9 xor ecx,ecx
0045E341 |EB 03 jmp short Ultra_DV.0045E346
0045E343 /8B4E 1C mov ecx,dword ptr ds:[esi+1C]
0045E346 FF7424 10 push dword ptr ss:[esp+10]
0045E34A 50 push eax
0045E34B FF7424 10 push dword ptr ss:[esp+10]
0045E34F 51 push ecx
0045E350 FF15 3CC64600 call dword ptr ds:[46C63C] ; USER32.MessageBoxA
0045E356 5E pop esi ; 0012F7F8
0045E357 C2 0C00 retn 0C---------------->返回到这里。
4.我们可以看到,继续返回到上一层调用。
00403E97 50 push eax
00403E98 51 push ecx
00403E99 E8 28090400 call Ultra_DV.004447C6 ; jmp to MBX@348@.appsys_check
00403E9E 83C4 08 add esp,8
00403EA1 85C0 test eax,eax----------------这里很关键
00403EA3 /75 2B jnz short Ultra_DV.00403ED0--------条件为真,就显示注册成功,否则显示sorry的对话框。
00403EA5 |6A 40 push 40
00403EA7 |68 B4DB4700 push Ultra_DV.0047DBB4 ; ASCII "Sorry"
00403EAC |68 8CDB4700 push Ultra_DV.0047DB8C ; ASCII "Invalid License Name or License Code"
00403EB1 |8BCB mov ecx,ebx
00403EB3 |E8 70A40500 call Ultra_DV.0045E328----------返回到这句
00403EB8 |68 F0030000 push 3F0
00403EBD |8BCB mov ecx,ebx
00403EBF |E8 2DB50500 call Ultra_DV.0045F3F1
00403EC4 |8BC8 mov ecx,eax
00403EC6 |E8 AFB70500 call Ultra_DV.0045F67A
00403ECB |E9 8C010000 jmp Ultra_DV.0040405C
00403ED0 /56 push esi
00403ED1 8D8F CC000000 lea ecx,dword ptr ds:[edi+CC]
00403ED7 C705 BC484800 01>mov dword ptr ds:[4848BC],1
00403EE1 E8 FEC00500 call Ultra_DV.0045FFE4
00403EE6 55 push ebp
00403EE7 8D8F C8000000 lea ecx,dword ptr ds:[edi+C8]
00403EED E8 F2C00500 call Ultra_DV.0045FFE4
00403EF2 8B06 mov eax,dword ptr ds:[esi]
00403EF4 50 push eax
00403EF5 8D8424 DC000000lea eax,dword ptr ss:[esp+DC]
00403EFC 68 64DB4700 push Ultra_DV.0047DB64 ; ASCII "Register successful! License to:%s. "
00403F01 50 push eax
00403F02 E8 04880400 call Ultra_DV.0044C70B
00403F07 83C4 0C add esp,0C
00403F0A 8D8C24 D8000000lea ecx,dword ptr ss:[esp+D8]
00403F11 6A 40 push 40
00403F13 68 58DB4700 push Ultra_DV.0047DB58 ; ASCII "Thank you"
00403F18 51 push ecx
00403F19 8BCB mov ecx,ebx
.....................
5.我们可以看到返回到这句:
00403EB3 E8 70A40500 call Ultra_DV.0045E328
在这句的上面有个jnz跳转语句 00403EA3 75 2B jnz short Ultra_DV.00403ED0
满足条件就跳过下面的语句,显然这里是判断注册码是否正确,如果没跳过,就显示sorry对话框。所以只要保证这里实现跳转,就注册成功。
00403EA7 68 B4DB4700 push Ultra_DV.0047DBB4 ; ASCII "Sorry"
00403EAC 68 8CDB4700 push Ultra_DV.0047DB8C ; ASCII "Invalid License Name or License Code"
6.我们往上看,在比较之前有个关键的call--00403E99 E8 28090400 call Ultra_DV.004447C6
00403E92 8B45 00 mov eax,dword ptr ss:[ebp]
00403E95 8B0E mov ecx,dword ptr ds:[esi]
00403E97 50 push eax-----------------------------这里下断点。
00403E98 51 push ecx
00403E99 E8 28090400 call Ultra_DV.004447C6 ; jmp to MBX@348@.appsys_check
00403E9E 83C4 08 add esp,8
00403EA1 85C0 test eax,eax
00403EA3 75 2B jnz short Ultra_DV.00403ED0

那么call之前的入栈的都是什么呢?这里00403E97 50 push eax下断点,从新开始。
我们发现入栈的是注册码和用户名。进入这个call Ultra_DV.004447C6 。。
因为这里是根据返回的eax的值来判断是否注册成功。所以注意eax的返回值。
7.进入call,因为判断返回eax是否为0,所以整个观察整体代码,会发现有2个地方返回eax的值。
一个是:
100019E0 B8 01000000 mov eax,1
100019E5 8B8C24 84030000mov ecx,dword ptr ss:[esp+384]
100019EC 64:890D 00000000 mov dword ptr fs:[0],ecx
100019F3 81C4 90030000 add esp,390
100019F9 C3 retn
另一个是:
10001A6A 33C0 xor eax,eax
10001A6C 64:890D 00000000 mov dword ptr fs:[0],ecx
10001A73 81C4 90030000 add esp,390
10001A79 C3 retn
8.只要保证能返回第一个eax=1就可以,所以看看是什么地方判断返回1或0.
可以看到下面10001963的call MBX@348@.10003A10是关键。
在这个call之前的push的地方下断点。
10001951 8B9424 B4030000mov edx,dword ptr ss:[esp+3B4]
10001958 8D8C24 94000000lea ecx,dword ptr ss:[esp+94]
1000195F 6A 08 push 8------这里下断点。
10001961 51 push ecx
10001962 52 push edx
10001963 E8 A8200000 call MBX@348@.10003A10---关键call
10001968 83C4 18 add esp,18
1000196B 85C0 test eax,eax
1000196D 5F pop edi
1000196E 5E pop esi
1000196F 5D pop ebp
10001970 5B pop ebx
10001971 0F85 83000000 jnz MBX@348@.100019FA
在call之前有2个值入栈,一个是输入的12345678,另外一个值也是8位,那么这里基本可以肯定就是正确的注册码。
返回到对话框中,输入入栈的另外一个值,注册成功。
需要注意的是这里得到的注册码的字母是区分大小写的。
到这里就找到了正确的注册码,制作内存注册机。

9.找到真正的注册码,就基本找到算法了,算法其实也很简单,这里不分析了。

下面的call是根据注册名算出注册码。
10001945 53 push ebx
10001946 68 04D10010 push MBX@348@.1000D104 ; ASCII "%08lX"
1000194B 50 push eax
1000194C E8 F7200000 call MBX@348@.10003A48
;执行完这里的call之后,注意栈中的第一个值,就是正确的注册码。
10001951 8B9424 B4030000mov edx,dword ptr ss:[esp+3B4]
10001958 8D8C24 94000000lea ecx,dword ptr ss:[esp+94]--------正确的注册码
1000195F 6A 08 push 8
10001961 51 push ecx--------正确的注册码
10001962 52 push edx--------错误的注册码
10001963 E8 A8200000 call MBX@348@.10003A10
10001968 83C4 18 add esp,18
1000196B 85C0 test eax,eax
1000196D 5F pop edi
1000196E 5E pop esi
1000196F 5D pop ebp
10001970 5B pop ebx
10001971 0F85 83000000 jnz MBX@348@.100019FA

使用keymake,制作注册机很简单,这里也不给出具体过程了。
上传内存注册机。---无法上传,被瑞星当病毒杀了!
10.这个很简单,判断注册是根据经验和多次下断点,大胆分析的结合。

版权声明:本文为博主原创文章,未经博主允许不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值