Project1
标题:
解密简单vx加密文件实现部分
[打印本页]
作者:
小幽的马甲
时间:
2008-3-9 17:41
标题:
解密简单vx加密文件实现部分
啥都不说了,就是理论篇的实践部分。使用了轮回者的输出图片脚本,参考了Is****雪某个脚本的思路。
调用方法:Hackproject.hack
以下仅为脚本,具体使用方法请参考理论篇……
除了速度rp外没啥大问题。
注意:本脚本仅能提取使用过的图片素材。对于游戏里没有使用过的素材无能为力。也就是说,你完全可以把它当素材提取器用= =
接下来一星期没空上了,有问题可能会过一段时间才能看到,见谅- -
#==============================================================================
# ■ Hackproject
#------------------------------------------------------------------------------
# 破解RPG Maker VX 的加密文件。
#==============================================================================
module Hackproject
#--------------------------------------------------------------------------
# ● 破解加密文件
#--------------------------------------------------------------------------
def self.hack
p '破解速度很慢,默认rtp工程需15分钟,大型游戏可能需1-3小时,需要足够的耐心哦~'
p '注意:只有当游戏窗口处于活动状态时才进行破解哦~您可以随时切换至其他程序,不过破解会暂停。'
p '按下确定后正式开始破解。破解时会产生长时间的画面卡住不动,FPS降为0或1,这是正常现象,您可以随时到游戏文件夹下察看破解进度。'
make_dir("break/Data")
save_data(load_data("Data/Scripts.rvdata"),"break/Data/Scripts.rvdata")
save_data(load_data("Data/Actors.rvdata"),"break/Data/Actors.rvdata")
save_data(load_data("Data/Classes.rvdata"),"break/Data/Classes.rvdata")
save_data(load_data("Data/Skills.rvdata"),"break/Data/Skills.rvdata")
save_data(load_data("Data/Items.rvdata"),"break/Data/Items.rvdata")
save_data(load_data("Data/Weapons.rvdata"),"break/Data/Weapons.rvdata")
save_data(load_data("Data/Armors.rvdata"),"break/Data/Armors.rvdata")
save_data(load_data("Data/Enemies.rvdata"),"break/Data/Enemies.rvdata")
save_data(load_data("Data/Troops.rvdata"),"break/Data/Troops.rvdata")
save_data(load_data("Data/States.rvdata"),"break/Data/States.rvdata")
save_data(load_data("Data/Animations.rvdata"),"break/Data/Animations.rvdata")
save_data(load_data("Data/CommonEvents.rvdata"),"break/Data/CommonEvents.rvdata")
save_data(load_data("Data/System.rvdata"),"break/Data/System.rvdata")
save_data(load_data("Data/Areas.rvdata"),"break/Data/Areas.rvdata")
save_data(load_data("Data/MapInfos.rvdata"),"break/Data/MapInfos.rvdata")
for i in load_data("Data/MapInfos.rvdata").keys
map = sprintf("Map%03d.rvdata", i)
save_data(load_data("Data/#{map}"),"break/Data/#{map}")
unless File.exist?("break/Graphics/Parallaxes/#{load_data("Data/#{map}").parallax_name}")
if load_data("Data/#{map}").parallax_name != ""
a = Cache.parallax(load_data("Data/#{map}").parallax_name)
a.make_png(load_data("Data/#{map}").parallax_name,"break/Graphics/Parallaxes/")
end
end
for k in load_data("Data/#{map}").events.values
for j in k.pages
unless File.exist?("break/Graphics/Characters/#{j.graphic.character_name}")
a = Cache.character(j.graphic.character_name)
a.make_png(j.graphic.character_name,"break/Graphics/Characters/") if !["",nil].include?(a)
end
for event_command in j.list
parameters = event_command.parameters
case event_command.code
when 101
unless parameters[0].empty?
unless File.exist?("break/Graphics/Faces/#{parameters[0]}")
a = Cache.face(parameters[0])
a.make_png(parameters[0],"break/Graphics/Faces/")
end
end
when 231
a = Cache.picture(parameters[1])
unless File.exist?("break/Graphics/Pictures/#{parameters[1]}")
a.make_png(parameters[1],"break/Graphics/Pictures/")
end
when 322
a = Cache.character(parameters[1])
unless File.exist?("break/Graphics/Characters/#{parameters[1]}")
a.make_png(parameters[1],"break/Graphics/Characters/")
end
a = Cache.face(parameters[3])
unless File.exist?("break/Graphics/Faces/#{parameters[3]}")
a.make_png(parameters[3],"break/Graphics/Faces/")
end
when 323
a = Cache.character(parameters[1])
unless File.exist?("break/Graphics/Characters/#{parameters[1]}")
a.make_png(parameters[1],"break/Graphics/Characters/")
end
end
end
end
end
end
for i in 1...$data_actors.size
a = Cache.face($game_actors[i].face_name)
a.make_png($game_actors[i].face_name,"break/Graphics/Faces/")
b = Cache.character($game_actors[i].character_name)
b.make_png($game_actors[i].character_name,"break/Graphics/Characters/")
end
for i in 1...$data_animations.size
a = Cache.animation($data_animations[i].animation1_name, 0)
unless $data_animations[i].animation1_name == ""
unless File.exist?("break/Graphics/Animations/#{$data_animations[i].animation1_name}")
a.make_png($data_animations[i].animation1_name,"break/Graphics/Anitmations/")
end
end
a = Cache.animation($data_animations[i].animation2_name, 0)
unless $data_animations[i].animation2_name == ""
unless File.exist?("break/Graphics/Animations/#{$data_animations[i].animation2_name}")
a.make_png($data_animations[i].animation2_name,"break/Graphics/Anitmations/")
end
end
end
for i in 1...$data_enemies.size
a = Cache.battler($data_enemies[i].battler_name,0)
unless File.exist?("break/Graphics/Battlers/#{$data_enemies[i].battler_name}")
a.make_png($data_enemies[i].battler_name,"break/Graphics/Battlers/")
end
end
a = Cache.character($data_system.boat.character_name)
if a != nil
a.make_png($data_system.boat.character_name,"break/Graphics/Characters/")
end
a = Cache.character($data_system.ship.character_name)
if a != nil
a.make_png($data_system.ship.character_name,"break/Graphics/Characters/")
end
a = Cache.character($data_system.airship.character_name)
if a != nil
a.make_png($data_system.airship.character_name,"break/Graphics/Characters/")
end
a = Cache.system("Balloon")
a.make_png("Balloon","break/Graphics/System/")
a = Cache.system("BattleFloor")
a.make_png("BattleFloor","break/Graphics/System/")
a = Cache.system("BattleStart")
a.make_png("BattleStart","break/Graphics/System/")
a = Cache.system("GameOver")
a.make_png("GameOver","break/Graphics/System/")
a = Cache.system("IconSet")
a.make_png("IconSet","break/Graphics/System/")
a = Cache.system("MessageBack")
a.make_png("MessageBack","break/Graphics/System/")
a = Cache.system("Shadow")
a.make_png("Shadow","break/Graphics/System/")
a = Cache.system("TileA1")
a.make_png("TileA1","break/Graphics/System/")
a = Cache.system("TileA2")
a.make_png("TileA2","break/Graphics/System/")
a = Cache.system("TileA3")
a.make_png("TileA3","break/Graphics/System/")
a = Cache.system("TileA4")
a.make_png("TileA4","break/Graphics/System/")
a = Cache.system("TileA5")
a.make_png("TileA5","break/Graphics/System/")
a = Cache.system("TileB")
a.make_png("TileB","break/Graphics/System/")
a = Cache.system("TileC")
a.make_png("TileC","break/Graphics/System/")
a = Cache.system("TileD")
a.make_png("TileD","break/Graphics/System/")
a = Cache.system("TileE")
a.make_png("TileE","break/Graphics/System/")
a = Cache.system("Title")
a.make_png("Title","break/Graphics/System/")
a = Cache.system("Window")
a.make_png("Window","break/Graphics/System/")
p '破解完成'
end
#--------------------------------------------------------------------------
# ● 生成保存路径
#--------------------------------------------------------------------------
def self.make_dir(path)
dir = path.split("/")
for i in 0...dir.size
unless dir == "."
add_dir = dir[0..i].join("/")
begin
Dir.mkdir(add_dir)
rescue
end
end
end
end
end
#==============================================================================
# 本脚本出自www.66rpg.com,转载请注明。
#==============================================================================
=begin
==============================================================================
Bitmap to PNG By 轮回者
==============================================================================
对Bitmap对象直接使用
bitmap_obj.make_png(name[, path])
name:保存文件名
path:保存路径
感谢66、夏娜、金圭子的提醒和帮助!
==============================================================================
=end
module Zlib
class Png_File < GzipWriter
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def make_png(bitmap_Fx,mode)
@mode = mode
@bitmap_Fx = bitmap_Fx
self.write(make_header)
self.write(make_ihdr)
self.write(make_idat)
self.write(make_iend)
end
#--------------------------------------------------------------------------
# ● PNG文件头数据块
#--------------------------------------------------------------------------
def make_header
return [0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a].pack("C*")
end
#--------------------------------------------------------------------------
# ● PNG文件情报头数据块(IHDR)
#--------------------------------------------------------------------------
def make_ihdr
ih_size = [13].pack("N")
ih_sign = "IHDR"
ih_width = [@bitmap_Fx.width].pack("N")
ih_height = [@bitmap_Fx.height].pack("N")
ih_bit_depth = [8].pack("C")
ih_color_type = [6].pack("C")
ih_compression_method = [0].pack("C")
ih_filter_method = [0].pack("C")
ih_interlace_method = [0].pack("C")
string = ih_sign + ih_width + ih_height + ih_bit_depth + ih_color_type +
ih_compression_method + ih_filter_method + ih_interlace_method
ih_crc = [Zlib.crc32(string)].pack("N")
return ih_size + string + ih_crc
end
#--------------------------------------------------------------------------
# ● 生成图像数据(IDAT)
#--------------------------------------------------------------------------
def make_idat
header = "\x49\x44\x41\x54"
case @mode # 请54~
when 1
data = make_bitmap_data#1
else
data = make_bitmap_data
end
data = Zlib::Deflate.deflate(data, 8)
crc = [Zlib.crc32(header + data)].pack("N")
size = [data.length].pack("N")
return size + header + data + crc
end
#--------------------------------------------------------------------------
# ● 从Bitmap对象中生成图像数据 mode 1(请54~)
#--------------------------------------------------------------------------
def make_bitmap_data1
w = @bitmap_Fx.width
h = @bitmap_Fx.height
data = []
for y in 0...h
data.push(0)
for x in 0...w
color = @bitmap_Fx.get_pixel(x, y)
red = color.red
green = color.green
blue = color.blue
alpha = color.alpha
data.push(red)
data.push(green)
data.push(blue)
data.push(alpha)
end
end
return data.pack("C*")
end
#--------------------------------------------------------------------------
# ● 从Bitmap对象中生成图像数据 mode 0
#--------------------------------------------------------------------------
def make_bitmap_data
gz = Zlib::GzipWriter.open('hoge.gz')
t_Fx = 0
w = @bitmap_Fx.width
h = @bitmap_Fx.height
data = []
for y in 0...h
data.push(0)
for x in 0...w
t_Fx += 1
if t_Fx % 10000 == 0
Graphics.update
end
if t_Fx % 100000 == 0
s = data.pack("C*")
gz.write(s)
data.clear
#GC.start
end
color = @bitmap_Fx.get_pixel(x, y)
red = color.red
green = color.green
blue = color.blue
alpha = color.alpha
data.push(red)
data.push(green)
data.push(blue)
data.push(alpha)
end
end
s = data.pack("C*")
gz.write(s)
gz.close
data.clear
gz = Zlib::GzipReader.open('hoge.gz')
data = gz.read
gz.close
File.delete('hoge.gz')
return data
end
#--------------------------------------------------------------------------
# ● PNG文件尾数据块(IEND)
#--------------------------------------------------------------------------
def make_iend
ie_size = [0].pack("N")
ie_sign = "IEND"
ie_crc = [Zlib.crc32(ie_sign)].pack("N")
return ie_size + ie_sign + ie_crc
end
end
end
#==============================================================================
# ■ Bitmap
#------------------------------------------------------------------------------
# 关联到Bitmap。
#==============================================================================
class Bitmap
#--------------------------------------------------------------------------
# ● 关联
#--------------------------------------------------------------------------
def make_png(name="like", path="",mode=0)
make_dir(path) if path != ""
Zlib::Png_File.open("temp.gz") {|gz|
gz.make_png(self,mode)
}
Zlib::GzipReader.open("temp.gz") {|gz|
$read = gz.read
}
f = File.open(path + name + ".png","wb")
f.write($read)
f.close
File.delete('temp.gz')
end
#--------------------------------------------------------------------------
# ● 生成保存路径
#--------------------------------------------------------------------------
def make_dir(path)
dir = path.split("/")
for i in 0...dir.size
unless dir == "."
add_dir = dir[0..i].join("/")
begin
Dir.mkdir(add_dir)
rescue
end
end
end
end
end
复制代码
作者:
越前リョーマ
时间:
2008-3-9 20:59
但这毕竟是VX的素材提取器……
没多少人会用啊……
最近解密相关的东西真多……
作者:
3535
时间:
2008-3-10 01:31
以下引用
越前リョーマ于2008-3-9 12:59:47
的发言:
最近解密相关的东西真多……
因為看到加密文件就火大....
作者:
無聊啲尐柒
时间:
2008-3-10 14:53
提示:
作者被禁止或删除 内容自动屏蔽
作者:
殤。
时间:
2008-3-11 03:38
提示:
作者被禁止或删除 内容自动屏蔽
作者:
Cid_Highwind
时间:
2008-3-11 04:39
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1