能力值:
( LV10,RANK:163 )
4 楼
确认密码: 0x004015E0 选文件: sub_4017B0 加密: 0x00401B90 解密: 0x00401C20
能力值:
( LV4,RANK:40 )
5 楼
楼上什么意思,来点有价值的东西,你们虽然不能破解,想想办法提点建议也好。
能力值:
( LV10,RANK:163 )
6 楼
sjdkx
楼上什么意思,来点有价值的东西,你们虽然不能破解,想想办法提点建议也好。
随便打开看了一下,没有价值啊!!!
建议楼主了解一下反汇编,逆向,社会工程学等。
能力值:
( LV4,RANK:40 )
7 楼
反汇编,逆向,社会工程学有何用?对破解密文有用的话你试试看。理论上已经是无条件安全的加密什么杂碎也没用啊!
能力值:
( LV4,RANK:40 )
10 楼
大不必担心,如果能从密文得到一丁点信息也是见鬼了。楼上列出些乱码和图片什么意思?如能破解密文希望展示一下,希望能创造奇迹!不用拿图形来比划,哪怕你能解出一个字节也是奇迹。
最后于 2020-8-22 10:49
被sjdkx编辑
,原因: 丰富内容
能力值:
( LV4,RANK:40 )
13 楼
源码很辣鸡 ====================================================================== // 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); } }
能力值:
( LV2,RANK:10 )
14 楼
wenjian[i]=wenjian[i]+bz*(rand()+rand()/7+i/127); 加密就这句吧? 破解只需要知道rand函数的一个内部状态就够了,变化量2^31,基本上破解时间大约是一台普通计算机不超过1小时 还是继续闭嘴吧,别再出来现眼了。 要源码是因为你就不值得我去作逆向。
能力值:
( LV2,RANK:10 )
16 楼
srand(zz%1234+31*wjs); 这里还有一个, 变化量1234,垃圾机器1秒搞定
能力值:
( LV2,RANK:10 )
17 楼
这么弱的东西出来现,真是无知者无畏
能力值:
( LV4,RANK:40 )
18 楼
@was 穷举攻击就那么灵吗?你别做梦了。靠单一的程序也许你能得逞。前面的帖子也说了,若想安全加密实际操作时,对明文进行预加密破坏其特征,再进行进一步加密才能安全,你懂吗? 安全加密就是不可破解的加密,否则毫无意义。
能力值:
( LV2,RANK:10 )
19 楼
for(i=0;i<nn;i++) { zz=zz+mi[i]; } 第三个漏洞,不教学了,懂得就懂,不懂的别问
能力值:
( LV2,RANK:10 )
20 楼
你是不是要把所有能出错的地方全出错啊! 很好的教学素材
能力值:
( LV2,RANK:10 )
21 楼
还有一个密码漏洞,不能再说了。
能力值:
( LV3,RANK:30 )
22 楼
你其实应该想想,为啥勒索病毒不用"随机值"加密文件,而是费劲巴拉的去用aes256
能力值:
( LV4,RANK:40 )
23 楼
谢谢wsy找出许多漏洞,但那些无关紧要。强大的是方法而不是细节。 我的理论就是乱码不可破解,因为乱码没有特征所以无法破解。一般加密软件没有绝对安全的,这是因为用户密码长度是有限的,所以可能被穷举攻击所击破,当然可能需要很长时间,但这种可能性是不能排除的。 我的目标也很简单——就是加密不可破解。实际应用乱码不可破解的理论这点已经做到了,只要将明文的特征去掉再加密就不可破解了,这倒不一定加密两次,先对明文做无损变换或编码等都可以,然后再加密,就是这么简单。
能力值:
( LV2,RANK:10 )
24 楼
这TMD的是一次一密?每个字节摩尔加一个随机数?那你的随机数每次都传给对端吗?密传?密传是用公钥体制吧,你干脆直接用公钥加密算了。 这跟我随便一串写数字给你破有啥区别?
能力值:
( LV2,RANK:10 )
25 楼
脑壳坏了。密钥或者密钥的产生方式不约定,在这胡扯。我就问你对端怎么产生解密密钥,别说每次都传过去的。