驱动管家:安全、高效、精准的专业驱动下载站!

P-Code是什么?如何跟踪P-Code伪指令?

2018-03-06 17:05:06责编:llp   来源:驱动管家     人气:

术语P-Code既不是一个新名词也不是Microsoft的发明,P-Code只是简单地被解释执行的伪指令。因此,我们并不需要通过什么复杂的专业词汇来描述它。P-Code可以被认为是一种普通的机器级代码(我们的微处理器不能解释它)。在运行P-Code之前,需要一个解释器处理它,转换P-Code为CPU可以理解的机器语言。这个过程看起来有点象JAVA, 为了执行JAVA语言写成的应用程序,我们需要一个进行解释和翻译的处理程序- 虚拟机“Virtual Machine”。这个负有想象力的术语实际意味着它是一个翻译的机制,将JAVA编写的程序转换成我们的CPU可以理解的操作码(指令)。

P-Code的优势是明显的。假如我们定义了一组特殊的专属性指令集,并且不公布它的详细定义规范说明,那么一般人很难理解我们生成的程序代码;另一个优势是减小了执行文件的尺寸:通过定义独特的单字节操作码,我们能够使得某些伪指令执行一系列的操作(相当于大量的机器码完成的工作)。Microsoft的 Visual Basic 包含的P-Code的确是如此:一个VB虚拟机翻译P-Code到我们本地的机器码。 虚拟机(以dll形式出现),在P-Code程序执行前被调用,用来解释相关VB的伪指令。有如你猜测的那样,那些DLL的名称是 :MSVBVM50.DLL MSVBVM60.DLL文件名称清晰的表明是Microsoft Visual Basic 虚拟机(Virtual Machine), 后跟不同的版本信息。两个版本的差异不大:版本6引入了一些新的指令,并采用了更直观的命名来标注某些版本5中的指令。换句话说,版本6只是改变了版本5中部分指令名称,而非其内在的功能。

P-Code是什么?如何跟踪P-Code伪指令?

虚拟机不仅解释Visual Basic 的P-Code文件,同时它也被用于执行编译过的机器码。这是因为VB 虚拟机(DLL文件)同时也包含所有VB程序要调用的API。 一个例子是rtcMsgBox, 这是个等价于标准Windows API MessageBox 的VB函数。P-Code代码被VB虚拟机解释执行,VB中所有的函数都是以这种间接的方式被提供的。

由于这个原因,当我们跟踪一个Windows API MessageBox被 P-Code程序时,产生了一个严重的问题:我们必须要跟踪P-Code伪指令。

SoftICE 无法跟踪P-Code伪指令, 它只能跟踪VB虚拟机的执行过程。更明确地说, SoftICE 只能理解CPU处理器的机器码,它不能理解任何伪指令。我们将尝试去跟踪P-Code(P-Code伪指令将被转换成可被我们的CPU理解和执行的机器码)。

起始表(Beginning of the Tale)几乎所有的事情都是如此:好奇心引发了人们迎接一项新的挑战,我们的故事由此开始。

我记得曾在EFNet网站(论坛)与Green先生讨论有关VB P-Code的问题。他那时的工作正好涉及有关VB5编译的应用程序。他告诉我处理P-Code是非常的困难,所以我们有了制作一个VB P-Code的Debugger程序的想法。 实际上Black先生也认为这是个有意义的思路。考虑到这个项目,我说如果我们没有任何可用的有关资源,这可不容易实现。而后,我们查找了许多有关信息,但没有任何有意义的发现,空手而归。好奇心使得我更加努力去细心地发掘有用的信息资料。的确是不易呀…我曾和Snow先生探讨有关问题,他提供给我一个被Lazarus修改过的 MSVBVM50, 在其中,他描述了VB程序表现的所有可能的串比较。这促使我下决心制作一个VB Debugger。

我认为当MSVBVM50运行时注入代码是可能的。被注入的代码能够调用我的Debugger, 它在一个DLL中实现。我决定告诉已加入这个项目的Snow先生, 由他负责制作代码注入器 (好像一个调用装入器Loader) ,我负责Debugger (DLL)编码,就是那个被装入的Debugger(DLL) 。 就在我们两个完成了一些工作后,我们进行了测试,令人振奋的是它真的可以工作!这个 Debugger项目已经迈出了它的第一步。

我们可以控制VB虚拟机(截获有关操作),并且在虚拟机与VB应用程序之间安置我们的Debugger。最大的问题已经得到解决,虽然在初始阶段,我们采用的解决方案(技术上如你所见)并不是最终我们采用的方法。在我们的大目标和指导思想始终如一的情况下,我们不断对它进行改进,一直到我们完全避免了对虚拟机本身的修改。

* 第一步

跟踪分析,控制虚拟机

为使我们的Debugger能够工作,有一个关键性必须解决的问题:发现P-Code代码的翻译转换是什么时候以及如何发生的。一旦我们认识到这一点,我们注入的代码将接管对被调试的VB应用程序的控制,并且发送有关数据到我们的Debugger。Debugger 依次处理操作码并返回到VB 虚拟机。 我本人以前在有关调试器Debugger编码方面的经验几乎为零。不过不久前我差不多完成了一个x86的反汇编器 , 因此我将那些知识用于我的VB Debugger 开发工作。我的构思是这样的:

对于反汇编/解释这部分代码包含以下基本原理:

- 一个指针(pointer)指向一个缓存区(buffer),它包含将被转换的数据。- 一个控制程序,它从缓存区中读取操作指令(opcodes)并且重定向程序流,使其依据我们的意图,指向我们想要它执行的程序位置。

这个任务通常表现为两种形式: 1、一系列控制描述语句(对于每一个操作码);2、使用一个地址跳转表。 我放弃了第一种选择。因为P-Code中各不相同的操作码实在太多,这将需要一个巨大的条件控制结构(处理这样的工作将变成世界上最慢的事情)。 我猜VB虚拟机对P-Code的翻译转换过程采用的是地址跳转表方法去解释那些可能的操作代码。 这种做法同样出现在我设计的反汇编器中。 现在,我必须完成以下的工作:

- 定位缓存区中待解释的操作码,定位跳转地址表

我设计并且编译了一个小VB应用程序:

Private Sub Form_Load()

MsgBox "Hello this is P-Code!!!", VBInformation, "Example"

End Sub

我通过SoftICE的符号载入器(symbol loader)调入MSVBVM60.DLL (VB6虚拟机) ,设置BPX on _rtcMsgBox。 当SoftICE 中断时,我按 F12返回调用 _rtcMsgBox 的代码:

call eax  // 调用 rtcMsgBoxcmp edi,esp  // 我们在此jnz 66105595  // 检查堆栈指针xor eax,eax  // 准备寄存器 eax 去调用缓存区中的下一个操作码mov al,[ESI]  // 在al中装入待执行的操作码, 上面的演示中,它是36hinc ESI  // 增加指针偏移量(在 ESI 寄存器中)jmp [eax*4 660FDA58]  // 跳转到解释伪指令操作码 36h 的处理程序

  • ​windows操作系统快捷键 电脑系统命令有哪些快捷键?

    ​windows操作系统快捷键 电脑系统命令有哪些快捷键?

    一、常见用法:F1 显示当前程序或者windows的帮助内容。F2 当你选中一个文件的话,这意味着“重命名”F3 当你在桌面上的时候是打开“查找:所有文件” 对话框F10或ALT激活当前程序的菜单栏windows键或CTRL+ES

    详情2018-02-24 15:08:42责编:llp   来源:驱动管家     
  • 哪些电脑容易被黑客入侵3389端口?防范黑客入侵3389端口的办法

    哪些电脑容易被黑客入侵3389端口?防范黑客入侵3389端口的办法

    你的ADSL用户名和密码不安全刚刚上网看了会儿新闻,和朋友聊了聊天。之后打游戏的时候,发现比平时要卡,不知道是什么原因,难道是网络问题吗?不管它了。听同事说美剧《英雄》不错,准备今天晚上不关机了,把它

    详情2018-01-11 09:03:49责编:llp   来源:驱动管家     
  • 什么是爆破?怎么修改跳转指令?

    什么是爆破?怎么修改跳转指令?

    从本章开始,我们来一步一步学习Crack软件(80%读者昏死过去,且不省人世 另有20%在寻找附近可以用来打人的东西)不可不说一下学习破解的三个阶段:初级,修改程序,用ultraedit等工具修改exe文件,称暴力破解,简

    详情2018-02-05 17:57:33责编:llp   来源:驱动管家     
  • 百度知道漏洞 百度知道存在反射型xss漏洞怎么办?

    百度知道漏洞 百度知道存在反射型xss漏洞怎么办?

    百度知道百度知道存在反射型XSS,可以做诱惑点击导致蠕虫。http: zhidao baidu com utask qb info?callback=1 加强过滤。2 JSON接口存在风险:JSON接口需要设置Co

    详情2018-02-05 09:31:22责编:llp   来源:驱动管家     
  • netstat命令各种代码有什么功能?

    netstat命令各种代码有什么功能?

    Linux系统用netstat命令查看DDOS攻击具体命令用法如下:复制代码代码如下:netstat -na显示所有连接到服务器的活跃的网络连接复制代码代码如下:netstat -an | grep :80 | sort只显示连接到80段口的活跃的网

    详情2018-03-03 13:06:18责编:llp   来源:驱动管家     
  • 网络安全工具推荐 总结75个最佳网络安全工具

    网络安全工具推荐 总结75个最佳网络安全工具

    由于只有介绍,所以就不贴到工具版了。而来源的文章在结尾处的URL没有处理好,所以我也就花了几分钟修复了一下。信息来源:猪头党乐园因为是在nmap-hackers邮件列表中做出的评选,因此没有把nmap安全扫描器(http

    详情2018-02-10 13:10:35责编:llp   来源:驱动管家     
  • 怎么利用microsoft sql server 2000入侵服务器获得主机的命令?

    怎么利用microsoft sql server 2000入侵服务器获得主机的命令?

    怎么利用microsoft sql server 2000入侵服务器获得主机的命令?有以下的步骤。一、首先确保得到数据库超级管理员权限二、然后执行如下SQL命令:1、exec master dbo xp_cmdshell & 39;net user hacker hack

    详情2018-01-23 09:28:19责编:llp   来源:驱动管家     
  • 得到nt的管理员密码有哪些入侵手法可以用?

    得到nt的管理员密码有哪些入侵手法可以用?

    现在的企业当中一般都是使用的NT系统,也不得不承认,NT系统的确是非常适合企业使用的操作系统,然而“黑客”的攻击引来了企业信息安全危机……得到了NT的管理员密码还能做什么,还不是想做什么就做什么呗。但到

    详情2018-03-05 17:45:50责编:llp   来源:驱动管家     
  • ajax教程 怎么安全检测ajax模块化的web程序?

    ajax教程 怎么安全检测ajax模块化的web程序?

    AJAX可以让数据在后台无声无息地进行,假如有办法让你的JS脚本与这个AJAX模块在同域内的话,那可以使用这个XSS来完成二次攻击,并且可以通过XHR对象的status属性来判断返回结果的正确与否。GET型的AJAX,直接构造

    详情2018-01-14 11:16:24责编:llp   来源:驱动管家     
  • 怎么做后台deamon来控制安全访问?这里有个后台脚本

    怎么做后台deamon来控制安全访问?这里有个后台脚本

    系统为了某些功能必须要提供一些服务(不论是系统本身还是网络方面),这个服务就称为service。而实现这个service的程序我们就称它为daemon。实现某个服务是需要一个daemon在后台中运行,没有这个daemon就不会有s

    详情2018-02-02 14:59:08责编:llp   来源:驱动管家