Quantcast
Channel: 看雪安全论坛
Viewing all articles
Browse latest Browse all 9556

【原创】算不算Inline Patch

$
0
0
:D:VMP加壳解码后还会对代码段来一次内存校检,此时While判断解码的方式就不是这么绝对的了。

:3:当然shadow dll 的话就over了,不过还是贴上来吧.. 老师们勿喷。可能还有一些壳对API头几个字节有检测

在主线程内,也可以用此方法来制作内存注册机....
代码:

  //以挂起的方式启动进程
        PROCESS_INFORMATION pi;
        STARTUPINFO si;
        memset(&pi,0,sizeof(pi));
        memset(&si,0,sizeof(si));
        BOOL lRet= CreateProcess("test.exe",NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi);
        if (lRet==FALSE)
        {
                MessageBoxA(0,"Not Find File!",0,0);
                return;
        }
        BYTE command[]={0xEB,0xFE};//2个字节让代码一直jmp当前地址
        HMODULE hModule=GetModuleHandle("user32.dll");
        FARPROC lApi=GetProcAddress(hModule,"CreateWindowExA");//以CreateWindowExA为例
        WriteProcessMemory(pi.hProcess,(LPVOID)lApi,&command,2,NULL);//向API写入EBFE
        ResumeThread(pi.hThread);//恢复线程
        BYTE OldApi[2]={0x8B,0xFF};
  CONTEXT context;
        context.ContextFlags=CONTEXT_FULL;
        while(1)//等待到达CreateWindowExA
        {
                GetThreadContext(pi.hThread,&context);
                if (context.Eip==(UINT)lApi)
                {
                        SuspendThread(pi.hThread);//当到达API时,挂起进程
                        break;
                }
        }
        //此处进行Patch
        WriteProcessMemory(hProcess,(LPVOID)lApi,&OldApi,1,NULL);//恢复原指令
  ResumeThread(pi.hThread);


Viewing all articles
Browse latest Browse all 9556

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>