fc模拟器下载(FC NES 模拟游戏下载),本文通过数据整理汇集了fc模拟器下载(FC NES 模拟游戏下载)相关信息,下面一起看看。
超级任天堂娱乐系统(SNES)是任天堂世界著名主机NES(在中国被称为小霸王)的后续主机。主机采用16位彩色显示,使得当时主机的画面显示非常好。作为当时的主导主机,任天堂的SNES主机上有许多经典游戏,现在许多热门游戏系列都在SNES上发了财。像龙探系列,传奇系列,最终幻想系列,时空之轮系列等等。当时超级任天堂已经以全球数千万台的销量占据了游戏机市场的头把交椅。在这个优秀的平台上,诞生了无数优秀品质的游戏,很多作品在玩法上不亚于PS2和XBOX游戏(其实比他们好很多)。如果你痴迷于那些刺激的游戏,Snes9x可以在你的电脑上上网模拟超级任天堂,让你再次回到童年。软件可以根据不同的硬件方便地调整声音、图像等。
图中的程序是SNES模拟器,很多游戏爱好者都用过。从网上找这些东西不难,但我不会在文章里说,因为从技术上讲,这样做属于传播盗版。
首先,我拿出我的旧外置硬盘,找到我的SNES9x模拟器的压缩副本,启动它,发现了一个DLL劫持漏洞。
SN9X是一个SNES模拟器,让你重温童年的游戏。它可以在Windows平台上运行经典SNES/SFC游戏的模拟器软件。它支持游戏。smc,证监会,图和. 1格式。可通过键盘或手柄操作,支持键位修改。
用x86和x64体系结构编写的程序使用动态链接库(dll)在软件开发过程中提供灵活性和可移植性。DLL基本上是一个包含可重用代码、资源和变量的小程序。就其本质而言,它们没有入口点,需要父可执行文件在运行时调用它们。如果你只有一个DLL,你可以使用类似Rundll32.exe的东西来运行特定DLL的内容,而不需要父程序。否则,DLL中的函数可以由父可执行文件调用,并且可以通过使用LoadLibrary API调用将它们动态导入到程序中。
有时软件开发并不完全按照计划进行,您可能经常会编写一个程序来调用和加载一个并不存在的DLL。或者,在SNES模拟器的情况下,您可能会遇到相当于路径漏洞的问题,这基本上意味着程序试图从当前工作目录加载DLL,然后在其他地方寻找。
下面是我加载Procmon并运行SNES模拟器时发生的情况:
在上图中,SNES模拟器已经放在我的FlareVM主机的桌面上。当程序试图加载opengl32.dll时,它首先检查当前工作目录C:UsersHuskyDesktopSNES32bit。当它在这里找不到指定的DLL时,它会转到SysWOW64目录,并加载成功存在于其中的DLL。这个SNES模拟器是一个32位应用程序,所以它检查SysWOW64是否需要dll是有意义的。
注意System32和SysWOW64有点像冰岛/格陵兰的情况。在标准x64设备上,64位系统目录是system32,32位系统目录是SysWOW64。
简而言之,这是一个漏洞。程序试图从可写目录加载DLL。这是因为程序被复制到了桌面,而不是安装在标准的程序目录中,比如“程序文件”。
这个软件很容易共享,就是从硬盘上共享,然后把文件复制到自己的笔记本电脑上。
另外,这里需要注意的是,SNES模拟器有DEP没有ASLR,以后可能会回到那个状态。
现在,在一些攻击场景中,DLL劫持是通过以下方式实现的:只需制作一个MSFVenom DLL的有效载荷,替换为程序试图加载的有效载荷4head。直到程序崩溃或加载失败:
DOS不在此范围内。要做得更好,可以进入DLL代理。
DLL代理
DLL代理劫持DLL的成功率更高。
您也许能够从DLL劫持中获得外壳代码执行,但是程序仍然需要从原始DLL中解析它想要进行的函数调用。而你的MSFVenom生成的DLL不知道如何处理这些请求的函数,所以calc.exe运行,程序崩溃。
在DLL代理中,您可以创建一个新的DLL,它包含一个指向原始DLL的导入函数的指针。有效负载隐藏在这个DLL的一部分中,剩余的空间用于将可执行文件指向它想要加载的原始DLL。
程序以其最初预期的功能被执行,并且有效载荷被执行。
使用Procmon过滤以下内容:
打开一个可执行文件或10,并确定一个程序试图加载到DLL,但失败了。在本例中,我主要关注OpenGL32.dll:
重新配置筛选器,查看DLL是否在程序执行的任何时候都成功加载。因此,只需过滤即可扩展您的搜索标准:
如果您找到了一个好的DLL代理候选项,您可能会看到以下内容:
可以看到,将成功加载的DLL从主机复制到攻击者的设备上,并将其命名为[DLL name]_ original.dll。幸运的是,这个DLL可能在所有Windows系统上都是本地的,所以您甚至不需要从目标主机上复制它,只需从您自己的Windows主机上复制它即可。
在攻击者的设备上,使用这个简单的Python脚本从原始DLL中取出导出的函数,并将它们写入一个模块定义文件(。def):
注意引用原始DLL的两个地方,并确保相应地更改这些值。
编译程序时,模块定义文件为编译器提供有关链接导出的信息。在这个例子中,我们将告诉编译器创建一个代理DLL,并将其链接到原始DLL,以指向它导出的所有函数。
所以,每当可执行文件问“嘿DLL,函数在哪里?”代理DLL回复“哦,对了,查一下[dllName]_original.dll,应该有。”
现在,我们制作代理DLL。这是一个用C写的非常简单的程序,导出一个DLLMain函数作为DLL的入口点。在DLLMain方法中,我们秘密地调用了Payload函数。该函数执行,然后所有其他请求的函数调用被传递到[dllName]_original.dll:
创建这个C文件,并将其命名为[dllName]。丙:
到目前为止,一切顺利。
最后,我们需要创建这个代理DLL,并将其与我们的模块定义文件链接起来。这可以通过mingw-w64来完成,它有编译DLL所必需的工具链。注意这里的架构:我代理了32位SNES模拟器,所以我需要为32位架构编译它。
如果您的攻击设备上没有mingw-w64,只需输入:
然后,编译我们的DLL:
当DLL编译时,您现在应该有四个文件可以使用:
[DLLName]_original.dll:我们从主机中取出的原始dll,并将其重命名为“_original”
[dllName]。C:包含我们的有效负载的代理DLL的C代码。
[dllName]。def:使用Python脚本从原始dll中提取导出的函数调用创建的模块定义文件。
[DLLName]。dll:新编译的代理dll。
最后一步是在目标主机的程序目录中登录原始DLL和代理DLL。这两个dll必须彼此位于相同的目录中,并且与原始程序位于相同的目录中。
找到两个dll后,启动程序!
此时,代理DLL中已经加载了一个功能完整的程序。没有崩溃,没有段错误,只有calc。
更多fc模拟器下载(FC NES 模拟游戏下载)相关信息请关注本站,本文仅仅做为展示!