- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
虚拟机逆向初步
虚拟机逆向初步
作者:popeylj
逆向结构体和寄存器
打开crackeme ,发现很多欺骗和反IDA的代码,需要重新确定它的jump/call 点,并且重定义向‘code’段的指向,因为它隐藏了指向LoadLibrary和‘VirtualAlloc’的字符。
如何查找在区域内的VM代码,以IDA 4.3为例,我们要寻找的是‘zen’的指向,所以,当查看aspr1.2. dll文件时,我们发现ret 附近的返回点是加壳关键,
对于VM,VM是一种对于指令的仿真格式,这种指令通常是大量循环的代码跳转,这样,我们就需要寻找关键点和结构体表。以obj方式进行存储,可以包含很多东西。
我们如何在Vm或者其他的用obj in HL的代码进行的VM中区别他们 ?比如,如果他们参考同样的成员,并且同样的成员似乎包含或者在这些结构中的应用时类似于一个模型,那么就可以确定你在VM代码中。我经常参考以前常用攻击点,就像程序计数器:EIP。这种方法是比较简单:在Vm代码后发现像 *F 一类的代码。(说明:你可以再病毒中发现这个技术)。
但是,我们返回到这个crackme中,可以查看并寻找到如下随机代码,跳转到程序时我们发现一个有趣的序列,如下图:
一个很长的指针表,以其中的第二条链接来说明,(因为第一条指针式指向文件头部)
IDA给我们如下数据格式,但是当按C将代码变换,就变成
一个Xor 异操作下面跟着一个跳转,在所有块上按C 看到如下:
这些是按下C后的第一个地方,检查代码发现所有的小片段都是跳转到相同的位置。也就是说他们拥有一个相同的结尾。
注意第一个结构:在入口,一个重复的mov ecx,esi ! 是否他就是作为一个成员 ?也许是相同的逻辑成员传入到 esi 中,明确的说来,它是作为下一个结构体的转移计数,同时在所有的片段中也使用[edi] 寄存器作为存放下一个结构体的目标区域,所有存在的这三个代码段中都有着相同结构,改变仅仅是内存。
参考核心结构:byte ptr, word ptr, dword ptr. 在这三个可能性参照
非常幸运,但是VM 通常有更加复杂结构的指令集位移
如果SHL的目的地是一个通用的VM寄存器R1 ,edi 应该包含指向R1的指针。一个常见、完美标准的对于指向VM的攻击是指向NOP 结构的等价体,如何找到他们呢?他们除了更新VM的内部状态别无它用。因此,一个大概作为更新程序计数器的寄存器很可能就是我们在这个VM中的NOP,这个crackme的虚拟机是很清晰的,因此,我们只要识别出它复杂结构中的直接部分。
现在,是时候逆向出所有的块机构和对应他们的命名,结果如下:
所有的这些结构或多或少是像shl 构成的。非常有趣的一点就是观察到 idiv这个结构,正如我们注意到的,它被 IDIV 和IDIV_REST 分开,正如所记,IDIV 返回的就是除法余值。
IDIV 返回到一个不同的寄存器EDI中 ,一个是结果,另一个余值。VM命令对于二进制(源/目的地) ,作者需要对三元结构做重复的工作。注意在重建一个VM前,我通常寻找所有的结构设置,试着找到我们没有讨论过的重要的东西。我经常寻找VM寄存器结构的暗示。比如说当我找到如下的结构:
我首先想到:‘pushf’ 为什么这里它需要一个 pushf 结构?他是用来保存比较标志。然后这个 出栈到一个和结构体相关的 eax寄存器中。eax 是被用来做其他VM代码片段的替代吗?当然。在此时,我们回想一下:为什么要对一个相近结构进行对比呢?假使你不理解这个的话,[eax+0Ch] 清楚地指向了虚拟标志寄存器。因此我们可以打开IDA 的结构页,创建一个结构体 增加一个DWORD 值到我们创建的 “field_0Ch” , 我们可以将它重命名为VM_EFLAGS 。
如上的结构。
现在我们可以定义如下的第一个VM寄存器,接下来再寻找其他的寄存器,在结构中我们找到了如下的代码:
当看到这些代码,注意到它是一个固定的VM寄存器,(固定:因为从VM结构的基地址的偏移量是补丁的,eax是固定的:10h)并且减4。从edi减少2个字节做操作数并且进行储存。ASM 当写操作时,进行你所知道的:寄存器减少操作。
我希望是我不需要对他进行注释,这是一个push dword,但是另外的VM寄存器没有被发现的。所以,我们仍然需要找到丢失的通用寄存器:EIP。接着我们找到这个结构:
现在,这个结构体和CMP有着相同的布局了,但是它的特殊是一个JZ结构,他是一个跳转,EIP 必须在这里被使用。正如我们跳转到其他地方,我们必须更改EIP寄存器一样。我们已经知道EAX+0Ch 是我们的VM标志位,所以虚拟标志位获得指向CPU的标志,并且JZ被执行,如果调试为空的话,edi参量被移动到eax + 8 中我们知
您可能关注的文档
最近下载
- 注册香港公司的香港投资环境介绍。.doc VIP
- 9《天上有颗南仁东星》课件 统编版语文八年级上册.pptx VIP
- 第8讲 二《德不可空谈》课件 学生读本高年级 (1).pptx
- 脚手架、满堂架钢管、扣件用量的计算.xls VIP
- 1-3-4氧化还原反应配平教学设计2023-2024学年高一上学期化学人教版(2019)必修第一册.docx VIP
- 石油化工金属管道布置设计规范.docx VIP
- 中国IBD蓝皮书 -中国炎症性肠病医患认知 暨生存质量报告 溃疡性结肠炎部分.docx
- AB变频器PowerFlex 700 说明书.pdf VIP
- 压覆影响区范围的确定、压覆矿产资源调查报告编写提纲、评估报告编写提纲.docx VIP
- 公安辅警综合基础知识题库汇总及答案解析.docx VIP
文档评论(0)