论坛: 病毒专区 标题: 有谁知道base64码是怎么构成的? 复制本贴地址    
作者: Muddy [muddy]    论坛用户   登录
在病毒的传播中,有些是利用MIME漏洞的,但是MIME漏洞需要将可执行文件转化为base64编码的文本文件,有谁知道base64码的构成,最好有直接进行转换的程序。

地主 发表时间: 07/23 21:18

回复: ricky [ricky]   版主   登录
BASE64就是把一个字节8位的编码,搞成7位,最高为填0,我给你贴一段源码吧
void CBase64Code::OnOK() 
{
BYTE Base64Code[64];
CString b64= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
FILE *S_File,*D_File;
BYTE fbuf[3],buf[4],dbuf[4];

memcpy(Base64Code,b64,64);
int ret;
int count = 0;
S_File = fopen(m_SFileName,"rb");
D_File = fopen(m_DFileName,"wb");
do{
fbuf[0] = 0;
fbuf[1] = 0;
fbuf[2] = 0;
ret = fread(fbuf,1,3,S_File);
buf[0] = fbuf[0]>>2;
buf[1] = ((fbuf[0]&0x03)<<4)|(fbuf[1]>>4);
buf[2] = ((fbuf[1]&0x0f)<<2)|(fbuf[2]>>6);
buf[3] = (fbuf[2]&0x3f);
dbuf[0] = *(Base64Code+buf[0]);
dbuf[1] = *(Base64Code+buf[1]);
dbuf[2] = *(Base64Code+buf[2]);
dbuf[3] = *(Base64Code+buf[3]);
switch(ret)
{
case 1: dbuf[2] = '=';
case 2: dbuf[3] = '=';
case 3: fwrite(dbuf,1,4,D_File);
case 0: break;
}
count++;
if (count==19)
{
count = 0;
dbuf[0] = 0x0d;
dbuf[1] = 0x0a;
fwrite(dbuf,1,2,D_File);
}
}while (ret == 3);
dbuf[0] = 0x0d;
dbuf[1] = 0x0a;
fwrite(dbuf,1,2,D_File);
fclose(S_File);
fclose(D_File);
AfxMessageBox("转换完成");
CDialog::OnOK();
}


B1层 发表时间: 07/24 17:31

回复: ricky [ricky]   版主   登录
这是我写的一段程序,你随便改改就可以用了

B2层 发表时间: 07/24 21:32

回复: Muddy [muddy]   论坛用户   登录
楼上的说"BASE64就是把一个字节8位的编码,搞成7位,最高为填0",可是这样不就有128个代码了? 就我所知,Base64码只有64个啊~,是不是应该将8位变成6位,将三个字节变为四个最高两位为零的字节才对吧???
不过你的代码的意思我看懂了,比我的要简单清楚多了,谢谢了.


B3层 发表时间: 07/27 10:28

回复: ricky [ricky]   版主   登录
哈哈,凭着记忆写的,以程序为准,不好意思,是6位,就是串表里的64个可显示代码

B4层 发表时间: 07/30 08:47

回复: Muddy [muddy]   论坛用户   登录
没关系啦,代码都写出来了,出现点打字错误没什么。再次谢谢了。

B5层 发表时间: 07/30 18:38

论坛: 病毒专区

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号