




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用 MFC 手把手打造自己的 PE 信息查看器第 23 课 错误排查与程序优化 解决输入表问题2009 年 12 月 28 日-天草安全培训():让会编程的人懂逆向,让懂逆向的人会编程。目的:授人以鱼,不如授之以渔,授人以鱼只救一时之及,授人以渔则可解一生之需。 介绍:以下课程非完全独立,编程课中会适当穿插逆向知识,逆向课程会适当穿插编程知识。教大家会用编程的角度去逆向,用逆向的角度去编程。特色:一天消费一元, 圆你高手梦想-作者:天漏客(天草会员 ID:lilu)=主要内容:1、 sprf、wsprf、_stprf、swprf 问题。2、 参数 sizeof 问题。In bytes ,or
2、 in characters。3、 显示资源数据数据的优化问题。4、 输入表问题(文件数据名称失败) 下节课讲5、 资源类别名称_MBCS 环境下只显示一个字符问题。首先说明一下:从这节课开始,不再继续二进制资源,因为本来最初的安排就没有细化到资源。如果以后有需要,可以继续完善。从这节课以后,简单的 PE 信息查看器就编写完毕了。以后有机会,可能会优化,或者增强功能。所以这节课是一个 bug 修复和程序优化的课程。搞清楚这几个函数的定义。#ifdef_UNICODE#define _stprf #else#define _stprfswprfspr#ifdef UNICODE#define w
3、sprf #else#define wsprfwsprfWwsprfA#endif / !UNICODE用的是 wsprf,实际上可以用_stprinft。可以写程序验证下两者有没有区别。为什么要把这个拿出来讲?因为我一直以为 sprinft 函数的 UNICODE 形式是 wsprinft,所以我在 UNICODE 的环境下都用的 wsprinft。虽然误打误撞,代码没有问题,但是这种想法是严重的错误。Sprinft 的 UNICODE 形式swsprinft,这个 w 在 s 的后面,而不是前面。那么为什么用 wsprinft,程序也没有错误呢?Spr f 用于 ASCII 下,swpr
4、f 用于 UNICODE 下,这个很明显。那么 wspr f 呢?这个 wsprinft 即可以用于 ASCII 下,也可以用于 UNICODE 下,它与前面两个最大的区别就是 wsprinft 不支持浮点数格式化,即不支持%f,而且有 1024 个字节的限制,可以看 MSDN。它是 Windows 版的格式化函数。Wsprinft 又可以分为 wspr fA 和 wsprinftW,分别用于两种不同的环境下。所以总结起来,使用 wsprinft 是没有错误的。main(argc, char* argv)prf(o World!n);char szBuff10 = 0;wchar_t wzBu
5、ff10 = 0; wsprf(szBuff,test); swprf(wzBuff,Ltest); prf(szBuff);wprf(wzBuff);return 0;Sizeof 问题。首先查找一下代码中的 sizeof,看看哪些地方用到了 sizeof。第一个:if (DragQueryFile(hDropInfo,0,tzFileName,sizeof(tzFileName)m_strFilePath = tzFileName; UpdateData(FALSE);看 MSDN:cchSize, in characters, of the lpszFiuffer.长度值是字符数,而不是
6、 in bytes。区别?实地测试下。DragQueryFile(hDropInfo,0,tzFileName,sizeof(tzFileName)DragQueryFile(hDropInfo,0,tzFileName,MAX_PATH)最后一个参数不同,一个是内存大小,一个是长度。当然,在 ASCII 环境下是一样的。但我们现在在 UNICODE 下,那么正确的写法究竟是哪个?调试。可以看到,当参数是 sizeof(tzFileName)时,就有可能出现溢出。真正的参数应该是MAX_PATH,长度值,而不是内存大小。in characters 的意思。显示资源数据数据的优化问题当前的做法,
7、是直接从文件里面资源数据。但是资源数据实际上已经到内存中去了,就没有必要再次了。安全起见,要判断一下。要判断一个范围,就要的数据起始部分是否在内存中,还有要的数据的结束部分是否在内存中。把资源大小的变量改为成员变量。dwResSize m_dwResSize;资源类别,MBCS 下只显示一个字符。char *pResBuff = NULL; char *pResBuffNew = NULL;/首先判断要的数据是否在内存中。if (dwOffset m_dwOffsetRes & (dwOffset + dwSize) Name m_dwImportRVA & (pImport-Name + 1
8、00) Name - m_dwImportRVA );else/文件HANDLE hFile = INVALID_HANDLE_VALUE;hFile=CreateFile(strFilename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile = INVALID_HANDLE_VALUE)continue;else/将 RVA 转换为偏移dwNameOffset=RVAtoOffset(PIMAGE_SECTION_HEADER)m_pSecionBuff,m_wSec
9、tionNum,pImport-Name);SetFilePoer(hFile,dwNameOffset,NULL,FILE_BEGIN); pNameBuff = new char256; memset(pNameBuff,0,256); ReadFile(hFile,pNameBuff,256,&dwReadLen,NULL); CloseHandle(hFile);hFile = INVALID_HANDLE_VALUE;strBuff = (char *)pNameBuff;delete pNameBuff;pNameBuff = NULL;对函数名称:有个问题,无法确定到底有多少个。
10、怎么做呢?判断,加循环。void CDialogImport:OnItemchangedListImport(NMHDR* pNMHDR, LRESULT* pResult)NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;/ TODO: Add your control notification handler code hereif(pNMListView-uChanged&LVIF_SE)&(pNMListView-uNewSe&LVIS_SELECTED)/ PIMAGE_IMPORT_DESCRIPTORpImport=(PIMAGE_I
11、MPORT_DESCRIPTOR)m_pImportBuff;pImport += pNMListView-iItem;DWORD dwTk = pImport-OriginalTk;IMAGE_TK_DATA*pTkData = NULL;DWORD dwTkOffset = 0;DWORD dwReadLen = 0;/如果 IMAGE_TK_DATA 数据已经到内存,就直接k m_dwImportRVA & dwTpTkData = (IMAGE_TK_DATA*)(DWORD)m_pImportBuff + dwTk -m_dwImportRVA);/else/否则要/删除原始数据 m
12、_ListFunctions.DeleteAllItems();HANDLE hFile = INVALID_HANDLE_VALUE;hFile=CreateFile(m_strFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile = INVALID_HANDLE_VALUE)return;/转换为文件偏移dwTkOffset=RVAtoOffset(PIMAGE_SECTION_HEADER)m_pSecionBuff,m_wSectionNum,dwTc
13、onstBuffSize = 256;k);char pTkBuuffSize = 0;CONTINUTET/K:TK DATA 数据SetFilePoer(hFile,dwTkOffset,NULL,FILE_BEGIN);memset(pTkBuff,0,sizeof(pTkBuff);ReadFile(hFile,pTkBuuffSize,&dwReadLen,NULL);pTkData = (IMAGE_TK_DATA*)pTkBuff;/循环进行显示函数 iIndexItem = 0 ; /行数索引/TK DATA 个数tzBuff20 = 0; strName;i = 0;TCHA
14、RCString/while(pT/TkData-u1.AddressOfData & i u1.Ordinal);m_ListFunctions.SetItemText(iIndexItem,2,tzBuff);if (HIWORD(pTkData-u1.Ordinal) & (0 x8000)/以序号方式输入 m_ListFunctions.SetItemText(iIndexItem,3,_T(-); wsprf(tzBuff,_T(Ord:%08X),IMAGE_ORDINAL(pTm_ListFunctions.SetItemText(iIndexItem,4,tzBuff);kDa
15、ta-u1.Ordinal);else/以名字输入/定位文件,函数名字DWORD dwOffsetImpByNameRVAtoOffset(PIMAGE_SECTION_HEADER)m_pSecionBuff,m_wSectionNum,(DWORD)pT-u1.AddressOfData);char pByNameBuff256 = 0;/再次函数名=kDataSetFilePoer(hFile,dwOffsetImpByNaLL,FILE_BEGIN);ReadFile(hFile,pByNameBuff,256,&dwReadLen,NULL);PIMAGE_IMPORT_BY_NAM
16、E pByName(PIMAGE_IMPORT_BY_NAME)pByNameBuff;if (pByName)wsprf(tzBuff,_T(%04X),pByName-H); m_ListFunctions.SetItemText(iIndexItem,3,tzBuff);=strName = (char *)pByName-Name;m_ListFunctions.SetItemText(iIndexItem,4,strName);elsem_ListFunctions.SetItemText(iIndexItem,3,_T(-);wsprf(tzBuff,_T(MemAddr:%08X
17、),(DWORD)pTkData-u1.Function);m_ListFunctions.SetItemText(iIndexItem,4,tzBuff);dwTdwT i+;pTk += 4;kOffset += 4;kData+;/如果缓存里面的都完毕了,就继续下面的数据。if (i = BuffSize / sizeof(IMAGE_TK_DATA)/dwTkOffset += BuffSize;goto CONTINUTETK;/关闭文件 CloseHandle(hFile);hFile = INVALID_HANDLE_VALUE;*pResult = 0;资源名称MBCS 下编译出现.strResType = (LPCWSTR)(LPCTSTR)pResDirStringU-NameString;strResName
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南13年中考数学试卷
- 贵阳市12月数学试卷
- 六年下期末测试题及答案
- 呼吸并发症时空模式-洞察及研究
- 室内空气离子化效应-洞察及研究
- 贵阳2024高考数学试卷
- 遴选笔试试题及答案
- 国际高中数学试卷
- 空分试题及答案
- b类安全员模拟考试试题及答案
- 惠普尔养障体肺炎诊疗要点解析
- 2025年全国工会系统经审业务技能大赛知识总题库(1800题)-中部分
- 八年级历史下册期末复习测试卷(含答案)2024-2025学年人教版
- 康养医养中心建设项目可行性研究报告
- 第四版(2025)国际压力性损伤溃疡预防和治疗临床指南解读
- SYT 7627-2021 水基压裂液技术要求-PDF解密
- (高清正版)JJF(浙)1162-2019空气热老化试验设备校准规范
- 国家开放大学《中国古代文学(B)(1)》章节测试参考答案
- 广州市小学六年级上英语单词(含音标)
- 法兰基础知识.ppt课件
- 无机化学第4版下册(吉大宋天佑)2019
评论
0/150
提交评论