[原创]X32下逆向PsSetLoadImageNotifyRoutine
一丶简介
纯属兴趣爱好.特来逆向玩玩.
PsSetLoadImageNotifyRoutine 是内核中用来监控模块加载.操作系统给我们提供的回调. 我们只需要填写对应的回调函数原型即可进行加监控.
既然可以进行监控.那么我们的回调函数存储在哪.这是个问题.所以特来逆向玩玩.
二丶逆向过程
首先我的思路是直接windbg 挂载win7. 然后找到对应的函数进行
uf 反汇编. 来静态查看. 如果那里有疑问则自己进行动态查看.
过程很快.因为逆向过 进程回调监控.所以这个也就很快了.慢慢学习经验.
1.逆向PsSetLoadImageNotifyRoutine
3f809b3 8bff mov edi,edi
83f809b5 55 push ebp
83f809b6 8bec mov ebp,esp
83f809b8 53 push ebx
83f809b9 56 push esi
83f809ba 57 push edi
83f809bb 33ff xor edi,edi
83f809bd 57 push edi
83f809be ff7508 push dword ptr [ebp+8] 参数1压栈: 参数1 = 我们设置的回调函数地址.
83f809c1 e8113d0200 call nt!ExAllocateCallBack (83fa46d7) 逆向一下ExAllocateCallBack
83f809c6 8bd8 mov ebx,eax
83f809c8 3bdf cmp ebx,edi
83f809ca 7425 je nt!PsSetLoadImageNotifyRoutine+0x3e (83f809f1) //内部会申请一个结构体内存.保存我们的函数指针 以及 参数 结果给eax.
nt!PsSetLoadImageNotifyRoutine+0x19:
83f809cc be802bf583 mov esi,offset nt!PspLoadImageNotifyRoutine (83f52b80)//得出回调函数数组.
nt!PsSetLoadImageNotifyRoutine+0x1e:
83f809d1 6a00 push 0 0
83f809d3 8bcb mov ecx,ebx ecx = 结构体指针
83f809d5 8bc6 mov eax,esi eax = 回调函数数组.
ExCompareExchangeCallBack(函数数组,结构体指针,0); 根据函数名可以得知 比较交换回调函数指针. 逆向志之 在下面观看.
83f809d7 e82a3d0200 call nt!ExCompareExchangeCallBack (83fa4706)
83f809dc 84c0 test al,al
83f809de 751d jne nt!PsSetLoadImageNotifyRoutine+0x4a (83f809fd)
nt!PsSetLoadImageNotifyRoutine+0x2d:
83f809e0 83c704 add edi,4
83f809e3 83c604 add esi,4
83f809e6 83ff20 cmp edi,20h
83f809e9 72e6 jb nt!PsSetLoadImageNotifyRoutine+0x1e (83f809d1)
nt!PsSetLoadImageNotifyRoutine+0x38:
83f809eb 53 push ebx
83f809ec e824b71000 call nt!SepFreeCapturedString (8408c115)
nt!PsSetLoadImageNotifyRoutine+0x3e:
83f809f1 b89a0000c0 mov eax,0C000009Ah
nt!PsSetLoadImageNotifyRoutine+0x43:
83f809f6 5f pop edi
83f809f7 5e pop esi
83f809f8 5b pop ebx
83f809f9 5d pop ebp
83f809fa c20400 ret 4
nt!PsSetLoadImageNotifyRoutine+0x4a:
83f809fd 33c9 xor ecx,ecx
83f809ff b8a02bf583 mov eax,offset nt!PspLoadImageNotifyRoutineCount (83f52ba0)
83f80a04 41 inc ecx
83f80a05 f00fc108 lock xadd dword ptr [eax],ecx
83f80a09 a1782bf583 mov eax,dword ptr [nt!PspNotifyEnableMask (83f52b78)]
83f80a0e a801 test al,1
83f80a10 750a jne nt!PsSetLoadImageNotifyRoutine+0x69 (83f80a1c)
nt!PsSetLoadImageNotifyRoutine+0x5f:
83f80a12 b8782bf583 mov eax,offset nt!PspNotifyEnableMask (83f52b78)
83f80a17 f00fba2800 lock bts dword ptr [eax],0
nt!PsSetLoadImageNotifyRoutine+0x69:
83f80a1c 33c0 xor eax,eax
83f80a1e ebd6 jmp nt!PsSetLoadImageNotifyRoutine+0x43 (83f809f6)
通过逆向次函数.可以得出我们的回调函数数组. 以及我们申请的回调函数指针.
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
