这个周末还真有点倒霉,舌头溃疡还没好,口腔又开始溃疡了。
看来还真的是应验了我妈说的:我容易溃疡!
记得去年的时候,公司的人都去体检。我体检出来的结果,一切都良好,就写了两个毛病:敏感性鼻炎和白细胞过多。
敏感性鼻炎我知道,小的时候就有了,得这病的人很容易就打喷嚏的。除了敏感的时候比较难受外,也没有太大的影响。白细胞过多呢,我让我妈帮我问一下她家族里当医生的人;她告诉我,白细胞过多比较容易得口腔溃疡。
想想我小的时候,确实是挺容易溃疡的。最厉害的一次,是痛得我吃不下饭、睡不了觉,还连话都说不了。其次的就是上下左右同时四处溃疡,也难受了好久好久。这次又来同时两处的溃疡,真受不了。
因为舌头有点溃疡,刷个牙也不方便。结果周六的那天,我刷牙的时候,牙刷没拿好,掉马桶里去了,真够倒霉~我周六没法刷牙了~~~
周末躲在家里玩了两天的电脑,主要是研究一下.NET平台下API的调用,顺便学习下一些平时没用过的API。像NtDuplicateObject、NtOpenProcess、NtQueryDirectoryFile等一些API,平时都很少用的。
一般我们写程序,都只是用了user32.dll、kernel32.dll、gdi.dll里的API函数,还有ntdll.dll里很少的一部分API函数。而上述的三个API,都是ntdll.dll里没有公开的函数。由于几个函数都是没有公开的,资料比较少,用起来确实挺麻烦的。
一边参考着别人的文章与资料(特别是陈辉兄弟的文章,这家伙不是人,是个怪物,之前在瑞星公司上班),一边自己思考非托管数据类型与托管数据类型之间的异同点,进行函数的转换声明与调用。鼓捣了两天,终于实现了Low-Level Mouse Hook、Dump PE File From Memory、Adjust Process Token、Enum Directorys And Files By ntdll.dll's Functions、Get Link-File Path等几个工程。一会再把Get Process Command Line完成,那我这个周末的目标也算是完成了。
这几个工程中,我觉得最简单的估计是提权的那个,因为就简单地调用两三个API就完成了。最麻烦的其实是Dump PE文件的那个,要分析文件头等内容。获取快捷方式路径与获取命令行参数的那个也是基于这个实现的,只是没那么麻烦而已。
本来还想研究下.NET下的API Hook,结果我发现,似乎我没办法实现这个。因为无论我用LoadLibrary还是GetModuleHandle,都是失败的,GetLastError返回5。用ErrorLookup查了一下,结果是“拒绝访问”。估计是.NET平台对这方面的操作作了限制吧。如果不能GetModuleHandle或LoadLibrary,要Hook API是很麻烦的。估计要到内存里面分析dll的镜像地址才行。
今天剩下的时间,就是完成获取进程命令行参数和研究.NET下的API HOOK。不知道啥时候才能Hook SSDT呢?IFS也还没搞过,啥时候才能进入ring0呢?日子还好长哦。。。
看来还真的是应验了我妈说的:我容易溃疡!
记得去年的时候,公司的人都去体检。我体检出来的结果,一切都良好,就写了两个毛病:敏感性鼻炎和白细胞过多。
敏感性鼻炎我知道,小的时候就有了,得这病的人很容易就打喷嚏的。除了敏感的时候比较难受外,也没有太大的影响。白细胞过多呢,我让我妈帮我问一下她家族里当医生的人;她告诉我,白细胞过多比较容易得口腔溃疡。
想想我小的时候,确实是挺容易溃疡的。最厉害的一次,是痛得我吃不下饭、睡不了觉,还连话都说不了。其次的就是上下左右同时四处溃疡,也难受了好久好久。这次又来同时两处的溃疡,真受不了。
因为舌头有点溃疡,刷个牙也不方便。结果周六的那天,我刷牙的时候,牙刷没拿好,掉马桶里去了,真够倒霉~我周六没法刷牙了~~~
周末躲在家里玩了两天的电脑,主要是研究一下.NET平台下API的调用,顺便学习下一些平时没用过的API。像NtDuplicateObject、NtOpenProcess、NtQueryDirectoryFile等一些API,平时都很少用的。
一般我们写程序,都只是用了user32.dll、kernel32.dll、gdi.dll里的API函数,还有ntdll.dll里很少的一部分API函数。而上述的三个API,都是ntdll.dll里没有公开的函数。由于几个函数都是没有公开的,资料比较少,用起来确实挺麻烦的。
一边参考着别人的文章与资料(特别是陈辉兄弟的文章,这家伙不是人,是个怪物,之前在瑞星公司上班),一边自己思考非托管数据类型与托管数据类型之间的异同点,进行函数的转换声明与调用。鼓捣了两天,终于实现了Low-Level Mouse Hook、Dump PE File From Memory、Adjust Process Token、Enum Directorys And Files By ntdll.dll's Functions、Get Link-File Path等几个工程。一会再把Get Process Command Line完成,那我这个周末的目标也算是完成了。
这几个工程中,我觉得最简单的估计是提权的那个,因为就简单地调用两三个API就完成了。最麻烦的其实是Dump PE文件的那个,要分析文件头等内容。获取快捷方式路径与获取命令行参数的那个也是基于这个实现的,只是没那么麻烦而已。
本来还想研究下.NET下的API Hook,结果我发现,似乎我没办法实现这个。因为无论我用LoadLibrary还是GetModuleHandle,都是失败的,GetLastError返回5。用ErrorLookup查了一下,结果是“拒绝访问”。估计是.NET平台对这方面的操作作了限制吧。如果不能GetModuleHandle或LoadLibrary,要Hook API是很麻烦的。估计要到内存里面分析dll的镜像地址才行。
今天剩下的时间,就是完成获取进程命令行参数和研究.NET下的API HOOK。不知道啥时候才能Hook SSDT呢?IFS也还没搞过,啥时候才能进入ring0呢?日子还好长哦。。。


2008/08/03 19:37 ..by







写是写出来了,可是Hook之后,发现还是一样的问题,VC下测试也不正确。
重建检查一下代码,才发现原来新的函数地址计算错误,指向了一个不正确的地址,难怪会报错呢。
修改了一下ASM的代码,测试通过!VC下面测试也通过!最后再换回来.NET,最后终于成功了。因为我设置了API Hook,所以.NET的部分功能也出了点小问题。
当时我Hook的是MessageBoxW函数,由于.NET都是默认用大饿UNICODE编码,所以MessageBox.Show调用的就是我Hook的那个函数。结果~~~再也没对话框出来了!去掉Hook后就正常了~!
忽然想到了全局的API Hook,觉得有点棘手。慢慢玩吧~