能力值:
( LV2,RANK:10 )
2 楼
好东西,支持原创 !!
能力值:
( LV2,RANK:10 )
3 楼
[QUOTE=;]...[/QUOTE]
谢谢支持,多提意见 ^^
刚试了下,把360的保护壳——safeboxTray.exe也结束掉了,咳。。貌似有时候能结束,有时候不能哎,我再研究下。。。 - -#
能力值:
( LV8,RANK:130 )
4 楼
第一种:注入远程线程,线程函数是ExitProcess。
第二种:如果以上方法失败,用了int 2E自陷,就是调用NtSystemDebugControl,SYSDBG_COMMAND使用的是SysDbgReadVirtualMemory,接下来,就计算****,好像是转化的,我太菜看不懂,麻烦楼主为菜鸟解释一下。
然后就用NtSystemDebugControl,SYSDBG_COMMAND是SysDbgWriteVirtualMemory,去清零,是吗~~~~
我太菜,就猜测成这样,如果有误,楼主莫怪。。
能力值:
( LV2,RANK:10 )
5 楼
试试谢谢分享
能力值:
( LV2,RANK:10 )
6 楼
咳,都被你跟踪到了,还谦虚。。 - -#
不过SYSDBG_COMMAND你怎么会弄错了呢?我没用你说那两个
typedef enum _SYSDBG_COMMAND {
SysDbgQueryModuleInformation = 0,
SysDbgQueryTraceInformation = 1,
SysDbgSetTracepoint = 2,
SysDbgSetSpecialCall = 3,
SysDbgClearSpecialCalls = 4,
SysDbgQuerySpecialCalls = 5,
SysDbgBreakPoint = 6,
SysDbgQueryVersion =7,
SysDbgReadVirtual =8,
SysDbgWriteVirtual = 9,
SysDbgReadPhysical = 10,
SysDbgWritePhysical =11,
SysDbgReadControlSpace = 12,
SysDbgWriteControlSpace = 13,
SysDbgReadIoSpace = 14,
SysDbgWriteIoSpace = 15,
SysDbgReadMsr =16,
SysDbgWriteMsr = 17,
SysDbgReadBusData = 18,
SysDbgWriteBusData = 19,
SysDbgCheckLowMemory = 20,
SysDbgEnableKernelDebugger,
SysDbgDisableKernelDebugger,
SysDbgGetAutoKdEnable,
SysDbgSetAutoKdEnable,
SysDbgGetPrintBufferSize,
SysDbgSetPrintBufferSize,
SysDbgGetKdUmExceptionEnable,
SysDbgSetKdUmExceptionEnable,
SysDbgGetTriageDump,
SysDbgGetKdBlockEnable,
SysDbgSetKdBlockEnable,
} SYSDBG_COMMAND, *PSYSDBG_COMMAND;
我用的是10号和11号,即SysDbgReadPhysical 和 SysDbgWritePhysical,没有用8号9号啊
网上没找到这两个的用法,自己反了下琢磨着用的,貌似应该有高效的速度快的办法。计算部分是很笨很土的,难怪你看着晕哈,嘿嘿。。。
能力值:
( LV8,RANK:130 )
7 楼
额。。。。
使用的枚举的名字不一样。。
跟踪的时候是0xA和0xB嘛~~~~
我没用过NtSystemDebugControl。
参考的是http://www.xfocus.net/articles/200408/721.html
那里枚举的声明是(Nt5.1貌似是XP吧):
typedef enum _SYSDBG_COMMAND {
//以下5个在Windows NT各个版本上都有
SysDbgGetTraceInformation = 1,
SysDbgSetInternalBreakpoint = 2,
SysDbgSetSpecialCall = 3,
SysDbgClearSpecialCalls = 4,
SysDbgQuerySpecialCalls = 5,
// 以下是NT 5.1 新增的
SysDbgDbgBreakPointWithStatus = 6,
//获取KdVersionBlock
SysDbgSysGetVersion = 7,
//从内核空间拷贝到用户空间,或者从用户空间拷贝到用户空间
//但是不能从用户空间拷贝到内核空间
SysDbgCopyMemoryChunks_0 = 8,
//SysDbgReadVirtualMemory = 8,
//从用户空间拷贝到内核空间,或者从用户空间拷贝到用户空间
//但是不能从内核空间拷贝到用户空间
SysDbgCopyMemoryChunks_1 = 9,
//SysDbgWriteVirtualMemory = 9,
//从物理地址拷贝到用户空间,不能写到内核空间
SysDbgCopyMemoryChunks_2 = 10,
//SysDbgReadVirtualMemory = 10,
//从用户空间拷贝到物理地址,不能读取内核空间
SysDbgCopyMemoryChunks_3 = 11,
//SysDbgWriteVirtualMemory = 11,
//读写处理器相关控制块
SysDbgSysReadControlSpace = 12,
SysDbgSysWriteControlSpace = 13,
//读写端口
SysDbgSysReadIoSpace = 14,
SysDbgSysWriteIoSpace = 15,
//分别调用RDMSR@4和_WRMSR@12
SysDbgSysReadMsr = 16,
SysDbgSysWriteMsr = 17,
//读写总线数据
SysDbgSysReadBusData = 18,
SysDbgSysWriteBusData = 19,
SysDbgSysCheckLowMemory = 20,
// 以下是NT 5.2 新增的
//分别调用_KdEnableDebugger@0和_KdDisableDebugger@0
SysDbgEnableDebugger = 21,
SysDbgDisableDebugger = 22,
//获取和设置一些调试相关的变量
SysDbgGetAutoEnableOnEvent = 23,
SysDbgSetAutoEnableOnEvent = 24,
SysDbgGetPitchDebugger = 25,
SysDbgSetDbgPrintBufferSize = 26,
SysDbgGetIgnoreUmExceptions = 27,
SysDbgSetIgnoreUmExceptions = 28
} SYSDBG_COMMAND, *PSYSDBG_COMMAND; 呵呵~~~
看到第一次看到int 2E而且是0xFF的函数就去看了一下是哪个函数结果发现是NtSystemDebugControl,之前知道这个东西可以写内存,其他就不知道了。
能力值:
( LV2,RANK:10 )
8 楼
因为新的保护箱又改变了一些东西,所以才这样。。。。
能力值:
( LV2,RANK:10 )
9 楼
那篇我也看了,达人真多啊 ^^
我windbg初学(还是跟着那本厚书学的),还不太会动态的跟踪程序 - -#
本来我用的sysenter,结果编译不通过,说什么“****newline*****”,只好改作int 2eh啦,嘿嘿,没想到居然一下子成功了~
能力值:
( LV4,RANK:50 )
10 楼
第二个NtSystemDebugControl没有看过。不过还有种方法:
注射一个进程,然后写一个不能写的空间,引起访问违规,比如这样:
asm
xor eax, eax
mov [eax], 0
end;
然后目标就因为写 0x00000000 地址的内存而被系统给中止了。
具体的看这里,其中有一个方法就是利用ExitProcess(直接在ExitProcess上CreateRemoteThread)。
http://www.delphibbs.com/keylife/iblog_show.asp?xid=23375 ps: ExitProcess对很多杀毒软件都无效,估计挂了钩子。
利用访问违规杀进程就比较强悍了,ring3级的程序基本都能冲突掉。
能力值:
( LV8,RANK:130 )
11 楼
用GetProcAddress弄函数的地址不行吗~~~~~
能力值:
( LV2,RANK:10 )
12 楼
貌似可以,嘿嘿^^ 在ntdll.dll里
To 10楼:
4楼都说啦,我第一种方法就是先注入远程线程,结束不掉才会执行第二段代码 - -#
能力值:
( LV2,RANK:10 )
13 楼
学4个月 强啊 。。
能力值:
( LV8,RANK:130 )
14 楼
我还是对那种算法比较感兴趣。。。
楼主解释一下吧。。
供菜鸟学习一下。
能力值:
( LV2,RANK:10 )
15 楼
哈,算法真的很老土的,在物理内存中暴力搜索定位_EPROCESS块,所以速度才会像蜗牛一样:(
能力值:
( LV4,RANK:50 )
16 楼
想必编程前有过其他的学习,比如Crack.
如果真是四个月,只能说
兄台,天赋异禀,骨骼精奇,日后必是武学奇才!
能力值:
( LV2,RANK:10 )
17 楼
咳,以前一直和硬件打交道,我的专业是搞那些电路板,弄弄放大器、滤波器、陷波器、调制于解调、电源……什么的。然后碰到可编程逻辑器件CPLD什么的,才开始接触编程,用的语言是verlog(应该是类C的吧)。CPLD是个很吃力的东西,在它之后用到现场可编程逻辑门阵列(FPGA)的片子,才开始重视编程。然后就发现,哇,原来硬件和软件某种程度上居然是相通的。之后很弄了本很老旧的C书,很粗糙的学了遍,写了几个课后题目程序。现在VC用起来还很吃力,只会弄对话框(似乎这个+按钮测试最方便)。
能力值:
( LV2,RANK:10 )
18 楼
PS:
硬件竟然可以通过软件来控制,人类可以发展到这一步,真是太神奇了~
无限的吸引力,澎湃的好奇心,偶对此完全0免疫力哇~
日下对编程,尤其是底层,甚有兴趣。无奈时间有限,感慨精力有限,唉。。。。
能力值:
( LV2,RANK:10 )
19 楼
暴力找EPROCESS不需要那么长时间吧。。。。
能力值:
( LV2,RANK:10 )
20 楼
只学四个月。。。牛人啊。
能力值:
( LV2,RANK:10 )
21 楼
SYSENTER可以这样写:
_asm{
_EMIT 0FH // SYSENTER
_EMIT 34H
}
能力值:
( LV2,RANK:10 )
22 楼
360在KiSystemService上下手脚。只要你传入驱动的不是明文的EPROCESS或者PID,就可以结束它。
能力值:
( LV2,RANK:10 )
23 楼
弓虽就一个字
能力值:
( LV2,RANK:10 )
24 楼
呵呵 学习了哦。。。。。。。。