2010-01-22 3 views
0

특히 내가하려고하는 것은 원격 지원 티켓에 대한 PassStub 필드 생성입니다. 문제는 내 결과가 바이너리 데이터처럼 보이지만 어떻게 든 Microsoft는 인쇄 가능한 문자를 생성합니다. 에서 CryptoAPI를 사용하여 아스키 암호 텍스트 생성

[MS-RAI] : 원격 지원 개시 프로토콜 사양 < 16> 제 6 장 : Microsoft는 "PassStub"필드는 "MD5 해시 및 CALG_RC4는 RC4 스트림 암호화 알고리즘으로 PROV_RSA_FULL 미리 정의 된 암호화 공급자를 사용하여 암호화되어 있다고 말한다. " u0RIQibSMntm0wAHQZ2mhatI63sjMjX15kh/vnciytOix8z6w + 36B01OiJoB5uYe

I 전화 CryptEncrypt : http://msdn.microsoft.com/en-us/library/cc240189(PROT.10).aspx#id16

다이어그램이 닮은 "RA SessionID를"암호화되는 해시 암호를 보여준다

여기 데이터 흐름도가 결과는 SessionID 길이에 대한 2 진 데이터입니다.

HCRYPTPROV hCryptProv; 
HCRYPTKEY hKey; 
HCRYPTHASH hHash; 
BOOL bret=0; 

passwordlen = SysStringByteLen(L"password"); 
    char RASessionID[] = "u0RIQibSMntm0wAHQZ2mhatI63sjMjX15kh/vnciytOix8z6w+36B01OiJoB5uYe"; 

//---------------------------------------------------------------- 
// Acquire a cryptographic provider context handle. 
if(!CryptAcquireContext(&hCryptProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, 0)) 
{ 
    return FALSE; 
} 
//---------------------------------------------------------------- 
// Create an empty hash object. 
if(!CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash)) 
{ 
    return FALSE; 
} 
if(!CryptHashData(hHash, (BYTE *)bpassword, passwordlen, 0)) 
{ 
    return FALSE; 
} 

//---------------------------------------------------------------- 
// Create a session key based on the hash of the password. 
if(!CryptDeriveKey(hCryptProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey)) 
{ 
    return FALSE; 
} 

DWORD rasessionidlen = strlen(rasessionid); 
char* proxystub = (char*)malloc(rasessionidlen*2); 
strcpy(proxystub, rasessionid); 
bret = CryptEncrypt(hKey, NULL, TRUE, 0, (BYTE*)proxystub, &rasessionidlen, rasessionidlen*2); 
return bret; 

답변

1

은 "RA 세션 ID"는 base64-encoded처럼 보이는 : 여기

내가이 작업을 수행하는 데 사용할 노력하고있어 코드 "포^1BiNrHBvHGP"마이크로 소프트는 어떻게 든이 보이는 무언가를 가져옵니다. 내 생각 엔 패스 스텁이 base64로 인코딩 된 것입니다. - 예를 들면 : "Po^1BiNrHBvHGP"가 너무 짧고 ^가 들어 있습니다. 그게 진짜 예입니까?

CryptEncrypt에 피드를 보내기 전에 RA 세션 ID를 base64 디코딩해야 할 수도 있습니다.

+0

이 코드는 base64로 인코딩되어 있지만, 링크의 다이어그램에는 16 진수 인코딩 인 base-16 인코딩이 나와 있습니다. –

+0

Vista/Server 2008/Windows 7 다이어그램에서만 16 진수 인코딩을 볼 수 있습니다. RC4 대신에 AES를 사용하기 때문에 구현하려고하는 것이 아니라고 생각합니다. –

+0

예 ^가 그 일부입니다. 이것이 흥미 롭습니다. 원격 지원 티켓 파일을 작성한 후이 파일을 보면 내가 말하는 것을 볼 수 있습니다. –

관련 문제