Access 密码破解原理- -
Access 密码破解原理- -
// CrackAccessPassDlg.cpp : 实现文件
//#include "stdafx.h"
#include "CrackAccessPass.h"
#include "CrackAccessPassDlg.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialog
{
public:CAboutDlg();// 对话框数据enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现
protected:DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{CDialog::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()// CCrackAccessPassDlg 对话框CCrackAccessPassDlg::CCrackAccessPassDlg(CWnd* pParent /**//*=NULL*/): CDialog(CCrackAccessPassDlg::IDD, pParent), m_filePath(_T(""))
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CCrackAccessPassDlg::DoDataExchange(CDataExchange* pDX)
{CDialog::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_filePath);
}BEGIN_MESSAGE_MAP(CCrackAccessPassDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPON_BN_CLICKED(IDC_BUTTON1, &CCrackAccessPassDlg::OnBnClickedButton1)
END_MESSAGE_MAP()// CCrackAccessPassDlg 消息处理程序BOOL CCrackAccessPassDlg::OnInitDialog()
{CDialog::OnInitDialog();// 将“关于”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。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);}}// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon, FALSE); // 设置小图标// TODO: 在此添加额外的初始化代码return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}void CCrackAccessPassDlg::OnSysCommand(UINT nID, LPARAM lParam)
{if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}
}// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。void CCrackAccessPassDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作矩形中居中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;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}
}//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CCrackAccessPassDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CCrackAccessPassDlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码CFileDialog fd(TRUE,"*.mdb","",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"ACCESS数据库文件(*.mdb)|*.mdb|所有文件(*.*)|*.*||",NULL,0);INT_PTR nResponse = fd.DoModal();if(nResponse == IDOK){m_filePath = fd.GetPathName();UpdateData(false);DoCrack();}
}/**//*
* @ 解密工作
*/
void CCrackAccessPassDlg::DoCrack()
{CString PassWord;BYTE accVer[3] = {0};BYTE accID = 0x00;BYTE accFile[40] = {0};BYTE accDataKey[128] = {0};char accFlagString[16] = {0};//以只读方式打开CFile myFile(m_filePath,CFile::modeRead | CFile::shareDenyNone);DWORD len = myFile.GetLength();if(len > 320){myFile.Seek(66,CFile::begin);myFile.Read(&accFile,sizeof(accFile));myFile.Seek(156,CFile::begin);myFile.Read(&accVer,sizeof(accVer));myFile.Seek(20,CFile::begin);myFile.Read(&accID,sizeof(accID));myFile.Seek(24,CFile::begin);myFile.Read(&accDataKey,sizeof(accDataKey));myFile.Seek(4,CFile::begin);myFile.Read(&accFlagString,sizeof(accFlagString));}myFile.Close();if(strcmp(accFlagString,"Standard Jet DB")){SetDlgItemText(IDC_VER,"不是Access数据库!");return;}char *sKey2K = "3074EC37EBCB9CFA70D128E6A5398A60E21B7B3643FDDFB1C17B13437920B13382EE795B243A7C2A";char *sKey97 = "86FBEC375D449CFAC65E28E613";CString Version;//判断版本虽然没用,先留着if(accVer[0] == '0'){Version = "3.51";}else{Version = (CString)accVer;}Version = (accID == 0 ? "Access 97":"Access 2000");SetDlgItemText(IDC_VER,Version);//取密码if(accID == 1){PassWord = CrackPassDirect(accDataKey);if ( PassWord.GetLength() == 0){PassWord = "没有密码";}}else if(accID == 0){PassWord = CrackPass97(accFile);if(PassWord.GetLength() ==0){PassWord = "没有密码";}}else{PassWord = "不是Access数据库";}SetDlgItemText(IDC_PASS,PassWord);
}CString CCrackAccessPassDlg::CrackPassDirect(BYTE (&f_bytes)[128])
{CString ret;long l;BYTE EncryptKey[4]; //初始密钥BYTE EncryptRet[258] = {0};EncryptKey[0] = 0xC7;EncryptKey[1] = 0xDA;EncryptKey[2] = 0x39;EncryptKey[3] = 0x6b;//得到解密Keyfor(l=0;l<=255;l++){EncryptRet[l] = l;}long temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8;temp1 = temp2 = temp3 = temp4 = temp5 = temp6 = temp7 = temp8 = 0;for(l=0;l<=255;l++){temp1 = temp2;temp1 = EncryptKey[temp1];temp4 = EncryptRet[l];temp1 = temp1 + temp4;temp4 = temp3;temp1 = temp1 + temp4;temp1 = temp1 & 0x800000FF;temp3 = temp1;temp1 = EncryptRet[l];temp5 = temp1;temp1 = temp3;temp1 = EncryptRet[temp1];EncryptRet[l] = temp1;temp4 = temp3;EncryptRet[temp4] = temp5;temp1 = temp2;temp1++;temp4 = temp1 % 4;temp2 = temp4;}//运算结束//又一轮运算temp1=temp2=temp3=temp4=temp5=temp6=temp7=temp8=0;temp4 = EncryptRet[0x100];temp1 = EncryptRet[0x101];for(l=1;l<=0x80;l++){temp4++;temp4 &= 0x800000FF;temp3 = temp4 & 0xff;temp5 = EncryptRet[temp3];temp1 &= 0xff;temp5 += temp1;temp1 = temp5 & 0x800000FF;temp6 = EncryptRet[temp4];temp5 = EncryptRet[temp1];EncryptRet[temp3] = temp5;temp2 = temp1;EncryptRet[temp2] = temp6;temp5 = EncryptRet[temp3];temp3 = EncryptRet[temp1 & 0xff];temp5 += temp3;temp5 &= 0x800000FF;temp7 = temp5;temp3 = temp8;temp5 = EncryptRet[temp5];long t = f_bytes[temp3] ^ temp5;f_bytes[temp3] = t;temp8 ++;}EncryptRet[0x100] = temp4;EncryptRet[0x101] = temp1;//又一轮结束double db;::MoveMemory(&db,&f_bytes[90],8);//::RtlMoveMemory(&db,(&f_bytes[0])+90,8);long Key = (int)db;long lResult[20];for(l=0;l<20;l++){lResult[l] = f_bytes[l*2+42]+256*(long)f_bytes[l*2+43];if(l%2 == 0){lResult[l] ^= Key;}if(lResult[l] != 0){ret += (char)lResult[l];}}return ret;
}CString CCrackAccessPassDlg::CrackPass97(BYTE (&f_bytes)[40])
{CString ret;BYTE KEY[] = {0X86,0xfb,0xec,0x37,0x5d,0x44,0x9c,0xfa,0xc6,0x5e,0x28,0xe6,0x13};long lAsc;for(int i=0;i<sizeof(KEY);i++){lAsc = f_bytes[i] ^ KEY[i];if(lAsc != 0){ret += (char)lAsc;}}return ret;
}
转载于:https://www.cnblogs.com/diulela/archive/2012/07/30/2615553.html
Access 密码破解原理- -相关推荐
- shell下密码破解原理
经常看到有一些软件都是暴力破解密码的,md5加密之后的字符串是无法解密的,破解密码只是把已知的32位加密之后的字符串与自己事先写在txt文档里面的字符串md5加密之后进行比较,如果匹配上了,就用程序返 ...
- WPA-PSK无线网络密码破解原理
1.基于WPA2的加密标准还是能够被破解,一个弊端是他无法避开时候双方验证的模式来认证取得合法性的连接,当我们抓取足够多得双反认证的数据包之后就可以破解密码.之前很多片的博客写了如何破解这种加密的秘钥 ...
- 不靠谱的Access 轻松破解密码
刚刚无意间发现网上有很Access密码破解工具,而且不是穷举方法的暴力破解.据说是Access中的某个偏移位置开始就是存储的密码信息. 所以我把2个设置不同密码的空数据库进行二进制比较(一个密码是ab ...
- 无线攻击及密码破解的四种方式详解
随着社会的进步,现在我们在每一地方逗留都离不开无线通信,WiFi.4G等等:这就是无线领域的优势所在! 无线领域十分难以捉摸,从一点儿一点儿进步到现在,无线的安全深入人心,站在安全的角度来说无线通信一 ...
- Wifi密码破解与局域网抓包监听(小白--纯工具版)
使用的自家设备仅作测试和技术讨论! 工具介绍:(本身电脑自带了WIN7和Ubuntu双系统) 1,wifi密码破解: CDlinux.iso :一个Linux系统,集成了wifi密码的PIN码破解软 ...
- 20款 密码破解工具
没有密码不用急!20种超全的解密工具任你选!!值得下载珍藏的呀!! 以下含扩了从系统密码到应用软件.最高深的BIOS到最常见的ZIP.RAR压缩文件几乎所有的密码解读.解密工具(共计190条),以方便 ...
- 网络安全笔记-02-win7 粘滞键系统密码破解
win7 粘滞键系统密码破解 原理: 部分win7或者win10 在未进入系统时,可通过系统修复漏洞篡改文件名 连按五次shift键会触发粘滞键程序,该程序名称为sethc.exe程序,所处位置在c: ...
- CCNP1交换:三层架构概述、路由器交换机登录密码破解、VLAN、trunk(ISL、dot1Q)、DTP、VTP、交换机工作原理
文章目录 CCNP1交换:三层架构概述.路由器交换机登录密码破解.VLAN.trunk(ISL.dot1Q).DTP.VTP.交换机工作原理 一.企业网三层架构概述: 1.冗余: 2.三层架构: 二. ...
- 浅谈通过CMOS放电破解BIOS密码的原理
浅谈CMOS放电破解BIOS密码的原理 ROM和RAM BIOS CMOS 主板电池 CMOS放电清除BIOS密码 电脑开机密码是软件密码,比较容易破解:BIOS密码是硬件密码,如果忘了BIOS密码该 ...
最新文章
- 听说,这是时下最恐怖的出游邀请
- Android--手势触控屏幕控制/GestureDetector
- halcon算子盘点:Chapter 15灰度分割
- 链接oracle spatial,oracle spatial初试
- rk3288 android4.4,ubuntu16.04下firefly rk3288的编译安卓4.4
- [NOI2012]美食节
- Pa interface issue——PA_EXCEED_ROUND_LIMIT
- python getchar,Linux C编程学习:getchar()和getch()
- 年薪不到 25.2 万退学费,廖雪峰的“大数据高级开发”课程招生
- 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换(转载)
- MySQL中EXPLAIN详解
- bootstrap table传回的数据后端怎么获取_基于 Spring Cloud 开发的分布式系统,遇到爬虫、接口盗刷怎么办
- 好程序员web前端分享逻辑运算
- Cocos2d-x 3.X手游开发实例详解
- 雷达最大不模糊速度_雷达基础知识:案例计算
- 【2020年度合辑】人工智能量化实验室原创推送合辑
- 2020《互联网周刊》年度评选结果揭晓, Smartbi获三项行业大奖
- 华为服务器安装nas系统,云服务器搭建nas
- 云计算被指变相占土地 专家称去伪存真
- oracle数据错误循环冗余检查,/S-Error: (OS 23) 数据错误(循环冗余检查)