原创空间
要制作PCF字体,我们可以通过TTC字体进行转换。转换过程为:TTC->BDF->PCF。
首先我们要找一个TTC转BDF的工具。
XFontGenerator听说可以转,但现在好像绝迹了,反正我找不到。找到一个linux下的fontforge源码包,可惜这东西我不会用,懒得去看源码。后来找到了一个工具,叫otf2bdf,它可以把TTC、OTF字体转换成BDF。
先到http://www.math.nmsu.edu/~mleisher/Software/otf2bdf/下载otf2bdf。
建议下载win32版本的。linux版本的我不知道怎么用,我还是个linux白菜,只是最近在玩linux而已。注意要下那个编译好后的包,别下那个源码包。反正我们也只是利用工具而已,不需要自己编译。binaries标题下面的就是。win32 3.1版下载地址如下:
首先我们要找一个TTC转BDF的工具。
XFontGenerator听说可以转,但现在好像绝迹了,反正我找不到。找到一个linux下的fontforge源码包,可惜这东西我不会用,懒得去看源码。后来找到了一个工具,叫otf2bdf,它可以把TTC、OTF字体转换成BDF。
先到http://www.math.nmsu.edu/~mleisher/Software/otf2bdf/下载otf2bdf。
建议下载win32版本的。linux版本的我不知道怎么用,我还是个linux白菜,只是最近在玩linux而已。注意要下那个编译好后的包,别下那个源码包。反正我们也只是利用工具而已,不需要自己编译。binaries标题下面的就是。win32 3.1版下载地址如下:
创建子进程模块注射(VB版)
:
2008/08/21 .. by 风の雪
2008/08/21 .. by 风の雪
这个是创建子进程模块注射的VB版演示,本次演示进行了实际性的DLL注射。
TestDll_Thread.dll是我用ASM写的一个测试用DLL。
当它被加载到进程后,会自动启动一个线程,该线程每5秒自动弹出一个对话框。
只要创建的进程能正常启动,就表示代码没问题。
至于DLL是否注射成功,与所指定的DLL有关,还有与杀软的截拦有关。
只要保证我所提供的测试DLL在工程目录下,一般都会成功的。
下面给出来的代码中,不包含CONTEXT结构体的定义,请自行到《VB下的CONTEXT结构体》下载,或直接下载后面的工程文件。
TestDll_Thread.dll是我用ASM写的一个测试用DLL。
当它被加载到进程后,会自动启动一个线程,该线程每5秒自动弹出一个对话框。
只要创建的进程能正常启动,就表示代码没问题。
至于DLL是否注射成功,与所指定的DLL有关,还有与杀软的截拦有关。
只要保证我所提供的测试DLL在工程目录下,一般都会成功的。
下面给出来的代码中,不包含CONTEXT结构体的定义,请自行到《VB下的CONTEXT结构体》下载,或直接下载后面的工程文件。
VB下的CONTEXT结构体
:
2008/08/20 .. by 风の雪
2008/08/20 .. by 风の雪
由于CONTEXT结构体并不是固定的,是随着CPU的不一样而变化的,所以MSDN上也无法给出具体的定义。也因为MSDN上没有这个结构体的定义,当我们需要在VB下调用GetThreadContext/SetThreadContext等函数时,会因为没有CONTEXT结构而无法调用。
所以今天我就抽出时间,参考了C++对这个结构体的定义,把它转成了VB的版本。
在C++的WinNT.h中一共定义了三个版本的CONTEXT结构体,所以我也转换了三个不同的版本。
只有x86的版本我是测试过的,其余两个都没经过测试,请慎用!
如果另外两个测试过的朋友,请告知一声,谢谢!
所以今天我就抽出时间,参考了C++对这个结构体的定义,把它转成了VB的版本。
在C++的WinNT.h中一共定义了三个版本的CONTEXT结构体,所以我也转换了三个不同的版本。
只有x86的版本我是测试过的,其余两个都没经过测试,请慎用!
如果另外两个测试过的朋友,请告知一声,谢谢!
学过80x86汇编的朋友应该都知道,在寄存器中,有一个叫EIP的指针寄存器,该寄存器存储的是下一条指令的地址。而在实际使用中,也确实如此。因为我在编写c++代码时,调试的时候如果我打开寄存器窗口,可以发现EIP寄存器存储的就是下一条指令的地址。其设置下一条语句的功能,其实就是通过修改EIP寄存器实现的。
因此,就有了我今天的这个想法。我不知道网络上有没别人想过这想法,我没去baidu或google验证,也不想去验证这问题。因为这是我自己想到的,包括代码的实现,都没有参考过任何人的代码。每个人有每个人的想法,或许有些人跟我的想法一样,但最终实现的方法可能不同。
在我的代码里面,并没有实际地注射模块,只是简单地用MessageBox这个函数来演示了一下而已。既然能够调用MessageBox,那么注射模块也不是什么困难的问题了。只需要把要注射的模块名字写到远程进程中,然后用我的这个思路调用LoadLibrary函数就可以了。
下面是我的代码:
因此,就有了我今天的这个想法。我不知道网络上有没别人想过这想法,我没去baidu或google验证,也不想去验证这问题。因为这是我自己想到的,包括代码的实现,都没有参考过任何人的代码。每个人有每个人的想法,或许有些人跟我的想法一样,但最终实现的方法可能不同。
在我的代码里面,并没有实际地注射模块,只是简单地用MessageBox这个函数来演示了一下而已。既然能够调用MessageBox,那么注射模块也不是什么困难的问题了。只需要把要注射的模块名字写到远程进程中,然后用我的这个思路调用LoadLibrary函数就可以了。
下面是我的代码:
关于API Hook的又一个新想法
:
2008/08/16 .. by 风の雪
2008/08/16 .. by 风の雪
在之前的日志中,我提到过,我发现每个API的代码之间,都有5个字接的空白。所以,我忽然想到,我可以利用这5个字节进行新的API Hook,进而实现API被Hook以后还能执行原来的指令。
其实,我觉得很多时候Hook一个API后,我们就没有必要去执行原来的代码了,因为我们要用新的过程来取代原来的API。可是,有的时候我们需要的仅仅是监视一下这个API的执行,或者只修改一下它的返回值而已,不希望它的过程被覆盖掉。这样,就产生了我这样的一个想法。
这个方法,原理就是在API过程的最后,函数返回之前,跳转到我构造的指令中。在我的指令里,先保存了一下API的返回值,以便我们可以自己选择返回API原来的值或者自己定制的值。然后把传递进来的参数重新压栈,接着再用call指令调用我们自己的过程,然后返回。
只是这个方法,有一个缺点,就是每个API的后面必须要有5字节的空白和只有一处返回指令。
其实,我觉得很多时候Hook一个API后,我们就没有必要去执行原来的代码了,因为我们要用新的过程来取代原来的API。可是,有的时候我们需要的仅仅是监视一下这个API的执行,或者只修改一下它的返回值而已,不希望它的过程被覆盖掉。这样,就产生了我这样的一个想法。
这个方法,原理就是在API过程的最后,函数返回之前,跳转到我构造的指令中。在我的指令里,先保存了一下API的返回值,以便我们可以自己选择返回API原来的值或者自己定制的值。然后把传递进来的参数重新压栈,接着再用call指令调用我们自己的过程,然后返回。
只是这个方法,有一个缺点,就是每个API的后面必须要有5字节的空白和只有一处返回指令。



2008/08/20 .. by






