前几天用橙光做了一个AVG小游戏,然而准备给朋友玩的时候发现这货和我之前用的不一样了!现在居然要审核才能发布,并且不支持生成exe等,这么坑爹能忍?搜遍网络没有相关的方法,只能自己动手了。
0x00 分析
首先这个在本地是可以通过“测试”按钮玩的,我们就从这里入手。
运行游戏,可以看到游戏主进程是一个名为H5OrangeSim.exe的程序
我们打开进程的文件位置,发现是在安装目录的版本号\interpreter\H5目录下,并且看到了熟悉的cef框架,而且根据游戏如果发布后可以在网页上玩,猜测是使用了H5来渲染,我们直接运行一下这个文件,发现它停止工作了,显然主程序是要给它传递一些参数才能运行,接下来便是搞主程序了。
0x01 破解
查壳发现这个居然是个没壳的WPF程序,那就好办了嘛,反编译出来然后搜索orange字符串……很容易找到一个名为OpenGame_EXE文件,下上断点运行
诶怎么没有停下来啊,我们好像找错了……根据一般的命名,我们搜索包含test的函数试试,找到一个OpenGameTest的函数,看上去应该就是这个了
运行,嗯这回成功断下来了,一路跟下去进入process.Start();函数,在返回前点开processStartInfo结构体就能找到参数了
很明显,前面960,540就是分辨率,另三个不用管它,然后接了一个URL编码的游戏工程目录绝对路径和一个URL编码的标题名,我们用命令行传给H5OrangeSim.exe,发现游戏成功运行啦!
0x02 发布
接下来就是发布工作了,先把H5这整个目录拷贝出来,然后吧游戏工程扔进去,目录命名为Game。删掉backup,ui备份和工程文件。然后就是写一个py脚本来运行:
[Python] 纯文本查看 复制代码 #coding:utf-8
import os,sys
from urllib import quote
import win32api
def get_resource_path():
application_path = ''
if getattr(sys, 'frozen', False):
application_path = os.path.dirname(sys.executable)
elif __file__:
application_path = os.path.dirname(__file__)
return application_path
gamepath=quote(get_resource_path()+'\Game')
runpath=get_resource_path()+'\H5OrangeSim.exe'
param='0 0 960 540 100 '+gamepath+' 替换此处为游戏标题URL编码'
win32api.ShellExecute(0, 'open', runpath, param,'',0)
注意这里的get_resource_path函数和win32api.ShellExecute是必须的,因为我们接下来需要把这个脚本转成exe,需要这样获取绝对路径,然后为了防止命令行的黑框出现,需要调用ShellExecute函数。
接下来就是用Pyinstallerer把这个脚本转换成exe文件就大功告成了!
最后楼主已卸载橙光,换用其他开源引擎XD。 |