学习时写的壳代码,太简陋了。而且还是个半成品。
高手飘过~~~~~
很多参考过看雪的内容,回馈给看雪。
希望能对像我这样的初学者有所帮助。
可以提出您友善的意见。
千万别打击小弟幼小的心灵。
加密代码段:
代码:
file_opt.hFile=CreateFile(szFileName,GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); FileSize=GetFileSize(file_opt.hFile,NULL); ReadFile(file_opt.hFile,&DosHdr,sizeof(IMAGE_DOS_HEADER),&NumRW,0); SetFilePointer(file_opt.hFile,DosHdr.e_lfanew,0,FILE_BEGIN); ReadFile(file_opt.hFile,&NtHdr,sizeof(IMAGE_NT_HEADERS),&NumRW,0); SetFilePointer(file_opt.hFile, (DosHdr.e_lfanew+sizeof(IMAGE_NT_HEADERS)), 0, FILE_BEGIN); ReadFile(file_opt.hFile,&SecHdr,sizeof(IMAGE_SECTION_HEADER),&NumRW,0); //::MessageBox(NULL,(const char *)SecHdr.Name,NULL,MB_OK); if(!lstrcmp((const char *)SecHdr.Name,".text")) { SecHdr.Characteristics|=IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE; //修改.text的属性 SetFilePointer(file_opt.hFile, (DosHdr.e_lfanew+sizeof(IMAGE_NT_HEADERS)), 0, FILE_BEGIN); WriteFile(file_opt.hFile,&SecHdr,sizeof(IMAGE_SECTION_HEADER),&NumRW,0); SetFilePointer(file_opt.hFile,SecHdr.PointerToRawData,0,FILE_BEGIN); TextSize=SecHdr.SizeOfRawData; pc=new char[TextSize]; memset((void *)pc,0,TextSize); ReadFile(file_opt.hFile,pc,TextSize,&NumRW,0); p=pc; //加密部分与0x13进行异或 for(i=0;i<TextSize;i++) { *p^=0x21; SetFilePointer(file_opt.hFile,SecHdr.PointerToRawData+i,0,FILE_BEGIN); WriteFile(file_opt.hFile,p,1,&NumRW,0); p++; } InsertMsg("成功!代码加密成功!"); delete [] pc; } else { InsertMsg("失败!加壳失败!"); } CloseHandle(file_opt.hFile);
代码:
NewSectionName db '.aspack',0 db '.vmp ',0 db '.upx0 ',0 db 'INIT ',0 db '.mackt ',0 db '.upx1 ',0 db ' ',0 db 'snyped ',0 db '.Katja ',0 db '.jtsnew',0 db '.SuCop0',0 invoke GetTickCount xor edx,edx mov ecx,0Bh div ecx mov eax,edx mov ebx,08h mul ebx mov ebx,SectionName add ebx,eax mov SectionName,ebx
代码:
push 0ABDBFFDEh pop [esi].OptionalHeader.LoaderFlags push 0DFFFDDDEh pop [esi].OptionalHeader.NumberOfRvaAndSizes