舞美播控软件破解 及 注册机实现
本帖最后由 wtujoxk 于 2020-4-12 10:59 编辑### 软件简介
IMoonBox适用于展示类文化宣传、3D影院、模拟互动、会议宣传、教育讲座、VR虚拟仿真等行业使用,支持4K超高清播放、多种加护接口、投多视频分层显示、任务编辑及预排等多项功能。
### 功能介绍
1、IMoonBox支持多种数字图片格式、视频格式与最新的电脑图像技术
2、可以创建多条时间先,所有内容可以预先根据顺序编排,让客户实现一键式操作
3、具有强大的播放功能,可以配合其他设备实现三维互动效果,可以提供非常新颖的特效
4、具有丰富的接口,在商业演出、产品发布会、摇滚音乐会、大型开幕式现场、展览馆、博物馆等广泛应用
### 破解分析
#### 查壳,无壳,C++程序
#### 载入OD分析,程序打开界面,需要输入序列号,输入假码,点击注册,弹出输入码不正确,请重新输入
#### 通过分析得知,程序加载了 LicVerify.dll 来验证序列号是否正确,在OD里选 e,双击 LicVerify.dll 加载进入OD
#### 在OD中搜索字符串,然后搜索验证码,就能看到验证码不正确,请重新输入
#### 加载后可看到如图(因为每次打开后都是不同的地址,在 03B860E9 E8 B2FAFFFF call LicVerif.03B85BA0 处下断)
#### 即在字符串上面第二个 call,上面序列号是取的16位
#### 通过分析后得知,序列号的生成是由申请码去掉“-”这个符号生成MD5(字符大写)+ 申请码得到的组合码
#### 组合码再生成MD5(字符大写),然后取组合码的MD5前16位,就得到了序列号,call 分析,可能有误
```
0F655BA0 6A FF push -0x1
0F655BA2 68 C181670F push LicVerif.0F6781C1
0F655BA7 64:A1 00000000mov eax,dword ptr fs:
0F655BAD 50 push eax
0F655BAE 81EC 90000000 sub esp,0x90
0F655BB4 A1 703B680F mov eax,dword ptr ds:
0F655BB9 33C4 xor eax,esp
0F655BBB 898424 8C000000 mov dword ptr ss:,eax
0F655BC2 53 push ebx
0F655BC3 56 push esi ; LicVerif.0F687B58
0F655BC4 A1 703B680F mov eax,dword ptr ds:
0F655BC9 33C4 xor eax,esp
0F655BCB 50 push eax
0F655BCC 8D8424 9C000000 lea eax,dword ptr ss:
0F655BD3 64:A3 00000000mov dword ptr fs:,eax
0F655BD9 8BF1 mov esi,ecx
0F655BDB 56 push esi ; LicVerif.0F687B58
0F655BDC 8D4C24 18 lea ecx,dword ptr ss:
0F655BE0 E8 FBDFFFFF call LicVerif.0F653BE0
0F655BE5 33DB xor ebx,ebx
0F655BE7 6A 7F push 0x7F
0F655BE9 8D4424 1D lea eax,dword ptr ss:
0F655BED 53 push ebx
0F655BEE 899C24 AC000000 mov dword ptr ss:,ebx
0F655BF5 50 push eax
0F655BF6 885C24 24 mov byte ptr ss:,bl
0F655BFA E8 71020100 call LicVerif.0F665E70
0F655BFF 8D5424 24 lea edx,dword ptr ss:
0F655C03 83C4 0C add esp,0xC
0F655C06 8BC6 mov eax,esi ; LicVerif.0F687B58
0F655C08 2BD6 sub edx,esi ; LicVerif.0F687B58
0F655C0A 8D9B 00000000 lea ebx,dword ptr ds:
0F655C10 8A08 mov cl,byte ptr ds: ; 读入申请码
0F655C12 880C02 mov byte ptr ds:,cl
0F655C15 40 inc eax
0F655C16 3ACB cmp cl,bl
0F655C18^ 75 F6 jnz short LicVerif.0F655C10
0F655C1A 8D4C24 18 lea ecx,dword ptr ss:
0F655C1E 51 push ecx
0F655C1F E8 ECE3FFFF call LicVerif.MD5String ; 将申请码生成MD5
0F655C24 83C4 04 add esp,0x4
0F655C27 50 push eax
0F655C28 8D4C24 14 lea ecx,dword ptr ss:
0F655C2C E8 AFDFFFFF call LicVerif.0F653BE0
0F655C31 C68424 A4000000>mov byte ptr ss:,0x1
0F655C39 8B5424 10 mov edx,dword ptr ss:
0F655C3D 8B72 F4 mov esi,dword ptr ds:
0F655C40 8B42 F8 mov eax,dword ptr ds:
0F655C43 B9 01000000 mov ecx,0x1
0F655C48 2B4A FC sub ecx,dword ptr ds:
0F655C4B 2BC6 sub eax,esi ; LicVerif.0F687B58
0F655C4D 0BC1 or eax,ecx
0F655C4F 7D 0E jge short LicVerif.0F655C5F
0F655C51 56 push esi ; LicVerif.0F687B58
0F655C52 8D4C24 14 lea ecx,dword ptr ss:
0F655C56 E8 D5D4FFFF call LicVerif.0F653130
0F655C5B 8B5424 10 mov edx,dword ptr ss:
0F655C5F 8D46 01 lea eax,dword ptr ds:
0F655C62 50 push eax
0F655C63 52 push edx
0F655C64 E8 CDF40000 call LicVerif.0F665136
0F655C69 50 push eax
0F655C6A E8 91E0FFFF call LicVerif.0F653D00
0F655C6F 83C4 0C add esp,0xC
0F655C72 3BF3 cmp esi,ebx
0F655C74 0F8C 05020000 jl LicVerif.0F655E7F
0F655C7A 8B4424 10 mov eax,dword ptr ss: ; MD5换成大写
0F655C7E 3B70 F8 cmp esi,dword ptr ds:
0F655C81 0F8F F8010000 jg LicVerif.0F655E7F
0F655C87 8970 F4 mov dword ptr ds:,esi ; LicVerif.0F687B58
0F655C8A 8B4C24 10 mov ecx,dword ptr ss:
0F655C8E 8D5424 14 lea edx,dword ptr ss:
0F655C92 52 push edx
0F655C93 8D4424 14 lea eax,dword ptr ss:
0F655C97 881C0E mov byte ptr ds:,bl
0F655C9A 50 push eax
0F655C9B 8D4C24 14 lea ecx,dword ptr ss:
0F655C9F 51 push ecx
0F655CA0 E8 7BDCFFFF call LicVerif.0F653920 ; 将申请码生成的MD5与申请码再次组合
0F655CA5 83C4 0C add esp,0xC
0F655CA8 C68424 A4000000>mov byte ptr ss:,0x2
0F655CB0 8B4424 0C mov eax,dword ptr ss: ; LicVerif.0F67D658
0F655CB4 8D5424 18 lea edx,dword ptr ss:
0F655CB8 2BD0 sub edx,eax
0F655CBA 8D9B 00000000 lea ebx,dword ptr ds:
0F655CC0 8A08 mov cl,byte ptr ds: ; 读入组合码
0F655CC2 880C02 mov byte ptr ds:,cl
0F655CC5 40 inc eax
0F655CC6 3ACB cmp cl,bl
0F655CC8^ 75 F6 jnz short LicVerif.0F655CC0
0F655CCA 8D5424 18 lea edx,dword ptr ss:
0F655CCE 52 push edx
0F655CCF E8 3CE3FFFF call LicVerif.MD5String ; 将组合码生成MD5 小写
0F655CD4 83C4 04 add esp,0x4
0F655CD7 3BC3 cmp eax,ebx
0F655CD9 75 04 jnz short LicVerif.0F655CDF
0F655CDB 33C9 xor ecx,ecx
0F655CDD EB 0E jmp short LicVerif.0F655CED
0F655CDF 8BC8 mov ecx,eax
0F655CE1 8D71 01 lea esi,dword ptr ds:
0F655CE4 8A11 mov dl,byte ptr ds: ; 读入组合码生成的MD5
0F655CE6 41 inc ecx
0F655CE7 3AD3 cmp dl,bl
0F655CE9^ 75 F9 jnz short LicVerif.0F655CE4
0F655CEB 2BCE sub ecx,esi ; LicVerif.0F687B58
0F655CED 51 push ecx
0F655CEE 50 push eax
0F655CEF 8D4C24 14 lea ecx,dword ptr ss:
0F655CF3 E8 28CDFFFF call LicVerif.0F652A20
0F655CF8 8B5424 0C mov edx,dword ptr ss: ; LicVerif.0F67D658
0F655CFC 8B72 F4 mov esi,dword ptr ds:
0F655CFF 8B42 F8 mov eax,dword ptr ds:
0F655D02 B9 01000000 mov ecx,0x1
0F655D07 2B4A FC sub ecx,dword ptr ds:
0F655D0A 2BC6 sub eax,esi ; LicVerif.0F687B58
0F655D0C 0BC1 or eax,ecx
0F655D0E 7D 0E jge short LicVerif.0F655D1E
0F655D10 56 push esi ; LicVerif.0F687B58
0F655D11 8D4C24 10 lea ecx,dword ptr ss:
0F655D15 E8 16D4FFFF call LicVerif.0F653130
0F655D1A 8B5424 0C mov edx,dword ptr ss: ; LicVerif.0F67D658
0F655D1E 8D46 01 lea eax,dword ptr ds:
0F655D21 50 push eax
0F655D22 52 push edx
0F655D23 E8 0EF40000 call LicVerif.0F665136
0F655D28 50 push eax
0F655D29 E8 D2DFFFFF call LicVerif.0F653D00
0F655D2E 83C4 0C add esp,0xC
0F655D31 3BF3 cmp esi,ebx
0F655D33 0F8C 46010000 jl LicVerif.0F655E7F
0F655D39 8B4424 0C mov eax,dword ptr ss: ; 组合码生成的MD5转成大写
0F655D3D 3B70 F8 cmp esi,dword ptr ds:
0F655D40 0F8F 39010000 jg LicVerif.0F655E7F
0F655D46 8970 F4 mov dword ptr ds:,esi ; LicVerif.0F687B58
0F655D49 8B4C24 0C mov ecx,dword ptr ss: ; LicVerif.0F67D658
0F655D4D 881C0E mov byte ptr ds:,bl
0F655D50 8B5424 0C mov edx,dword ptr ss: ; LicVerif.0F67D658
0F655D54 6A 10 push 0x10
0F655D56 52 push edx
0F655D57 57 push edi
0F655D58 E8 A5EF0100 call LicVerif.0F674D02
0F655D5D 83C4 0C add esp,0xC
0F655D60 83CA FF or edx,-0x1
0F655D63 C68424 A4000000>mov byte ptr ss:,0x1
0F655D6B 85C0 test eax,eax ; 组合码和假码比较
0F655D6D 8B4424 0C mov eax,dword ptr ss: ; LicVerif.0F67D658
0F655D71 0F85 96000000 jnz LicVerif.0F655E0D ; 爆破关键点不要实现
0F655D77 83C0 F0 add eax,-0x10
0F655D7A 8D48 0C lea ecx,dword ptr ds:
0F655D7D f0:0fc111 lock xadd dword ptr ds:,edx
0F655D81 4A dec edx
0F655D82 85D2 test edx,edx
0F655D84 7F 0A jg short LicVerif.0F655D90 ; 不实现
0F655D86 8B08 mov ecx,dword ptr ds:
0F655D88 8B11 mov edx,dword ptr ds:
0F655D8A 50 push eax
0F655D8B 8B42 04 mov eax,dword ptr ds:
0F655D8E FFD0 call eax
0F655D90 889C24 A4000000 mov byte ptr ss:,bl
0F655D97 8B4424 10 mov eax,dword ptr ss:
0F655D9B 83C0 F0 add eax,-0x10
0F655D9E 8D48 0C lea ecx,dword ptr ds:
0F655DA1 83CA FF or edx,-0x1
0F655DA4 f0:0fc111 lock xadd dword ptr ds:,edx
0F655DA8 4A dec edx
0F655DA9 85D2 test edx,edx
0F655DAB 7F 0A jg short LicVerif.0F655DB7 ; 不实现
0F655DAD 8B08 mov ecx,dword ptr ds:
0F655DAF 8B11 mov edx,dword ptr ds:
0F655DB1 50 push eax
0F655DB2 8B42 04 mov eax,dword ptr ds:
0F655DB5 FFD0 call eax
0F655DB7 C78424 A4000000>mov dword ptr ss:,-0x1
0F655DC2 8B4424 14 mov eax,dword ptr ss:
0F655DC6 83C0 F0 add eax,-0x10
0F655DC9 8D48 0C lea ecx,dword ptr ds:
0F655DCC 83CA FF or edx,-0x1
0F655DCF f0:0fc111 lock xadd dword ptr ds:,edx
0F655DD3 4A dec edx
0F655DD4 85D2 test edx,edx
0F655DD6 7F 0A jg short LicVerif.0F655DE2
0F655DD8 8B08 mov ecx,dword ptr ds:
0F655DDA 8B11 mov edx,dword ptr ds:
0F655DDC 50 push eax
0F655DDD 8B42 04 mov eax,dword ptr ds:
0F655DE0 FFD0 call eax
0F655DE2 B8 01000000 mov eax,0x1
0F655DE7 8B8C24 9C000000 mov ecx,dword ptr ss:
0F655DEE 64:890D 0000000>mov dword ptr fs:,ecx
0F655DF5 59 pop ecx ; LicVerif.0F6560EE
0F655DF6 5E pop esi ; LicVerif.0F6560EE
0F655DF7 5B pop ebx ; LicVerif.0F6560EE
0F655DF8 8B8C24 8C000000 mov ecx,dword ptr ss:
0F655DFF 33CC xor ecx,esp
0F655E01 E8 C8EB0000 call LicVerif.0F6649CE
0F655E06 81C4 9C000000 add esp,0x9C
0F655E0C C3 retn
```
#### 到这里分析就结束了
### 注册机编写,用的是C#语言,不提供注册机下载,只提供原理及代码。
```
private void button2_Click(object sender, EventArgs e)
{
string regCode = 申请码.Replace("-", ""); //去掉符号-
string serialNumber = GenerateMD5(regCode).ToUpper() + regCode;//生成MD5+申请号为组合码
序列号 = GenerateMD5(serialNumber).ToUpper().Substring(0,16);//将组合码生成MD5并转成大写取前16位
}
//生成MD5
public string GenerateMD5(string txt)
{
using (MD5 mi = MD5.Create())
{
byte[] buffer = Encoding.Default.GetBytes(txt);
//开始加密
byte[] newBuffer = mi.ComputeHash(buffer);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < newBuffer.Length; i++)
{
sb.Append(newBuffer.ToString("x2"));
}
return sb.ToString();
}
}
```
### 软件打开界面
--------------
--------------
## 第一次分析汇编并编写注册机,难免有很多错误,望指正!!!
准女婿 发表于 2020-2-22 21:09
Bata 1.0.1和1.0.0的算法区别在于Bata 1.0.1无需截取前16位
md5全写进去也没事,但是用的时候只用了前16位!例外有2.0版本么? 马克 发表于 2020-2-22 17:57
好东西,谁写个注册机放上来就更好了
其实就这个软件的算法来讲,无需写注册机都能算出来!就看你怎么用百度了! 楼主 ,下载链接了? shroer 发表于 2020-2-22 15:20
楼主 ,下载链接了?
百度搜一下,只能搜到这个版本! 最新版1.0.0.3 https://pc.qq.com/detail/3/detail_23083.html 注册机链接呢 我很喜欢这个帖子! 好东西,谁写个注册机放上来就更好了 太感谢楼主的好分享 我很喜欢这个帖子! 编写注册机的时候,应该说下函数意思吧!不然看不懂