HOOK ZwCreateThread注入

看到lj8888牛人发的一篇使用HOOK ZwCreateThread注入的文章,感到真是好极了,不过牛人对这种注入方法并没有细说。so 我来稍细说一下,先看下ZwCreateThread:
NTSTATUS NTAPI ZwCreateThread(
OUT     PHANDLE                 ThreadHandle,
IN      ACCESS_MASK             DesiredAccess,
IN      POBJECT_ATTRIBUTES      ObjectAttributes,
IN      HANDLE                  ProcessHandle,
OUT     PCLIENT_ID              ClientId,
IN      PCONTEXT                ThreadContext,
IN      PUSER_STACK             UserStack,
IN      BOOLEAN                 CreateSuspended)
当你在桌面点击某一个程序,比如记事本,notepad.exe的父进程就是explorer.exe,用lanuch.exe启动game.exe时同理。explorer.exe负责启动notepad.exe的第一个线程,其实就是notepad.exe的EOP,这时拦住ZwCreateThread,PsGetCurrentProcess得到的就是explorer.exe的进程对象,ProcessHandle != 0xffffffff,根据进程句柄获得进程对象,就会发现这个是notepad.exe进程对象,ThreadContext->EAX就是线程的开始地址了。现在的方法,就是在notepad.exe的地址空间里申请一块地址,写一串shellcode,这个shellcode就执行LoadLibraryA +你的DLL,然后再jmp 真正的EOP,把ThreadContext->Eax替换了,就能注入了,但问题是当时是explorer.exe的空间,所以要使用KeAttachProcess切入到notepad.exe中去,然后使用ZwAllocateVirtualMemory申请空间,写shellcode。ZwAllocateVirtualMemory没导出,自己使用MmGetSystemRoutineAddress获得一下即可。
有些小问题,就是LoadLibraryA的地址可能不确定,相信大家以前玩过病毒,这个难不倒大家的。使用SEH的顶端处理函数,获得kernel32.dll模块的方法,大家一定会的,然后遍历其导出表,如果大家想手工,每次也可以通过DeviceIOControl将LoadLibraryA的地址发给驱动,当然这时驱动需要创一个设备,以后与r3的程序通信。还有就是父进程与子进程的名字,大家也可以搞个易于配置的,使用DeviceIoControl发给驱动。
这样注入的确英俊帅呆,人见人爱,想注入谁,就注谁!!!

(文章今日已有 1 人访问,总访问量 2 ::>_<::)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇