您的位置:首页 > 编程语言 > Go语言

Password Algorithms: Cisco Unified Personal Communicator

2014-01-04 14:24 323 查看

PasswordAlgorithms:CiscoUnifiedPersonalCommunicator

密码算法:CiscoUnifiedPersonalCommunicator应用

原文链接:PasswordAlgorithms:CiscoUnifiedPersonalCommunicator

这个应用(CiscoUnifiedPersonalCommunicator)需要你在线花费一些时间才能获取到。因为思科阻止了一些下载,除非你符合几下几点:

·DirectCustomer

·Partner-Reseller

·ServiceContractOwners

·CCIEProfessional

·PICACustomer

即,

1,思科的直接用户

2,服务合同业主

3,CCIE专业人员

4,PICA客户

我已经在我的Windows7工作站上安装了它,因此下面的测试结果可能因为机器不同而有些不同。

默认情况下,用户名与密码字段下面有一个复选框,它可以设置允许自动登录功能。

如果设置了允许自动登录,那么应用会在下面的路径中建立一个DAT文件。

C:\Users\dietrich\AppData\Local\Cisco\UnifiedCommunications\ClientServicesFramework\Config\Profile

文件的名字将会由UuidCreate这个函数生成,文件内容采取Base64进行编码。一旦解码,它会转换成和DPAPI相关的二进制大对象(BLOB)。

0000000001000000d08c9ddf0115d1118c7a00c0....ð..¯..Ð..z.+

000000104fc297eb01000000574aacd0b966a54bO-.Ù....WJ¼ð¦fÑK

00000020b347a3ea3785af430000000032000000¦GúÛ7.»C....2...

0000003061007500740068005f00730076006e00a.u.t.h._.s.v.n.

000000402e00730069006d0070006c0065002e00..s.i.m.p.l.e...

00000050770069006e0063007200790070007400w.i.n.c.r.y.p.t.


上面这个BLOB中特别有趣的是,它描叙了一个字符串,“auth_svn.simple.wincrypt”

我最初以为这可能是一些库的一部分,并且足够的相信它就是的。更确切来说,就是LibSVN

下面,我使用相同的描述(密钥)来加密数据,这是我测试代码的一个片段

点击查看全部代码

/*-----------------------------------------------------------------------*/

/*Windowssimpleprovider,encryptsthepasswordonWin2kandlater.*/

/*-----------------------------------------------------------------------*/


/*Thedescriptionstringthat'scombinedwithunencrypteddatabythe

WindowsCryptoAPI.Usedduringdecryptiontoverifythatthe

encrypteddatawerevalid.*/


staticconstWCHARdescription[]=L"auth_svn.simple.wincrypt";


/*Implementationofsvn_auth__password_set_tthatencrypts

theincomingpasswordusingtheWindowsCryptoAPI.*/

staticsvn_boolean_t

windows_password_encrypter(apr_hash_t*creds,

constchar*realmstring,

constchar*username,

constchar*in,

apr_hash_t*parameters,

svn_boolean_tnon_interactive,

apr_pool_t*pool)

{

DATA_BLOBblobin;

DATA_BLOBblobout;

svn_boolean_tcrypted;


blobin.cbData=strlen(in);

blobin.pbData=(BYTE*)in;

crypted=CryptProtectData(&blobin,description,NULL,NULL,NULL,

CRYPTPROTECT_UI_FORBIDDEN,&blobout);

if(crypted)

{

char*coded=apr_palloc(pool,apr_base64_encode_len(blobout.cbData));

apr_base64_encode(coded,(constchar*)blobout.pbData,blobout.cbData);

crypted=svn_auth__simple_password_set(creds,realmstring,username,

coded,parameters,

non_interactive,pool);

LocalFree(blobout.pbData);

}

returncrypted;

}


相比写一个解密工具,我倒倾向于在调试器中输出由CryptUnprotectData返回的内容。

这是一个包含了明文凭据的XML文件,这正是PersonalCommunicator如何完成自动登录的。

<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?>

<UserCredentialDetails><profileName>Profile1</profileName>

<credentials><username>userid</username>

<password>password</password>

<credentialsType>PRESENCE_SERVICE</credentialsType>

<rememberMe>true</rememberMe>

</credentials>

</UserCredentialDetails>


当然,这其中可能存在多个配置文件,但是我并没有继续研究下去了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: