当前位置: 首页 > news >正文

如何制作网站和软件商务网站的规划流程

如何制作网站和软件,商务网站的规划流程,wordpress网易音乐播放器,360浏览器网页版入口Windows 进程创建完整过程#xff08;除去细节#xff09; 当前流程是分析WinXP x86得到的#xff0c;在最新版本Windows上不一定正确#xff0c;但是可以做一个参考#xff0c; 由于我这里符号并不全#xff0c;所以导致我这里有些东西看到的可能是错误的#xff0c;误…Windows 进程创建完整过程除去细节 当前流程是分析WinXP x86得到的在最新版本Windows上不一定正确但是可以做一个参考 由于我这里符号并不全所以导致我这里有些东西看到的可能是错误的误导了我然后我就做了个错误的记录 有缘人如果看到的话可以帮我指正一下我会很高兴。 工作挺忙的三天的业余时间哎个人水平问题吧还是没有办法详细地分析出完整套路算是个简要分析吧。   差点忘记了我这里分析的文件是 kernel32.dll 和 ntoskrnl.exe     1入口  CreateProcessW 当我们在应用层调用CreateProcessW的时候参数稍作整理会直接调用到 CreateProcessInternalW CreateProcessA会调用 CreateProcessInternalA然后整理了参数也会调用到CreateProcessInternalW     2CreateProcessInternalW 首先开场是大概是2000来行的汇编指令判断进程创建参数以及文件安全属性等等乱七八糟没用的   然后是 NtOpenFile NtCreateSection 一系列的函数获取文件句柄和section句柄   中间经过一系列的文件类型判断有效性判断及属性判断   调用 NtQuerySection 获取段属性   判断是否需要Debug方式启动并且做对应的设置   加载 advapi32.dll 然后获取 CreateProcessAsUserSecure 函数地址但是并没有使用它   很可能是根据这个函数是否存在来判断当前操作系统版本后面直接调用 NtQuerySystemInformation 来获取操作系统信息参数很奇怪0x47可能就是特殊的情况 有空再看   中间判断了一个位然后调用了DBG相关的函数可能是判断DBG相关吧   最后就是一个Nt函数NtCreateProcessEx进入内核了也可能是个Zw函数     3NtCreateProcessEx 上一部分调用ntdll 的ZwCreateProcessEx/NtCreateProcessEx 之后 进入内核走SSDT表第48项进入NtCreateProcessEx   判断当前执行模式内核模式的话就往下走否则改了模式往下走 调用PspCreateProcessEx   1获取父进程信息 并且继承父进程的执行位置   2给子进程创建一个EPROCESS然后初步设置它   3初始化子进程的线程列表   4增加引用计数并且继承父进程的QuotaBlock如果父进程存在的话否则用系统默认的   5继承父进程的DeviceMap如果有父进程否则用系统默认的   6如果父进程存在那么再继承父进程的属性   7如果参数Section句柄存在那么就获取对象并且保存后面需要用保存到进程中 这个Section实际上是上面应用层CreateProcessInternalW函数创建的那个Section   8如果Debug端口存在那么就获取它的对象如果不存在则从父进程继承 上面的第一个jnz跳转到下面下面的最后一个jmp回到上面的cmp处   9初始化PrimaryToken   10中间继续初始化各种乱七八糟东西包括 初始化进程地址空间 如果当前进程EProcess不存在就用另外一种方法初始化进程空间 PCB 优先级组因为后面直接就用EPROCESS了所以我推断这里可能同时也初始化了EPROCESS剩下的部分   11如果 section存在那么attach到子进程 在很深的位置先循环调用了N次 MiMapViewOfPhysicalSection 函数来映射物理内存地址然后 初始化section根据section展开文件到子进程 这里有else但是一般来说不会走到else里面因为如果是有效PE那么section肯定存在这是应用层已经找到的然后转化成的内核对象 然后向自己内部再影射一个子进程模块的内存映射了之后就释放掉只是判断是否成功如果成功什么都不干不成功就返回到label_48 走到else里面也是同样的操作只不过目标section不存在那么就只能映射自己的   ///中间有一块这段代码个人能力问题无法看出这里是做什么的因为结构体识别可能是有一定的问题 ///    12初始化PEB PEB 实际上这里有点问题v74在前面的时候是必须 hSection 存在的时候才会 1也就是说必须hSection存在才会进入外层if 但是外层if进入了之后反过来说就是hSection肯定存在肯定不会走else但是为什么它这么写   13初始化APC不知道是否真的是这样但是清理APC的功能这里是第一次使用 然后判断APC对列里面有没有APC如果有的话触发一个软中断去运行它   14做一个 AccessState 然后使用它把子进程EPROCESS放到进程句柄表中返回一个句柄 然后AccessState就没用了释放掉 最后设置一下进程优先级组   15接近尾声这里获取当前进程允许的访问权限位   16收尾 设置进程创建时间然后返回进程句柄减掉自己的引用计数防止泄露     4CreateProcessInternalW回到应用层了 沿着第二部分的NtCreateProcessEx继续来看这里已经回到应用层了 继续往下并且这里拿到了一个 新进程的句柄也就是第一个参数   一大片代码设置进程优先级和处理模式相关 NtSetInformationProcess NtAllocateVirtualMemory 申请了一块内存然后好像也没用过 创建命令行参数 初始化stdin stdout stderr BasePushProcessParameters 就是直接dup出来然后给对面进程用 给目标进程创建一个栈 给线程构建上下文 然后主线程就可以跑了 上下文构建中其实有个小细节 其实在 BaseInitializeContext 函数中根据第五个参数会判断走哪个启动函数 如上进程启动最后一个参数写死为0则会走最下面的 BaseProcessStartThunk 函数 而 BaseProcessStartThunk 内部还调用了。。。 再往里看就是这样 通过对比另外两个函数可以推断这里应该就是走主线程 _tmainCRTStartup / wWinMainCRTStartup 位置的了     5NtCreateThread 开始主线程部分 应用层陷入内核走SSDT到了驱动里面的NtCreateThread 进来还是模式校验 然后走   1获取进程对象   2创建ETHREAD   3在进程句柄表中创建线程的handle   4创建TEB 初始化TEB   5中间使用了超级大篇幅来初始化这个ETHREAD 初始化了之后这一块就是准备开跑了 进程的活动线程数然后插入列表然后启动线程   6直到这里这里是进程创建回调注意哦这里是在父进程里面调用的   7判断作业是否在工作所在进程是否在作业中如果在的话特殊处理让他去完成并且清理APC   8压轴戏线程创建回调   9两个回调结束之后似乎就没什么好做得了把线程对象插入句柄表 这里的插入和前面的创建不是一个东西那个ExCreateHandle 是创建全局句柄表 这里是插入进程句柄表   10后面就是枯燥乏味的收尾工作 写时间戳写访问权限解对象引用 再清理一次APC 然后把线程句柄返回   11补充一下吧 正常结束时这里实际上是有个收尾的小工作的 这里面KeReadyThread 是关键操作它把 ETHREAD 放到了进程 KPROCESS 的 ReadyListHead 里面 这样应该就可以swapcontext了 其实它内部还有众多关键函数如 KiSetSwapEvent 看名字和内部实现似乎就是抢抢占时间片去了。   我所关心的整个部分实际上就是 进程、线程创建回调的触发时机实际上触发的进程上下文都在父进程中触发时机都在PspCreateThread中 因为实际工作中我们能用到的部分也就这里了     6回到应用层 这里直接判断返回值有问题的话直接错误返回 没有问题的情况下那么继续往下做判断   1通知Csrss 由于我这里符号不全我想下面的ExitStatus 应该是 Csrss返回的吧。 一旦有问题立刻退出   2指派进程到一个作业中   3后面直到最后通篇都是整理内存释放空间了 基本上就没有干别的活 最后才是函数返回。   这样整体流程结束。     补充一下镜像加载回调的位置吧 这个实际上镜像加载回调被调用的时候已经和镜像没什么关系了 而且镜像早早已经被铺到内存中了 在InitThread之前是初始化TEB部分这里初始化了TEB之后设置了一个回调函数 创建应用层线程PspUserThreadStartup 进入这个函数里面可以看到 有这样一个判断由于我实在没有找到那个6代表什么可能是2|4但是我没找到所以无法知道它是什么 进入函数之后里面会进行一次镜像加载回调状态的判断如果非隐藏状态那么再经过一个函数 就会到这里联系外面的函数可以清晰地看出这里就是镜像加载回调的调用位置 总地来说由于镜像加载回调有可能是异步调用的所以无法确切地知道它的位置 但是它的位置实际上是在前两个回调之后的其实已知这些都是废话       重点 在CreateProcess 函数中会开辟子进程的进程空间 然后同时会map子进程的主模块到进程空间中这时不会调用镜像加载回调和进程创建回调 到了CreateThread 里面整理了线程各种信息之后 会先调用进程创建回调 然后调用线程创建回调 这时当前进程上下文还是在父进程中 最后当线程跑起来之后 第一个回调会被触发就是主模块的镜像加载回调 这时剩下的就是其他模块的镜像加载回调了 后面就不是很重要了前面这个流程应该是最重要的。转载于:https://www.cnblogs.com/suanguade/p/5844296.html
http://www.zqtcl.cn/news/973407/

相关文章:

  • 邢台外贸网站建设怎么在抖音上卖东西
  • 光泽县规划建设局网站番禺做哪些做网站的
  • 海南响应式网站建设哪里好衡水哪儿做wap网站
  • 月熊志网站百度网页版
  • 三亚网站建设方案鱼爪商标交易平台
  • phpwind 手机网站模板建立网站的英文短语
  • 年度网站建设工作总结制作微信小程序需要什么技术
  • wordpress打字不显示图片wordpress 访问优化
  • 太原网站建设方案咨询网站开发公司的选择
  • 广西网站建设设计大连嘉良建设有限公司网站
  • 白名单查询网站网站建设改变某个表格大小
  • 青岛网站开发公司电话百度投放
  • 唐山玉田孤树做宣传上什么网站百度推广有效果吗
  • 亚马逊网站特点佛山营销型网页设计
  • 网站建设 长沙开福区做百度移动网站排名软
  • 广州购物网站建设在线解压网站
  • 网站建设教学方法探究购物网站开发中查看订单的实现逻辑
  • 网站建设漂亮的模板西安网络优化大的公司
  • 如何免费简单建一个网站河北优化网站获客qq
  • 如何给网站做seo东莞网站建设星河
  • 什么叫门户类网站哪个网站能帮助做路书
  • 网站建站基础娄底网站推广
  • WordPress网站仿制光明建网站的公司
  • 可以做企业网站昆明seo怎么做
  • 西安那里做网站媒体软文发稿
  • 怎样做网站呢wordpress首页幻灯片尺寸
  • 青岛即墨网站网页设计营销型网站规划建设的七大要素
  • WordPress建站经验固原市住房和城乡建设厅网站
  • 可以查企业信息的软件wordpress换模板 seo
  • 网站广告怎么做wordpress封面图七牛