cad中lisp文件给恶作剧_晓东CAD家园-论坛-A/VLISP-LISP解密工具-有很多LSP文件是加密过的,文本文件打开会看到protectd lisp , 附件的工具就是批量解密这个到能看懂的...

//lsp文件加密文件的解密:

bool unProtected_Lisp_1()

{

char fin[1000];

char fou[1000];

// 选择的文件名称

CString lv_strFileName = _T("");

// 设置文件过滤格式

CString lv_strFilterLSP = _T("lsp文件(*.lsp)|*.lsp|");

CString lv_strFileFilter = lv_strFilterLSP;

// 设置文件后缀名称

CString lv_strName[] = {"", "lsp",""};

CString lv_strExtension = _T("");

CString m_strFilePathName;

CString m_strFileName;

CString m_strExtName;

// 打开保存文件对话框

CFileDialog lv_FileOpenDlg(FALSE, NULL, NULL, OFN_HIDEREADONLY, lv_strFileFilter);

lv_FileOpenDlg.m_ofn.lpstrTitle   =   "【LISP文件解密】 选择已加密的LISP文件:";

if (IDOK != lv_FileOpenDlg.DoModal())

{

return false;

}

else

{

//  CString CFileDialog::GetPathName :得到完整文件名,包括目录名和扩展名如:c:/test/test1.txt

//  CString CFileDialog::GetFileName :得到完整文件名,包括扩展名如:test1.txt

//  CString CFileDialog::GetFileExt  :得到完整文件扩展名,如:txt

//  CString CFileDialog::GetFileTitle:得到完整文件名,不包括目录名和扩展名如:test1

m_strFilePathName = lv_FileOpenDlg.GetPathName();

m_strFileName = lv_FileOpenDlg.GetFileName();

m_strExtName = lv_FileOpenDlg.GetFileExt();

strcpy(fin,((LPSTR&)m_strFilePathName));

CString m_strOutFilePathName=m_strFilePathName.Left(m_strFilePathName.GetLength()-4);

m_strOutFilePathName.Replace("_pro","");

m_strOutFilePathName+="_res.lsp";

strcpy(fou,((LPSTR&)m_strOutFilePathName));

}

//

FILE *in_file,*out_file;

//register char zf1,zf2;

in_file=fopen(fin,"rb");

if(in_file==NULL)

{

AfxMessageBox("\n不能打开LISP已加密的源文件!");

return false;

}

CString strINdex;

fgets((LPSTR&)strINdex, 28, in_file);

if(strINdex.Find("PROTECTED LISP")==-1)

{

fclose(in_file);

AfxMessageBox("\nLISP文件没有加密,不用解密!");

return false;

}

out_file=fopen(fou,"wb");

if(out_file==NULL)

{

fclose(in_file);

AfxMessageBox("\n不能建立LISP解密文件!");

return false;

}

//30:1Bytes,存储密码字符,如'A'

//fputc('A',out_file);

unsigned char pass_ch;

long strPass=30;

fseek(in_file,strPass,SEEK_SET);

pass_ch=fgetc(in_file);

//fputs(";;AutoCAD unPROTECTED LISP file",out_file);//27个

//fputs("\0x0D\0x0A",out_file);

//putc(0x0A,out_file);//27个 0x0A

//printf("strPass=%s\n",pass_ch);

//CString strFormat;

//strFormat.Format("strPass=%d\n",pass_ch);

//AfxMessageBox(strFormat);

int nIndex=0;

unsigned char old_ch;

unsigned char new_ch;

unsigned int i;

fseek(in_file,31,SEEK_SET);

while (! feof (in_file))

{

old_ch=fgetc(in_file);

//文件结束中断循环

if (old_ch == 0x1A) //0x1A 文件结束

{

break;

}

//若为回车继续循环

if (old_ch == 0x0D) //0x0D 回车

continue;

//异或运算

new_ch = pass_ch ^ old_ch;

//用上一密码字符

if ((new_ch == 0x0D)||(new_ch == 0x1A)) //是 回车 或 文件结束

new_ch=old_ch;

//若为换行,则加回车

if (new_ch == 0x0A) //0x0A 换行

putc (0x0D,out_file); //0x0D 回车

//写入已加密字符

putc(new_ch,out_file);

//左移一位,相当于乘2

i=old_ch; //注意:这里与加密不同!!!

i = i<<1;

//溢出位1,加到末位

if (i>255)

i=i-255;

//产生新的密码字符

pass_ch = (unsigned char) i;

}

fclose (in_file);

//putc(0x1A,out_file);

fclose (out_file);

return true;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值