版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届北京东城二中学初三2月月考试题英语试题含解析
- 2026年四川省成都市青白江区重点达标名校高中毕业班第二次教学质量检查语文试题含解析
- 河北省唐山市迁安市市级名校2026年初三二模冲刺(一)英语试题试卷含解析
- 广西壮族自治区河池市东兰县2026届初三一测英语试题试卷含解析
- 山东省济宁市市中区2025-2026学年中考语文试题全真模拟卷含解析
- 招标投标诚信行为保证承诺书9篇范文
- 技术部门文档编写及维护模板
- 企业融资合法性承诺书5篇范文
- 企业培训需求评估问卷标准化模板
- 服务器停机紧急处置流程企业IT部门预案
- 2026中国农业科学院饲料研究所新兽药与免疫调控创新团队科研助理招聘2人备考题库及完整答案详解(各地真题)
- 2026年高考语文全真模拟试卷(含答案解析)
- 江苏苏州2016-2024年中考满分作文103篇
- GB/T 19409-2003水源热泵机组
- GA 979-2012D类干粉灭火剂
- 小学科学《昼夜交替现象》优质课件-
- 人教八年级下册地理:北方地区复习课件
- 人教版六年级数学下册《三 第6课时 求不规则物体的体积》课堂教学课件PPT小学公开课
- 铁道概论全套课件
- 《读懂彼此的心》PPT(第1课时)课件
- 光刻基础工艺培训
评论
0/150
提交评论