说在前头
看了下blog列表里一堆的坑没填,再加上期末考。但是我还是要义无反顾的开坑啦!!
项目地址:https://github.com/pantsugroups/pantsuWorld
PantsuWorld
胖次群的一款自动化的脚本对战类RTS游戏
说白了就是一群程序员在养蛊。
头脑风暴&思考过程:草稿本
流程
程序为一个沙箱,在立体的坐标系中释放几个初始"对象"。
最初始对象相当于脚本在游戏中的实例化。
对象可以建造"对象",武器,和建筑物。
对象也可以开采资源,战斗,自毁等等。
对象建造"对象"必定是需要资源和父母双方,各种拥有不同的DNA和权重
然后按照神经网络对几个方向(具体还没确定)进行变异生成。
变异的越久,需要的资源越多。
如果发生事件,事件只会上报给消息发生所在地的单位。
然后由该单位像周围单位传递消息
直到传递到大本营为之
How to play?
沙箱完成时,将放出SDK。届时可以实用自己调用。
游戏脚本会上传到服务器运行。
脚本(蛊)编写指南
API调用请参考:api.md (还未开始)
内部实现详情请参考:archive.md
Other
本群官网:www.minipanz.com
开头
现在是音乐系的学生了!
设备也到了,
开个新贴,整理些这部分的心得。
mixo-Lydian
适合中世纪,异族风情
走向是I-VII-IV
Lydian
未知,但又明亮。适合让人探索的感觉
重点强调I IV和III V这几个音。和弦一般用I II都行,还可以插入个VII
详解各种奇淫绝技。
部分手写部分搬运。
重在自己的理解,或者找个时间,武器化这部分程序。
最终目标: 实现一个带有各种HOOK的汇总工具包
遇到的坑
pragma comment 只对微软编译器有效,GCC没用,得用-l来连接
IAT HOOK
内存版本
这个需要进入到宿主文件的内存空间,所以一般用DLL注入到宿主文件
原理就是普通的计算IMAGE_IMPORT_DESCRIPTOR在内存空间的地址。
然后修改IMAGE_IMPORT_DESCRIPTOR.FirstThunk.u1.Function的地址为我们的函数地址
其中几个重点:
GetModuleHandle(NULL);
// 获取主模块(EXE)的地址
PVOID WINAPI ImageDirectoryEntryToData(
__in PVOID Base,
__in BOOLEAN MappedAsImage,
__in USHORT DirectoryEntry,
__out PULONG Size );
获取内存中IAT导入表的虚拟地址。
//Base为要获得导入段所在模块的基地址。它一般是GetModuleHandle的返回值。
//MappedAsImage,它为true时,系统将该模块以映像文件的形式映射,否则以数据文件的形式映射。
//DirectoryEntry,要获得的段的索引。此函数不仅仅能够获得导入段的地址,根据此索引的不同,该函数返回对应段的地址。此处我们使用 IMAGE_DIRECTORY_ENTRY_IMPORT表示我们要获得导入段的地址。
//Size返回表项的大小
目录文件
- iat/memory/target.c 实例,直接封装在代码中的HOOK,没使用装载器
- iat/memory/dll.c dll封装版本(纯搬运)
代码参考:
文件区块修改版本
直接操作PE文件,修改IAT导入表导入DLL的地址。
这样的好处是在程序最初的加载就已经执行我们的代码,
并且不需要使用注入等容易被检测的敏感动作。
缺点是不能针对单独函数hook,
或者说与其是hook。完全是无中生有添加了一个DLL引用。
未完待续。。。