- UID
 - 66114
 
 注册时间2010-4-1
阅读权限30
最后登录1970-1-1
龙战于野 
  
 
 
 
TA的每日心情  | 慵懒 2019-3-12 17:25 | 
|---|
 
  签到天数: 3 天 [LV.2]偶尔看看I  
 | 
 
 本帖最后由 whypro 于 2010-5-27 17:33 编辑  
 
得要保存的文件名,默认的是dumped.exe。接着,使用前面在获得imageofsize的同时已经用GlobalAlloc函数申请了同样大小的堆空间,把目标进程的数据读到这个空间里面。这里面就有一个空间大小的问题,如果进程过大,我怀疑会申请失败。在这里还有尤其的注意一个地方,就是我们在申请空间的时候用了sizeoffile而不是sizeofimage,这是因为,有的时候sizeofimage的大小并不是一个文件对齐度的大小,而为了让他对齐,我使用下面的算法。 
代码: 
        if(!(sizeofimage%0x1000))                          //如果是文件对齐度的整数倍的时候就不处理 
                sizeoffile=sizeofimage; 
        else 
                sizeoffile=(sizeofimage/0x1000+1)*0x1000;     //如果不是就增加一个文件对齐度 
 
     这样就能保证,imageofsize转化为一个具有文件对齐度的数值。 
     最后,是使用BOOL CreateDumpFile(HWND hDlg,LPCTSTR Dump_Name,HGLOBAL hMem);这个函数,这个函数的作用是在磁盘中申请一个文件,把从刚刚读到内存空间的数据又全部的写到磁盘上,所以就用了两个函数CreateFile和WriteFile。 
 
三.试验 
   写好了程序就如下图一样 
 
 
下面用他来实战使用一下吧 
运行用upx压缩过的win98的notepad 
  
让我把他在oep处dump下来 
 
嘿嘿,dump下来才发现,图表都没有了。呵呵,这是因为我们没有把相对虚拟地址(RVA) |   
 
 
 
 |