龙马谷

 找回密码
 立即注册

QQ登录

只需一步,快速开始

龙马谷VIP会员办理客服QQ:82926983(如果临时会话没有收到回复,请先加QQ好友再发。)
1 [已完结] GG修改器新手入门与实战教程 31课 2 [已完结] GG修改器美化修改教程 6课 3 [已完结] GG修改器Lua脚本新手入门教程 12课
4 [已完结] 触动精灵脚本新手入门必学教程 22课 5 [已完结] 手游自动化脚本入门实战教程 9课 6 [已完结] C++射击游戏方框骨骼透视与自瞄教程 27课
7 [已完结] C++零基础UE4逆向开发FPS透视自瞄教程 29课 8 [已完结] C++零基础大漠模拟器手游自动化辅助教程 22课
以下是天马阁VIP教程,本站与天马阁合作,赞助VIP可以获得天马阁对应VIP会员,名额有限! 点击进入天马阁论坛
1 [已完结] x64CE与x64dbg入门基础教程 7课 2 [已完结] x64汇编语言基础教程 16课 3 [已完结] x64辅助入门基础教程 9课
4 [已完结] C++x64内存辅助实战技术教程 149课 5 [已完结] C++x64内存检测与过检测技术教程 10课 6 [已完结] C+x64二叉树分析遍历与LUA自动登陆教程 19课
7 [已完结] C++BT功能原理与x64实战教程 29课 8 [已完结] C+FPS框透视与自瞄x64实现原理及防护思路
查看: 1013|回复: 0

R3 R0窗口句柄分析 对抗GetWindow保护窗口源码

[复制链接]

11

主题

11

回帖

25

积分

编程入门

Rank: 1

龙马币
32
小子不忘记 | 显示全部楼层 |阅读模式

R3 R0窗口句柄分析 对抗GetWindow 保护窗口

系统版本:Microsoft Windows [版本 10.0.18362.175]


  1. //用户层========================
  2. //本来以为移除就好!最后竟然无法修改内存!!!!!
  3. struct tagWnd_r3
  4. {
  5.    __int64 h; //0x0000
  6.     __int64 offset; //0x0008
  7.     char pad_0x0010[0x38]; //0x0010
  8.     __int64 nextOffset; //0x0048
  9.     __int64 piveOffset; //0x0050
  10.     char pad_0x0058[0xF8]; //0x0058
  11.     PWCHAR name; //0x0150
  12. };

  13. tagWnd_r3* ValidateHwnd(HWND hwnd)
  14. {
  15.    HMODULE hModule = GetModuleHandle(TEXT("user32.dll"));
  16.    if(hModule!=0)
  17.    {
  18.       UINT_PTR ulGetMsgFunc = (UINT_PTR)GetProcAddress(hModule,"GetWindowTextA");
  19.       if(ulGetMsgFunc !=0)
  20.       {
  21.          UINT_PTR ptr = (UINT_PTR)memchr((PVOID)ulGetMsgFunc,0xE8,100);
  22.          UINT_PTR addr = *(PLONG)(ptr + 1) + ptr +5;
  23.          tagWnd_r3* (__fastcall * _ValidateHwnd)(HWND hwnd) = (tagWnd_r3* (__fastcall *)(HWND)) addr;
  24.          return _ValidateHwnd(hwnd);
  25.       }
  26.    }
  27.    return nullptr;
  28. }

  29. //获取下一个窗口对象
  30. tagWnd_r3* GetNextHwnd(tagWnd_r3* hwnd)
  31. {
  32.   tagWnd_r3* Next = nullptr;
  33.   Next = (tagWnd_r3* )((INT_PTR)hwnd - hwnd->offset + hwnd->nextOffset);
  34.    return Next;
  35. }

  36. //获取上一个窗口对象
  37. tagWnd_r3* GetPrveHwnd(tagWnd_r3* hwnd)
  38. {
  39.   tagWnd_r3* Prve = nullptr;
  40.   Prve = (tagWnd_r3* )((INT_PTR)hwnd - hwnd->offset + hwnd->piveOffset);
  41.    return Prve;
  42. }

  43. void RemoveHwnd(tagWnd_r3* hwnd)
  44. {
  45.     tagWnd_r3* Next = GetNextHwnd(hwnd);
  46.     tagWnd_r3* Prve = GetPrveHwnd(hwnd);

  47.    Prve->nextOffset = hwnd->nextOffset;
  48.    Next->piveOffset = hwnd->piveOffset;
  49. }

  50. int main(){
  51.    tagWnd_r3* h =  ValidateHwnd((HWND)0x00070354);

  52.    RemoveHwnd(h);//在共享表中移除 可是这块共享内存无法修改!暂时没有办法
  53. }

  54. //内核层r0===============================
  55. //测试了下  窗口会卡死不能动
  56. typedef struct _tagWnd
  57. {
  58.     THRDESKHEAD hwnd; //0x0000
  59.     char pad_0x0008[0x40]; //0x0018
  60.     _tagWnd* spwndNext; //0x0058
  61.     _tagWnd*  spwndPrev; //0x0060
  62.     _tagWnd*  spwndParent; //0x0068
  63.     _tagWnd*  spwndChild; //0x0070
  64.     _tagWnd*  spwndOwner; //0x0078
  65.     char pad_0x0080[0x38]; //0x0080
  66.     PWCHAR strName; //0x00B8
  67. } tagWnd, *pTagWnd;

  68. pTagWnd getWindowTagWnd(ULONG hwnd)
  69. {
  70.     ULONG cx = hwnd & 0xffff;

  71.     ULONG_PTR gpKernelHandleTable = *(PULONG_PTR)g_gpKernelHandleTable;//g_gpKernelHandleTable这个可以根据符号找到或者特征码

  72.     if(!MmIsAddressValid((PVOID)gpKernelHandleTable))
  73.     {
  74.         return nullptr;
  75.     }
  76.     ////g_gSharedInfo 这个可以根据符号找到或者特征码
  77.     ULONG_PTR gSharedInfo = (ULONG_PTR)g_gSharedInfo + 0x10;
  78.     gSharedInfo =  *(PULONG_PTR)gSharedInfo;

  79.     gSharedInfo = gSharedInfo * cx;

  80.     gSharedInfo = gSharedInfo >> 5;
  81.     gSharedInfo = gSharedInfo * 0x18;

  82.     gpKernelHandleTable = gpKernelHandleTable+ gSharedInfo;
  83.      if(!MmIsAddressValid((PVOID)gpKernelHandleTable))
  84.     {
  85.         return nullptr;
  86.     }
  87.     pTagWnd tagWnd = (pTagWnd)( *(PULONG_PTR)gpKernelHandleTable);

  88.     return tagWnd;
  89. }

  90. bool RemoveWnd(ULONG hwnd)
  91. {
  92.     // auto Wnd =  getWindowTagWnd(0x10010);
  93.     auto removeWnd = getWindowTagWnd(hwnd);

  94.     removeWnd->spwndPrev->spwndNext = removeWnd->spwndNext;
  95.     removeWnd->spwndNext->spwndPrev = removeWnd->spwndPrev;

  96.      return true;
  97. }
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

龙马谷| C/C++辅助教程| 安卓逆向安全| 论坛导航| 免责申明|Archiver|
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表龙马谷立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2018-2021 All Right Reserved.
在线客服
快速回复 返回顶部 返回列表