存档

2011年5月 的存档

在构造函数抛出异常后析构函数将不再被调用

2011年5月29日 7 条评论

我发现要从构造函数中将错误信息传递给类的使用者有一个很简便的方法,那就是抛出异常,这样就可以直接传递字符串之类的信息了。如果是从一个普通的函数传回错误信息的话,以前往往选择返回一个错误代码,然后定义一个字符串二维数组,用相应的错误代号来取得错误信息。
但是如果构造函数要是抛出了异常,这个类的析构函数将不会被调用。如果不知道这一点,那么在构造函数中抛出异常就很危险了。析构函数不被调用,意味着清理工作不会被执行,会导致内存泄露、资源泄露等,这会给我们的产品带来很差的用户体验。
还是先来测试一下吧,证[……]

继续阅读

MFC调用CFileDialog之后目录改变

2011年5月28日 5 条评论

今天在写MFC程序时发现调用CFileDialog之后,再来用相对路径打开程序目录下的文件就不对了,打不开了。后来一调试,发现是程序的路径变成了CFileDialog所选择的路径。
解决方法:在调用CFileDialog的DoModal之前使用GetCurrentDirectory获取程序的目录并且保存下来,然后在DoModal之后嗲用SetCurrentDirectory恢复就可以了。这不会影响到CFileDialog的目录,因为它使用的是绝对路径。

感谢gewala提醒:
在CFileDi[……]

继续阅读

分类: MFC开发 标签: , ,

VS2008为MFC添加UAC控制

2011年5月27日 2 条评论

之前写过一篇博客——《VC/MFC编程弹出UAC窗口》,说的是通过添加一个特殊的资源来给程序添加UAC控制,当时候在VC6下面测试的很好。
今天在VS2008下写MFC,又需要用到这个。突然发现这个方法不灵了。虽然网上还是有一群人说添加资源可以实现,但我就是测试不成功。后来去网上找了很久,发现Visual Studio原来自己就带有这个功能。
打开项目属性,选择“配置属性”–>“连接器”–>“清单文件”–>“UAC执行级别”,将其设置为requireAdminist[……]

继续阅读

分类: MFC开发 标签: ,

Windows Explorer命令行参数选项

2011年5月27日 没有评论

不少具有进程管理任务的程序都有这么一个功能:就是可以定位文件的位置,他们在打开资源管理器之后还能让这个文件处于选中状态。其实这是通过给explorer程序传递一些特定的参数来实现的。但是explorer这个程序本身并没有说明解释,于是只好找Google了,搜一下“Windows Explorer Command-Line”,果然微软的网站就有解释(P.S. 百度在这方面就非常逊色了 [em006] )。
具体参见《 用于 Windows XP 的 Explorer.exe 命令行选项》
大家可[……]

继续阅读

分类: Windows SDK 标签: , ,

系统即时调试器注册表设置

2011年5月26日 没有评论

最近几天比较闲,于是想扩展一下原来写的PE工具,发现那个太差了,不好意思拿出手,所以现在又模仿了PETools的一些功能。今天做了一下那个调试功能:把选中的进程附加到系统的即时调试器。
一开始我以为是要用DebugActiveProcess这个API来附加到进程,后来发现DebugActiveProcess这个API是用来将自己附加到指定进程。也就是说,如果你自己是调试器,去调用DebugActiveProcess才有意义。于是就不知道该怎么办了。后来,用OD简单分析了一下PETools的这个功[……]

继续阅读

分类: 逆向调试 标签: , ,

error C2440 reinterpret_cast 无法从NMHDR *转换为NMITEMACTIVATE

2011年5月26日 没有评论

错误描述:error C2440: “reinterpret_cast”: 无法从“NMHDR *”转换为“NMITEMACTIVATE”;转换要求构造函数或用户定义的转换运算符,而该运算符不能由 const_cast 或 reinterpret_cast 使用
错误起因:在VS2008中,当为MFC的CListCtrl控件添加NM_RCLICK事件响应时VS自动生成的代码会漏掉一个*号。

void CProjectNameDlg::OnNMRClickListProcess(NMHD[……]

继续阅读

分类: MFC开发 标签: , ,

带壳破解SMC补丁技术

2011年5月26日 6 条评论

今天又考完了一门课程,大三也即将结束了。大三的结束基本上也就意味着大学学习的结束,所以要抓紧留在学校的时间多学点东西。今天看了SMC补丁技术,很简单的那种。复杂的还有好几层的SMC技术,那个应用在壳上加壳的破解。
SMC补丁技术可以实现带壳破解。主要原理就是在外壳解密/压缩完成即将跳转到OEP之际,让其跳转到另一个地方。在那个地方我们将完成程序的补丁工作,然后再跳转到OEP处执行。至于SMC的英文全称,我也不知道是什么。
首先是一个简单的CrackMe,通过判断输入的字符串是否与程序中预置的字符[……]

继续阅读

分类: 逆向调试 标签: , , ,

Windows SEH汇编版

2011年5月17日 没有评论

SEH,即Structured Exception Handling,中文为结构化异常处理。是Windows操作系统提供给程序设计者的强有力的处理程序错误或异常的武器。Ring3下fs:[0]指向TEB(Thread Environment Block)结构,打开WinDbg,查看_TEB结构:

nt!_TEB
+0x000 NtTib : _NT_TIB
+0x01c EnvironmentPointer : Ptr32 Void
+0x020 Cli[……]

继续阅读

分类: Win32 ASM 标签: , , ,

strlen反汇编代码

2011年5月15日 9 条评论

一般来说strlen的反汇编代码都是一个固定的形式。
IDA中的的反汇编代码如下:

.text:00401016 8D 7C 24 0C lea edi, [esp+10Ch+var_100]
.text:0040101A 83 C9 FF or ecx, 0FFFFFFFFh
.text:0040101D 33 C0 xor eax, eax
.text:0040101F F2 AE [……]

继续阅读

分类: 逆向调试 标签: , ,

[转]防缓冲区溢出开关/GS /SAFESEH

2011年5月15日 没有评论

缓冲区溢出通常表现为一个最为常见的漏洞而存在于今天的各种软件之中,黑客可以用恶意的输入,从而更改程序的执行流程,由此入侵相应的进程、电脑、或整个域。如果进程运行于一个高度受信的账户之下,如管理员或本地系统账户,那么黑客带来的破坏将是极其严重,并有潜在广泛传播的危险。近几年来爆发的一些”知名”病毒,如红色代码、冲击波、震荡波等等,都源于C/C++代码缓冲区溢出的结果。
从程序的角度来看,缓冲区溢出只是一个再简单不过的编程错误–都是关于复制一个内存区域的内容到另一[……]

继续阅读

分类: 缓冲区溢出 标签: , ,