飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 12012|回复: 20

[C/C++] 过腾讯TP保护每个细节分析研究

[复制链接]
  • TA的每日心情
    开心
    2022-12-1 14:03
  • 签到天数: 49 天

    [LV.5]常住居民I

    发表于 2016-4-13 12:46:59 | 显示全部楼层 |阅读模式
    看懂以下我的分析笔记内容,最好要懂C/c++ 还有windbug 一些基本的,

    过 NtOpenProcess 函数:
    其实这个函数TP只hook了一个地方,只是有的人对比的数据太多了,
    超出了NtOpenProcess的范围,找到函数的结尾可以计算出它只有0x283个字节,因此只要对比0x283个字节的数据即可,
    通过对比只有一处被TP给HOOK了:
    file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image029.gif

    可以看到向上回溯两层就是一个导出函数NtDebugActiveProcess ,而这个函数的地址前面已经得到,直接拿来用即可。我们要处理的层次关系为:
    NtDebugActiveProcess->DbgkpPostFakeProcessCreateMessages->DbgkpPostFakeThreadMessages-->DbgkpQueueMessage
    每一级还是以特征码的方式来寻找下一级。
    [C] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码

    #ifndef HOOKDbgkpPostFakeProcessCreateMessages
    #define HOOKDbgkpPostFakeProcessCreateMessages
    int DbgkpPostFakeProcessCreateMessagesAddr;
    int DbgkpPostFakeThreadMessagesAddr;
    int HookDbgkpPostFakeThreadMessagesAddr;
    int DbgkpQueueMessageAddr;
    int DbgkpQueueMessageAddr_11;
    //假DbgkpQueueMessage
    __declspec(naked) void MyDbgkpQueueMessage()
    {
            __asm
            {
                    mov    edi,edi
                    push   ebp
                    mov    ebp,esp
                    sub    esp,0B8h
                    jmp              DbgkpQueueMessageAddr_11
            }
    }

    void HookDbgkpPostFakeProcessCreateMessages()
    {
      
        //定位DbgkpPostFakeProcessCreateMessages
            charcode[6]={(char)0xff,(char)0x75,(char)0x08,(char)0x56,(char)0xe8};
           DbgkpPostFakeProcessCreateMessagesAddr=SearchFeature(NtDebugActiveProcessAddr,code,5);
           DbgkpPostFakeProcessCreateMessagesAddr=GetCallAddr(DbgkpPostFakeProcessCreateMessagesAddr);

        //定位DbgkpPostFakeThreadMessages
            charcode2[7]={(char)0xff,(char)0x75,(char)0x0c,(char)0xff,(char)0x75,(char)0x08,(char)0xe8};
            DbgkpPostFakeThreadMessagesAddr=SearchFeature(DbgkpPostFakeProcessCreateMessagesAddr,code2,7);
           DbgkpPostFakeThreadMessagesAddr=GetCallAddr(DbgkpPostFakeThreadMessagesAddr);

        //定位DbgkpQueueMessage并HOOK
            charcode3[6]={(char)0x50,(char)0x56,(char)0xff,(char)0x75,(char)0x08,(char)0xe8};
           HookDbgkpPostFakeThreadMessagesAddr=SearchFeature(DbgkpPostFakeThreadMessagesAddr,code3,6);
           DbgkpQueueMessageAddr=GetCallAddr(HookDbgkpPostFakeThreadMessagesAddr);
            DbgkpQueueMessageAddr_11=DbgkpQueueMessageAddr+11;
           CallHook(HookDbgkpPostFakeThreadMessagesAddr,(int)MyDbgkpQueueMessage);
    }

    //恢复
    void UnHookDbgkpPostFakeProcessCreateMessages()
    {
           CallHook(HookDbgkpPostFakeThreadMessagesAddr,(int)DbgkpQueueMessageAddr);
    }
    #endif



    DbgkpPostFakeModuleMessages+0x135 调用了DbgkpQueueMessage ,它的处理方式也是相同的,就不例举代码了。
    DbgkpSendApiMessage+0x40 调用了DbgkpQueueMessage ,因为这里回溯的话要很多层CALL才会有导出函数,
    所以它的处理方式就稍有不同了,我可以找与它的地址比较近的导出函数或比较近的能定位到的函数。
    经过windbg来观察DbgkpSetProcessDebugObject的地址和DbgkpSendApiMessage的地址很接近,
    而前面我已经定位到了DbgkpSendApiMessage的地址,因此我从这个函数的地址开始搜索特征码即可,这里就不给出代码了。
    另外分析到这个阶段已经过掉了TP的所有HOOK,
    驱动要在游戏运行前加载,也会造成蓝屏现象,这可能因为TP也是用的特征码来定位的函数地址,
    我们先HOOK了,TP再HOOK就出出错。
    因此我修改了驱动代码,创建了设备,添加了派遣函数,在加载驱动的时个只HOOK了:
    HookNtOpenProcess();
    HookReadVirtualMemory();
    HookWriteVirtualMemory();
    HookNtOpenThread();

    而其他的在驱动通讯派遣函数中来HOOK:
    [C] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码

    case IRP_MJ_DEVICE_CONTROL:
            {
                //根据IOCTL区分消息类型
                switch (code)
                {
                case HOOK:
                    {
                       HookKeAttchProcess();
                       HookKeStackAttachProcess();
                       HookNtDebugActiveProcess();
                       HookDbgkpPostFakeProcessCreateMessages();
                       HookDbgkpPostFakeModuleMessages();
                       HookDbgkpSendApiMessage();
                       DbgPrint("收到hook的消息\n");
                    }  
                    break;
                case UnHOOK:
                    {
                       UnHookKeAttchProcess();
                       UnHookKeStackAttachProcess();
                       UnHookNtDebugActiveProcess();
                       UnHookDbgkpPostFakeProcessCreateMessages();
                       UnHookDbgkpPostFakeModuleMessages();
                       UnHookDbgkpSendApiMessage();
                       DbgPrint("收到UnHook的消息\n");
                    }
                    break;
                }
            }

    点评

    感谢转载,全文请百度:过腾讯TP保护每个细节分析研究  发表于 2016-4-13 18:25

    本帖被以下淘专辑推荐:

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-12-1 14:03
  • 签到天数: 49 天

    [LV.5]常住居民I

     楼主| 发表于 2016-4-13 12:49:50 | 显示全部楼层
    上面的显示不完整,下载我这个压缩包看吧。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x

    点评

    谢谢分享  详情 回复 发表于 2016-4-13 18:08
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2023-9-1 05:24
  • 签到天数: 63 天

    [LV.6]常住居民II

    发表于 2016-4-13 17:39:00 | 显示全部楼层
    好东西 一直不敢玩TP怕封号
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-17 09:49
  • 签到天数: 58 天

    [LV.5]常住居民I

    发表于 2016-4-13 18:08:15 | 显示全部楼层
    小梦晨 发表于 2016-4-13 12:49
    上面的显示不完整,下载我这个压缩包看吧。

    谢谢分享
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2020-1-8 15:31
  • 签到天数: 347 天

    [LV.8]以坛为家I

    发表于 2016-4-13 18:46:44 | 显示全部楼层
    这转载的我给一百分
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-12-1 14:03
  • 签到天数: 49 天

    [LV.5]常住居民I

     楼主| 发表于 2016-4-13 20:38:51 | 显示全部楼层
    a74909898 发表于 2016-4-13 18:46
    这转载的我给一百分

    不管是不是转载的分享给大家就是好东西。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-11-12 21:41
  • 签到天数: 139 天

    [LV.7]常住居民III

    发表于 2016-4-13 22:46:17 | 显示全部楼层
    好东西谢谢分享!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-6-28 20:47
  • 签到天数: 2048 天

    [LV.Master]伴坛终老

    发表于 2016-4-14 05:36:43 | 显示全部楼层
    哈哈,谢谢分享。。。。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-7 14:20
  • 签到天数: 173 天

    [LV.7]常住居民III

    发表于 2016-4-14 10:24:15 | 显示全部楼层

    好东西 一直好多游戏只要一改就蓝屏
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表