123456   4  /  6  页   跳转

编了一个保护杀毒软件的程序

俺知道有很多程序不是用TerminateProcess来结束进程的,所以丢个程序来抛砖引玉先!呵呵
SSDT貌似是NT的技术,Win9x下难道也是?
gototop
 

支持一下
gototop
 

对乐,修改导入表还有个问题,如下面的代码直接在内存中搜寻 GetProcAddress() API函数地址。
moveax, [esp]
andeax, 0FFFF0000h
@@chk:
cmpdword ptr [eax], 00905A4Dh; 比较一下…… 5A4D就是文件头'MZ'
je@@fnd; 找到了文件头基址了!
subeax, 1000h; faint,找不到,减少1000h作为跨度
jmp@@chk; Go on!
@@fnd:
push ebp
push ebx
push esi
push edi
movebp, eax  ;eax中为文件头基址
addeax, [eax][IMAGE_DOS_HEADER.e_lfanew] ;现在eax=[eax+3Ch],也就是PE文件头处
movedi, [eax][IMAGE_NT_HEADERS.OptionalHeader.DataDirectory]
addedi, ebp
movesi, [edi][IMAGE_EXPORT_DIRECTORY.AddressOfNames]
addesi, ebp

;在 kernel32.dll 里面查找 GetProcAddress 这个 API 的线形地址:
xoredx, edx
@@name:
moveax, [esi]
addeax, ebp
@@chgp:; GetProcAddress()
cmpdword ptr [eax+00h], "PteG"; GetP
jne@@next
cmpdword ptr [eax+04h], "Acor"; rocA
jne@@next
cmpdword ptr [eax+08h], "erdd"; ddre
jne@@next
cmpword ptr [eax+0Ch], "ss"; ss
jne@@next
moveax, [edi][IMAGE_EXPORT_DIRECTORY.AddressOfNameOrdinals]
addeax, ebp
movzx ebx, word ptr [edx*2+eax]
moveax, [edi][IMAGE_EXPORT_DIRECTORY.AddressOfFunctions]
addeax, ebp
moveax, [ebx*4+eax]
addeax, ebp
;找到了,储存起来:
mov[_GetProcAddress], eax
@@next:
addesi, 4
incedx
cmpedx, [edi][IMAGE_EXPORT_DIRECTORY.NumberOfNames]
jne@@name
gototop
 

其实在NT系统中TerminateProcess函数最终还是通过调用NtTerminateProcess来实现的,由于这个程序很模块化,只需要把源文件中
DllName1  db "ntdll.dll",0     
ApiName1  db "NtTerminateProcess",0
如此修改一下就可以拦截NtTerminateProcess了。
但还是有很多程序不通过这些函数来结束进程,所以请高手多提意见,看结束进程的方法到底有多少!
gototop
 

引用:
【zjjmj2002的贴子】退出后就不能保护了,要自动启动你放到启动组里不就可以了么?
俺总觉得改注册表不绿色呀,呵呵!
………………

怎么放,俺对注册表和编程是一窍不通啊。
gototop
 

一般来说,是C:\Documents and Settings\Administrator\「开始」菜单\程序\启动
把快捷方式拷进去就可以了。
gototop
 

引用:
【zjjmj2002的贴子】熊猫烧香会删除*.gho文件嘛,不过俺早就改了名了,呵呵。
而且那种把文件名第一个字节改为E5的简单删除方法对于俺来说根没有删除完全一样!
………………

熊猫烧香好像是通过特征码来判断文件的,否则它怎么不会感染系统核心文件\作者出的专杀和QQ程序呢?
gototop
 

引用:
【zjjmj2002的贴子】俺知道有很多程序不是用TerminateProcess来结束进程的,所以丢个程序来抛砖引玉先!呵呵
SSDT貌似是NT的技术,Win9x下难道也是?
………………

Windows9X连ntoskrnl.exe/ntkrnlpa.exe都没有,更不用说SSDT了.

现在98/ME没有多少人用了.(那个共享漏洞也一直没有修复)
gototop
 

引用:
【zjjmj2002的贴子】其实在NT系统中TerminateProcess函数最终还是通过调用NtTerminateProcess来实现的,由于这个程序很模块化,只需要把源文件中
DllName1  db "ntdll.dll",0     
ApiName1  db "NtTerminateProcess",0
如此修改一下就可以拦截NtTerminateProcess了。
但还是有很多程序不通过这些函数来结束进程,所以请高手多提意见,看结束进程的方法到底有多少!

………………

ntdll.dll中的NtTerminateProcess并不是ntoskrnl.exe中的系统服务NtTerminateProcess,不信你用IceSword看看.



画个图:


代码中直接调用 API ======>导入表 =========>相关DLL(如CreateFileA对应kernel32.dll) ==========>NTDLL接口

以上是用户态,也就是ring3部分.然后由NTDLL进入ring0


NTDLL ===========>NtCreateFile============>一系列系统服务函数调用(相当多,包括检查权限等)
gototop
 

PspTerminateProcess,这个系统服务函数大厉害了.虽然M$没有公开这个导出函数的地址.但是高手们会用特征码来找到它.

目前,这个函数可以结束所有的非系统程序
gototop
 
123456   4  /  6  页   跳转
页面顶部
Powered by Discuz!NT