能力值:
( LV2,RANK:10 )
|
-
-
2 楼
学习了
|
能力值:
( LV12,RANK:310 )
|
-
-
3 楼
|
能力值:
( LV5,RANK:60 )
|
-
-
4 楼
这个用来注入dll好像不错
|
能力值:
( LV12,RANK:310 )
|
-
-
5 楼
放学打我不
这个用来注入dll好像不错[em_19]
嗯呢,我翻译的时候也这么想来着,哈哈哈
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
win7测试了下 没成功 ! 难道我得打开方式不对?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
|
能力值:
( LV12,RANK:310 )
|
-
-
8 楼
靴子
win7测试了下 没成功 ! 难道我得打开方式不对?
我看文章里说的是win10,要不你试试?
|
能力值:
( LV12,RANK:310 )
|
-
-
9 楼
|
能力值:
( LV4,RANK:40 )
|
-
-
10 楼
的确特别骚..其实学习调试r0是非常有意思的事情 比R3有意思的太多了...
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
mark一下
|
能力值:
( LV6,RANK:80 )
|
-
-
12 楼
mark,win7 x64测试没成功,NtSetInformationProcess填充InstrumentationCallback失败,windbg里修改InstrumentationCallback到shellcode地址,下断点也没反应,估计还需要适配别的什么地方么
|
能力值:
( LV12,RANK:310 )
|
-
-
13 楼
Justgoon
mark,win7 x64测试没成功,NtSetInformationProcess填充InstrumentationCallback失败,windbg里修改InstrumentationCallba ...
我觉得还是先在作者环境相同的win10下测试成功,再在win7下尝试,也有可能对shellcode地址有一定范围要求,这个需要实际试一下~
|
能力值:
( LV12,RANK:310 )
|
-
-
14 楼
萌克力
的确特别骚..其实学习调试r0是非常有意思的事情 比R3有意思的太多了...
嗯呢,想真正理解系统机制还是要深入进去看
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
mark学习
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
"尾部绕过技术允许后处理,这对于在原始流程执行完毕之后对输出参数进行过滤十分有用。"
X64前4参数在寄存器里面, 在函数尾部挂钩也没法过滤输出参数. 只能过滤下返回值. 而NT函数返回值都是NTSTATUS.
|
能力值:
( LV12,RANK:310 )
|
-
-
17 楼
tsoo
"尾部绕过技术允许后处理,这对于在原始流程执行完毕之后对输出参数进行过滤十分有用。"X64前4参数在寄存器里面, 在函数尾部挂钩也没法过滤输出参数.&n ...
这里的输出参数我觉得是地址引用类型的参数,这种参数在x86和x64下都是可用的,另外我理解的是,可操作的项确实也包括返回值
|
能力值:
( LV4,RANK:50 )
|
-
-
18 楼
木无聊偶
我觉得还是先在作者环境相同的win10下测试成功,再在win7下尝试,也有可能对shellcode地址有一定范围要求,这个需要实际试一下~
win7下会返回STATUS_INFO_LENGTH_MISMATCH,自己逆NTOS后,可见长度为8 if ( (_DWORD)a4 != 8 ) return 0xC0000004; typedef struct _PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION_W7 { PVOID Callback; } PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION_W7, *PPROCESS_INSTRUMENTATION_CALLBACK_INFORMATION_W7; PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION_W7 nirvanaW7; nirvanaW7.Callback = (PVOID)(ULONG_PTR)medium; status = NtSetInformationProcess( GetCurrentProcess(), (PROCESS_INFORMATION_CLASS)ProcessInstrumentationCallback, &nirvanaW7, sizeof(nirvanaW7) );
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
木无聊偶
这里的输出参数我觉得是地址引用类型的参数,这种参数在x86和x64下都是可用的,另外我理解的是,可操作的项确实也包括返回值
callback函数执行时机是在syscall --> ret 之间, 这个时候rcx, rdx, r8,r9 的值已经"丢"了, 即使有参数是引用类型, 在这个时机也无能为力了吧(因为没法知道当初传递的参数到底是啥) 比如NtOpenProcess , 根据X64调用约定, 前四个参数在寄存器里面, 调用代码就类似这样: mov r9,..... mov r8,...... mov rdx,..... lea rcx, pHandle call NtOpenProcess 假设我想实现替换掉pHandle里面的进程句柄的目的(也就是在我的callback里面改掉 *phandle ), 那就必须得知道当初call openprocess的时候 rcx的值是多少, 但是在callback里面, rcx,rdx的值已经变化了. 貌似X64调用约定也没有规定函数ret的时候rcx,rdx...一定要跟当初call函数时一致. 如果是32位, 在函数ret的时候, 参数还在栈里面, 的确能够过滤引用类的参数. 目前个人感觉X64只能过滤到返回值, 除非有其他办法能得到当初RCX的值. 当然能过滤返回值也不错了, 错误的返回值也能干扰到程序逻辑.
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
wowocock
win7下会返回STATUS_INFO_LENGTH_MISMATCH,自己逆NTOS后,可见长度为8
if ( (_DWORD)a4 != 8 )
return 0xC000000 ...
大牛说得对, WIN7上结构体里面只有一个 callback地址. 然后对于原生64进程, 我感觉的确是只能过滤到返回值, 如果要过滤输出参数, 那只能过滤到参数个数大于4个的NTAPI, 而且只能过滤到第5个及以后的参数. 大牛有高招没? 或者只勾特定点, 结合调用源的特征码, 强行还原rcx ,rdx.
|
能力值:
( LV4,RANK:50 )
|
-
-
21 楼
感谢分享!
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
wowocock
win7下会返回STATUS_INFO_LENGTH_MISMATCH,自己逆NTOS后,可见长度为8
if ( (_DWORD)a4 != 8 )
return 0xC000000 ...
32位模式sizeof(nirvanaW7)=4 64位模式sizeof(nirvanaW7)=8 所以NtSetInformationProcess和callback必须在64位模式下调用才对吧? Win7成功了没?
|
能力值:
( LV5,RANK:68 )
|
-
-
23 楼
yy虫子yy
32位模式sizeof(nirvanaW7)=4
64位模式sizeof(nirvanaW7)=8
所以NtSetInformationProcess和callback必须在64位模式下调用才对吧 ...
win7 下 只有 x64模式有效, wow64无效。
|
|
|