找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 686|回复: 14

【插件分享】服务端插件DP-S详解

[复制链接]

1309

主题

9865

回帖

3万

积分

管理员

积分
34974
发表于 2025-1-16 16:00:49 | 显示全部楼层 |阅读模式
DP-S上线也已经迭代一周多了,这一周多的时间我已经陆陆续续将DP-S整体完善,但是鉴于有很多人还是不了解本插件,所以单开一贴,介绍一下,并回复疑问。
回复

使用道具 举报

847

主题

7742

回帖

2万

积分

登峰造极

积分
26542
发表于 2025-1-16 16:00:57 | 显示全部楼层
我顶!
回复

使用道具 举报

847

主题

7742

回帖

2万

积分

登峰造极

积分
26542
发表于 2025-1-16 16:01:37 | 显示全部楼层
666
回复

使用道具 举报

1309

主题

9865

回帖

3万

积分

管理员

积分
34974
 楼主| 发表于 2025-1-16 16:02:32 | 显示全部楼层
首先,比较重要的问题,DP-S是什么,DP-S是一款服务端插件,是完完全全独立的,不依赖于dp,也不依赖于frida,它能够实现你所有想得到的服务端需要的功能。
回复

使用道具 举报

1431

主题

1万

回帖

3万

积分

登峰造极

积分
39303
发表于 2025-1-16 16:03:25 | 显示全部楼层
回复

使用道具 举报

1309

主题

9865

回帖

3万

积分

管理员

积分
34974
 楼主| 发表于 2025-1-16 16:03:55 | 显示全部楼层
这层讲一下一些重要的功能
相较于frida 的 动态call
例如
//给角色发消息var CUser_SendNotiPacketMessage = new NativeFunction(ptr(0x86886CE), 'int', ['pointer', 'pointer', 'int'], { "abi": "sysv" });
这是frida代码,是向程序注册一个函数调用的原服务端的 0x86886CE 地址函数的功能。
这个动态call在 DP-S插件中也有实现,不过逻辑稍有不同,在DP-S中,你不需要先注册这个函数,我们采用动态call直接调用,例如上面这个例子,在DP-S中 你只需要这样写
Sq_CallFunc(S_Ptr("0x86886CE"), "int", ["pointer", "pointer","int"], SUser.C_Object, Memory.allocUtf8String("测试信息"),14);  可以看到我们直接调用了这个函数 申明了返回值为int  参数为两个pointer指针  在同时我们直接将参数传递了进去,如果你想实现 frida这种类似的注册函数模式 ,你也可以在DP-S中将函数注册在全局表里
动态Call说完了 再说说frida的另一个重要功能  AOP  也就是 动态HOOK  frida可以在程序运行时 hook下某一个原生函数 执行自己的逻辑 例如


这一点在DP-S中也是同样可以实现的,不过这一功能我并未开放,至于原因我会在下一层讲
现在放上DP-S的实现代码


至于其他的frida的内存类操作 比如 .add .readU32 .alloc 之类的操作 在DP-S中也都有实现,封装在Native层,感兴趣的可以看文档或者问我。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

1309

主题

9865

回帖

3万

积分

管理员

积分
34974
 楼主| 发表于 2025-1-16 16:04:04 | 显示全部楼层
这层我来讲讲,为什么我不开放动态HOOK的功能或者说暂时不开放,并不是因为我想用这个功能收费或者是什么,我可以告诉大家DP-S将会是一个长期维护,并且永久免费的功能,这是我回馈给台服整个圈子的东西。
我不开放这个动态HOOK不代表你不可以使用这个功能,如果你有一些需要的HOOK 你可以单独私聊提交给我,我在后台创建接口,你不需要更新你的DP-S插件也可以热更新享受到这样的功能,
我之所以不开放是因为,首先动态HOOK对于程序的危险性大大超过了动态CALL,并且由于很多时候服务端的插件代码,并不是一个人编写的,这个大家都懂,可能这个技术搞一点,那个技术高一点,整个环境会非常混乱(就像现在的客户端nut一样,我只能说屎山成堆)。
而由我同一开放接口的话,所有的HOOK功能,会转变为你向接口注册,这样即使有不同的人同时维护一个服务端,也不会彼此之间的代码产生冲突,这一点我相信很多小白在客户端nut深有体会,导入了这个包 那个失效了,导入了那个包 这个失效了,这一点在DP-S这里将会得到解决。
并且这个插件既然是免费,更加会致力于服务没有那么多编程基础的小白,你可以在文档的示例页中,一键复制,一键黏贴,只需要更改简单的物品代码或者字符串,就可以使用大佬开源出来的功能。
回复

使用道具 举报

1474

主题

1万

回帖

4万

积分

登峰造极

积分
40084
发表于 2025-1-16 16:04:12 | 显示全部楼层
小白不会用,大佬也不会用(开玩笑🤣🤣🤣)
回复

使用道具 举报

1309

主题

9865

回帖

3万

积分

管理员

积分
34974
 楼主| 发表于 2025-1-16 16:04:17 | 显示全部楼层
接下来我介绍一下,一些比较重要的类
数据库类
DP-S的数据库并不像frida那样散开,我为DP-S编写了一个Mysql的线程池,什么是线程池呢,就是一次性将一定数量的数据库连接,建立好,放在一个池子内,当需要使用的时候可以直接获取连接,去请求你的数据库数据。这有什么好处呢,省去了连接和关闭的步骤性能将会提升非常多。
这里上一个例子


可以看到我们设定好需要查询的语句以后,设定我们需要请求的类型,便可以向MysqlPool 申请要一个链接,他就会直接给你一个连接池中的 空闲连接,帮助你执行Mysql语句 返回值将会是一个二维数组 我们这里可以直接使用printT打印  当然在用完以后 也要记得将连接归还给连接池
到这里可能有人又会问了,既然是单线程,要连接池有什么用,这里又涉及到一个重要概念,异步协程,通过我设计的Timer接口,你可以在DP-S中完成异步操作,而不会阻塞主线程,这是目前frida大部分人都没有做到的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

1309

主题

9865

回帖

3万

积分

管理员

积分
34974
 楼主| 发表于 2025-1-16 16:04:45 | 显示全部楼层
DP-S同样拥有IO流的接口,我在群里录制了一个向一个文件写入5000000行数据的操作,通过异步操作,他在同时写文件的时候不会影响DNF服务端原本的逻辑执行。由于贴吧不好放视频,感兴趣的可以直接去观看。
回复

使用道具 举报

发表于 2025-1-16 16:05:37 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

847

主题

7742

回帖

2万

积分

登峰造极

积分
26542
发表于 2025-1-16 16:06:03 | 显示全部楼层
虚拟机可以用吗。需要网络吗
回复

使用道具 举报

1309

主题

9865

回帖

3万

积分

管理员

积分
34974
 楼主| 发表于 2025-1-16 16:06:36 | 显示全部楼层
接下来 我们讲讲DP-S 独有的优势,或者说其他插件做不到的东西
1.DP-S支持分文件管理,DP-S支持创建多级目录,多个文件来管理你的代码。


2.DP-S对于中文本地化支持非常高,不仅支持print 输出中文内容,同时还支持文件名中文命名。


3.DP-S支持逻辑脚本加密,这是我开放的接口,是真正的加密,而非客户端的那种序列化,亦或是剑圣那种混淆。
这个一点在群内也有演示视频.
4.DP-S不仅支持用户编写逻辑的热重载,同时支持热更新,也就是说在版本没有大变动的情况下,你可以不更新服务端文件,而获得最新的DP-S.
5.DP-S有长久维护的开发组(开发组也招人),无论是在之前出现的dp插件或者frida插件,始终都没有一个官方的组织或者个人来长期维护和迭代,DP-S将会持续保持活力,因为我们有一些志同道合的朋友共同来维护。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

1309

主题

9865

回帖

3万

积分

管理员

积分
34974
 楼主| 发表于 2025-1-16 16:07:26 | 显示全部楼层
暂时就这么多,后面有补充在说,有什么以为也可以在本帖提出,或群里问我。
回复

使用道具 举报

1474

主题

1万

回帖

3万

积分

登峰造极

积分
39067
发表于 2025-1-16 16:07:56 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表