whypro 发表于 2010-5-26 21:41:45

浅谈脱壳中的Dump技术8

本帖最后由 whypro 于 2010-5-27 17:35 编辑

//这个函数的作用是获取SizeOfImage的数值
        //当函数执行失败返回的是0
        //成功返回的是非0
        HANDLE hModuleSnap = NULL;
        MODULEENTRY32 stModE= {0};
        stModE.dwSize = sizeof(MODULEENTRY32);
        hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,IDProcess);//快照,对本进程中所有的模块进行snap

        if (hModuleSnap == INVALID_HANDLE_VALUE)
        {
                MessageBox(hDlg,TEXT("The Module snapshot can't get!"),TEXT("Error!"),MB_OK | MB_ICONSTOP);
          return FALSE;    //返回0
        }
        if (!Module32First(hModuleSnap, &stModE))
        {
           MessageBox(hDlg,TEXT("The Module32First can't work!"),TEXT("Error!"),MB_OK | MB_ICONSTOP);
           CloseHandle (hModuleSnap);
           return FALSE;
        }
        CloseHandle (hModuleSnap);
        return stModE.modBaseSize;//初始化为0
}

二.        对齐节表

这个问题在上一节我们已经提出了,我们的程序不完善,现在要自动的实现RA=RVA ,RS=RVS这个功能。那么我们就使用一个函数来完成它吧!我定义了下面这个函数:
BOOL ModifySectionFunc(HWND hDlg,LPCTSTR Dump_Name)
{
        //此函数的将修改dump下来的exe,使其RA=RVA ,RS=RVS
        //首先是打开dump文件
        HANDLE hFile=CreateFile(Dump_Name,GENERIC_WRITE | GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
        if(hFile==INVALID_HANDLE_VALUE)
        {

                MessageBox(hDlg,TEXT("I can open the dump file..."),TEXT("Error!!"),MB_OK | MB_ICONWARNING);
                return FALSE;
        }
页: [1]
查看完整版本: 浅谈脱壳中的Dump技术8