【分享】全局字符串转换为局部变量存储防止软件被静态分析暴露敏感字符串
2012-06-12 14:41
471 查看
源码下载地址:http://download.csdn.net/detail/asmcvc/4368397
全局字符串转换为局部变量存储防止软件被静态分析暴露敏感字符串,支持UNICODE字符集和多字节字符集,支持中文,没有做加密处理。
运行效果截图:
输入要转换的全局字符串,例如:C:\\file\\我的文件.txt,输出:
如果字符串不包含中文,例如:file not found,输出
以上结果把变量名稍作修改即可使用,源代码如下:
全局字符串转换为局部变量存储防止软件被静态分析暴露敏感字符串,支持UNICODE字符集和多字节字符集,支持中文,没有做加密处理。
运行效果截图:
输入要转换的全局字符串,例如:C:\\file\\我的文件.txt,输出:
//C:\\file\\我的文件.txt #ifdef _UNICODE TCHAR szC:\\file\\我的文件.txt[] = { 'C', ':', '\\', 'f', 'i', 'l', 'e', '\\', 0x6211, 0x7684, 0x6587, 0x4EF6, '.', 't', 'x', 't', '\0' }; #else CHAR szC:\\file\\我的文件.txt[] = { 'C', ':', '\\', 'f', 'i', 'l', 'e', '\\', 0xCE, 0xD2, 0xB5, 0xC4, 0xCE, 0xC4, 0xBC, 0xFE, '.', 't', 'x', 't', '\0' }; #endif
如果字符串不包含中文,例如:file not found,输出
//file not found TCHAR szfile not found[] = { 'f', 'i', 'l', 'e', ' ', 'n', 'o', 't', ' ', 'f', 'o', 'u', 'n', 'd', '\0' };
以上结果把变量名稍作修改即可使用,源代码如下:
// strtestDlg.cpp : 实现文件 // #include "stdafx.h" #include "strtest.h" #include "strtestDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CstrtestDlg 对话框 CstrtestDlg::CstrtestDlg(CWnd* pParent /*=NULL*/) : CDialog(CstrtestDlg::IDD, pParent) , m_strIN(_T("")) , m_strOut(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CstrtestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_strIN); DDX_Text(pDX, IDC_EDIT2, m_strOut); } BEGIN_MESSAGE_MAP(CstrtestDlg, CDialog) //}}AFX_MSG_MAP ON_BN_CLICKED(IDOK, &CstrtestDlg::OnBnClickedOk) END_MESSAGE_MAP() // CstrtestDlg 消息处理程序 BOOL CstrtestDlg::OnInitDialog() { CDialog::OnInitDialog(); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 m_strOut = _T("本程序将全局字符串转换为局部变量存储,防止软件被静态分析暴露敏感字符串,没有做加密处理。\r\n\r\n例如输入:C:\\\\file\\\\我的文件.txt\r\n"); UpdateData(FALSE); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } //换行要用\r\n void CopyToClipboard(LPCTSTR szText,int nCbSize/*=-1*/) { if ( szText==NULL ){ return; } if ( nCbSize==-1 ){ nCbSize = lstrlen(szText)*sizeof(TCHAR); } HGLOBAL hClip = GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE,nCbSize+1); if ( hClip==NULL ){ return; } char *pBuff = (char*)GlobalLock(hClip); if( pBuff==NULL ){ GlobalFree(hClip); return; } memcpy(pBuff,szText,nCbSize); pBuff[nCbSize] = 0; GlobalUnlock(hClip); if ( OpenClipboard(NULL) ){ EmptyClipboard(); SetClipboardData( CF_TEXT,hClip); CloseClipboard(); } GlobalFree(hClip); } void CstrtestDlg::OnBnClickedOk() { UpdateData(); CString strHeader = _T("CHAR sz") + m_strIN + _T("[] = { "); CString strText; CStringA strInputA; CStringW strInputW; CStringA strTempA; CStringW strTempW; WCHAR chTempW = 0; CHAR chTempA = 0; strInputA = m_strIN; strInputW = m_strIN; BOOL bContainChinese = FALSE; //先获取UNICODE模式 for ( int i=0; i<strInputW.GetLength(); ++i ){ chTempW = strInputW.GetAt(i); if ( chTempW==L'\\' ){ //转义字符,向后再取一个 ++i; strTempW = strInputW.GetAt(i); strText += L"\'\\" + strTempW + L"\', "; }else if ( chTempW<0 || chTempW>127 ){ //看成中文字符 bContainChinese = TRUE; strTempW.Format(L"0x%X, ",chTempW); strText += strTempW; }else{ //其他正常字符 strTempW = chTempW; strText += L"\'" + strTempW + L"\', "; } if ( i==strInputW.GetLength()-1 ){ strText += L"\'\\0\' };"; } } m_strOut = L"T" + strHeader + strText + L"\r\n"; //有中文字符的情况下,生成的TCHAR字符串和CHAR字符串是不一样的 if ( bContainChinese==TRUE){ strText.Empty(); for ( int i=0; i<strInputA.GetLength(); ++i ){ chTempA = strInputA.GetAt(i); if ( chTempA=='\\' ){ //转义字符,向后再取一个 ++i; strTempA = strInputA.GetAt(i); strText += "\'\\" + strTempA + "\', "; }else if ( chTempA<0 || chTempA>127 ){ //看成中文字符 strTempA.Format("0x%X, ",(unsigned char)chTempA); strText += strTempA; }else{ //其他正常字符 strTempA = chTempA; strText += "\'" + strTempA + "\', "; } if ( i==strInputA.GetLength()-1 ){ strText += "\'\\0\' };"; } }//end for m_strOut = _T("#ifdef _UNICODE\r\n") + m_strOut + _T("#else\r\n") + strHeader + strText + _T("\r\n#endif\r\n"); } //把原字符串作为注释 m_strOut = _T("\r\n//") + m_strIN + _T("\r\n") + m_strOut; CopyToClipboard(m_strOut,m_strOut.GetLength()); UpdateData(FALSE); }
相关文章推荐
- 局部变量 全局变量 作用域 静态存储 动态存储,看书
- (转载)未结束的字符串常量:C++堆、栈、自由存储区、全局/静态存储区和常量存储区
- 局部变量与全局变量区别,栈、堆和静态存储区的区别
- 分析全局变量、局部变量、静态全局…
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- 关于动态数组、静态数组转换为字符串的一些问题 - 给 "厨师" 的回复
- C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
- 全局变量、局部变量、静态全局变量、静态局部变量的区别
- 全局变量、局部变量、静态全局变量、静态局部变量的区别
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储
- 堆” 和“自由存储区”的区别?“全局/静态存储区”和“常量存储区”的区别?
- 好东西是要分享的,下了一个优秀的USB PC分析软件,不逊于Bus Hound
- 变量的存储方式和生存期(局部变量and全局变量)
- Android SO逆向-全局变量和静态局部变量
- c++中静态成员变量 静态成员函数 全局变量与静态函数的关系 字符串中括号的匹配编程 (笔试经历)
- PEframe - 工具对恶意软件执行静态分析
- 怎样通过流量分析防止网络流氓软件
- 我也分享一个字节数组到十六进制字符串互相转换
- C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区