天马阁

 找回密码
 立即注册
                                        →→→→→→→→→→→→ 1点击查看所有VIP教程目录长列表(总教程数269个) 2办理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实现原理及防护思路 30课完结
64驱?封? 9 64反驱? 10 64位V? 11 绝? 12 ???课?
13 64透 ? 14 64U ? 15 64Q ? 16 64功 ?
17 64U ? 18 64模 ? 19 64多 ? 20 64网 ?
21 64注 ? 22 64火 ? 23 64棋 ? 24 64自二链L?
25 64破 ? VIP会员办理QQ: 89986068   
【请先加好友,然后到好友列表双击联系客服办理,不然可能无法接受到信息。】
27 加入2000人交流群637034024 3 28 免责声明?
查看: 1296|回复: 0

簡單逆下Hs-NtReadProcessMemory

[复制链接]

11

主题

1

回帖

14

积分

编程入门

Rank: 1

天马币
22
发表于 2024-2-29 13:01:22 | 显示全部楼层 |阅读模式
簡單逆下Hs-NtReadProcessMemory
直接用KD簡單逆的

偽代碼就不上了 歡迎找碴

  1. [ebp-C] = ReturnLength
  2. [ebp-28] = ProcessInformation
  3. [ebp-4] = ProcessHandle
  4. [ebp-10] = 返回值(success Or error c)  
  5. [ebp-8] = Pid
  6. [ebp-18] = ???


  7. ----------保護暫存器---------------  
  8. 0xB31F7C00  mov eax, esp      
  9. 0xB31F7C02  add eax, 8      
  10. 0xB31F7C05  pushad      
  11. 0xB31F7C06  pushfd      
  12. 0xB31F7C07  push ebp      
  13. 0xB31F7C08  mov ebp, esp      
  14. 0xB31F7C0A  sub esp, 40

  15.       
  16. 0xB31F7C0D  mov ecx, dword ptr [eax+8]      
  17. 0xB31F7C10  mov dword ptr [ebp-4], ecx      
  18. 0xB31F7C13  mov ecx, B3206968  //B3206968=ProcessInformation     
  19. 0xB31F7C18  call dword ptr [<&ntkrnlpa.InterlockedIncrement>]  //不讓多執行序共享變量(保護)  


  20. 0xB31F7C1E  lea eax, dword ptr [ebp-C] //把局部變量ebp-c的地址給eax      
  21. 0xB31F7C21  push eax //ReturnLength      
  22. 0xB31F7C22  push 18 //ProcessInformationLength      
  23. 0xB31F7C24  lea ecx, dword ptr [ebp-28]      
  24. 0xB31F7C27  push ecx  //ProcessInformation     
  25. 0xB31F7C28  push 0  //ProcessInformationClass     
  26. 0xB31F7C2A  mov edx, dword ptr [ebp-4] //保存在局部變量ebp-4=ProcessHandle      
  27. 0xB31F7C2D  push edx //ProcessHandle      
  28. 0xB31F7C2E  call dword ptr [<&ntkrnlpa.ZwQueryInformationProcess>]
  29.       

  30. 0xB31F7C34  mov dword ptr [ebp-10], eax  //返回值(success Or error)給局部變量         
  31. 0xB31F7C37  xor eax, eax   //eax=0   
  32. 0xB31F7C39  cmp dword ptr [ebp-10], 0      
  33. 0xB31F7C3D  setge al  //如果ZF=1則,al等於,否則等於      
  34. 0xB31F7C40  cmp eax, 1    //比較eax是否為         
  35. 0xB31F7C43  jne B31F7D13   //eax不為  ●跳到 "正確"      
  36. 0xB31F7C49  call B31FFB66  //PsGetCurrentId 得到目前PID值   
  37.   

  38. 0xB31F7C4E  mov dword ptr [ebp0xB31F7C4E  mov dword ptr [ebp--8], eax  //ebp8], eax  //ebp--8 = Pid    8 = Pid      
  39. 0xB31F7C51  push 1      
  40. 0xB31F7C53  mov ecx, dword ptr [ebp-8] //ecx = Pid      
  41. 0xB31F7C56  push ecx //Pid     
  42. 0xB31F7C57  call B31FD460  //這個Call內部有 KeGetCurrentIrql(得到目前IRQL)  
  43.                    //和建立快速互斥 and 釋放快速互斥  
  44. 0xB31F7C5C  movzx edx, al  //返回值給edx      
  45. 0xB31F7C5F  cmp edx, 1     //edx和做比較  
  46. 0xB31F7C62  jne short B31F7CB1  //繼續判斷  
  47.      

  48. 0xB31F7C64  push 4      0xB31F7C64  push 4        
  49. 0xB31F7C66  mov eax, dword ptr [ebp-18]      
  50. 0xB31F7C69  push eax      
  51. 0xB31F7C6A  push B320F3A0      
  52. 0xB31F7C6F  call B31F07F0    ●這個Call出現多次 把Pid當參數傳入 回傳值 Or 0  
  53. 0xB31F7C74  movzx ecx, al   //把回傳值給ecx     
  54. 0xB31F7C77  cmp ecx, 1      //ecx和比較   
  55. 0xB31F7C7A  jne short B31F7CAF ●ecx 為"跳到正確"  
  56.       

  57. 0xB31F7C7C  push 4      
  58. 0xB31F7C7E  mov edx, dword ptr [ebp-8]  //edx=Pid
  59. 0xB31F7C81  push edx //push Pid      
  60. 0xB31F7C82  push B320F3A0
  61. 0xB31F7C87  call B31F07F0 ●這個Call出現多次 把Pid當參數傳入 回傳值 Or 0  
  62. 0xB31F7C8C  movzx eax, al      
  63. 0xB31F7C8F  cmp eax, 1      
  64. 0xB31F7C92  je short B31F7C99 //如果eax=1 正確就繼續判斷      
  65. 0xB31F7C94  jmp B31F7D29   ●eax = 0 跳到錯誤  

  66.    
  67. 0xB31F7C99  push 1      
  68. 0xB31F7C9B  call B31FFB6C //PsGetCurrentThreadId 得到目前的Tid值      
  69. 0xB31F7CA0  push eax  //eax = Tid     
  70. 0xB31F7CA1  call B31F2680  //這個Call內部有建立快速互斥 and 釋放快速互斥  

  71.   
  72. 0xB31F7CA6  mov edx, dword ptr [ebp-8]   edx = Pid   
  73. 0xB31F7CA9  push edx      
  74. 0xB31F7CAA  call B31FD3B0  //這個Call內部有 KeGetCurrentIrql(得到目前IRQL)  
  75.                //和建立快速互斥 and 釋放快速互斥  
  76.                //Call中又有個Call 呼叫InterlockedPushEntrySlist函數在棧頂添加一個元素     
  77. 0xB31F7CAF  jmp short B31F7D13 ●"跳到正確"  

  78.       
  79. 0xB31F7CB1  push 4      0xB31F7CB1  push 4        
  80. 0xB31F7CB3  mov eax, dword ptr [ebp-18]        
  81. 0xB31F7CB6  push eax      
  82. 0xB31F7CB7  push B320F3A0      
  83. 0xB31F7CBC  call B31F07F0 ●這個Call出現多次 把Pid當參數傳入 回傳值 Or 0      
  84. 0xB31F7CC1  movzx ecx, al      
  85. 0xB31F7CC4  cmp ecx, 1      
  86. 0xB31F7CC7  jne short B31F7D13 ●ecx = 0 跳到正確  

  87.       
  88. 0xB31F7CC9  push 4      
  89. 0xB31F7CCB  mov edx, dword ptr [ebp-8]  //eax=Pid      
  90. 0xB31F7CCE  push edx      
  91. 0xB31F7CCF  push B320F3A0      
  92. 0xB31F7CD4  call B31F07F0 ●這個Call出現多次 把Pid當參數傳入 回傳值 Or 0      
  93. 0xB31F7CD9  movzx eax, al      
  94. 0xB31F7CDC  cmp eax, 1  //比較eax是否=1      
  95. 0xB31F7CDF  je short B31F7D06  ●如果eax=1 跳到正確   

  96.   
  97. 0xB31F7CE1  push 1      
  98. 0xB31F7CE3  call dword ptr [<&ntkrnlpa.IoGetCurrentProcess>]   //得到一個PEPROCESS結構  
  99. 0xB31F7CE9  push eax  eax=目前調用的PEPROCESS結構      
  100. 0xB31F7CEA  call B31FD596 //Hs的判斷CALL 可能是黑名單 or 白名單      
  101. 0xB31F7CEF  movzx ecx, al      
  102. 0xB31F7CF2  cmp ecx, 1 //ecx和判斷      
  103. 0xB31F7CF5  je short B31F7D04  ●如果ecx=1  跳到正確  

  104.    
  105. 0xB31F7CF7  push 1      0xB31F7CF7  push 1        
  106. 0xB31F7CF9  mov edx, dword ptr [ebp-8] //edx=Pid      
  107. 0xB31F7CFC  push edx //push Pid      
  108. 0xB31F7CFD  call B31FD230  //這個Call內部有 KeGetCurrentIrql(得到目前TRQL)      
  109.                //和建立快速互斥 and 釋放快速互斥  
  110.                //Call中又有個Call 呼叫InterlockedPushEntrySlist函數在棧頂添加一個元素  
  111. 0xB31F7D02  jmp short B31F7D29 ●跳到錯誤      
  112. 0xB31F7D04  jmp short B31F7D13 ●跳到正確  

  113.       
  114. 0xB31F7D06  push 1      
  115. 0xB31F7D08  call B31FFB6C   //PsGetCurrentThreadId   
  116. 0xB31F7D0D  push eax      //eax=Tid        
  117. 0xB31F7D0E  call B31F2680 //傳入Tid值的Call      
  118. 0xB31F7D13  mov ecx, B3206968  //ecx=ProcessInformation   
  119. 0xB31F7D18  call dword ptr [<&ntkrnlpa.InterlockedDecrement>] //在多線程中保護某個變量  
  120. -------------------還原現場----------------------------      
  121. 0xB31F7D1E  add esp, 40      
  122. 0xB31F7D21  pop ebp      
  123. 0xB31F7D22  popfd      
  124. 0xB31F7D23  popad      
  125. 0xB31F7D24  jmp B31F72E0   //這句Jmp  ●(8053CB90) ●原本被Hook前的Call地址 "正確"     


  126. 0xB31F7D29  mov ecx, B3206968  ●ecx=ProcessInformation 下面接著返回錯誤代碼  "錯誤"   
  127. 0xB31F7D2E  call dword ptr [<&ntkrnlpa.InterlockedDecrement>]  //在多線程中保護某個變量  
  128. 0xB31F7D34  add esp, 40      
  129. 0xB31F7D37  pop ebp      
  130. 0xB31F7D38  popfd      
  131. 0xB31F7D39  popad      
  132. 0xB31F7D3A  pop eax      
  133. 0xB31F7D3B  pop eax      
  134. 0xB31F7D3C  pop eax      
  135. 0xB31F7D3D  mov eax,C0000022  //返回eax = C0000022  錯誤代碼         
  136. 0xB31F7D42  retn 14      
  137. 0xB31F7D45  CC  int3      
  138. 0xB31F7D46  CC  int3      
  139. 0xB31F7D47  CC  int3      
  140. 0xB31F7D48  CC  int3   
复制代码
---------------Hs內核函數調用表------------------------

  1. 0xB31FFB5A    |    FF25 C83620B3    |    jmp dword ptr [<&ntkrnlpa.PsSetCreateProcessNotifyRoutine>
  2. 0xB31FFB60    |    FF25 703620B3    |    jmp dword ptr [<&ntkrnlpa.PsGetVersion>]      
  3. 0xB31FFB66    |    FF25 E83520B3    |    jmp dword ptr [<&ntkrnlpa.PsGetCurrentProcessId>]      
  4. 0xB31FFB6C    |    FF25 443520B3    |    jmp dword ptr [<&ntkrnlpa.PsGetCurrentThreadId>]         
  5. 0xB31FFB72    |    FF25 503520B3    |    jmp dword ptr [<&ntkrnlpa.stricmp>]      
  6. 0xB31FFB78    |    FF25 543520B3    |    jmp dword ptr [<&ntkrnlpa.strrchr>]      
  7. 0xB31FFB7E    |    FF25 643520B3    |    jmp dword ptr [<&ntkrnlpa.except_handler3>]      
  8. 0xB31FFB84    |    FF25 7C3520B3    |    jmp dword ptr [<&ntkrnlpa.KeGetCurrentThread>]     
  9. 0xB31FFB8A    |    FF25 AC3520B3    |    jmp dword ptr [<&ntkrnlpa.allmul>]   
  10. 0xB31FFB90    |    FF25 B03520B3    |    jmp dword ptr [<&ntkrnlpa.alldiv>]     
  11. 0xB31FFB96    |    FF25 B43520B3    |    jmp dword ptr [<&ntkrnlpa.wcslen>]     
  12. 0xB31FFB9C    |    FF25 B83520B3    |    jmp dword ptr [<&ntkrnlpa.wcsrchr>]   
  13. 0xB31FFBA2    |    FF25 C03520B3    |    jmp dword ptr [<&ntkrnlpa.KeDetachProcess>]   
  14. 0xB31FFBA8    |    FF25 C43520B3    |    jmp dword ptr [<&ntkrnlpa.KeAttachProcess>]   
  15. 0xB31FFBAE    |    FF25 C83520B3    |    jmp dword ptr [<&ntkrnlpa.PsLookupProcessByProcessId>]     
  16. 0xB31FFBB4    |    FF25 DC3520B3    |    jmp dword ptr [<&ntkrnlpa.wcscpy>]   
  17. 0xB31FFBBA    |    FF25 C43620B3    |    jmp dword ptr [<&ntkrnlpa.ObReferenceObjectByName>]     
  18. 0xB31FFBC0    |    FF25 1C3620B3    |    jmp dword ptr [<&ntkrnlpa.ObOpenObjectByPointer>]   
  19. 0xB31FFBC6    |    FF25 303620B3    |    jmp dword ptr [<&ntkrnlpa.wcsnicmp>]   
  20. 0xB31FFBCC    |    FF25 403620B3    |    jmp dword ptr [<&ntkrnlpa.IoQueueWorkItem>]   
  21. 0xB31FFBD2    |    FF25 443620B3    |    jmp dword ptr [<&ntkrnlpa.IoAllocateWorkItem>]   
  22. 0xB31FFBD8    |    FF25 483620B3    |    jmp dword ptr [<&ntkrnlpa.IoFreeWorkItem>]   
  23. 0xB31FFBDE    |    FF25 543620B3    |    jmp dword ptr [<&ntkrnlpa.PsIsThreadTerminating>]   
  24. 0xB31FFBE4    |    FF25 583620B3    |    jmp dword ptr [<&ntkrnlpa.PsLookupThreadByThreadId>]  
复制代码


回复

使用道具 举报

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

本版积分规则

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