很久前说过要发的,但U盘一直有问题,直到今天可以上网了。。。。(相互探讨下,也许还不是很成熟)
模块AB:可逆加密模块
模块BA:AB加密还原模块
模块DEX:由索引找相对偏移或由相对偏移找索引
模块R:产生指定范围随机数据
结构链PO:{索引,相对偏移}对
设备驱动M:OS常驻内存服务,在进程间传递信息
表T:记录系统各种状态,包括生成代码前状态、进程通信状态、OS修改状态等实行PR时系统状态,用于PR的决策
原始代码D:原始应用系统二进制数据
数据文件DA:存放系统中各组件代码的非原始形式,包括D,但不包含EXE文件首部
LOADER1:对OS下某一钩子
EXE头文件H:存放DA中对应各组件代码的EXE头部二进制信息
OS内存空间文件K:一个EXE文件,只有EXE头部信息但没有实际代码的EXE文件,用于在内存中开辟一常驻空间
LOADER2:根据T、H、DA生成系统各组件代码
CLEAN:将系统还原成初始状态并终止系统及清除进程K中所有代码数据——清零,并终止各管理进程。
系统协议PR: LOADER1下一钩子,用LOADER2取代码OS对PING回显请求的正常反应。然后启动命令PING 127.0.0.1并退出。当LOADER2被触发后,创建进程K,并将DA中各组件随机地存入K中相应位置——以模块为单位,通过M、DEX、T、H、BA(其中某些代码须连续用BA 3、4次才能正常还原到最初代码的二进制形态)。随后,LOADER2用类似LOADER1的方式启动在DA中的父进程O。
各组件载入后在内存中的状态由T记录。 O依据T,生成进程P、Q、R、S、TT,此五进程在DA中的代码相同,在K中的代码也相同(这是很显然的),但参数不同。P、Q、R、S、TT五进程轮流从DA中D的范围内(非连续)随机产生的一位置取出随机大小的二进制数据,再放到K范围内一随机偏移处——通过PO、R、DEX、M、T、BA。
P、Q、R、S、TT在O的管理下,根据执行需要生成D的代码(用BA还原)并执行。某一代码段在执行完毕后,O立即对内存中这段代码清零。M随机地对正在读K内数据的进程进行检查,当发现不是O、P、Q、R、S、TT时启CLEAN并终止自己。在O、P、Q、R、S、TT、M的管理下,D执行应用系统应有的功能。正常退出时启动CLEAN。
以上是一模型,PR不变,改动H、DA、D、AB、BA、LOEADER等可构造对不同D的不同隐藏方式。