zoukankan      html  css  js  c++  java
  • 分析傀儡进程

    样本注入的过程:是先创建进程,获取句柄,在新进程内获取内存,再WriteProcessMemory,再SetThreadContext,再ResumeThread,先WriteProcessMemory,再SetThreadContext。
    那也就是说,如果要改写到新进程的数据,那肯定要在WriteProcessMemory之前所以,改的时机就确定了,就是WriteProcessMemory之前。那要改哪里。你刚已经通过SetThreadContext获取到了新的eip地址
          

    SetThreadContext函数,用来为指定线程设置context
    BOOL WINAPI SetThreadContext(
      _In_       HANDLE  hThread,  //线程句柄
      _In_ const CONTEXT *lpContext  //指定线程的context结构体
    );
    typedef struct _CONTEXT{
    DWORD ContextFlags;
    DWORD Dr0;
    DWORD Dr1;
    DWORD Dr2;
    DWORD Dr3;
    DWORD Dr6;
    DWORD Dr7;
    FLOATING_SAVE_AREA FloatSave;
    DWORD SegGs;
    DWORD SegFs;
    DWORD SegEs;
    DWORD SegDs;
    DWORD Edi;
    DWORD Esi;
    DWORD Ebx;
    DWORD Edx;
    DWORD Ecx;
    DWORD Eax;
    DWORD Ebp;
    DWORD Eip;           //设置新线程运行的入口点  偏移为0xB4
    DWORD SegCs;
    DWORD EFlags;
    DWORD Esp;
    DWORD SegSs;
    } CONTEXT;
    下断SetThreadContext,找到context结构体中的成员eip

    接下来下断WriteProcessMemory
     
    Address  0x00400000 写入的目的地址是 
    目的地址就是0x004B5780-0x00400000+0x00F80028 ==0x010357A8 在数据窗口中找到数据位置。然后将入口处改成CC
     

    OD调试时,需要设置为实时调试设置设置 Jiack为实时调试器下完WriteProcessMemory后,改完数据,直接F9跑起来

    那下断点WriteProcessMemory






    有一个是源地址,有一个是目的地址Adress 这个是0x10000000,是目的1009c314 - 10000000 + 0x7fe30010改的地方是0x7fe30010 + 9c314先把od,设置为默认调试器
    选项   实时调试设置设置 Jiack为实时调试器下完WriteProcessMemory后,改完数据,直接F9跑起来




  • 相关阅读:
    iOS NSUserDefaults 存储可变数组问题
    iOS之[文件下载 / 大文件下载 / 断点下载]
    macOS 新手开发:第 2 部分
    iOS 游戏素材
    iOS 动画
    macOS 开发
    iOS 之访问权限以及跳转到系统界面
    蓝桥杯—ALGO-18 单词接龙(DFS)
    蓝桥杯—ALGO-12 幂方分解(递归递推)
    蓝桥杯—ALGO-131 Beaver's Calculator
  • 原文地址:https://www.cnblogs.com/kangxiaopao/p/7275662.html
Copyright © 2011-2022 走看看