Minecraft(我的世界)中文论坛

标题: [C++&Java]MC反作弊开发日记[PCD]

作者: 萝娜娜    时间: 2018-3-22 15:16
标题: [C++&Java]MC反作弊开发日记[PCD]
本帖最后由 lona 于 2018-7-31 02:17 编辑

【MC反作弊开发日记】

零.作者的话
    1.我只是一个普通的开发者,希望与大家交流技术所以把反作弊教程发布在这里,相信有人阅读并了解之后能够做出更优秀的作品。
    2.剑可以拿来保护人也可以拿来伤害人,利用这篇教程去开发作弊软件是及其可耻的行为。
    3.这篇教程涉及的方面很多,而作者本人却只是一名普通学生,所以介绍得比较简陋也有可能漏洞百出,所以请发现问题的读者能及时告诉我。
    4.如果遇到技术问题,欢迎在QQ上进行交流(bbs上交流确实比较麻烦)。
一.简介
    1.你能从这个教程学到什么
        (1).C++ java及少许汇编(AT&T)知识
        (2).常用破解及反破解手段
        (3).少许windowsAPI
        (4).网络方面的知识
    2.这个教程适合哪些读者
        (1).希望了解当前反作弊技术的
        (2).想制作反作弊的
    3.这个教程需要的前置知识(注:非必须即表示在阅读前不必掌握,但是在阅读时会掌握的技能)
        (1).至少学过一门编程语言并且能够简单的print(必须)
        (2).C/C++(非必须)
        (3).java(非必须)
        (4).AT&T汇编(非必须)
        (5).windowsAPI(非必须)
        (6).linux下C++程序开发基础(非必须)
        (7).加密与hash算法(非必须)
        (8).windows下hook,file-patch等技术(非必须)
        (9).逆向工程基础(非必须)
        (10).OD或者x96dbg的基本使用(非必须)
        (11).壳的编写与分析(非必须)
    3.阅读这个教程会花掉多少时间
        (1).还没写呢
二.目录
    第零章:配置环境及知识准备(完成)
    第一章:纯Java编写Mod校验(完成)
    第二章:防止协议被破解而对通信进行加密和混淆(部分完成)
    第三章:防止mod和插件被破解将核心功能写在C/C++里(编辑中)
    第四章:防止hook 远程注入 内存补丁 调试(编辑中)
    第四章:防止C/C++编写的库被反编译,对程序加花指令(未开始)
    第五章:防止C/C++编写的库被反编译,对程序加壳(未开始)
    第六章:防止被脱壳而自己编写壳(未开始)
    第七章:防止被反编译而用纯汇编编写核心代码(未开始)
    第八章:行为检测(额外章节-编辑中)
    第九章:深度学习在反作弊的应用(额外章节-未开始)
三.关于更新
    1.作者只是个破学生,精力有限,只能保证每个月至少更一节(没更就算了,嘻嘻)
    2.关于托更,最近在设计新的反作弊方案,抽不出空来
    3.这恐怕很难称得上是个教程
[groupid=1330]PluginsCDTribe[/groupid]
作者: 海贼王#    时间: 2018-3-22 15:56
大佬 前排支持
作者: @TGL    时间: 2018-3-22 16:47
支持楼主!
作者: 苏雅人    时间: 2018-3-22 18:03
LZ我愿意找你定制反作弊,私聊我留个联系方式开个价吧。
作者: _DIM_    时间: 2018-3-22 18:15
看到了吧,这就是大佬 (Ymer不支持XP。不支持sponge。差评= =)
作者: 孟婆汤没了    时间: 2018-3-22 18:36
期待大佬的教程
作者: lzycc234    时间: 2018-3-22 18:57
看到cpp就进来了
作者: ttc_V    时间: 2018-3-22 18:58
有生之年作品系列
作者: 粘兽    时间: 2018-3-22 19:53
一门都不会也要凑个热闹
作者: langyo_v3    时间: 2018-3-22 20:56
坐等第一章

(我现在就担心你这个教程会像我之前那个红石计算机的教程帖一样黄了)
(抓紧时间填内容啊,不然几天之后你再发分帖就没几个人看了)
作者: dogeop    时间: 2018-3-22 23:32
噫?我账号解了?emm,再也不去茶馆了。
进入正题,首先告诉你的是,客户端永远不可能完全防止破解,只能增加成本。
昨晚和4z大佬讨论过这个问题来着。
我用fernflower反编译过anticheat 3.4,大概了解了其原理。
其实就是遍历所有loaded mod 包括了fml,forge,mcp,各种mods,然后从class的protecteddomain找出jar位置,再计算md5/sha1/sha256 digest, 当然有些是坑,比如mcp就没有文件位置。
anticheat至少我看到过的那个版本还是有个问题的,可以被重放。
anticheat用了simplenetworkchannel,底层是netty,那么只要去重新打包netty,把处理函数改一改,改成这样的逻辑,当channel名符合预设时,监听你的请求,录下来,然后再把你截胡,重放给服务器老的消息,这样你不管干什么了,上层的ac是察觉不到的,这样就可以为所欲为了,解决方案也比较简单,加unix 时间发过去就行了,重放就会失效。
当然另一个办法更加直接,就是直接反汇编硬破,其实我都已经破开了来着,毕竟java太弱了。

c当然不错,是个好的办法,加上汇编更难破解,不过我建议你最好bundle一份常用的加密/digest库的源码,以及网络通讯代码,并且一起混淆掉,否则只要定位到网络发送的函数调用,IDA下断点就找到你在干什么了,之后就又是被爆破。

大概这就是昨晚吹得牛了。
作者: 萝娜娜    时间: 2018-3-23 00:32
dogeop 发表于 2018-3-22 23:32
噫?我账号解了?emm,再也不去茶馆了。
进入正题,首先告诉你的是,客户端永远不可能完全防止破解,只能增 ...

正如你所说,重点不在于校验,而在于反破解,破解者一般专注于如何允许载入作弊mod,其实不用在意网络部分被破解,那难度太大了。
作者: 萝娜娜    时间: 2018-3-23 00:33
Stevenlaw 发表于 2018-3-22 18:03
LZ我愿意找你定制反作弊,私聊我留个联系方式开个价吧。

这个就算了,我水平不够的
作者: dogeop    时间: 2018-3-23 20:54
lona 发表于 2018-3-23 00:32
正如你所说,重点不在于校验,而在于反破解,破解者一般专注于如何允许载入作弊mod,其实不用在意网络部 ...

其实破网络成本相对最低....
只要你没校验,那么就是0成本重放
作者: 狡诈师    时间: 2018-3-24 10:24
至于反作弊,AI反作弊将会是主流(AI技术仍在发展)。可惜现在中考,要不然我现在研究着神经网络……
作者: dogeop    时间: 2018-3-24 12:51
爱国民主 发表于 2018-3-24 10:24
至于反作弊,AI反作弊将会是主流(AI技术仍在发展)。可惜现在中考,要不然我现在研究着神经网络…… ...

大哥,别做梦一步登天了,先去学数据结构,网络,计算机组成原理吧。
NN这种东西哪里是一个中学生知识能轻易理解的,大批的本科和研究生都对这个一脸懵逼,
深度学习是个黑盒子,如同炼丹,哪有那么好学的,既要啃论文又要实践,搞完了还不一定知道自己为什么对或者为什么错呢。
作者: 狡诈师    时间: 2018-3-24 13:27
dogeop 发表于 2018-3-24 12:51
大哥,别做梦一步登天了,先去学数据结构,网络,计算机组成原理吧。
NN这种东西哪里是一个中学生知识能 ...

咳咳(特别讨厌这种看不起态度知道吗)
学什么我当然知道,我热爱AI这东西
世界无奇不有,没有做不到的,只有想不到的
作者: dogeop    时间: 2018-3-24 14:33
爱国民主 发表于 2018-3-24 13:27
咳咳(特别讨厌这种看不起态度知道吗)
学什么我当然知道,我热爱AI这东西
世界无奇不有,没有做不到的, ...

学历问题是个硬伤,这玩意不是你import几个python库都能懂的。
真的感兴趣就别现在瞎折腾了,好好学习考个好大学有高的平台,碰到牛的人,才有出路。
世界上没有那么多天才,更不存在什么人有多大胆地有多大产。
瞎**搞成不了事情。
作者: dogeop    时间: 2018-3-24 14:35
爱国民主 发表于 2018-3-24 13:27
咳咳(特别讨厌这种看不起态度知道吗)
学什么我当然知道,我热爱AI这东西
世界无奇不有,没有做不到的, ...

对你来说,还是打好你的学业基础重要,别胡思乱想搞些有的没的,到时候没考好掉个二本三本,那时候你连资源都没有,谈何AI。
作者: 狡诈师    时间: 2018-3-24 15:11
本帖最后由 爱国民主 于 2018-3-24 21:20 编辑

---
作者: dogeop    时间: 2018-3-24 15:26
爱国民主 发表于 2018-3-24 15:11
就一定要考到大学,碰到牛人就有出路吗?

你不冒险,不去拼搏怎么知道会怎样呢?

不存在的,没有基础的人在那里瞎搞就是胡思乱想。
NN需要的数学知识哪是一个一般的初中生能理解的哦,比尔盖茨退学那也是考上了名校,能力爆表。
AI这东西不是想上就能上,要有扎实的数学功底,过关的英文阅读能力(读各种论文),以及最后需要一些灵性。
我就问你,随便给你一篇IEEE Xplore的AI/深度学习/计算机视觉/数据挖掘论文你能不能从头到尾明白他在说什么么?我觉得你不能,因为你这个阶段的数学水平和英语水平都达不到,当然你要是能证明你马上就能考中科大少年班,那我之前的话就当没说吧。我也只是勉强能够着边,还不一定入得门。
不要总把特例当做普遍。
打好学业基础和计算机基础才是正道,一步登天者通常都会摔下来。
你一个初中生直接就一句AI才是反作弊正道不是大言不惭么,一没数据二没算法,拿什么ai。
这个世界上最不能信的就是鸡汤。
另外那个10岁的黑客干的事情我大概是了解的,本质上不困难就是观察业务逻辑,构建请求刷单,不算什么特别有技术含量的事情,主要考察的是对业务逻辑的观察了解,当然10岁做得到还是难能可贵的。
作者: 洛骁Roito    时间: 2018-3-24 20:23
爱国民主 发表于 2018-3-24 15:11
那你说我蠢咯?

就一定要考到大学,碰到牛人就有出路吗?

你这话就有点强词夺理了。
不一定所有的领先,最后都会领先。
到大学就被淘汰?所有搞AI的都是大学前开始?

学业与自己的爱好互不影响,这是确实可以做到的。我很同意。
为自己喜欢的东西努力,这点很好的。但也希望分清主次。

天才都只是少数。既然没有那样的天赋,何必一口气吃成胖子?
新事物的发展远不止你想的那样。大学被淘汰,没这回事的。
(毕竟,不创业的话,找工作看的还是学历啊)
在目前学习还是最重要的,一个好的导师,确实能够事半功倍。
事先做好准备确实没错的,但深入研究,留到大学吧。
冒险,这种事情,你能看到的永远只是成功者。谁会为一个失败者宣传呢?(部分例外)

Ps: 你举的这例子,议论文里站不住脚啊。
作者: 狡诈师    时间: 2018-3-24 21:26
秋天007 发表于 2018-3-24 20:23
你这话就有点强词夺理了。
不一定所有的领先,最后都会领先。
到大学就被淘汰?所有搞AI的都是大学前开始 ...

也许吧
我忘了分析未来结果,只看到现在结果:
就是说,比尔盖茨吧
1.要是他不放弃学业,微软会怎样
2.微软确实强占了系统市场,但未来也许不会保持很久,就如你所说“最后都会领先”

我被发卡了0.0,你也小心了(我忘了版聊规定)

说下帖子吧,还是期待帖子完善,也不希望熊孩纸利用(阅读权限高了吧?防熊)
作者: cp666    时间: 2018-3-26 15:07
可是我是学习javaweb的,想搞也有点无力
作者: 4one_R    时间: 2018-4-1 12:17
看来楼主对深度学习了解的不是很透彻。拿广为人知的backpropogation算法来说,它训练ANN无非就是链式求导,梯度下降。高二就学过了。
作者: 4one_R    时间: 2018-4-1 12:19
爱国民主 发表于 2018-3-24 21:26
也许吧
我忘了分析未来结果,只看到现在结果:
就是说,比尔盖茨吧

https://www.spigotmc.org/threads/machine-learning-killaura-detection-in-minecraft.301609/
这是我写的小paper,关于人工智能检测killaura的,你绝对看得懂。
楼主的陈述缺乏论据支持,不要信
作者: 4one_R    时间: 2018-4-1 12:32
dogeop 发表于 2018-3-24 12:51
大哥,别做梦一步登天了,先去学数据结构,网络,计算机组成原理吧。
NN这种东西哪里是一个中学生知识能 ...

楼主你好,你是怎么得出这个结论的,很多本科生和研究生都搞不懂,于是一个中学生就搞不懂
作者: Lne    时间: 2018-4-5 19:46
我表示我CPP和C的标准库都没有弄明白.......
作者: 橐驼    时间: 2018-4-17 10:49
AI反作弊想法很好,但是成本太高,最后的结果就是无法实施。
作者: 3385411548    时间: 2018-4-19 15:19
罗拉最可爱了,mua
作者: dundun123    时间: 2018-4-19 18:22
一个月都过去了,怎么还没更好一节啊,一节都好啊
作者: fredbizi    时间: 2018-4-20 13:46
楼主可以尽早编辑深度学习的部分吗,就是来看这个教程的…
作者: 4one_R    时间: 2018-4-20 18:19
z1252583957 发表于 2018-4-17 10:49
AI反作弊想法很好,但是成本太高,最后的结果就是无法实施。

请给出你的论据。据我所知,现在有一部分知名大型服务器都用上了AI反作弊,而且效果颇佳。其次,这个“成本”如何定义?
作者: 橐驼    时间: 2018-4-21 15:42
4one_R 发表于 2018-4-20 18:19
请给出你的论据。据我所知,现在有一部分知名大型服务器都用上了AI反作弊,而且效果颇佳。其次,这个“成 ...

当然是开发成本啊,这并不是个人就能完成的事,你要找一些会AI的人组成个小团队来开发这个插件,要花多少钱?也许你可以开源,让更多人义务的来完成这个插件,但是你的安全监测系统都是开源的那么这样的安全监测系统还算安全吗?作弊大部分情况都是修改了客户端,所以我们要保证客户端文件的完整一致性,但是,检查本地文件完整一致性又有很大一本分的逻辑要在客户端上执行,在客户端执行的这一段逻辑代码就会很不安全,于是我们要经常迭代这段代码,才能做到相对安全。参考原来T.X的C.F和D.N.F,它就是这样做的,只要他的版本更新速度比外挂的快,更新速度大于破解速度,那么游戏就是安全的。继续拿C.F和D.N.F说事,C.F与D.N.F后期的版本迭代的速度明显慢了下来,它的后台绝对有了一套健全的行为监测机制,此时的外挂也慢慢变少了,几乎很少会有,即使有挂,随便玩一下就会被检测到。

结论:AI监测的确强有力,但其针对性太强,我的世界玩法太多,单说一个PVP,就需要监测很多很多的行为,系统要达到精准健全,需要很多人力物力,开发成本高,耗时耗力
硬编码检查方案监测逻辑简单,效果好,但不安全,需要进行不断的版本迭代才能保证安全,前期开发成本也低于AI,效果也是立竿见影
硬编码+AI = 相对安全,单靠其中一个是不行的

现在我的世界环境是是,健全的硬编码方案都没有,还谈什么AI,雨花亭够大了吧,按理说反作弊应该很厉害,但是游戏里经常出现一个小队,里面就有两个是挂,十分明显系统居然还检测不出来
作者: 4one_R    时间: 2018-4-21 21:53
本帖最后由 4one_R 于 2018-4-21 22:00 编辑
z1252583957 发表于 2018-4-21 15:42
当然是开发成本啊,这并不是个人就能完成的事,你要找一些会AI的人组成个小团队来开发这个插件,要花多少 ...

你的大部分逻辑都不成立。

作者: yhr    时间: 2018-4-23 02:17
已收藏坐等更新~~
作者: 萝娜娜    时间: 2018-4-23 17:09
dundun123 发表于 2018-4-19 18:22
一个月都过去了,怎么还没更好一节啊,一节都好啊

抱歉呐,因为着手设计新的反作弊,这边教程没时间动,我会尽快更新的
作者: 4one_R    时间: 2018-4-27 12:45
lona 发表于 2018-4-23 17:09
抱歉呐,因为着手设计新的反作弊,这边教程没时间动,我会尽快更新的

楼主是在设计客户端的反作弊吗?
作者: 萝娜娜    时间: 2018-4-27 13:10
4one_R 发表于 2018-4-27 12:45
楼主是在设计客户端的反作弊吗?

是的        
作者: 4one_R    时间: 2018-4-29 21:56
那楼主加油
这帖子里的某些人真令人无语,在对要讨论的领域一无所知的情况下漫天胡扯
作者: silveryingchen    时间: 2018-5-2 23:14
酷车手BB弹 发表于 2018-3-22 18:15
看到了吧,这就是大佬 (Ymer不支持XP。不支持sponge。差评= =)

可是。。xp已经不安全了,另外人的精力有限
作者: Bana_Dying    时间: 2018-5-5 18:05
爱国民主 发表于 2018-3-24 10:24
至于反作弊,AI反作弊将会是主流(AI技术仍在发展)。可惜现在中考,要不然我现在研究着神经网络…… ...

我一朋友已经在做了 我觉得目前他布星
作者: silveryingchen    时间: 2018-5-17 12:32
本帖最后由 silveryingchen 于 2018-5-17 12:38 编辑
dogeop 发表于 2018-3-22 23:32
噫?我账号解了?emm,再也不去茶馆了。
进入正题,首先告诉你的是,客户端永远不可能完全防止破解,只能增 ...

emmmm大佬。。话是这么说,但是无奈mod服也基本只能依靠客户端反作弊了,如果是常规检测各种问题,另外类似AAC这样的反作弊检测还是给绕过了,同样需要增加成本。。  。。如果没有搞错客户端在于进入时需要时间检验,而常规的反作弊插件是时刻检验的,另外。。似乎也无法防止类似窃取地图这类mod    嗯,其实我对这些并不是很懂,但感觉客户端反作弊有存在的意义。。。轻喷 若有错误,望指正
作者: silveryingchen    时间: 2018-5-17 12:33
爱国民主 发表于 2018-3-24 13:27
咳咳(特别讨厌这种看不起态度知道吗)
学什么我当然知道,我热爱AI这东西
世界无奇不有,没有做不到的, ...

年轻人,看好你,但是语言只是工具,算法才是灵魂,理科学业基础特别是数学类的很重要,这个真不是开玩笑,加油吧
作者: a1771336151    时间: 2018-5-18 00:15
可以的 我想学
作者: 橐驼    时间: 2018-6-20 13:37
4one_R 发表于 2018-4-21 21:53
你的大部分逻辑都不成立。
  • 你前后的立场不一致:前面你说AI无法实施,而现在你又承认了AI反作弊的可行 ...

  • 你估计是有什么误解吧,你以为我是在 嘲 讽 你的想法?还是以为我在 嘲 讽 你的项目?都没有!!!我可没说过用AI不可行,我的意思是说,用AI的难度不小,AI反 作弊也不是个小工程。因为种种原因,很有可能就导致了工程的烂尾,无法继续下去,比如MC国内的 凉凉走势,人力,精力,财力...等原因。见过很多优秀的插件,mod等等,作者最后弃坑的也不在少数。当然 ,我这不是在诅咒你的项目,我希望你能走到最后,MC是需要一个健全的反作弊系统的,祝你成功!
    同样的,我没说硬编码方案无敌就不需要AI技术了,我知道客户端的硬编码是有很多局限性的。就比如当玩家用加速的软件加速客户端,即使玩家没有改动过客户端,但是他依然在服务器中作弊,此时要是有AI的监测插件就能很好的解决。不过我还是要坚持我的想法:AI固然强大,但绝对有其局限性,硬编码虽然LOW,但也能解决很多问题,两者结合才能有比较好的效果。至少目前是这样的,以后要是你的插件很完善了,完全不需要其他乱七八糟的东西了,那就当我没说

    经常叫 挂 雨庭的 花 雨 庭,我居然还记反了名字





    作者: 3222577979    时间: 2018-6-24 13:48
    辛苦了 泷泽lona
    作者: 萝娜娜    时间: 2018-6-24 17:53
    3222577979 发表于 2018-6-24 13:48
    辛苦了 泷泽lona

    报上你的名来,我赠与你无上禁言荣耀!
    作者: 704009905    时间: 2018-6-29 00:14
    前排支持 学习更多先进技术
    作者: jqj0901    时间: 2018-7-29 18:57
    z1252583957 发表于 2018-6-20 13:37
    你估计是有什么误解吧,你以为我是在 嘲 讽 你的想法?还是以为我在 嘲 讽 你的项目?都没有!!!我可没 ...

    AI反作弊就个光说不做的吹比笑话
    让客户端与服务器有更多的交互才是反作弊的正道(参考王者荣耀orLOL)
    而且AI反作弊即使出来了,那计算量是一般服务器能承受得了的?
    所以,实践才能出真知
    作者: 时间-空间    时间: 2020-1-29 12:15
    咕咕咕?球球lona更一节教程吧,一节!!!!
    作者: ESs4Cg6M    时间: 2020-3-3 18:47
    弃坑了吗......