反作弊游戏怎样破解,看看《黑色戈壁》逆向剖析历程:运用 IDAPython 和 FLIRT 署名恢复 IAT | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

反作弊游戏怎样破解,看看《黑色戈壁》逆向剖析历程:运用 IDAPython 和 FLIRT 署名恢复 IAT

申博_安全防护 申博 67次浏览 已收录 0个评论

《黑色戈壁》是PearlAbyss Corp开发的一款 MMOARPG 网络游戏,是款在电玩游戏中的动作和战役的基础上增加大规模攻城战,不动产运用、生意业务和雇佣等模仿要素的MMORPG。于2013年10月17开启第一次测试。

在这篇文章入手下手之前,你有必要先看一下怎样运用Scylla和x64dbg转储黑色戈壁(BlackDesert64.exe)的历程。我们将在这篇文章中看到我为了简化静态逆向剖析而转储历程时所做的一些事变。

黑色戈壁二进制文件的开发者很早就预感到了,会有人对他们的游戏举行逆向剖析,因而早已运用了Themida举行了防备。Themida是一个强劲的庇护体系, 专为了那些想庇护本身的软件不被先进的逆向工程和黑客软件破解的软件开发者而开发的。开发者不须要变动任何的原代码,和不须要程式编制的履历运用WinLicense。一般,当你从内存中转储一个历程时,特别是假如该历程已封装,则有很多事变会被损坏或准确地说,不会像预期的那样转储。

反作弊游戏怎样破解,看看《黑色戈壁》逆向剖析历程:运用 IDAPython 和 FLIRT 署名恢复 IAT

RDB Packer检测器的输出效果

其中之一就是IAT(我们将要相识IAT是什么以及怎样辨认它们),假如我们转储一个历程,而且由于某种原因而没有IAT表,则逆向剖析将会异常难题,而且将看到挪用诸如qword_1419FB008之类的函数而不是GetProcAddress的函数。假如我们能够看到IAT表,逆向剖析会变得轻易很多。

另一个风趣的事变是运用来自IDA的FLIRT署名,这些署名是IDA附带的,你能够在互联网上找到很多大众鸠合,将这些大众鸠合装入二进制文件后,它们将尝试从多个库中辨认出尽人皆知的函数。

导入地点表(IAT)

一般,来自dll的函数地点不是静态的,因而,导入地点表用于存储历程运用的已加载dll中的一切函数指针。基本上,它是内存的一部份,你能够在其中找到指向顺序所运用的每一个函数的指针列表。每当历程须要接见来自kernel32.dll的WriteFile时,顺序便会指向IAT表以猎取所加载dll中函数的实在地点。

在该图中,我们能够看到IAT从正在运转的历程中转储出来的数据。能够理解为两个重要的列:第一个列属于内存中每一个IAT条目的地点;第二个是从加载的dll指向每一个函数的实在地点的指针。如许,每当顺序要从dll接见任何函数时,它将指向该表以检索该函数的动态地点。

第三列是x64dbg增加的诠释,它依据调试器在内存中加载的标记从每一个指针剖析函数的称号。当我们从内存中转储历程时,由于一切指针将不再存在于静态转储中,因而我们将没法看到末了的信息,而且我们运用的任何东西都不能像这里的x64dbg那样剖析这些指针。

有无一种要领能够复原此信息以举行静态剖析?

当然有,假如我们运用Scylla转储历程,则此东西将自动尝试辨认内存中的IAT,然则封装顺序很憎恶,一般它们会在解压缩现实二进制文件后删除原始IAT并在内存中分派一个新表。此东西大概没法辨认内存中的现实IAT,现实上,假如我们尝试如许做,Sylla会通知我们IAT表的大小为8字节(一个条目),这是不大概的。

IAT一般是一组指针构成的数组,用一个空指针将每一个DLL与另一个DLL离开。在内存中辨认它们关于两种状况(静态地运用IDA和动态地运用x64dbg)都是异常简朴的。关于x64dbg,你能够简朴地寻觅任何一块顺序集,使挪用一个函数从一个dll和遵照的IAT指针:

为了辨认转储中的IAT,我们须要寻觅一个指针数组,就像我们之前诠释的那样。一种多是寻觅对这类花样为qword_1419FB008的函数的挪用,这相似于挪用cs:qword_1419FB008。假如我们在IDA中遵照此变量,我们将发明看起来像如许的IAT:

在上图中,我们能够看到IAT的多个条目,而且在右边,能够看到IDA标识的一切xref。 Black Desert Online IAT表包括约莫1000个条目,你能够设想这将怎样简化静态反向历程。

Apache Solr RCE 0 day漏洞

背景 2019年10月29日,有研究人员在GitHub上公布了Apache Solr RCE漏洞的PoC代码。Solr是Apache Lucene内置的开源平台。PoC公布之初,该漏洞没有CVE编号也没有来自Apache的官方确认。Tenable研究人员分析确认了Apache Solr v7.7.2 到 8.3 版本都受到该漏洞的影响,研究人员还推测包含Config API的老版本也受该漏洞的影响。 分析 根据该PoC,攻击者在识别出Solr core名后可以攻击有漏洞的Apache Solr实例。在识别出core名后,攻击者可以发送精心伪造的HTTP POST请求到Config API来将solrconfig.xml文件的Velocity Response Writer的params resource loader值修改为true。 启用该参数使得攻击者可以在

恢复IAT

如今,我们已在运转的历程以及静态转储中标识了IAT表,我们能够晓得尝试将一切标记从历程迁移到IDA。由于x64dbg为我们处理了这些标记,我们能够尝试从运转的历程中复制IAT并在IDA上重命名功用,以便我们在逆向剖析时能够运用它们。

我认为有一个更好的要领来实行此操纵,然则我决议手动实行第一部份,然后运用IDAPython编写一个小剧本。起首,我们将以x64xdb转到IAT的开头,并在表的第一个条目上实行“右键单击->跟进转储”。这将设置转储1,以下所示:

如今,我们将挑选从表的第一个地点入手下手直到表的末了一个条目的一切值。末了,我们要做的是“右键单击->复制->选定行”。假如我们将其存储在新的txt文件中,则将获得以下内容:

00000001419FB000  00007FFC8F3C38F0  advapi32.SetServiceStatusStub
00000001419FB008  00007FFC8F3C3910  advapi32.CryptGenRandomStub
00000001419FB010  00007FFC8F3C3390  advapi32.CryptReleaseContextStub
00000001419FB018  00007FFC8F3C2F60  advapi32.CryptAcquireContextWStub
00000001419FB020  00007FFC8F3C2F80  advapi32.RegQueryValueExAStub
00000001419FB028  00007FFC8F3C2EA0  advapi32.RegOpenKeyExAStub
00000001419FB030  00007FFC8F3C3320  advapi32.CryptAcquireContextAStub
00000001419FB038  00007FFC8F3C7140  advapi32.RegDeleteValueWStub
00000001419FB040  00007FFC8F3C2A10  advapi32.RegCreateKeyExWStub
...
...
00000001419FB308  00007FFC8FE40D30  kernel32.FindFirstFileA
00000001419FB310  00007FFC8FE40DA0  kernel32.FindNextFileA
00000001419FB318  00007FFC8FE3FB30  kernel32.MoveFileExW
00000001419FB320  00007FFC8FE41050  kernel32.RemoveDirectoryW
00000001419FB328  00007FFC8FE41080  kernel32.SetFileAttributesW
00000001419FB330  00007FFC8FE40E20  kernel32.GetDiskFreeSpaceExW

虽然有三列,但我们只对第一列和末了一列感兴趣。为何?由于第二列仅包括每一个函数的动态地点,所以在运用IDA静态逆向剖析时我们并不在意,由于这些模块的地点不在转储中。假如我们能够运用要领称号重命名每一个指针称号,则IDA将自动从Windows API中辨认大多数函数,并动态更新转储中的参数和范例。

为了自动实行此操纵,IDA向我们供应了一个名为IDAPython的API。如许,我们能够编写一个小的剧本,该剧本基本上能够猎取IAT的每一行,搜刮转储中的每一个内存地点,并运用要领的实在称号重命名函数称号。

效果以下所示:

import idaapi
import idautils
import idc
if __name__ == '__main__':
    file = open( 'IAT.txt', 'r')
    for line in file:
        columns = line.split('  ')
        address = columns[0]
        fnName = columns[2].replace('\r', '').replace('\n', '')
        if '.' in fnName:
            fnName = fnName.split('.')[1]
        print address   ' '   fnName
        idc.MakeNameEx(int(address, 16), fnName, idc.SN_NOWARN)
    file.close()

该剧本将遍历来自IAT的每一行,并将把每一个内存地点的准确称号放在转储中。

反作弊游戏怎样破解,看看《黑色戈壁》逆向剖析历程:运用 IDAPython 和 FLIRT 署名恢复 IAT

修复了IAT在转储内里的问题,IDA将自动辨认某些要领,并将恰当的参数和函数信息增加到每一个条目中。

你还记得有关反作弊初始化的图象吗?如今的状况是如许的:

反作弊游戏怎样破解,看看《黑色戈壁》逆向剖析历程:运用 IDAPython 和 FLIRT 署名恢复 IAT

如今我们已向转储IAT导入了快要1000种要领,这些要领将在全部二进制文件中发挥作用。

FLIRT署名

我喜好做的第二件事是运用疾速的库标识和辨认手艺(FLIRT)署名,特别是关于简化的二进制文件。这许可IDA经由过程剖析反汇编顺序的每一个字节来从二进制文件内的多个库中搜刮函数,以便肯定其是不是对应于已知库函数的开头。

标识每一个函数所需的这些信息存储在包括每一个函数的一切形式的文件中,要在IDA中运用此函数,你只须要翻开“署名”子视图并实行“右键单击->运用新署名”即可:

反作弊游戏怎样破解,看看《黑色戈壁》逆向剖析历程:运用 IDAPython 和 FLIRT 署名恢复 IAT

菜单挑选要运用的署名,挑选每一个署名将取决于我们肯定相干库的规范。运用它们以后,你将看到相似以下内容:

反作弊游戏怎样破解,看看《黑色戈壁》逆向剖析历程:运用 IDAPython 和 FLIRT 署名恢复 IAT

总结

在举行反向剖析之前,花一些时候来剖析和革新二进制文件中可用的信息确切异常重要,这关于那些难以逆向剖析的顺序(比方反作弊顺序)来说是一个很好的入手下手。IDA有多个像ClassInformer如许的插件,这些插件使得逆向剖析c++顺序越发轻易。

本文翻译自:https://niemand.com.ar/2019/02/21/reversing-a-black-desert-online-dump-restoring-iat-with-idapython-and-flirt-signatures/


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明反作弊游戏怎样破解,看看《黑色戈壁》逆向剖析历程:运用 IDAPython 和 FLIRT 署名恢复 IAT
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址