-
-
[已解决]关于读取pe文件到十六进制编码
-
发表于:
2009-4-21 21:44
5195
-
bool CBinToShellDlg::BinToShellCode(CString openFilePath,CString saveFilePath)
{
int fileSize;
FILE *fp=NULL;
//以二进制只读模式打开文件
if (!(fp=fopen(openFilePath,"rb")))
{
MessageBox("打开文件失败");
return FALSE;
}
fseek(fp,0,SEEK_END); //移动文件指针到末尾
fileSize=ftell(fp); //得到文件指针位置(也就是取文件大小)
fseek(fp,0,SEEK_SET);//把文件指针移回来
char *binCodeBuffer=(char*)malloc(fileSize);//申请文件大小的缓冲区来存放文件内容
//把文件内容读到缓冲区
if (!fgets(binCodeBuffer,fileSize,fp))
{
MessageBox("读取文件失败");
return FALSE;
}
FILE *shellFile;
shellFile=fopen(saveFilePath,"w");//创建并打开shellcode文件
BYTE xorCode;
//是否异或加密
if (IsDlgButtonChecked(IDC_ISXOR))
{
xorCode=(BYTE)GetDlgItemInt(IDC_XORCODE);
}
else
{
xorCode=0;
}
BYTE byteCode;
//循环写入
for (int i=0; i<fileSize; i++)
{
byteCode=xorCode^(BYTE)binCodeBuffer[i];
fprintf(shellFile,IsDlgButtonChecked(IDC_ISADDX) ? "\\x%2.2X" : "%2.2X",byteCode);
if ( i % 16 == 0)
{
fprintf(shellFile,"\n");
}
}
//关闭文件
fclose(shellFile);
fclose(fp);
return TRUE;
}
上面的代码是以十六进制方式输入一个文件,为什么输出的文件在特定位置以后的编码全是一样的如下图是输出计事本的文件
如上图后面的全是CD,不知道为什么
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)