找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 18797|回复: 35

关于过倒霉蛋儿的MiniSafe

 火... [复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-8-18 00:36:30 | 显示全部楼层 |阅读模式
本帖最后由 Tesla.Angela 于 2010-8-18 12:34 编辑

好几天没上论坛了,今天一上,发现关于过倒霉蛋儿的MiniSafe讨论得如火如荼,其实大家换种思维,会发现过Ring3的Inline Hook十分简单。
倒霉蛋儿关于进程防杀的钩子全部钩在ntdll.dll上,如果我们不用ntdll.dll,倒霉蛋儿的钩子就无效了。
众网友:什么?不用ntdll.dll?
我:是的。
众网友:难道你自己写一个ntdll.dll不成?
我:非也。重新加载一份ntdll.dll就可以了。


  1. #include <stdio.h>
  2. #include <windows.h>
  3. typedef long (*P1)(ULONG,ULONG,ULONG,PULONG);
  4. typedef long (*P2)(PULONG,ULONG,PULONG,PULONG);
  5. typedef long (*P3)(ULONG,ULONG);
  6. int main()
  7. {
  8.     CopyFileA("c:\\windows\\system32\\ntdll.dll","c:\\tadll.dll",TRUE);
  9.     HMODULE ht=LoadLibraryA("c:\\tadll.dll");
  10.     P1 p1=(P1)GetProcAddress(ht,"RtlAdjustPrivilege");
  11.     P2 p2=(P2)GetProcAddress(ht,"NtOpenProcess");
  12.     P3 p3=(P3)GetProcAddress(ht,"NtTerminateProcess");
  13.     ULONG oa[6]={0};
  14.     ULONG cid[2]={0};
  15.     ULONG hp=0,rv=0;
  16.     p1(20,1,0,&rv);
  17.     printf("Input PID: ");
  18.     scanf("%ld",&hp);
  19.     oa[0]=24;
  20.     cid[0]=hp;
  21.     p2(&hp,1,oa,cid);
  22.     hp=p3(hp,0);
  23.     CloseHandle(hp);
  24.     getchar();getchar();
  25.     FreeLibrary(ht);
  26.     DeleteFileA("c:\\tadll.dll");
  27.     return 0;
  28. }
复制代码

效果自己测试吧。。。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-18 00:37:48 | 显示全部楼层
本帖最后由 Tesla.Angela 于 2010-8-18 08:37 编辑

想象:如果我们重新加载一份ntoskrnl.exe,会什么效果?

评分

参与人数 1水晶币 +1 +1 收起 理由
a33287651 + 1 + 1 必顶!

查看全部评分

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-18 08:43:04 | 显示全部楼层
直接恢复自身进程的Inline Hook也可以:

  1. Option Explicit
  2. Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  3. Private Declare Function TerminateProcess Lib "kernel32.dll" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
  4. Private Declare Function VirtualProtect _
  5.                Lib "kernel32.dll" (ByRef lpAddress As Any, _
  6.                                    ByVal dwSize As Long, _
  7.                                    ByVal flNewProtect As Long, _
  8.                                    ByRef lpflOldProtect As Long) As Long
  9. Private Declare Function MapViewOfFile _
  10.                Lib "kernel32.dll" (ByVal hFileMappingObject As Long, _
  11.                                    ByVal dwDesiredAccess As Long, _
  12.                                    ByVal dwFileOffsetHigh As Long, _
  13.                                    ByVal dwFileOffsetLow As Long, _
  14.                                    ByVal dwNumberOfBytesToMap As Long) As Long
  15. Private Declare Sub CopyMemory _
  16.                Lib "kernel32.dll" _
  17.                Alias "RtlMoveMemory" (ByRef Destination As Any, _
  18.                                       ByRef Source As Any, _
  19.                                       ByVal Length As Long)
  20. Private Declare Function UnmapViewOfFile _
  21.                Lib "kernel32.dll" (ByRef lpBaseAddress As Any) As Long
  22. Private Declare Function CloseHandle _
  23.                Lib "kernel32.dll" (ByVal hObject As Long) As Long
  24. Private Declare Function LoadLibrary _
  25.                Lib "kernel32.dll" _
  26.                Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  27. Private Declare Function GetProcAddress _
  28.                Lib "kernel32.dll" (ByVal hModule As Long, _
  29.                                    ByVal lpProcName As String) As Long
  30. Private Declare Function CreateFile _
  31.                Lib "kernel32.dll" _
  32.                Alias "CreateFileA" (ByVal lpFileName As String, _
  33.                                     ByVal dwDesiredAccess As Long, _
  34.                                     ByVal dwShareMode As Long, _
  35.                                     ByRef lpSecurityAttributes As Long, _
  36.                                     ByVal dwCreationDisposition As Long, _
  37.                                     ByVal dwFlagsAndAttributes As Long, _
  38.                                     ByVal hTemplateFile As Long) As Long
  39. Private Declare Function CreateFileMapping _
  40.                Lib "kernel32.dll" _
  41.                Alias "CreateFileMappingA" (ByVal hFile As Long, _
  42.                                            ByRef lpFileMappigAttributes As Long, _
  43.                                            ByVal flProtect As Long, _
  44.                                            ByVal dwMaximumSizeHigh As Long, _
  45.                                            ByVal dwMaximumSizeLow As Long, _
  46.                                            ByVal lpName As String) As Long
  47. Private Declare Function GetFileSize _
  48.                Lib "kernel32.dll" (ByVal hFile As Long, _
  49.                                    ByRef lpFileSizeHigh As Long) As Long
  50. Private Type SECURITY_ATTRIBUTES
  51.     nLength As Long
  52.     lpSecurityDescriptor As Long
  53.     bInheritHandle As Long
  54. End Type
  55. Const FILE_ATTRIBUTE_NORMAL As Long = &H80
  56. Const SECTION_MAP_READ As Long = &H4
  57. Const FILE_MAP_READ As Long = SECTION_MAP_READ
  58. Const FILE_SHARE_READ As Long = &H1
  59. Const GENERIC_READ As Long = &H80000000
  60. Const OPEN_EXISTING As Long = 3
  61. Const PAGE_EXECUTE_READWRITE As Long = &H40
  62. Const PAGE_READONLY As Long = &H2
  63. Const SEC_IMAGE As Long = &H1000000
  64. Const INVALID_HANDLE_VALUE As Long = (-1)
  65. Public Function RemoveFWHook(szDllPath As String, szFuncName As String) As Boolean
  66.     Dim hModule As Long, lpFunc As Long, lpBase As Long, dwRVA As Long, hFile As Long
  67.     Dim dwSize As Long, hMapFile As Long, lpBaseMap As Long, lpRealFunc As Long, dwOldProtect As Long
  68.     Dim bRes As Boolean
  69.     lpBase = LoadLibrary(szDllPath)
  70.     lpFunc = GetProcAddress(ByVal lpBase, szFuncName)
  71.     If lpFunc = False Then
  72.         RemoveFWHook = False
  73.     End If
  74.     dwRVA = lpFunc - lpBase
  75.     hFile = CreateFile(szDllPath, GENERIC_READ, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, _
  76.        FILE_ATTRIBUTE_NORMAL, 0)
  77.     If hFile = INVALID_HANDLE_VALUE Then
  78.         RemoveFWHook = False
  79.     End If
  80.     dwSize = GetFileSize(hFile, 0)
  81.     hMapFile = CreateFileMapping(hFile, ByVal 0&, PAGE_READONLY Or SEC_IMAGE, 0, dwSize, 0)
  82.     lpBaseMap = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, dwSize)
  83.     lpRealFunc = lpBaseMap + dwRVA
  84.     bRes = True
  85.     If (VirtualProtect(ByVal lpFunc, 10, PAGE_EXECUTE_READWRITE, dwOldProtect)) Then
  86.         CopyMemory ByVal lpFunc, ByVal lpRealFunc, 10
  87.     Else
  88.         bRes = False
  89.     End If
  90.     UnmapViewOfFile lpBaseMap
  91.     CloseHandle (hMapFile)
  92.     CloseHandle (hFile)
  93.     RemoveFWHook = bRes
  94. End Function
  95. Private Sub Command1_Click()
  96.     MsgBox RemoveFWHook(Environ$("windir") & "\system32\ntdll.dll", "NtOpenProcess"), , "Is Removed"
  97.     Call TerminateProcess(OpenProcess(1, 0, CLng(Text1.Text)), 0)
  98. End Sub
复制代码
核心代码不是我写的,是我2009年初收集的。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-18 08:45:17 | 显示全部楼层
另外我还是要忍不住地夸赞倒霉蛋儿的MiniSafe几句:他的MiniSafe在Windows 7 x86下有效,无论是GUI进程还是CUI进程。

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-8-18 09:08:58 | 显示全部楼层
没测试
看来TA已经很强大了
倒霉蛋也是近年来论坛上罕见的高手
想请教lz一个问题
就是如果没有倒霉蛋的源代码
你是怎么知道他hook了哪些函数?
通过什么软件测试或者说找到的?

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-18 09:22:50 | 显示全部楼层
回复 5# ok100fen


用XueTr查看:
钩子 -> 用户层钩子 -> [自己选择一个进程] -> [对选择的进程单击右键] -> 检测

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-8-18 11:15:35 | 显示全部楼层
倒霉蛋的那个怎么才检查出一个来?
不是有好多个吗?
未命名.jpg

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-18 12:17:54 | 显示全部楼层
回复 7# ok100fen


不是检查自己,而是检查其它进程,比如任务管理器。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-18 12:18:57 | 显示全部楼层
而且是要等 倒霉蛋儿的程序启动后 再启动任务管理器,才能看到被挂钩的函数。

评分

参与人数 1水晶币 +10 +20 收起 理由
ok100fen + 10 + 20 学到了一点知识

查看全部评分

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-8-18 13:33:58 | 显示全部楼层
原来是这样
难道要每个系统进程都要查看?
我刚才看了一下explorer.exe
也被倒霉蛋的那个hook了很多
就是这样一个一个查看?

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-8-18 13:47:26 | 显示全部楼层
还有,TA能不能根据倒霉蛋这个例子
做一个从检测到彻底结束进程的讲解
最好图文并茂
很久没看到你这方面的教程了
这几天看你的vb小子学驱动的教程,几乎入门了

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 2010-8-18 16:38:20 | 显示全部楼层
1."几乎入门了"
2.貌似教程里面说的你好像没懂几个......
3.貌似是一个都不会......
4.检测到彻底结束进程,倒霉鸡蛋这个好像是Ring3的吧......
5.这是玩Ring3,不是Ring0......
6.每个自我保护都要根据实例分析......
7.ok大哥为什么能金牌会员?而我只是中级会员?因为它发了整整33个主题贴.回复还不算.而且没有一个帖子不是关于编程,问问题的.
总结:没有入门,太多不会,全都是求助贴.关于倒霉鸡蛋MINISafe,每个例子都要具体分析.
头像被屏蔽

27

主题

136

回帖

2

精华

铂金会员

积分
2257
发表于 2010-8-18 17:01:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

27

主题

136

回帖

2

精华

铂金会员

积分
2257
发表于 2010-8-18 17:03:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

27

主题

136

回帖

2

精华

铂金会员

积分
2257
发表于 2010-8-18 17:12:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 2010-8-18 17:37:20 | 显示全部楼层
保护与破坏永无止境 - Hook PspExitProcess,恐怕高手也不能绕过,任何进程的结束用任何猥琐办法(包括VirtualProtect)恐怕都要经过它.其实它是回调性质的,仅仅是做了点清理工作.
你再强大的hook,关电源.  你奈何? - 关电源整个电脑都关掉了,你的程序也活不了了,有意义吗?

6

主题

32

回帖

2

精华

核心会员

积分
2250
发表于 2010-8-18 17:38:22 | 显示全部楼层
折腾吧,呼呼
本网站最菜的人 该用户已被删除
发表于 2010-8-18 19:56:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 2010-8-18 20:54:22 | 显示全部楼层
1.Who is ET "Big Cow"?
2.是PspExitProcess,PspExitProcess把进程从活动链上摘除,难道没有从活动连上摘除吗?就是PsActiveprocessLink,如果没有摘除你就还能看到它.Zzzians神牛的话错了吧.
本网站最菜的人 该用户已被删除
发表于 2010-8-18 21:19:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

5

主题

19

回帖

0

精华

铜牌会员

积分
39
发表于 2010-8-18 23:44:56 | 显示全部楼层
呵呵先感谢大家的关注
这个是没怎么完善
重新加载份NTDLL这个思路很好 又学了一招
顺遍问下TA NTOSKRNL在RING3能直接调用么?
能的话就邪恶了哈~~

5

主题

19

回帖

0

精华

铜牌会员

积分
39
发表于 2010-8-18 23:56:48 | 显示全部楼层
好象用IAT HOOK LZ的方法就没用了...
顺便说下关于废掉杀软的方法不知可行否我开学勒,没时间测试...
枚举CSRSS中AV句柄,获得路径,判断是否为AV进程的相关句柄是的话远程创建线程直行ZWCLOSE驱动句柄被关,会执行MJ_CLOSE,然后AV应该会在这时un hook然后就失去保护做用了...
手机发贴 有错字请愿谅..累死我了~~

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-8-19 09:19:25 | 显示全部楼层
7.ok大哥为什么能金牌会员?而我只是中级会员?xiaoly99 发表于 2010-8-18 16:38



    现在对于积分的计算还在尝试中,主要是不方便进行技术帖(帮助别人等)与非技术帖(受别人帮助,聊天扯淡等)的区分,让这个积分公式有些难以设计......

我改了一下积分方案,现在的积分方案:

总积分=((精华帖数*10)+(发帖数*0.5)+(生命值*1)+(热心值*1)+(页面浏览量*0.5)+(在线时间(小时)*0.5))/6

不知道是否合适....

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-19 11:43:11 | 显示全部楼层
回复 21# 倒霉蛋儿

顺遍问下TA NTOSKRNL在RING3能直接调用么?

不知道这句话是什么意思。。。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-19 15:00:32 | 显示全部楼层
回复 22# 倒霉蛋儿


不知道,你写个给我玩玩。

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 2010-8-19 16:13:42 | 显示全部楼层
OK大哥从金牌会员变成了.....额,实习记者.
关于区分吗,可以从标题来判断:
请教,问题,麻烦,区别,在哪里,解释,谢谢,问题,不知道,哪里,强烈,请求,介绍,学习,求助,帮忙.
这些词汇都是从OK大哥的非技术贴里提炼出来的.
可以做个数组,把这些放进去.作为一个Alpha功能.
----------------------------------------------------------------------------------------------------
不知老马能否采纳?

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 2010-8-19 16:14:43 | 显示全部楼层
你看我的帖子,每一个都没有这种词汇.它们也都是技术贴.
但是关于聊天,扯淡.这个判断就麻烦了.......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-8-19 16:24:21 | 显示全部楼层
回复 27# xiaoly99


    所以现在这个论坛系统挺不爽的,弄得我也头痛.

但是即使是技术讨论,也不必要把气氛搞得很紧张,这样弄得我也非常紧张了......

要知道像我一样的驱动菜鸟那可是多数,你们这些牛人们的气场还是稍微压一压,不然我们很紧张了{:2_39:}

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 2010-8-19 16:27:56 | 显示全部楼层
1.驱动菜鸟是挺多的.
2.老马的回复挺即时的.
头像被屏蔽

27

主题

136

回帖

2

精华

铂金会员

积分
2257
发表于 2010-8-19 21:00:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

1

主题

3

回帖

0

精华

初来乍到

积分
19
发表于 2010-8-26 10:20:09 | 显示全部楼层
以下纯属个人观点..
1.cmd->taskkill...在我这里控制台程序无法注入...
2.DebugActiveProcess
3.WinStationTerminateProcess
不知道这些怎么钩上去...

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-8-27 19:20:40 | 显示全部楼层
回复 31# hx1997

可能是你的机器有保护,我的机器上根本无法启动taskkill(报错)。
剩下两个因为都用到了ntdll的函数,所以也不成功。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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