
沙箱进程启动后驱动获取了进程启动信息,通知到svc进程。
svc进程执行Inject_low。
首先在目标进程中申请一个空间,地址remote_addr,长度lowdata的长度,将LowData放进去。这个数据是一个dll,工程是LowLevel,作为资源放在svc中,在注入前已经释放出来。
申请的空间中的数据如图entry.asm。
申请数据分成两部分,一部分是.text执行代码,一部分是.zzzz。
其中.zzzz包含两个指针,一个是_Start,指向了运行代码的位置,这个很关键,这是程序的入口位置。
另一个指向SBIEOW_DATA。
这个结构是Inject_low要做的一个重要工作:填充该结构中的数据。这个结构会被entry.asm使用来进行初始化。
要填充这个数据,需要知道这个数据的位置,方法就是采用.zzzz的数据节(section)。找到这个节之后,就找到了这个数据相对于remote_addr的位置。
填充lowdata数据包括:LdrInitializeThunk_tramp,api_device_handle,syscall_data,NtDelayExecution_code
LdrInitializeThunk_tramp 最初是从目标进程中拷贝的。( void *remote_addr = InjectLow_CopyCode(hProcess, lowdata.is_wow64, lowdata.LdrInitializeThunk_tramp, sizeof(lowdata.LdrInitializeThunk_tramp));主要是从LarInitializeThunk的位置保存原先的代码。先保存后面在InjectL

本文详细介绍了Sandboxie的注入过程,从沙箱进程启动后驱动如何获取进程信息,到svc进程执行Inject_low进行dll注入。讲解了如何在目标进程中分配内存,填充SBIEOW_DATA结构,以及LdrInitializeThunk_tramp、api_device_handle、NtDelayExecution_code等关键数据的处理。最后,讨论了m_sbielow_ptr和m_syscall_data的生成过程,涉及资源解码和驱动交互。
最低0.47元/天 解锁文章
1118

被折叠的 条评论
为什么被折叠?



