本帖所包含的内容仅限技术交流和学习研究使用,禁止用于其他用途!因使用不当造成的一切后果与本人无关!

前几天用橙光做了一个AVG小游戏,然而准备给朋友玩的时候发现这货和我之前用的不一样了!现在居然要审核才能发布,并且不支持生成exe等,卧槽,这么坑爹?能忍?搜遍网络没有相关的方法,只能自己动手了。

0x00 分析

首先这个在本地是可以通过“测试”按钮玩的,我们就从这里入手。
运行游戏,可以看到游戏主进程是一个名为H5OrangeSim.exe的程序
a.png
我们打开进程的文件位置,发现是在安装目录的版本号\interpreter\H5目录下,并且看到了熟悉的cef框架,而且根据游戏如果发布后可以在网页上玩,猜测是使用了H5来渲染,我们直接运行一下这个文件,发现它停止工作了,显然主程序是要给它传递一些参数才能运行,接下来便是搞主程序了。

0x01 破解

查壳发现这个居然是个没壳的WPF程序,那就好办了嘛,反编译出来然后搜索orange字符串……很容易找到一个名为OpenGame_EXE文件,下上断点运行
b.png
诶怎么没有停下来啊,我们好像找错了……根据一般的命名,我们搜索包含test的函数试试,找到一个OpenGameTest的函数,看上去应该就是这个了
c.png
运行,嗯这回成功断下来了,一路跟下去进入process.Start();函数,在返回前点开processStartInfo结构体就能找到参数了
d.png
很明显,前面960,540就是分辨率,另三个不用管它,然后接了一个URL编码的游戏工程目录绝对路径和一个URL编码的标题名,我们用命令行传给H5OrangeSim.exe,发现游戏成功运行啦!

0x02 发布

接下来就是发布工作了,先把H5这整个目录拷贝出来,然后吧游戏工程扔进去,目录命名为Game。删掉backup,ui备份和工程文件。然后就是写一个py脚本来运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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文件就大功告成了!

最后本人已卸载橙光,换用其他开源引擎:)