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跑起来




  • 相关阅读:
    稀疏自编码器一览表
    ZOJ 3886 Nico Number(筛素数+Love(线)Live(段)树)
    K好数(DP)
    【BZOJ4025】二分图
    又一次认识java(七) ---- final keyword
    二分查找
    从朴素贝叶斯分类器到贝叶斯网络(下)
    最近感到深深的绝望,感觉自己太菜了
    leetcode No.19 删除链表的倒数第N个节点 (python3实现)
    leetcode No.94 二叉树的中序遍历 (python3实现)
  • 原文地址:https://www.cnblogs.com/kangxiaopao/p/7275662.html
Copyright © 2011-2022 走看看