「独家首发」屏幕录像专家通用注册机及相关教程 | 支持新版本无限制激活!插图


最近我需要将后缀为exe的视频文件转换为mp4格式,以便上传至我的私人云。在经过一番搜索后,我确认了这些视频是由「屏幕录像专家」生成的,并且只能使用该软件进行转换。最终,我找到了一份可用的注册机,成功解决了软件生成的视频中的水印问题。本次也为大家分享注册机以及其使用教程。

注册及使用方法

首先我们下载该注册机,并将其完整保存。下载后请校验文件CRC,保证文件完整安全。

屏幕录像专家注册机 理论永久通杀

关注公众号「Hacker之家」不迷路,交流群聊「689155556 」

MD573ABDFF2627F8D632B158566FAB37316
SHA1B16C24F52A9300858FCA8747701279331AB86B1C
CRC32245ACC49
详细信息

校验文件MD5后,运行我们的注册机文件,如下图所示:

复制所需要的「机器码」「用户名」,点击注册按钮即可算号生成注册码

「独家首发」屏幕录像专家通用注册机及相关教程 | 支持新版本无限制激活!插图3

点击「确定」后,即可完成注册。注:若有能力,请支持正版哦!点我前去

算法分析

分享一下算法的主要分析过程

004A1126   .  33DB          xor ebx,ebx                                      ;  ebx = 0
004A1128   >  8B95 18FFFFFF mov edx,dword ptr ss:[ebp-0xE8]                  ;  do{
004A112E   .  0FBE06        movsx eax,byte ptr ds:[esi]                      ;  esi指向一个含有5个字符的字符串
004A1131   .  0FBE0A        movsx ecx,byte ptr ds:[edx]                      ;  edx指向一个含有20个字符的字符串
004A1134   .  83C1 EC       add ecx,-0x14                                    ;  ecx = ecx - 0x14
004A1137   .  3BC1          cmp eax,ecx
004A1139   .  0F85 80000000 jnz 屏录专家.004A11BF                                ;  if(eax == ecx)
004A113F   .  83FB 03       cmp ebx,0x3                                      ;  {
004A1142   .  75 6A         jnz X屏录专家.004A11AE                               ;      if(ebx == 3)
004A1144   .  81C7 444D0000 add edi,0x4D44                                   ;      {
004A114A   .  89BD A0F6FFFF mov dword ptr ss:[ebp-0x960],edi                 ;          edi = edi + 0x4d44
004A1150   .  DB85 A0F6FFFF fild dword ptr ss:[ebp-0x960]                    ;          st = edi * 3.14
004A1156   .  DC0D 58194A00 fmul qword ptr ds:[0x4A1958]                     ;          st = st * 0.1594896331738427110
004A115C   .  DB2D 60194A00 fld tbyte ptr ds:[0x4A1960]
004A1162   .  DEC9          fmulp st(1),st
004A1164   .  E8 5FCA1200   call 屏录专家.005CDBC8                               ;          eax = int(st)
004A1169   .  8BF8          mov edi,eax                                      ;          edi = eax
004A116B   .  8BC7          mov eax,edi
004A116D   .  B9 A0860100   mov ecx,0x186A0                                  ;          ecx = 0x186a0
004A1172   .  99            cdq
004A1173   .  F7F9          idiv ecx                                         ;          edx:eax = eax / ecx
004A1175   .  8BFA          mov edi,edx                                      ;  -        edi = edx
004A1177   .  33C0          xor eax,eax                                      ;          eax = 0
004A1179   .  8985 3CFFFFFF mov dword ptr ss:[ebp-0xC4],eax                  ;         [ebp - 0xc4] = 0
004A117F   .  33D2          xor edx,edx                                      ;          edx =0
004A1181   .  8D85 A4FEFFFF lea eax,dword ptr ss:[ebp-0x15C]
004A1187   >  0FBE08        movsx ecx,byte ptr ds:[eax]                      ;          把那20个字符的前19个累加到 [ebp - 0xc4]
004A118A   .  018D 3CFFFFFF add dword ptr ss:[ebp-0xC4],ecx
004A1190   .  42            inc edx
004A1191   .  40            inc eax
004A1192   .  83FA 13       cmp edx,0x13
004A1195   .^ 7C F0         jl X屏录专家.004A1187
004A1197   .  8B85 3CFFFFFF mov eax,dword ptr ss:[ebp-0xC4]                  ;          eax = [ebp - 0xc4]
004A119D   .  B9 0A000000   mov ecx,0xA                                      ;          ecx = 0xa
004A11A2   .  99            cdq
004A11A3   .  F7F9          idiv ecx                                         ;          edx:eax = eax / ecx
004A11A5   .  83C2 30       add edx,0x30                                     ;          edx = edx + 0x30
004A11A8   .  8995 3CFFFFFF mov dword ptr ss:[ebp-0xC4],edx                  ;          [ebp - 0xc4] = edx
004A11AE   >  43            inc ebx                                          ;      }
004A11AF   .  FF85 18FFFFFF inc dword ptr ss:[ebp-0xE8]
004A11B5   .  46            inc esi                                          ;  ebx++
004A11B6   .  83FB 05       cmp ebx,0x5                                      ;  esi++
004A11B9   .^ 0F8C 69FFFFFF jl 屏录专家.004A1128                                 ;  }while(ebx < 5)
004A11BF   >  83FB 05       cmp ebx,0x5
004A11C2   .  0F8C BE060000 jl 屏录专家.004A1886                                 ;  不能跳(跳转就失败)
004A11C8   .  0FBE85 B7FEFF>movsx eax,byte ptr ss:[ebp-0x149]                ;  看那20个字符的最后一个字符是不是等于[ebp - 0xc4]
004A11CF   .  3B85 3CFFFFFF cmp eax,dword ptr ss:[ebp-0xC4]
004A11D5   .  74 09         je X屏录专家.004A11E0                                ;  或者最后一个字符大于等于0x41
004A11D7   .  83F8 41       cmp eax,0x41
004A11DA   .  0F8C A6060000 jl 屏录专家.004A1886                                 ;  不能跳(跳转就失败)
004A11E0   >  8BC7          mov eax,edi                                      ;  eax = edi
004A11E2   .  B9 0A000000   mov ecx,0xA                                      ;  ecx = 0xa
004A11E7   .  99            cdq
004A11E8   .  F7F9          idiv ecx                                         ;  edx = eax % ecx
004A11EA   .  0FBE841D A4FE>movsx eax,byte ptr ss:[ebp+ebx-0x15C]            ;  eax = 第6个字符
004A11F2   .  83C0 BF       add eax,-0x41                                    ;  eax = eax - 0x41
004A11F5   .  2BC2          sub eax,edx                                      ;  eax = eax - edx
004A11F7   .  8985 40FFFFFF mov dword ptr ss:[ebp-0xC0],eax
004A11FD   .  83BD 40FFFFFF>cmp dword ptr ss:[ebp-0xC0],0x0                  ;  if(eax == 0   ||   eax == 9)
004A1204   .  74 0D         je X屏录专家.004A1213                                ;      成功
004A1206   .  83BD 40FFFFFF>cmp dword ptr ss:[ebp-0xC0],0x9                  ;  else
004A120D   .  0F85 EC050000 jnz 屏录专家.004A17FF                                ;      其跳转就失败
004A1213   >  66:C785 5CFFF>mov word ptr ss:[ebp-0xA4],0x104
004A121C   .  BA 5CCF6200   mov edx,屏录专家.0062CF5C
004A1221   .  8D45 B4       lea eax,dword ptr ss:[ebp-0x4C]
004A1224   .  E8 9B411300   call 屏录专家.005D53C4
004A1229   .  FF85 68FFFFFF inc dword ptr ss:[ebp-0x98]
004A122F   .  8B00          mov eax,dword ptr ds:[eax]
004A1231   .  E8 3E4B0E00   call 屏录专家.00585D74                               ;  成功

逆向算法代码

#include <iostream>
#include <Windows.h>
#include <time.h>
using namespace std;
int main()
{

	char st[21] = {0};						//用户名
	char jqm[21] = {0};						//机器码前20位
	cout<<"请输入你的用户名:";
	cin>>st;
	cout<<"请输入你的机器码的前20位:";		
	cin>>jqm;
	int q;

	q = jqm[2];
	jqm[2] = jqm[18];
	jqm[18] = q;
	
	q = jqm[4];
	jqm[4] = jqm[15];
	jqm[15] = q;


	q = jqm[8];
	jqm[8] = jqm[11];
	jqm[11] = q;
	while(1)
	{
	char mb[7] = {0};						//运算的出的字符串
	int eax_3;
	int edi_3 = 0;
	for(int i = 0; i < 20; i++)
	{
		eax_3 = st[i] ^ jqm[i];	
		eax_3 = eax_3 * i;
		eax_3 = eax_3 + edi_3;
		edi_3 = eax_3;
	}

	edi_3 = edi_3 + 0x3039;
	itoa(edi_3, mb, 10);					//mb=得到那5个秘钥字符,
	char str_z[51];							//存放真正的字符串
	

	char	str[51];				//序列号
	char	str1[6]  = {0};			//序列号后5个字符	
	int		esi = 0;
	int		eax = 0;
	int		ecx = 0;
	int		edi;
	int		arg_3 = 0x2D;			//序列号长度-5
	BYTE	dl;

	char* str2 = "1234567890"; 

	int edi_33 = edi_3;
	srand((unsigned int) time(0));
	while(1)
	{
	for(int i = 0; i < 5; i++)				//生成序列号前10个字符
		 itoa((mb[i] + 0x14 - 9 - ( 1/2 + i)), str_z + (i*2), 10);
	
	
	for(int i = 0; i <= 9; i++)
		str[i] = str_z[i];
	int eax_4;
	int ecx_4;
	int edx_4;
	edi_3 = edi_33;
	edi_3 = edi_3 + 0x4d44;
	eax_4 = int(edi_3 * 3.14 * 0.1594896331738427110);
			
	edi_3 = eax_4;
	ecx_4 = 0x186a0;
		
	edx_4 = eax_4 % ecx_4;
	itoa((edx_4 % 10 + 0x41 )- 9 - 11/2 + 9, str + 10, 10);

	for(int i = 12; i < 50; i++)
		str[i] = str2[rand() % 10];
	
	int g;										//交换						
	g = str[2];
	str[2] = str[38];
	str[38] = g;

	g = str[4];
	str[4] = str[25];
	str[25] = g;

	g = str[9];
	str[9] = str[31];
	str[31] = g;





	for(int i = 0; i <= 4; i++)
		str1[i] = str[45+i];
		esi = 0;
		eax = 0;
		ecx = 0;
	while(1)
	{
		if(ecx == 0xB26D)
		{
			edi = 0;
			while(edi < arg_3)
			{
				ecx++;
				dl = 0x80;
				do{
					BYTE ah;
					ah = WORD(eax) / 256;
					if(ah >= 0x80)
					{
						eax = eax + eax;
						WORD x = (WORD(eax) ^ 0x1021);
						eax = eax / 65536;
						eax = eax * 65536;
						eax = eax + x;
						ecx++;
					}
					else
						eax = eax + eax;
					ecx++;
					if(str[esi] & dl)
					{
						WORD x = ( WORD(eax) ^ 0x1021);
						eax = eax / 65536;
						eax = eax * 65536;
						eax = x + eax;
					}
					dl = dl / 2;
				}while(dl != 0);
				esi++;
				edi++;
			}
		}
		ecx++;
		if(ecx >= 0x186A0)
			break;
	}
	if(WORD(eax) == atof(str1))
		break;
	}




	int g;											//生成第11,12个字符
	char str_1[41] = {0};
	for(int i = 0; i <= 40; i++)
		str_1[i] = str[i];

	g = str_1[2];
	str_1[2] = str_1[38];
	str_1[38] = g;

	g = str_1[4];
	str_1[4] = str_1[25];
	str_1[25] = g;

	g = str_1[9];
	str_1[9] = str_1[31];
	str_1[31] = g;

	

	char str_2[21]	= {0};							//产生的那20个字符
	char str_3[3]	= {0};
	int zj = 0;
	int edx_1 = 0;
	int ebx_1 = 0;
	int eax_1 = 0;
	for(int i = 0; i < 40; i = i + 2)
	{
		ebx_1++;
		str_3[0] = str_1[i];
		str_3[1] = str_1[i+1];
		eax_1 = atof(str_3);
		edx_1 = ebx_1;
		edx_1 = edx_1 / 2;

		eax_1 = eax_1 + edx_1;
		eax_1 = eax_1 + 9;
		str_2[i/2] = eax_1;
		ebx_1++;
	}


	int zjz = 0;
	for(int i = 0; i < 19; i++)
		zjz = zjz + str_2[i];

	zjz = zjz % 10;
	zjz = zjz + 0x30;



	if(str_2[19] == zjz || str_2[19] >= 0x41)
	{
		cout<<"序列号为:";
		for(int i = 0; i<=49; i++)
			cout<<str[i];
		cout<<endl;
		break;
	}
	}
	return 0;
}