Dr.com哆点客户端本地密码查看

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

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <basetsd.h>  
/************************************************************************/  
/* Dr.com Ver 5.2.0 配置文件解密 
/* By Douniwan5788@gmail.com 
/************************************************************************/  
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);  
    }  
  
}  


  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值