稍微写了几天的外挂式插件框架完成了,绝对不能让我一个人受苦
hacknet吧
全部回复
仅看楼主
level 6
xfese🌈 楼主
前几天玩了半天觉得很烦就上CE速通了,但是难得有C#写的游戏,特别这种Xna,好钩。于是我把吃灰的工程文件晒出来,虽然原本是研究泰拉的,不过后来我整各种dll劫持,dll注入,还有塞个内存Debug进去等等的项目根本没在玩泰拉了。正好趁着几天闲着把一直想弄的反射框架给弄出来,于是拿这个游戏磨刀了[开心]
可以看到我一大堆的特性描述,实际上很多项目应该都是这么干的XD。
我已经完成启动插件模式了,可以跟着一起加载进去(也就是会枚举MyExtensions文件夹里的所有支持的dll),但为了防止跨AppDomain问题,我不打算做动态插件框架(类似Unity,直接改文件就能自动编译,并且支持热更新)。
开了一个线程并接管了输入流,可以配置一些命令让游戏执行一些特别操作。
我实现了三个命令,一个是去掉跟踪的【NoTracking】,一个是飞一堆十六进制的代码出来然后就得到管理员的【FastHack】(这个命令原版就有,但是原版是要开Debug的flag的,可以开但没必要)。
然后是我一直拿来做成功测试的管理员密码测试【AdminPass】。
注册的命令级别是接管级,也就是说会替换掉原本的指令。所以说,如果跟原命令重复的话要考虑要不要替换。
游戏效果:
最后这个有防火墙后一定有TraceTracker,NoTracking等价于释放一个SecurityTracker然后kill掉。
因为刚完成,所以效果还很差,比如开的exe窗口如何,内存如何等等。
我最近如果有空会把代码放到某个git管理上,欢迎大家来开发。
顺便最近打算写Hackmap的节点排序(原来的节点好容易按错,又挪不了,正因如此我立刻把吃灰的工程赶出来了XD)
2022年04月05日 16点04分 1
level 7
快进到找flag
2022年04月05日 18点04分 2
其实直接反射到那个flags直接SetValue就可以
2022年04月05日 23点04分
level 6
xfese🌈 楼主
话说今天翻翻ILSpy发现原本就有一个hackmap组织器——NetmapOrganizer.exe,是DLC的,存档就有,复制过来直接可以开[咦]。然后知道了ExecuteProgram和exe文件执行逻辑[开心]
听说有人把hacknet.exe偷回家了[滑稽]
2022年04月06日 03点04分 3
level 6
xfese🌈 楼主
[滑稽]打算把exe文件的执行逻辑钩了(原本的其实是类的序列化二进制),如果把这个做特殊判断,那样我就可以写EXE的代理类。这样,文件保存和加载都会优先经过我的判断器,可以序列化成我给的类的话就直接加载成我的EXE类。并在Helper.dll里公开(之后大伙可以直接继承并编译放MyExtensions,做自己的exe了(Tab键搜索的最低范畴就是bin的文件名))。我想想怎么绑着游戏启动,这样可以做外挂插件/mod框架了。
2022年04月06日 03点04分 4
[啊]原来exe的文件一直按的字符串记录的啊,而且这些文件tm就是随机数生成的。还以为是按bin序列化呢。
2022年04月06日 04点04分
level 6
xfese🌈 楼主
[委屈]遗憾中的遗憾是,ExeModule继承不了?或者说很难继承,主要是发生在内部的。spriteBatch也是被draw统一管理的,如果我拿他来用会发生意料之外的事情,甚至直接进程关闭。我再想想怎么弄一个比较好。只要找到可以继承ExeModule的方法,就可以很容易写一个框架。不然得一直往上把Draw的代码钩掉了,然后另开一个List装Exe。每次自己负责给游戏的数据维护。工作量会膨胀。
2022年04月06日 07点04分 5
level 6
xfese🌈 楼主
[开心]找到入口了,GuiData这个类可以直接索引到(少有的公开类了)。ExeModule是用不了了。但是可以在GuiData处自行维护一个Exe区块,并且数据上保持跟原来ExeModule的同步,只是代码要完全重现原来的逻辑还不能出错,而且这个可以霸占OS维护的Module。也就是说,如有必要,可以连同游戏内文本和窗口等等的都能一并承接。有空把这些都搞定了转成事件式触发,然后用特性来注册需要的逻辑。
顺便今天把dll劫持弄了。以后这个不用什么注入器,只用Steam打开进程就能开。完全等价于插件或mod框架。
2022年04月06日 10点04分 6
level 6
xfese🌈 楼主
[睡觉]我发现了一个MOD框架Hacknet-Pathfinder,原本以为是用什么神奇方法构建,让程序突然可以获得内部类公共访问的功能,没想到确实是直接历遍内部IL直接把所有安全标签全替换了。所以之后的人可以直接对导出的无封闭的hacknet做开发。
而最终,我之前写的这整套完全是建立在纯运行时的运作(整得我没开发必要了……)。虽说,即使你开着游戏玩了半天都能用注入器导入关键dll加载框架,然后游戏逻辑中途就换了样,说白了就是外挂框架。可以不用动原程序的主要文件(虽然我还是动了,主要是没啥好dll劫持,找个几乎万年不会动的dll绑走得了,PS,如果找到一个非常完美的dll,甚至原程序任何文件都不用动)。
这倒算是优点,如果我把一大堆原程序集的访问全部换成反射版本,那么FNA不会变。我可以设计成无缝迁移到后期无数游戏版本的框架。唯一用动的只是插件类(如果又没什么事,全换成反射,那么其实所有的类都能无限跟随游戏更新)。
两套框架应该是可以兼容的。但我还有很多细节没完成,所以没打算公开,包括IL钩子,为了完成纯运行时框架,钩子设计非常严格,如有必要,还得弄将运行时源码加上自己的编码后重新运行时编译并替换原代码的这种钩子设计。还有本来想钩draw啥的,但是看了pathfinder源码有新的想法了。
PS,pathfinder没有很多对程序集本身特性的有效运用,很多都要自己注册。开发者写个Attribute给方法什么的加加标签就应该能塞进去了[吃瓜]
等我有些细节搞定了,我试试动态匿名类,或者甚至动态生成一个程序集来做初始化,对初始化的dll进行开发,不行就联合两个MOD框架来整吧。
2022年04月08日 18点04分 7
level 6
xfese🌈 楼主
[吐舌]不整了,游戏的优化太烂了,我只考虑命令了,exe都不打算弄。我随便试着弄个反射mod算了(差不多是更慢,所以我不打算钩进Draw了,钩进去本身慢了那么多,又叠了一两千倍的访问延迟)。反正有Pathfinder,如果觉得pathfinder框架不好我再写。顺便发现,usp10居然还能用(lpk不行了),不过要做抛射,usp10是来自于cefprocess.exe的。明天我就发框架出来。
2022年04月10日 18点04分 8
level 6
排序我记得dlc有个软件用来排序的
2022年05月03日 11点05分 9
嗯,之前发现了。我现在弄了一个apt命令,可以直接下载可以搜索到的exe,不用跑存档改,我自己还写了一个拓扑排序的,还没实装。然后把naix攻击的方法和trace都勾掉了,虽说本来naix的脚本改了就不会触发,但是trace的脚本直接改没用的,除非是CSEC的成员,才会触发脚本。
2022年05月03日 12点05分
@xfese🌈 玩了游戏了属于是
2022年05月03日 16点05分
1