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

成都网站制作是什么广州网站优

成都网站制作是什么,广州网站优,百度收录网站关键字,php做网站切换语言comeasy 借鉴点1 Loadlibray的时间选择 注入库wrotei.dll#xff0c;为了获取istream的接口#xff0c;需要loadlibrary#xff0c;但是在dllmain中是不建议这样做的。因此#xff0c;动态库在dllmain的时候直接挂载了comeasy.exe的入口 //获取入口 TrueEntryPoint (i…comeasy 借鉴点1 Loadlibray的时间选择 注入库wrotei.dll为了获取istream的接口需要loadlibrary但是在dllmain中是不建议这样做的。因此动态库在dllmain的时候直接挂载了comeasy.exe的入口 //获取入口 TrueEntryPoint (int (WINAPI *)(VOID))DetourGetEntryPoint(NULL); ... //挂载入口 DetourAttach((PVOID)TrueEntryPoint, TimedEntryPoint); 从加载顺序上看 红色箭头指向的wrotei64.dll在ole32.dll之前就已经启动了而要挂载的函数在ole32.dll里因此在不调用的loadlibary的情况挂载这些函数可以挂载exe的entrypoint在exe加载完毕所有dll后运行entrypoint时再调用钩子函数进行ole32函数的挂载。 借鉴点2挂载虚函数 获取istream直接挂载指定的虚函数直接对虚函数进行挂载而不是挂载CreateInstance等函数返回一个对象。 CreateStreamOnHGlobal(NULL, TRUE, pStream); ... DetourAttach((PVOID)RealIStreamWrite, MineIStreamWrite); 注意MineIStreamWrite的第一个参数是IStream *this。这是因为this是c方法的第一个默认对象。 commem 借鉴点虚函数挂载 一个标准的com虚函数挂载样例演示了虚函数直接调用的方式充分说明了虚函数的第一个参数this的使用。 Disas 借鉴点指令拷贝 每个机器指令都有自己的长度本用例演示了如何从指定的位置拷贝一个完整的指令。 主要使用了 DetourCodeFromPointer和DetourCopyInstruction Dtest 演示了hook 0个参数1个参数到多个参数可变参数的hook方法同时演示了多个detours hook同一个函数时的调用效果 Dumpe 借鉴点导出表遍历 使用detour函数遍历DLL的导出表并给出导出函数的序号位置(RVA)名称。 主要演示了导出表遍历的回调处理。 Dumpi 借鉴点导入表遍历 使用detour函数遍历exe的导入表并给出导入函数的模块和名称。 主要演示了导入表遍历的回调处理。 dynamic_alloc 借鉴点动态分配内存并拷贝代码作为detour运行。 注意该函数还不完整因为没有调用trampoline。 detours前 // return a non-nullptr value. void *target_function() { 00007FF6A50511E0 sub rsp,28h std::cout __FUNCTION__ std::endl; 00007FF6A50511E4 mov dl,2Bh 00007FF6A50511E6 lea rcx,[std::cout (07FF6A50A1640h)] 00007FF6A50511ED call std::operatorstd::char_traitschar (07FF6A5051D50h) 00007FF6A50511F2 lea rdx,[__xt_z8h (07FF6A508A420h)] 00007FF6A50511F9 mov rcx,rax 00007FF6A50511FC call std::operatorstd::char_traitschar (07FF6A50520C0h) 00007FF6A5051201 lea rdx,[std::endlchar,std::char_traitschar (07FF6A5053330h)] 00007FF6A5051208 mov rcx,rax 00007FF6A505120B call std::basic_ostreamchar,std::char_traitschar ::operator (07FF6A5054E70h) return nullptr; 00007FF6A5051210 xor eax,eax } 00007FF6A5051212 add rsp,28h 00007FF6A5051216 ret 准备的地址00007FF66504FFF0如下 00007FF66504FFEE nop 00007FF66504FFEF ret 00007FF66504FFF0 nop 00007FF66504FFF1 nop 00007FF66504FFF2 mov rax,0DEADBEEF00000000h 00007FF66504FFFC nop 00007FF66504FFFD ret detours之后 void *target_function() { 00007FF6A50511E0 jmp 00007FF665030178 std::cout __FUNCTION__ std::endl; 00007FF6A50511E5 int 3 00007FF6A50511E6 lea rcx,[std::cout (07FF6A50A1640h)] 00007FF6A50511ED call std::operatorstd::char_traitschar (07FF6A5051D50h) 00007FF6A50511F2 lea rdx,[__xt_z8h (07FF6A508A420h)] 00007FF6A50511F9 mov rcx,rax 00007FF6A50511FC call std::operatorstd::char_traitschar (07FF6A50520C0h) 00007FF6A5051201 lea rdx,[std::endlchar,std::char_traitschar (07FF6A5053330h)] 00007FF6A5051208 mov rcx,rax 00007FF6A505120B call std::basic_ostreamchar,std::char_traitschar ::operator (07FF6A5054E70h) return nullptr; 00007FF6A5051210 xor eax,eax } 00007FF6A5051212 add rsp,28h 00007FF6A5051216 ret 00007FF665030178 jmp qword ptr [7FF665030170h] 最终跳转到00007FF66504FFF0得到一个非空的返回值输出如下 1. target_function() without Detourtarget_function 0000000000000000 detour: 00007FF6A50511E0 -- 00007FF66504FFF0 (trampoline: 00007FF665030120 ) 2. target_function() with Detour DEADBEEF00000000 3. target_function() without Detour target_function 0000000000000000 虽然有tranmpoline但是没调用因为detours函数没有调用trampoline。 echo 借鉴点挂接exe的导出表 有意思的是exe导出了echo而注入dll依赖exe以及其导出函数echo。 einst 借鉴点动态库特征查找 通过插入.detours段并在里面放置guid然后遍历所有dll并在dll里查找.detours段遍历里面的section查找数据结构中的guid。 execp 借鉴点异常捕获的detours处理 获取异常处理函数KiUserExceptionDispatcherNtContinue。 对KiUserExceptionDispatcher进行hook。该hook是一个通用的处理用户可以自己设置自己的异常处理函数而且仅关注业务 就可以了。 在真正的hook处理Detour_KiUserExceptionDispatcher中需要进行一些异常的处理然后调用用户自己的异常处理函数Detour_KiUserExceptionDispatcher根据用户的返回值决定继续还是调用下一个或是交给调试器。 借鉴点异常的三种处理方法 程序开始申请了一个可写内存写入数据然后将该内存设置为只读。随后顺序调用了safe和raw两个方法这两个方法会调用BadCode方法该方法会做两个赋值位置一个正确但是只读一个是错误的内存两处都会触发异常。异常会进入KiUserExceptionDispatcher由于已经HOOK因此会进入Detour_KiUserExceptionDispatcher中。在该函数中会调用自己编写的MyVirtualFaultFilter异常处理MyVirtualFaultFilter会根据异常的类型“访问被拒绝”以及根据指针是否我们要访问的只读的指针如果是则将只读的变量值修改为可写返回continue标志如果不是则返回查找下一个异常处理函数。如果是要访问的地址则Detour_KiUserExceptionDispatcher根据continue标志会调用NtContinue继续处理。如果不是要访问的地址则Detour_KiUserExceptionDispatcher会查找下一个异常处理函数在safe函数调用中由于包含try catch会自行正常处理并继续。在raw函数中不包含try catch程序会异常退出。如果是调试模式则该异常会再次传递给调试器。 注意NtContinue 是一个系统级调用它用于在 Windows 内核模式下恢复线程的执行。这个调用通常与异常处理和上下文切换相关。当 NtContinue 被调用时它实际上是在修改当前线程的上下文以便线程可以从之前保存的某个点继续执行。以下是exception处理函数CONTEXT参数的内容 NtContinue 不需要返回因为它实际上是在改变线程的执行流程而不是像常规函数调用那样执行一些操作然后返回到调用者。当 NtContinue 被调用时它使用提供的上下文信息来恢复线程的状态并导致线程从该状态继续执行。这通常意味着线程将从之前保存的某个指令地址开始执行而不是从 NtContinue 调用之后的点继续。 因此从调用者的角度来看NtContinue 之后的代码可能永远不会被执行因为线程的执行流程已经被改变。这就是为什么 NtContinue 不需要也不会返回到调用它的代码位置的原因。实际上如果 NtContinue 调用成功那么线程将继续执行就好像它从未停止过一样只是现在的状态可能与之前有所不同。 需要注意的是直接调用或依赖于 NtContinue 这样的低级系统调用通常是不安全的并且可能破坏系统的稳定性。这些调用通常只在操作系统内核、驱动程序或非常底层的系统级软件中使用。在应用程序级别的代码中直接使用这些调用是不推荐的除非你对系统的内部工作原理有深入的了解并且知道你在做什么。 借鉴点自己处理堆栈 一般情况下不需要用户处理堆栈但是由于此处的处理特殊性使用了__declspec(naked)修饰符来自己处理堆栈。因此函数在开始处自己维护堆栈信息。 findfunc 借鉴点未导出函数的hook 未导出的函数可通过加载符号表的方式找到函数指针然后再hook。 impmunge 借鉴点隐藏导入库和导入函数 使用方法 修改导入库和导入表 impmunge.exe /m /o:2.exe 1.exe 注意命令行最后是被修改的文件顺序不能错。变换如下 file    KERNEL32.dll                     mf_KERNEL32.dll   symbol  CreateFileA                      ms_CreateFileA   symbol  CloseHandle                      ms_CloseHandle 恢复导入表 impmunge.exe /r /o:2.exe 1.exe member 借鉴点使用相似类的成员直接Hook 要点两个类没有成员可以直接用。如果有成员变量则需要相同的结构一边在hook的成员函数中使用目标对象的成员变量。 类成员的指针 static void (CMyTest ::* Real_Target)(void); 这是一个静态成员函数指针它指向CMyTest类的一个没有参数并且返回类型为void的成员函数。 由于它是静态的所以你可以在没有CMyTest类的对象的情况下访问它但你需要一个对象来通过它调用实际的成员函数因为它是一个成员函数指针不是指向静态成员函数的指针。 语法可能看起来有点复杂但基本上它定义了一个指针该指针可以指向类CMyTest的任何非静态成员函数该函数没有参数并返回void。 使用这种成员函数指针的一种常见情况是实现回调函数或策略模式其中你可以在运行时改变对象的行为。 注意虽然Real_Target是一个静态成员但它指向的成员函数可以是非静态的。静态成员只是意味着你不需要类的对象来访问该静态成员本身在这种情况下是成员函数指针但你仍然需要一个对象来调用该静态成员所指向的非静态成员函数。 opengl 中规中矩的hook例子演示如何hook opengl的函数 region待补充 setdll 将dll插入到其他二进制的导入表中这样该二进制启动的时候会自动加载该dll simple 中规中矩的hook例子演示如何hook sleep并再退出时给出sleep的总毫秒数。 sleep5.exe sleep5.exe: Starting. sleep5.exe: Done sleeping. withdll.exe /d:simple64.dll sleep5.exe withdll.exe: Starting: sleep5.exe withdll.exe:   with E:\OpenSource\Detours\bin.X64\simple64.dll simple64.dll: Starting. simple64.dll: Detoured SleepEx(). sleep5.exe: Starting. sleep5.exe: Done sleeping. simple64.dll: Removed SleepEx() (result0), slept 5016 ticks. simple_safe 同simple区别 //  The difference between simple and simple_safe is that simple_safe //  uses the C 14 overloads which help prevent mismatching types.   slept 中规中矩的hook例子以上内容的借鉴点包含此例子的内容。 syelog 演示进程间日志记录和处理 syelogd.exe这个可执行文件通常用作一个系统事件日志守护进程daemon。它负责接收并记录由 Detours 拦截的 API 调用信息。这些信息对于了解系统行为、调试或分析应用程序非常有用。syelogd.exe 通常与 Detours 库的其他部分一起使用以提供实时的 API 调用跟踪和日志记录功能。 traceapi 借鉴点使用syelogd.exe输出日志 使用方式启动syelogd.exe或syelogd.exe output.log或start syelogd.exe output.log将日志输出到屏幕或日志文件。 启动程序并注入监控dll,监控dll会将api的调用信息输出给syelogd. withdll.exe /d:trcapi64.dll testapi.exe trcbld  借鉴点跟踪进程启动以及子进程输出进程的命令行参数。 Runs the build commands and figures out which files have dependencies.. 举例 tracebld /o:tracenotepad  notepad.exe 启动notepad.exe然后通过notepad.exe的打开对话框启动mspaint等程序。 最后退出这些程序可以得到一个tracenotepad.xml文件该文件记录了notepad CreateProcess,CloseProcessDeviceIoControl的调用及其参数通过这些信息可以分析程序的行为以及子进程。 tracelnk 演示枚举模块和各个模块的导入函数枚举 tracemem 跟踪heapalloc tracereg、traceser、tracessl、tracetcp 标准的hook例子 tryman c# managed hook例子 withdll 借鉴点修改程序导入表插入新的动态库 使用方法 withdll /d:extends.dll findfunc.exe 将extends.exe插入到findfunc.exe API说明 DetourGetEntryPoint  得到主程序的入口方法获取module的基地址此处是PIMAGE_DOS_HEADER根据这个信息查找PIMAGE_NT_HEADERS从里面获取entrypoint的地址一个例外是如果存在PDETOUR_CLR_HEADER则获取模块MSCOREE.DLL返回该dll的函数_CorExeMain。 DetourCodeFromPointer  调用了detour_skip_jmp跳过几个jmp指令ff25,eb等DetourCopyInstruction  从src拷贝完整的指令到目标位置 detour_find_jmp_bounds  根据给出的指令地址找出一个可以放置detours tramplines的位置该函数解析了目标函数的第一个指令如果是相对跳转则根据相对跳转的指令的位置重新计算tramplines的位置。位置使用目标指令位置前后2GB的位置区间。 detour_alloc_trampoline_allocate_new 以目标地址和给定的区间申请一个地址。在区间中查找地址并使用VirtualAlloc尝试在给定的位置申请空间。
http://www.hkea.cn/news/14293206/

相关文章:

  • 快速做网站流量数据统计分析wordpress建设企业网站
  • 徐州市住房和城乡建设局网站首页邯郸房产网签查询网
  • 漳州正规网站建设做网站九州科技
  • 无锡网站建设书生商友福建省建设注册执业管理中心网站
  • 仿网站源码湖南公司网站建设
  • 为什么网站很少做全屏办公室装修费计入什么费用
  • 网站建设找哪家公司好慈利网站建设
  • 哪里创建免费个人网站什么是营销
  • 编程网站编程专业做网站建设公司怎么样
  • 创客贴网站做海报技能黑龙江公司网站建设
  • 做网站公司汉狮团队如何开发自己的app
  • 做链接的网站新浪图床 wordpress
  • 做网站推广需要什么怎么弄一个自己的网站
  • 中国建设承包商网站高大上的网站设计
  • WordPress的站内地图wordpress 英文站赚钱
  • 厚街建设网站网站建设高职考题目
  • 丰涵网站建设网站开发实习
  • 井冈山网站建设头像设计制作器
  • 北京制作手机网站手机网站建站系统
  • 东莞品牌型网站建设世界球队最新排名榜
  • 网站首页设计常见的6种布局方式跨境电商选品
  • 中山网站制作套餐wordpress 分类页模板
  • 深圳网站建设服务找哪家高清视频网络服务器免费
  • 网站建设类行业资讯企业网站建设现状
  • 家教网站建设wordpress最好的编辑器下载
  • 网站优化建设安徽上海建设网站服务
  • 营销型企业网站类型小程序启动失败 错误码
  • 住友官方网站建设网站做支付接口吗
  • 做logo网站韩国免费行情网站的推荐理由
  • 随州企业网站建设wordpress发邮件收到不到邮件