首页
社区
课程
招聘
文件安全加密
2020-8-19 10:30 9125

文件安全加密

2020-8-19 10:30
9125

  根据本人所说的《未知数加密理论》很容易编制出能实现文件安全加密的软件。也没有什么复杂的算法,使用随机函数即可,这里是流密码加密,关键是密钥数组的组成,这里是rand()+rand()/7+i/127,随机种子由用户密码算出,由于用户密码是未知数,随机种子也是未知数,其算出的随机序列也是未知数,由此密钥数组也是未知数组,所以能够胜任安全加密。
  实际即使源码公开加密仍然是安全的。上面已将关键的密钥数组公开了,实际应该由用户密码再算出两个参数,让密钥数组乘一个参数,再加一个参数将更完美,这里就免了。
  程序很简单运行后按提示输入两遍密码,选择文件等即可。
  程序具有批量处理多文件的能力。
  源码由VC6编制,如有需要者,请联系sjsjsjd@163.com。谁能破解密文(用分析法自己的密文也行,有步骤即可),若用穷举攻击可以在这里领取密文,成功者重重有賞。


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2020-8-21 16:35 被sjdkx编辑 ,原因: 丰富内容
上传的附件:
收藏
点赞1
打赏
分享
最新回复 (40)
雪    币: 4752
活跃值: (2923)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
LeadroyaL 1 2020-8-19 10:39
2
3
看标题猜作者……猜对了
雪    币: 920
活跃值: (1580)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wuxiwudi 2020-8-19 10:49
3
0
这个是Enigma算法的低级应用把
雪    币: 5894
活跃值: (3705)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
yimingqpa 1 2020-8-19 12:21
4
0
确认密码:
0x004015E0


选文件:
sub_4017B0

加密:
0x00401B90


解密:
0x00401C20
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-8-19 21:26
5
0
楼上什么意思,来点有价值的东西,你们虽然不能破解,想想办法提点建议也好。
雪    币: 5894
活跃值: (3705)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
yimingqpa 1 2020-8-19 21:36
6
0
sjdkx 楼上什么意思,来点有价值的东西,你们虽然不能破解,想想办法提点建议也好。
随便打开看了一下,没有价值啊!!!
建议楼主了解一下反汇编,逆向,社会工程学等。
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-8-20 00:10
7
0
反汇编,逆向,社会工程学有何用?对破解密文有用的话你试试看。理论上已经是无条件安全的加密什么杂碎也没用啊!
雪    币: 149
活跃值: (2048)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
saloyun 2020-8-20 08:06
8
0
看标题猜作者……猜对了
雪    币: 232
活跃值: (919)
能力值: ( LV4,RANK:44 )
在线值:
发帖
回帖
粉丝
湘北三井同学 2020-8-20 13:03
9
0

好像不太安全的亚子


雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-8-20 15:11
10
0

大不必担心,如果能从密文得到一丁点信息也是见鬼了。楼上列出些乱码和图片什么意思?如能破解密文希望展示一下,希望能创造奇迹!不用拿图形来比划,哪怕你能解出一个字节也是奇迹。

最后于 2020-8-22 10:49 被sjdkx编辑 ,原因: 丰富内容
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2020-8-24 08:41
11
0
源码贴出来。
雪    币: 5894
活跃值: (3705)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
yimingqpa 1 2020-8-24 08:47
12
0
wsy 源码贴出来。
发的几个地址IDA扣一下就有源码了。
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-8-24 11:29
13
0
源码很辣鸡
======================================================================
// jiamiDlg.cpp : implementation file
//

#include "stdafx.h"
#include "jiami.h"
#include "jiamiDlg.h"

#include <io.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

int bc=0;
CString d1,d2;

    char name[400][250];
    char mi[1000];
       int wjs,zz=0;
       int bz=1; //加解密标志


void HanShu(char *filename,int bz);  //加密解密函数
//加密解密函数  调用方式  HanShu(文件名,控制变量bz)  加密bz=1  解密bz=-1 
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
       CAboutDlg();

// Dialog Data
       //{{AFX_DATA(CAboutDlg)
       enum { IDD = IDD_ABOUTBOX };
       //}}AFX_DATA

       // ClassWizard generated virtual function overrides
       //{{AFX_VIRTUAL(CAboutDlg)
       protected:
       virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
       //}}AFX_VIRTUAL

// Implementation
protected:
       //{{AFX_MSG(CAboutDlg)
       //}}AFX_MSG
       DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
       //{{AFX_DATA_INIT(CAboutDlg)
       //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
       CDialog::DoDataExchange(pDX);
       //{{AFX_DATA_MAP(CAboutDlg)
       //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
       //{{AFX_MSG_MAP(CAboutDlg)
               // No message handlers
       //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CJiamiDlg dialog

CJiamiDlg::CJiamiDlg(CWnd* pParent /*=NULL*/)
       : CDialog(CJiamiDlg::IDD, pParent)
{
       //{{AFX_DATA_INIT(CJiamiDlg)
       m_edit = _T("");
       //}}AFX_DATA_INIT
       // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
       m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CJiamiDlg::DoDataExchange(CDataExchange* pDX)
{
       CDialog::DoDataExchange(pDX);
       //{{AFX_DATA_MAP(CJiamiDlg)
       DDX_Text(pDX, IDC_EDIT1, m_edit);
       //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CJiamiDlg, CDialog)
       //{{AFX_MSG_MAP(CJiamiDlg)
       ON_WM_SYSCOMMAND()
       ON_WM_PAINT()
       ON_WM_QUERYDRAGICON()
       ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
       ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
       ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
       ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
       ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
       //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CJiamiDlg message handlers

BOOL CJiamiDlg::OnInitDialog()
{
       CDialog::OnInitDialog();

       // Add "About..." menu item to system menu.

       // IDM_ABOUTBOX must be in the system command range.
       ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
       ASSERT(IDM_ABOUTBOX < 0xF000);

       CMenu* pSysMenu = GetSystemMenu(FALSE);
       if (pSysMenu != NULL)
       {
               CString strAboutMenu;
               strAboutMenu.LoadString(IDS_ABOUTBOX);
               if (!strAboutMenu.IsEmpty())
               {
                       pSysMenu->AppendMenu(MF_SEPARATOR);
                       pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
               }
       }

       // Set the icon for this dialog.  The framework does this automatically
       //  when the application's main window is not a dialog
       SetIcon(m_hIcon, TRUE);                        // Set big icon
       SetIcon(m_hIcon, FALSE);                // Set small icon

       WinExec("ml.bat",SW_HIDE);                //删除没用的文件

       //        GetDlgItem(IDC_EDIT1)->SetFocus( );//让编辑窗口获得焦点
       GetDlgItem(IDC_BUTTON2)->EnableWindow(false);   //按钮2变灰
       GetDlgItem(IDC_BUTTON3)->EnableWindow(false);   //按钮3变灰
       GetDlgItem(IDC_BUTTON4)->EnableWindow(false);   //按钮4变灰
       
       return TRUE;  // return TRUE  unless you set the focus to a control
}

void CJiamiDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
       if ((nID & 0xFFF0) == IDM_ABOUTBOX)
       {
               CAboutDlg dlgAbout;
               dlgAbout.DoModal();
       }
       else
       {
               CDialog::OnSysCommand(nID, lParam);
       }
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CJiamiDlg::OnPaint() 
{
       if (IsIconic())
       {
               CPaintDC dc(this); // device context for painting

               SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

               // Center icon in client rectangle
               int cxIcon = GetSystemMetrics(SM_CXICON);
               int cyIcon = GetSystemMetrics(SM_CYICON);
               CRect rect;
               GetClientRect(&rect);
               int x = (rect.Width() - cxIcon + 1) / 2;
               int y = (rect.Height() - cyIcon + 1) / 2;

               // Draw the icon
               dc.DrawIcon(x, y, m_hIcon);
       }
       else
       {
               CDialog::OnPaint();
       }

}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CJiamiDlg::OnQueryDragIcon()
{
       return (HCURSOR) m_hIcon;
}
//密码确认
void CJiamiDlg::OnButton1() 
{
       // TODO: Add your control notification handler code here
       CStatic* static1=(CStatic*)GetDlgItem(IDC_STATIC1);
       UpdateData(TRUE);                //刷新数据

shang:        ;
       if(m_edit != "")                //m_edit 是edit串(String)
       {
       if(bc==0)                                //bc用于区分第一和第二次输入密码
       {
       static1->SetWindowText("请再次输入密码");
               d1=m_edit;                        
               bc=1;
               m_edit = _T("");
               GetDlgItem(IDC_EDIT1)->SetFocus( );//获得焦点
               goto xia;
       }
       if(bc==1)
       {
               d2=m_edit;
               if(d1==d2){
       static1->SetWindowText("输入成功  请选择文件");
       GetDlgItem(IDC_BUTTON1)->EnableWindow(false);   //按钮1变灰
       m_edit = _T("");

       GetDlgItem(IDC_BUTTON2)->EnableWindow(true);   //激活按钮2
//        MessageBox(d1);
                               }
       if(d1!=d2){                                //重新输入        
               d1="";d2="";
               m_edit = _T("");
       static1->SetWindowText("请输入密码");
               bc=0;
               SetFocus();
               goto shang;
                       }

               goto xia;
       }
       }//if(m_edit != "")
xia:        ;
       UpdateData(FALSE);                //结束刷新

//以上是密码输入
//以下是密码加工
           int nn=d1.GetLength();
 for(int i=0;i<nn;i++)
        {
        strcpy(mi,d1);
        }

 for(i=0;i<nn;i++)
        {
        zz=zz+mi[i];
        }

               
}
//选择文件
void CJiamiDlg::OnButton2() 
{

int i;
CString str;
POSITION pos;
CString strFileName;  

       GetDlgItem(IDC_BUTTON2)->EnableWindow(false);   //按钮2变灰

       CFileDialog  m_ldFile(TRUE,_T("*.*"),_T("*.*"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT 
               |OFN_ALLOWMULTISELECT,_T("(*.*)|*.*|"));

       if((d1=="")||(bc==0)) OnButton5();  //如果没有前期输入则退出
else{

       if(m_ldFile.DoModal() == IDOK)
                       {
       pos = m_ldFile.GetStartPosition();

       i=0;
       while(pos != NULL)
               {
               strFileName = m_ldFile.GetNextPathName(pos);
               strcpy(name[i],strFileName); //将选择文件名放在name
               i++;
               }
       wjs=i;
                       }//if
       }//else

       GetDlgItem(IDC_BUTTON3)->EnableWindow(true);   //激活按钮3  加密
       GetDlgItem(IDC_BUTTON4)->EnableWindow(true);   //激活按钮4  解密 
       GetDlgItem(IDC_BUTTON3)->SetFocus( );//获得焦点

       CStatic* static1=(CStatic*)GetDlgItem(IDC_STATIC1);//显示预备
       static1->SetWindowText("请选择加密或解密");

}
//退出
void CJiamiDlg::OnButton5() 
{
       OnOK();        
}

//加密解密函数  调用方式  HanShu(文件名,控制变量bz)  加密bz=1  解密bz=-1 
void HanShu(char *filename,int bz)
{
FILE *f;
int Length;
int i;
unsigned char ch;
int n1=0;
unsigned char *wenjian;

       if((f=fopen(filename,"rb+"))==NULL)
       {exit(0);}
       Length=filelength(fileno(f));                //得到文件长度
       fclose(f);
//分配内存
       wenjian=new  unsigned char[Length+1];        //文件容器
       if((f=fopen(filename,"rb+"))==NULL)                //调入被处理文件
       {exit(0);}
       fseek(f,0,0);
       fread(wenjian,Length,1,f);
       fclose(f);

srand(zz%1234+31*wjs);                //随机函数种子                                //wjs的加入使不同的文件使用不同的种子
Beep(1000,20);
       for(i=0;i<Length;i++)
       {
       wenjian[i]=wenjian[i]+bz*(rand()+rand()/7+i/127);                //处理文件加密或解密
       }

       if((f=fopen(filename,"w+"))==NULL)                //删除文件
       fclose(f);

       if((f=fopen(filename,"rb+"))==NULL)                //存文件
       {exit(0);}
       fseek(f,0,0);
       fwrite(wenjian,Length,1,f);
       fclose(f);
delete [] wenjian;
}

void CJiamiDlg::OnButton3() 
{
       int attr;
    for (int I = 0; I < wjs; I ++)        
    {
//取文件属性
       attr = GetFileAttributes(name[I]);
//设置为可处理的属性
       SetFileAttributes(name[I],FILE_ATTRIBUTE_ARCHIVE);
//加密处理
       HanShu(name[I],1);
       SetWindowText("-----<加密结束>-----");
//设置为原属性
       SetFileAttributes(name[I],attr);
       }
       for(int i=0;i<1000;i=i+200)
       {
       Beep(1000-i,1);
       }
}

void CJiamiDlg::OnButton4() 
{
       int attr;
    for (int I = 0; I < wjs; I ++)        
    {
       attr = GetFileAttributes(name[I]);
       SetFileAttributes(name[I],FILE_ATTRIBUTE_ARCHIVE);
//解密处理
       HanShu(name[I],-1);
       SetWindowText("-----<解密结束>-----");
       SetFileAttributes(name[I],attr);
       }
       for(int i=0;i<1000;i=i+200)
       {
       Beep(1000-i,1);
       }
}
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2020-8-24 15:23
14
0
 wenjian[i]=wenjian[i]+bz*(rand()+rand()/7+i/127);      加密就这句吧?
破解只需要知道rand函数的一个内部状态就够了,变化量2^31,基本上破解时间大约是一台普通计算机不超过1小时
还是继续闭嘴吧,别再出来现眼了。
要源码是因为你就不值得我去作逆向。
雪    币: 340
活跃值: (907)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
noword_forever 5 2020-8-24 15:34
15
0
民科在看雪
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2020-8-24 16:59
16
0
srand(zz%1234+31*wjs); 这里还有一个,
变化量1234,垃圾机器1秒搞定
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2020-8-24 17:01
17
0
这么弱的东西出来现,真是无知者无畏
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-8-24 17:02
18
0
@was 穷举攻击就那么灵吗?你别做梦了。靠单一的程序也许你能得逞。前面的帖子也说了,若想安全加密实际操作时,对明文进行预加密破坏其特征,再进行进一步加密才能安全,你懂吗?
安全加密就是不可破解的加密,否则毫无意义。
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2020-8-24 17:07
19
0
for(i=0;i<nn;i++)
        {
        zz=zz+mi[i];
        }
第三个漏洞,不教学了,懂得就懂,不懂的别问
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2020-8-24 17:09
20
0
你是不是要把所有能出错的地方全出错啊!
很好的教学素材
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2020-8-24 17:13
21
0
还有一个密码漏洞,不能再说了。
雪    币: 920
活跃值: (1580)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wuxiwudi 2020-8-24 17:32
22
0
你其实应该想想,为啥勒索病毒不用"随机值"加密文件,而是费劲巴拉的去用aes256
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-8-24 22:38
23
0
谢谢wsy找出许多漏洞,但那些无关紧要。强大的是方法而不是细节。
我的理论就是乱码不可破解,因为乱码没有特征所以无法破解。一般加密软件没有绝对安全的,这是因为用户密码长度是有限的,所以可能被穷举攻击所击破,当然可能需要很长时间,但这种可能性是不能排除的。
我的目标也很简单——就是加密不可破解。实际应用乱码不可破解的理论这点已经做到了,只要将明文的特征去掉再加密就不可破解了,这倒不一定加密两次,先对明文做无损变换或编码等都可以,然后再加密,就是这么简单。
雪    币: 358
活跃值: (99)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
杀手killerho 2020-8-25 09:14
24
0
这TMD的是一次一密?每个字节摩尔加一个随机数?那你的随机数每次都传给对端吗?密传?密传是用公钥体制吧,你干脆直接用公钥加密算了。
这跟我随便一串写数字给你破有啥区别?
雪    币: 358
活跃值: (99)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
杀手killerho 2020-8-25 09:17
25
0
脑壳坏了。密钥或者密钥的产生方式不约定,在这胡扯。我就问你对端怎么产生解密密钥,别说每次都传过去的。
游客
登录 | 注册 方可回帖
返回