• 消息
  • 动态
  • 收藏
  • 历史
  • 创作中心
  • 投稿
  • [Gal运行入门]#5 软电池 Sdwrap 过法总结
    Dir-A
    2021年10月30日 14:44

    [Gal运行入门]#5 软电池 Sdwrap 过法总结

    Sdwrap又称软电池(ソフト電池),是一种Galgames 常见的认证方式。 Sdwrap本质上就是【Sdwrap认证exe+游戏真实exe】构成的,所以你会发现它有两个PE头

    如果要去掉软电池是比较简单的,只要把前面软电池认证那一节删了就行了 但是很多带Sdwrap认证的游戏,都会在游戏的主程序里进行检测,Sdwrap是否运行/存在。 所以这个就是一个难点,也就说,并不是所有的Sdwrap都只删了认证的那个exe部分就行了。

    以下我给大家总结常见的几种Sdwrap的认证方式。

    #0x0 有弹窗无验证,Sdwrap分离。

    在这个游戏中的软电池验证是我见过最奇葩的,不过也揭示了软电池本来的样子

    第一个exe,大小为376kb,这个就是软电池的验证程序 第二个exe,大小为3640kb,这个是游戏的真实exe。

    也可以注意到第二exe是被隐藏的,也就是说用户一般只能看到第一个exe 当用户点击第一个exe后打开一个软电池认证窗口

    当用户通过验证后,软电池程序就会去启动第二个exe,从而进入游戏

    当然了,你如果聪明点,打开显示隐藏文件,直接就能看到第二个exe 从而直接启动这个exe进入游戏,也就相当于越过了软电池认证。

    当然这种情况的软电池特别少见,更多见的是下面介绍的这几种。

    #0x1 有弹窗无验证,Sdwrap合并

    我们来看下只有一个exe的,并且合并了Sdwrap,有弹窗提示的情况 双击运行后

    对于这种情况,我们只需要分离两个exe即可。 之前应该也说过,exe有PE结构,而PE结构的文件有PE头 我们可以依据PE头的二进制数据进行分割 当然我们并不需要得到软电池部分的exe,我们只需要得到游戏真实exe即可。 所以我们可以采用十六进制编辑器直接删除第二个PE头之前的数据 这样也就得到了我们需要的exe(游戏真实exe)

    首先用winhex载入exe 并搜索十六进制 4D5A90

    确定后按下f3搜索下一个,一般只有两个结果。

    观察offset的值,我们可以看到此时已经来到了第二个PE头。 接着我们用winhex定义块的功能,进行选中第二个PE头之前的数据并按下delete删除

    先用鼠标选中一小段

    选择定义块功能

    把beginning改为0,即选中了第二个PE头之前的数据。 选中后按下delete键,或上图中的remove选项,接着弹出窗点确定即可。

    完成后单击保存,或 选 文件选项 中的另存为。

    运行修改后的文件即可进入游戏(此处为游戏首次打开的窗口/全屏选择)

    #0x2 无弹窗无验证,Sdwrap合并

    有些软电池,双击后无任何反应,转区也如此,这时的处理和上面是一样的。

    你搜索PE头任然能搜到两个 这边说一下判断是否为软电池的方法

    用winhex载入,按下ctrl+f,选择ANSCII搜索sdwrap,如果有结果,说明就是软电池。

    接下来同上述处理即可。

    #0x3 有弹窗有验证,合并Sdwrap(Silky's)

    正常软电池弹窗,说明有软电池,先通过上述方法搜索PE头去掉软电池即可。

    去掉软电池后出现另外和软电池有关的弹窗,这个为游戏exe内的验证。

    这种验证稍微复杂一点,不同引擎的游戏可能不一样,不过目前我也只发现了 Silky's引擎和真剣で私に恋しなさい这个系列有这种阴间验证 剣で私に恋しなさい不仅验证软电池存在,还会验证exe的完整性,这个需要通过内存补丁的方式来过比较好,不过这个很少见,而且内存补丁,我们这个教程也没教过,这里就不说了。

    下面谈一下Silky's的过法。 用x64dbg载入后断下messagebox

    停在messagebox后按f8,每次通过ret后观察是否存在CreateEventw,

    来到CreateEventW这个地方后往上翻,可以看到好几个条件跳转,这些就是关键的跳转 很具体的判断关键跳转的方法说起来有点麻烦,我们用一个不是很科学的方法来判断

    从CreateEventW开始往上数,找到4个很长的条件跳转 那么什么是很长的条件跳转呢 简单来说就是x64dbg汇编窗口最上面到最下面都包含不下的 比如像这个就不算很长,一个窗口内都能看到跳转的目标

    再往上找,你能看到几个很长的跳转

    这几个跳转其实都指向了一个区域

    这个区域在CreateEventW下面

    我们的目标是让这几个跳转不要跑下来 也就是说,有哪个跳转实现了,我们就需要nop掉。

    给那几个跳转下断点,并disable掉messagebox 重新运行程序后来到刚刚下断点的地方

    运行后可以发现第一个je不跳,第二个je不跳,第三个跳,先nop掉,第四个跳,nop掉

    然后继续运行游戏即可进入

    一些时候Silky's的可能会遇到这种问题

    这个是路径问题,把路径全部换成英文即可。

    当然还有个CreateEventA的玩意,这玩意是差不多的 来到CreateEventA的区域后往上4个条件跳转都打上断点 然后重新运行,不要disable掉messagebox 然后运行的时候,你会发现其中一个跳转没触发,跑进一个call后就触发messagebox了 那个跳转改成强制跳转即可

    如果你实在不会,就CreateEventA/W往上数条件跳转,十个以内,总能对。

    #0x4 有提示无验证,Sdwrap合并,入口点缺损。

    这种算是比较阴间的

    还是和通常的软电池一样,去掉软电池部分,然后你会发现,运行后无任何反应 这种玩意在oep处改了些东西

    至于如何修复这部分玩意,有个比较简单的方法, 就是你找一个正版,或者已经运行起来的,这个懂的都懂 或者可以利用体验版/同引擎的版本也可以。 然后用x64dbg附加上去,来到oep处,把损坏的部分修完就ok了

    #0x5 无提示有认证,无Sdwrap(写在游戏脚本中)

    这种也是一个奇葩东西,是通过直接把软电池的认证写在游戏脚本里实现的 目前我只见过Artemis引擎的,这个谈一下,其实有点和老的krkr引擎alpharom认证差不多。

    首先我们先把脚本提取出来

    然后放入游戏目录下,这个讲Artemis引擎汉化的时候说过了

    然后刚刚我们观察到script.ini里写了软电池的认证信息, 说明等下软电池认证的时候就会去调用这个文件

    把system文件夹丢进Sublime,然后全局搜索 script.ini

    然后可以看到有两个lua脚本去调用了这个玩意 如果你搞不懂哪个lua脚本才是验证的,直接两个都修改 把验证部分去掉就行了 这里是auth.lua 把其中这一堆删了就ok了

    然后可以把不必要的文件都删了 双击exe运行就进去了

    评论 149
    赞与转发