原神安装程序关闭名为Launcher.exe问题探讨
# 前言近日“国产之光”原神游戏PC端开服了,结果过不了多久有网友曝出,该游戏的安装程序会关闭一切名为“Launcher.exe”的程序:
对于这种情况,笔者闻所未闻,身体微微一震,除了震惊之余更多的是感叹其神技。这意义不明的关闭到底是个怎么回事?
为此,正在学习逆向的笔者打算一探究竟,于是就有了本篇文章。
# 流言验证
当然是先试试网上所说的情况是否属实。先用Visual studio编译一个名为Launcher.exe的项目(功能并不重要),打开后运行原神安装包:
然后点击安装,此时会提醒你客户端正在运行:
点击确定,没错,Launcher.exe没了,然后就安装了:
这安装器的背景图上仅有一人,似乎预示了程序被关闭,杀进一切,颇有孤高王者谁能敌的气概。
# 准备工作
既然流言验证成功了,接下来我们就要为逆向做准备了。
查壳:
Nullsoft PiMP Stub是个什么东西,一开始笔者也有这样的疑问,其实坛友早已问过并已有答案:
我们把安装程序的exe改成zip试试,确实能看到安装后的资源:
既然不是壳,那我们直接拖进x32dbg运起来即可。
# 寻找终结程序的函数
从结果推原因,从它能结束别的进程来看可以推测应该是用了 ```TerminateProcess```这个API并下断:(可以在符号列表里找)
运行后确实断下来了,断在一个叫nsprocess.dll的DLL里:
先看看这个nsprocess.dll的是什么?经过百度这个似乎是NSIS,也就是之前查壳查出来的Nullsoft PiMP Stub的一个插件DLL:
似乎不是很重要的信息,我们只明白了目前是在NSIS中的一个插件DLL里。既然如此,看看代码上面的call调用情况,了解个大概:
很明显,这过程一目了然,些少写过Hook,注入代码的坛友可能会知道,这里其实就是调用NtQuerySystemInformation函数来枚举进程,并使用lstrcmpiW来判断进程名是否为launcher.exe,最后再调用TerminateProcess来终结。
所以笔者个人觉得如果要修复这个问题,可以直接Hook TerminateProcess来修复。
# 结束名称源头
那么Launcher.exe这个字符串来源在哪里呢?如果我们找到了来源并且进行修改,是不是可以...(捂嘴)
看到ebp加法运算就知道这个字符串是从调用者那里传过来的参数之一,那我们就根据栈回溯找找:
通过函数getTargetName拿到Launcher.exe名字,而函数的参数来源于一个固定的地址值+4:
本以为能够找到安装程序的领空,结果接下去无论是对这个内存区域打内存断点还是栈回溯都没法找到字符串的来源,可能是自己太菜了缘故,希望有万能的坛友们能找出来。
其实如果要改变字符串,可以在调用getTargetName函数之后将其函数结果更改即可。如改成QQ.exe那就会....
# 其他
在逆向的过程看到了一个奇怪的DLL:nsniuniuskin.dll,经百度一看:
似乎是一个国产的安装包插件,点进官网:
可以看到一些安装包的模板,让我们再看一看原神安装程序的安装界面:
好,有奖竞答,请问原神用了那个模板(滑稽)。
完。 moewold_1773 发表于 2020-9-20 00:58
原神原来期待有段时间了,结果米忽悠就做出来这么一个废物。
听说解包出来的时候我还有点震惊,结果群内大 ...
实际上都只是吹吹而已,都没有一个真的把模型贴图什么的解出来 https://www.52pojie.cn/forum.php?mod=redirect&goto=findpost&ptid=26508&pid=429235
2009 h大的回答
更加远古 说实话 这个游戏很不好玩 说说是开放世界 但是实际上你的体验和那种无聊的网游体验没什么区别, 除了画面精致外一无是处 【玩了3天的个人体验】 不喜勿喷 moewold_1773 发表于 2020-9-20 00:58
原神原来期待有段时间了,结果米忽悠就做出来这么一个废物。
听说解包出来的时候我还有点震惊,结果群内大 ...
这句话传的到处都是了 但是包里的模型都还没看到.....{:17_1089:} 原神原来期待有段时间了,结果米忽悠就做出来这么一个废物。
听说解包出来的时候我还有点震惊,结果群内大佬说完全没壳,直接解压就好,是直接把我吓尿()
然后12.5G的文件里头是6G的六国语言语音,可以的米忽悠(群内大佬的解包结果) 楼主是真的优秀啊{:1_893:} 所以到底是咋回事啊 原神很早就听说了,骚的不行{:301_992:} 等手游原神 哈哈哈哈 楼主牛逼,原神用的我猜是模板二 能吸金就行了,股东管你这么多 应该是高阶模板一或二:Dweeqw