C语言内存中执行外部代码详解(二)

前面我们讲了理论知识,本来打算再慢慢写的,不过有网友对这个话题很感兴趣,我就加快写了。 本文地址:http://www.hoverlees.com/blog/?p=1014 现在要做个实例,要实现这个功能,需要按以下步骤做: 1.创建需要加载到其它进程中的外部函数 2.编译这个代码 3.复制代码的机器指令到文件中 4.加密这个文件(可选) 5.其它进程使用VirtualAlloc(windows)或mmap(linux)将程序加载到内存中,如果加密了,需要在这里解密后加载。 6.执行程序。 下面我们进行要加载到内存的代码的编写,假设其它进程需要加载到内存中执行的函数叫get_number_line,我们先写出它的功能(就是获取一个文件的行数)

C语言内存中执行外部代码详解(一)

应用程序执行外部代码一般有多种方式,最显然的就是操作系统提供的链接库的方式,链接库是一个个的库文件,在编译时直接链接到应用程序中,或者是一个独立的库文件供应用程序调用。 但常常会有例如下面的一些应用场合: 你想保护程序的核心代码,想把核心代码加密成一个自己定义的文件,然后在程序运行时加载到内存中执行; 出于保护或者为了定时更新,你希望自己的核心代码每次都是从网络上下载的,并且不希望在用户硬盘上留下任何痕迹(这儿当然还有更好的DCOM之类的技术更加保护); 你想注入到其它进程的地址空间中执行;等等。 那么这篇文章或许对你有所帮助。希望大家不要拿来写后门程序之类的那些违背职业操守和损害他人利益的事 ^_^ 计划连载成二篇,第一篇讲基本原理,每二写个实例。 本文地址: http://www.hoverlees.com/blog/?p=953