⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mir2dlg.cpp

📁 热血传奇1.8加密解密算法源码 简单实现
💻 CPP
字号:
// Mir2Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "Mir2.h"
#include "Mir2Dlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// 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()

/////////////////////////////////////////////////////////////////////////////
// CMir2Dlg dialog

CMir2Dlg::CMir2Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMir2Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMir2Dlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMir2Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMir2Dlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMir2Dlg, CDialog)
	//{{AFX_MSG_MAP(CMir2Dlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMir2Dlg message handlers

BOOL CMir2Dlg::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
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMir2Dlg::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 CMir2Dlg::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 CMir2Dlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

int Mir2EnCode(BYTE *pInBuff,DWORD dwInLen,BYTE *pOut,DWORD dwOutLen)
{
	DWORD var_20 = 0;
	BYTE  var_1B = 0;
	BYTE  var_1A = 0;
	BYTE  var_19 = 0;
	DWORD var_18 = 0;
	DWORD var_14 = 0;
	DWORD var_10 = 0;
	DWORD var_C = 0;
	DWORD var_8 = 0;
	DWORD var_4 = 0;
	

	BYTE bAL = 0;
	BYTE bCL = 0;
	DWORD dwEAX;
	DWORD dwEDX;
	DWORD dwECX;
	
	var_20 = dwInLen ;
	while(var_20 >0)
	{
		dwEDX = var_10 ;
		bAL = pInBuff[dwEDX];
		var_1A = bAL ;
		dwECX = var_14 ;
		dwECX = dwECX +2;
		bAL = var_1A;
		dwEAX = bAL ;
		dwEAX = dwEAX >> dwECX ;
		bAL = dwEAX ;
		bAL = bAL | var_1B;
		
		bAL = bAL & 0x3F;
		var_19 = bAL;
		
		dwEAX = var_14 ;
		dwEAX = dwEAX +2;
		dwECX = 8;
		dwECX = dwECX - dwEAX ;
		bAL = var_1A;
		dwEAX = bAL ;
		dwEAX = dwEAX << dwECX ;
		dwEAX = dwEAX >> 2;
		bAL = dwEAX ;
		bAL = bAL & 0x3F ;
		var_1B = bAL ;
		var_14 = var_14 +2;
		if(var_14<6)
		{
			dwEDX = var_18;
			bCL = var_19;
			bCL = bCL + 0x3C ;
			pOut[dwEDX] = bCL ;
			var_18 = var_18 +1;
		}
		else
		{
			dwEDX = var_18;
			bCL = var_19;
			bCL = bCL + 0x3C ;
			pOut[dwEDX] = bCL ;
			dwEDX = var_18 ;
			bCL = var_1B ;
			bCL = bCL + 0x3C;
			pOut[dwEDX+1] = bCL ;
			var_18 = var_18 + 2;
			dwEAX =  0;
			var_14 = 0;
			var_1B = 0;
		}
		var_10 = var_10 +1;
		var_20 = var_20 -1;
	}
	
	if(var_14 > 0)
	{
		dwEDX = var_18;
		bCL = var_1B;
		bCL = bCL + 0x3C ;
		pOut[dwEDX] = bCL ;
		var_18 = var_18 +1;
	}
	dwOutLen = var_18;
	pOut[var_18]='\0';
	return 1;
}

int Mir2DeCode(BYTE *pInBuff,DWORD dwInLen,BYTE *pOut,DWORD dwOutLen)
{
	BYTE byte_4A2CBE[]={0x40,0x00,0xFC,0xF8,0xF0,0xE0,0xC0,0x8D,0x40};
	DWORD var_28 = 0;
	BYTE  var_23 = 0;
	BYTE  var_22 = 0;
	BYTE  var_21 = 0;
	DWORD var_20 = 0;
	DWORD var_1C = 0;
	DWORD var_18 = 0;
	DWORD var_14 = 0;
	DWORD var_10 = 0;
	DWORD var_C = 0;
	DWORD var_8 = 0;
	DWORD var_4 = 0;
	
	DWORD dwEAX = 0;
	DWORD dwEDX = 0;
	DWORD dwECX = 0;
	BYTE  bAL = 0;
	BYTE  bCL = 0;

	var_14 = dwInLen;
	var_18 = 2;
	dwEAX = 0;
	var_1C = dwEAX ;
	dwEAX = 0;
	var_20 = dwEAX ;
	var_22 = 0;
	
	dwEAX = var_14 ;
	var_28 = dwEAX ;
	var_10 = 1;
	dwEDX = var_10 ;
	while(var_28>0)
	{
		dwEAX = pInBuff[dwEDX-1];
		dwEAX = dwEAX -0x3C;
		if(dwEAX >= 0)
		{
			dwEDX = var_10 ;
			bAL = pInBuff[dwEDX-1];
			bAL = bAL -0x3C;
			var_21 = bAL;
		}
		else
		{
			dwEAX = 0;
			var_20 = dwEAX ;
		}
		dwEAX = var_20 ;
		dwEAX = var_1C ;
		dwEAX = dwEAX + 0x06;
		if(dwEAX >= 8)
		{
			dwECX = 6;
			dwECX = dwECX - var_18;
			bAL = var_21;
			bAL = bAL & 0x3F;
			dwEAX = bAL ;
			dwEAX = dwEAX >> dwECX;
			bAL = dwEAX ;
			bAL = bAL | var_22;
			var_23 = bAL ;
			dwEDX = var_20 ;
			bCL = var_23;
			pOut[dwEDX] = bCL;
			var_20 = var_20 +1;
			dwEAX = 0;
			var_1C = dwEAX ;
			if(var_18 >=6)
			{
				var_18 = 2;
				var_10 = var_10 +1;
				var_28 = var_28 -1;
			}
			else
			{
				var_18 = var_18 +2;
				dwECX = var_18;
				bAL = var_21;
				bAL = bAL << dwECX ;
				dwEDX = var_18;
				bAL = bAL & byte_4A2CBE[dwEDX];
				var_22 = bAL ;
				
				dwEAX = bAL =8;
				dwEAX = dwEAX -var_18;
				var_1C = var_1C + dwEAX;
				
				var_10 = var_10 +1;
				var_28 = var_28 -1;
			}
		}
		else
		{
			dwECX = var_18;
			bAL = var_21;
			bAL = bAL << dwECX ;
			dwEDX = var_18;
			bAL = bAL & byte_4A2CBE[dwEDX];
			var_22 = bAL ;
			
			dwEAX = bAL =8;
			dwEAX = dwEAX -var_18;
			var_1C = var_1C + dwEAX;
			
			var_10 = var_10 +1;
			var_28 = var_28 -1;
		}
	}
	dwOutLen = var_20;
	return 1;
}


void CMir2Dlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	CString s1;
	char szBuff[MAX_PATH]={0};
	//01EB46F8  1F 01 62 02 C3 0B 00 00 04 00 00 00              ..b.?.......
	BYTE szTemp[]={0x1F,0x01,0x62,0x20,0xC3,0x0B,0x00,0x00,0x04,0x00,0x00,0x00};
	DWORD dwLen = 0;
	BYTE *pTemp = NULL ;
	GetDlgItemText(IDC_EDIT1,s1);
	
	if(s1.IsEmpty())
	{
		//return ;
	}
	strcpy(szBuff,s1);
	pTemp = new BYTE [1024];
	if(pTemp == NULL)
	{
		return ;
	}
	memset(pTemp,0,1024);
	//Mir2EnCode((BYTE *)szBuff,strlen(szBuff),pTemp,dwLen);
	Mir2EnCode(szTemp,0x0C,pTemp,dwLen);
	s1 = pTemp ;
	SetDlgItemText(IDC_EDIT2,s1);
	delete []pTemp;
	
}

void CMir2Dlg::OnButton2() 
{
	// TODO: Add your control notification handler code here
	//03D61124  54 40 67 5A 47 4C 70 3C 45 6C 41 64 3C 5C 40 3C  T@gZGLp<ElAd<\@<
	//BYTE szTemp[]={0x54 ,0x40 ,0x67 ,0x5A ,0x47 ,0x4C ,0x70 ,0x3C ,0x45 ,0x6C ,0x41 
	//			,0x64 ,0x3C ,0x5C ,0x40 ,0x3C};
	BYTE szTemp[]={0x48 ,0x4F ,0x44 ,0x6F ,0x49 ,0x3F ,0x50 ,0x72 ,0x21};
	DWORD dwLen = 0;
	BYTE *pTemp = NULL ;
	pTemp = new BYTE [1024];
	if(pTemp == NULL)
	{
		return ;
	}
	memset(pTemp,0,1024);
	Mir2DeCode(szTemp,0x9,pTemp,dwLen);
	delete []pTemp;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -