设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4682|回复: 5
打印 上一主题 下一主题

解密简单vx加密文件实现部分

 关闭 [复制链接]

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
跳转到指定楼层
1
发表于 2008-3-9 17:41:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
啥都不说了,就是理论篇的实践部分。使用了轮回者的输出图片脚本,参考了Is****雪某个脚本的思路。
调用方法:Hackproject.hack
以下仅为脚本,具体使用方法请参考理论篇……
除了速度rp外没啥大问题。

注意:本脚本仅能提取使用过的图片素材。对于游戏里没有使用过的素材无能为力。也就是说,你完全可以把它当素材提取器用= =

接下来一星期没空上了,有问题可能会过一段时间才能看到,见谅- -

  1. #==============================================================================
  2. # ■ Hackproject
  3. #------------------------------------------------------------------------------
  4. #  破解RPG Maker VX 的加密文件。
  5. #==============================================================================

  6. module Hackproject
  7.   #--------------------------------------------------------------------------
  8.   # ● 破解加密文件
  9.   #--------------------------------------------------------------------------
  10.   def self.hack
  11.     p '破解速度很慢,默认rtp工程需15分钟,大型游戏可能需1-3小时,需要足够的耐心哦~'
  12.     p '注意:只有当游戏窗口处于活动状态时才进行破解哦~您可以随时切换至其他程序,不过破解会暂停。'
  13.     p '按下确定后正式开始破解。破解时会产生长时间的画面卡住不动,FPS降为0或1,这是正常现象,您可以随时到游戏文件夹下察看破解进度。'
  14.     make_dir("break/Data")
  15.     save_data(load_data("Data/Scripts.rvdata"),"break/Data/Scripts.rvdata")
  16.     save_data(load_data("Data/Actors.rvdata"),"break/Data/Actors.rvdata")
  17.     save_data(load_data("Data/Classes.rvdata"),"break/Data/Classes.rvdata")
  18.     save_data(load_data("Data/Skills.rvdata"),"break/Data/Skills.rvdata")
  19.     save_data(load_data("Data/Items.rvdata"),"break/Data/Items.rvdata")
  20.     save_data(load_data("Data/Weapons.rvdata"),"break/Data/Weapons.rvdata")
  21.     save_data(load_data("Data/Armors.rvdata"),"break/Data/Armors.rvdata")
  22.     save_data(load_data("Data/Enemies.rvdata"),"break/Data/Enemies.rvdata")
  23.     save_data(load_data("Data/Troops.rvdata"),"break/Data/Troops.rvdata")
  24.     save_data(load_data("Data/States.rvdata"),"break/Data/States.rvdata")
  25.     save_data(load_data("Data/Animations.rvdata"),"break/Data/Animations.rvdata")
  26.     save_data(load_data("Data/CommonEvents.rvdata"),"break/Data/CommonEvents.rvdata")
  27.     save_data(load_data("Data/System.rvdata"),"break/Data/System.rvdata")
  28.     save_data(load_data("Data/Areas.rvdata"),"break/Data/Areas.rvdata")
  29.     save_data(load_data("Data/MapInfos.rvdata"),"break/Data/MapInfos.rvdata")
  30.     for i in load_data("Data/MapInfos.rvdata").keys
  31.       map = sprintf("Map%03d.rvdata", i)
  32.       save_data(load_data("Data/#{map}"),"break/Data/#{map}")
  33.       unless File.exist?("break/Graphics/Parallaxes/#{load_data("Data/#{map}").parallax_name}")
  34.         if load_data("Data/#{map}").parallax_name != ""
  35.           a = Cache.parallax(load_data("Data/#{map}").parallax_name)
  36.           a.make_png(load_data("Data/#{map}").parallax_name,"break/Graphics/Parallaxes/")
  37.         end
  38.       end
  39.       for k in load_data("Data/#{map}").events.values
  40.         for j in k.pages
  41.           unless File.exist?("break/Graphics/Characters/#{j.graphic.character_name}")
  42.             a = Cache.character(j.graphic.character_name)
  43.             a.make_png(j.graphic.character_name,"break/Graphics/Characters/") if !["",nil].include?(a)
  44.           end
  45.           for event_command in j.list
  46.             parameters = event_command.parameters
  47.             case event_command.code
  48.               when 101
  49.                 unless parameters[0].empty?
  50.                   unless File.exist?("break/Graphics/Faces/#{parameters[0]}")
  51.                     a = Cache.face(parameters[0])
  52.                     a.make_png(parameters[0],"break/Graphics/Faces/")
  53.                   end
  54.                 end
  55.               when 231
  56.                 a = Cache.picture(parameters[1])
  57.                 unless File.exist?("break/Graphics/Pictures/#{parameters[1]}")
  58.                   a.make_png(parameters[1],"break/Graphics/Pictures/")
  59.                 end
  60.               when 322
  61.                 a = Cache.character(parameters[1])
  62.                 unless File.exist?("break/Graphics/Characters/#{parameters[1]}")
  63.                   a.make_png(parameters[1],"break/Graphics/Characters/")
  64.                 end
  65.                 a = Cache.face(parameters[3])
  66.                 unless File.exist?("break/Graphics/Faces/#{parameters[3]}")
  67.                   a.make_png(parameters[3],"break/Graphics/Faces/")
  68.                 end
  69.               when 323
  70.                 a = Cache.character(parameters[1])
  71.                 unless File.exist?("break/Graphics/Characters/#{parameters[1]}")
  72.                   a.make_png(parameters[1],"break/Graphics/Characters/")
  73.                 end
  74.             end
  75.           end  
  76.         end
  77.       end
  78.     end
  79.     for i in 1...$data_actors.size
  80.       a = Cache.face($game_actors[i].face_name)
  81.       a.make_png($game_actors[i].face_name,"break/Graphics/Faces/")
  82.       b = Cache.character($game_actors[i].character_name)
  83.       b.make_png($game_actors[i].character_name,"break/Graphics/Characters/")
  84.     end
  85.     for i in 1...$data_animations.size
  86.       a = Cache.animation($data_animations[i].animation1_name, 0)
  87.       unless $data_animations[i].animation1_name == ""
  88.         unless File.exist?("break/Graphics/Animations/#{$data_animations[i].animation1_name}")
  89.           a.make_png($data_animations[i].animation1_name,"break/Graphics/Anitmations/")
  90.         end
  91.       end
  92.       a = Cache.animation($data_animations[i].animation2_name, 0)
  93.       unless $data_animations[i].animation2_name == ""
  94.         unless File.exist?("break/Graphics/Animations/#{$data_animations[i].animation2_name}")
  95.           a.make_png($data_animations[i].animation2_name,"break/Graphics/Anitmations/")
  96.         end
  97.       end
  98.     end
  99.     for i in 1...$data_enemies.size
  100.       a = Cache.battler($data_enemies[i].battler_name,0)
  101.       unless File.exist?("break/Graphics/Battlers/#{$data_enemies[i].battler_name}")
  102.         a.make_png($data_enemies[i].battler_name,"break/Graphics/Battlers/")
  103.       end
  104.     end
  105.     a = Cache.character($data_system.boat.character_name)
  106.     if a != nil
  107.       a.make_png($data_system.boat.character_name,"break/Graphics/Characters/")
  108.     end
  109.     a = Cache.character($data_system.ship.character_name)
  110.     if a != nil
  111.       a.make_png($data_system.ship.character_name,"break/Graphics/Characters/")
  112.     end
  113.     a = Cache.character($data_system.airship.character_name)
  114.     if a != nil
  115.       a.make_png($data_system.airship.character_name,"break/Graphics/Characters/")
  116.     end
  117.     a = Cache.system("Balloon")
  118.     a.make_png("Balloon","break/Graphics/System/")
  119.     a = Cache.system("BattleFloor")
  120.     a.make_png("BattleFloor","break/Graphics/System/")
  121.     a = Cache.system("BattleStart")
  122.     a.make_png("BattleStart","break/Graphics/System/")
  123.     a = Cache.system("GameOver")
  124.     a.make_png("GameOver","break/Graphics/System/")
  125.     a = Cache.system("IconSet")
  126.     a.make_png("IconSet","break/Graphics/System/")
  127.     a = Cache.system("MessageBack")
  128.     a.make_png("MessageBack","break/Graphics/System/")
  129.     a = Cache.system("Shadow")
  130.     a.make_png("Shadow","break/Graphics/System/")
  131.     a = Cache.system("TileA1")
  132.     a.make_png("TileA1","break/Graphics/System/")
  133.     a = Cache.system("TileA2")
  134.     a.make_png("TileA2","break/Graphics/System/")
  135.     a = Cache.system("TileA3")
  136.     a.make_png("TileA3","break/Graphics/System/")
  137.     a = Cache.system("TileA4")
  138.     a.make_png("TileA4","break/Graphics/System/")
  139.     a = Cache.system("TileA5")
  140.     a.make_png("TileA5","break/Graphics/System/")
  141.     a = Cache.system("TileB")
  142.     a.make_png("TileB","break/Graphics/System/")
  143.     a = Cache.system("TileC")
  144.     a.make_png("TileC","break/Graphics/System/")
  145.     a = Cache.system("TileD")
  146.     a.make_png("TileD","break/Graphics/System/")
  147.     a = Cache.system("TileE")
  148.     a.make_png("TileE","break/Graphics/System/")
  149.     a = Cache.system("Title")
  150.     a.make_png("Title","break/Graphics/System/")
  151.     a = Cache.system("Window")
  152.     a.make_png("Window","break/Graphics/System/")
  153.     p '破解完成'
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 生成保存路径
  157.   #--------------------------------------------------------------------------
  158.   def self.make_dir(path)
  159.     dir = path.split("/")
  160.     for i in 0...dir.size
  161.       unless dir == "."
  162.         add_dir = dir[0..i].join("/")
  163.         begin
  164.           Dir.mkdir(add_dir)
  165.         rescue
  166.         end
  167.       end
  168.     end
  169.   end
  170. end

  171. #==============================================================================
  172. #               本脚本出自www.66rpg.com,转载请注明。
  173. #==============================================================================
  174. =begin
  175. ==============================================================================
  176.                         Bitmap to PNG By 轮回者
  177. ==============================================================================

  178. 对Bitmap对象直接使用

  179. bitmap_obj.make_png(name[, path])

  180. name:保存文件名
  181. path:保存路径

  182. 感谢66、夏娜、金圭子的提醒和帮助!
  183.    
  184. ==============================================================================
  185. =end

  186. module Zlib
  187.   class Png_File < GzipWriter
  188.     #--------------------------------------------------------------------------
  189.     # ● 主处理
  190.     #--------------------------------------------------------------------------
  191.     def make_png(bitmap_Fx,mode)
  192.       @mode = mode
  193.       @bitmap_Fx = bitmap_Fx
  194.       self.write(make_header)
  195.       self.write(make_ihdr)
  196.       self.write(make_idat)
  197.       self.write(make_iend)
  198.     end
  199.     #--------------------------------------------------------------------------
  200.     # ● PNG文件头数据块
  201.     #--------------------------------------------------------------------------
  202.     def make_header
  203.       return [0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a].pack("C*")
  204.     end
  205.     #--------------------------------------------------------------------------
  206.     # ● PNG文件情报头数据块(IHDR)
  207.     #--------------------------------------------------------------------------
  208.     def make_ihdr
  209.       ih_size = [13].pack("N")
  210.       ih_sign = "IHDR"
  211.       ih_width = [@bitmap_Fx.width].pack("N")
  212.       ih_height = [@bitmap_Fx.height].pack("N")
  213.       ih_bit_depth = [8].pack("C")
  214.       ih_color_type = [6].pack("C")
  215.       ih_compression_method = [0].pack("C")
  216.       ih_filter_method = [0].pack("C")
  217.       ih_interlace_method = [0].pack("C")
  218.       string = ih_sign + ih_width + ih_height + ih_bit_depth + ih_color_type +
  219.                ih_compression_method + ih_filter_method + ih_interlace_method
  220.       ih_crc = [Zlib.crc32(string)].pack("N")
  221.       return ih_size + string + ih_crc
  222.     end
  223.     #--------------------------------------------------------------------------
  224.     # ● 生成图像数据(IDAT)
  225.     #--------------------------------------------------------------------------
  226.     def make_idat
  227.       header = "\x49\x44\x41\x54"
  228.       case @mode # 请54~
  229.       when 1
  230.         data = make_bitmap_data#1
  231.       else
  232.         data = make_bitmap_data
  233.       end
  234.       data = Zlib::Deflate.deflate(data, 8)
  235.       crc = [Zlib.crc32(header + data)].pack("N")
  236.       size = [data.length].pack("N")
  237.       return size + header + data + crc
  238.     end
  239.     #--------------------------------------------------------------------------
  240.     # ● 从Bitmap对象中生成图像数据 mode 1(请54~)
  241.     #--------------------------------------------------------------------------
  242.     def make_bitmap_data1
  243.       w = @bitmap_Fx.width
  244.       h = @bitmap_Fx.height
  245.       data = []
  246.       for y in 0...h
  247.         data.push(0)
  248.         for x in 0...w
  249.           color = @bitmap_Fx.get_pixel(x, y)
  250.           red = color.red
  251.           green = color.green
  252.           blue = color.blue
  253.           alpha = color.alpha
  254.           data.push(red)
  255.           data.push(green)
  256.           data.push(blue)
  257.           data.push(alpha)
  258.         end
  259.       end
  260.       return data.pack("C*")
  261.     end
  262.     #--------------------------------------------------------------------------
  263.     # ● 从Bitmap对象中生成图像数据 mode 0
  264.     #--------------------------------------------------------------------------
  265.     def make_bitmap_data
  266.       gz = Zlib::GzipWriter.open('hoge.gz')
  267.       t_Fx = 0
  268.       w = @bitmap_Fx.width
  269.       h = @bitmap_Fx.height
  270.       data = []
  271.       for y in 0...h
  272.         data.push(0)
  273.         for x in 0...w
  274.           t_Fx += 1
  275.           if t_Fx % 10000 == 0
  276.             Graphics.update
  277.           end
  278.           if t_Fx % 100000 == 0
  279.             s = data.pack("C*")
  280.             gz.write(s)
  281.             data.clear
  282.             #GC.start
  283.           end
  284.           color = @bitmap_Fx.get_pixel(x, y)
  285.           red = color.red
  286.           green = color.green
  287.           blue = color.blue
  288.           alpha = color.alpha
  289.           data.push(red)
  290.           data.push(green)
  291.           data.push(blue)
  292.           data.push(alpha)
  293.         end
  294.       end
  295.       s = data.pack("C*")
  296.       gz.write(s)
  297.       gz.close   
  298.       data.clear
  299.       gz = Zlib::GzipReader.open('hoge.gz')
  300.       data = gz.read
  301.       gz.close
  302.       File.delete('hoge.gz')
  303.       return data
  304.     end
  305.     #--------------------------------------------------------------------------
  306.     # ● PNG文件尾数据块(IEND)
  307.     #--------------------------------------------------------------------------
  308.     def make_iend
  309.       ie_size = [0].pack("N")
  310.       ie_sign = "IEND"
  311.       ie_crc = [Zlib.crc32(ie_sign)].pack("N")
  312.       return ie_size + ie_sign + ie_crc
  313.     end
  314.   end
  315. end
  316. #==============================================================================
  317. # ■ Bitmap
  318. #------------------------------------------------------------------------------
  319. #  关联到Bitmap。
  320. #==============================================================================
  321. class Bitmap
  322.   #--------------------------------------------------------------------------
  323.   # ● 关联
  324.   #--------------------------------------------------------------------------
  325.   def make_png(name="like", path="",mode=0)
  326.     make_dir(path) if path != ""
  327.     Zlib::Png_File.open("temp.gz") {|gz|
  328.       gz.make_png(self,mode)
  329.     }
  330.     Zlib::GzipReader.open("temp.gz") {|gz|
  331.       $read = gz.read
  332.     }
  333.     f = File.open(path + name + ".png","wb")
  334.     f.write($read)
  335.     f.close
  336.     File.delete('temp.gz')
  337.     end
  338.   #--------------------------------------------------------------------------
  339.   # ● 生成保存路径
  340.   #--------------------------------------------------------------------------
  341.   def make_dir(path)
  342.     dir = path.split("/")
  343.     for i in 0...dir.size
  344.       unless dir == "."
  345.         add_dir = dir[0..i].join("/")
  346.         begin
  347.           Dir.mkdir(add_dir)
  348.         rescue
  349.         end
  350.       end
  351.     end
  352.   end
  353. end
复制代码
From mortal hope immortal power springs.

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3367
在线时间
3624 小时
注册时间
2006-9-6
帖子
37402

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

2
发表于 2008-3-9 20:59:47 | 只看该作者
但这毕竟是VX的素材提取器……
没多少人会用啊……

最近解密相关的东西真多……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
142
在线时间
264 小时
注册时间
2006-11-22
帖子
1057
3
发表于 2008-3-10 01:31:15 | 只看该作者
以下引用越前リョーマ于2008-3-9 12:59:47的发言:
最近解密相关的东西真多……

因為看到加密文件就火大....
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-18
帖子
652
4
发表于 2008-3-10 14:53:42 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

喵,小柯的宠物

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-15
帖子
2310
5
发表于 2008-3-11 03:38:59 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

T船长

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-17
帖子
1665
6
发表于 2008-3-11 04:39:04 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-4-9 05:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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