Dr.com 新版 Ver 5.2.0 本地 密码 读取 查看 破解

旧版的保存在C:/WINDOWS/system32/micsystem.bin下,读取工具网上搜一下就好了


新版的账号和密码保存在 C:\Drcom\DrUpdateClient\config 中,不过是加密的,看网上没什么信息就跟了一下。


点此下载可执行文件

代码如下:

 

#include 
#include 
#include 
#include 
/************************************************************************/
/* Dr.com Ver 5.2.0 配置文件解密
/* By [email protected]
/************************************************************************/
void decrypt(UINT32 data1,UINT32 data2, UINT32 key1, UINT32 key2, UINT32 key3, UINT32 key4,PUINT32 value1,PUINT32 value2)
{
	__asm{
			MOV		ECX, data1
			MOV		EAX, data2
			MOV     EDX, 0xC6EF3720	;  const
			MOV     ESI, 0x20
_decrypt_start:
			MOV     EDI, ECX
			SAR     EDI, 5
			ADD     EDI, key4	;  key4
			MOV     EBX, ECX
			SHL     EBX, 4
			ADD     EBX, key3	;  key3
			SUB     ESI, 1
			XOR     EDI, EBX
			LEA     EBX, DWORD PTR DS:[EDX+ECX]	;  ebx = edx+ecx
			XOR     EDI, EBX
			SUB     EAX, EDI
			MOV     EDI, EAX
			SAR     EDI, 5
			ADD     EDI, key2	;  key2
			MOV     EBX, EAX
			SHL     EBX, 4
			ADD     EBX, key1	;  key1
			XOR     EDI, EBX
			LEA     EBX, DWORD PTR DS:[EDX+EAX]
			XOR     EDI, EBX
			SUB     ECX, EDI
			ADD     EDX, 0x61C88647
			TEST    ESI, ESI
			JG      _decrypt_start
			MOV		data1,ECX
			MOV		data2,EAX
	};
	*value1 = data1;
	*value2 = data2;
}

struct key_file{
	char filename[256];
	char key[32];
};

int  main(int   argc,   char*   argv[])
{
	key_file kf[]={
		{"config","3J21d456j87jIOJ9"},			//账号密码
		{"DrConfigure","DrConfigure"},			//配置
		{"DrClient.gb","DrClient_Dict"},		//中文语言资源
		{"DrClient.en","DrClient_Dict"},		//英文语言资源
		{"DrLinkConfigure","DrConfigure"},	//who cares
	};
	char path[256]={"C:\\Drcom\\DrUpdateClient\\"};
	char strbuf[256];
	UINT32 keys[4],dec_data1,dec_data2,enc_data[3];	//extra 1 for scanf

	for(key_file *pkf = kf; pkf - kf < sizeof(kf)/sizeof(key_file); pkf++){
		for (int i = 0; i < 4; ++i)
		{
			memcpy(&keys[i],pkf->key + 4*i,4);
		}

		FILE *fpIn = fopen(pkf->filename,"r");
		if (!fpIn)
		{
			sprintf_s(strbuf,sizeof(strbuf),"%s%s",path,pkf->filename);
			fpIn = fopen(strbuf,"r");
			if (!fpIn)
			{
				printf("File not found, skip %s\n",pkf->filename);
				continue;
			}
		}

		sprintf_s(strbuf,sizeof(strbuf),"Decrypt_%s.txt",pkf->filename);
		FILE *fpOut = fopen(strbuf,"wb");
		if (!fpOut)
		{
			printf("Can't write %s! Skip!\n",strbuf);
			continue;
		}
		//fwrite("\xff\xfe",2,1,fpOut);

		while (1){
			for (int i = 0 ;i < 8;++i)
			{
				if (fscanf_s(fpIn,"%02x",&((char *)enc_data)[i]) <= 0)
				{
					goto end;
				}
			}
			//printf("%08X %08X",enc_data[0],enc_data[1]);
			decrypt(enc_data[0],enc_data[1],keys[0],keys[1],keys[2],keys[3],&dec_data1,&dec_data2);
			fwrite(&dec_data1,4,1,fpOut);
			fwrite(&dec_data2,4,1,fpOut);
		}
end:
		fclose(fpIn);
		fclose(fpOut);
		printf("%s decrypt to %s finished\n",pkf->filename,strbuf);
	}

}

你可能感兴趣的:(脱壳,破解,乱七八糟,jdrcom)