欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]VBA逆向初探

[原创]VBA逆向初探

VBA逆向的资料很难找,VB的能找到一些,VB历史已久远,价值可能不是很高,再研究价值可能不是很高。本文是本人研究的...不一定正确,当是抛砖引玉,边研究,边修改。想到什么,研究什么,就写什么。
      本文以ACCESS 2000 的VBA 为研究对象。
     以下开始,
     1.access 2000 的文件MDB MDE是以4K,4096字节对齐,下面一个4096字节叫页。有点意思,一些文件系统也是4K对齐?是不是有关系?
     2.access 2000 的VBA代码是存储在 msaccessobject表。和其他表存放方式似乎不同。在ACCESS 打开隐藏的系统表可以看到,导出就有问题。
     用MDBTOOLS不支持VBA对象。
     所以没有能真正用的工具。只能DIY。
     很容易就可以找到存放VBA代码的页。
     数据一般从页的0X5D 开始,到页0ff4结束。
    0x04是一个DWORD的类型。代表VBA数据定义页.
    ff5是一个DWORD的类型。是代表的当前多少页。
    根据任何一个VBA数据页,可以找VBA数据定义页,根据数据定义页,遍历MDE所有页,简单的C语言写个代码就可以dump出vba的数据。
    3.变量,VBA的P-CODE 应该是能找到数据定义类型的。可以逆向CodeProtector这个软件看看。
    4.函数,VBA的函数之前有一个DWORD,代表函数的长度.
      一般是0x00 largeboss的代码开始。
     可以在vbe6.dll下switch() 的断点。VBE6.DLL 版本6.0.84.35 。
    base 在 65080688
   lead1(fb) 在  65080a88
   lead2(fc) 在  650800e88
   lead3(fd) 在 65081288
   lead4(fe) 在 65081688
   lead(ff) 在 65081a88
    VBA虚拟机的IP是使用ESI。嗯嗯,调试的时候跟随[ESI]的数据,避免跟丢了。
    5.thiscall
    thiscall的指令码为0x10 要特别小心,跟踪进去,会调用this的方法。可以dump出来,反编译.
    有个CALL,跟进去,会改变[ESI]的数据,也就是虚拟机的指令。这时候就到了thiscall 的子程序里面。
    退出子函数时,会pop ESI,这时会到了 父函数。
   
    6.反编译
    反编译vb的不少,vba的很少。基本只能自己写点小工具反汇编。有很多开源的代码可以利用。
网上找的VB的P-CODE 基本不能用,有些事加密的。这份P-CODE指令,是我自己修改过的。只适用VBE6.DLL还有部分指令,未完成逆向。根据这份指令,自己完全可写一个反汇编的程序出来。很简单。
OPCODES.TXT
这个帖子是探索逆向VBA的PCODE,逆向VBA程序的算法,想破解ACCESS密码的请无视。
...未完...待续,待修改.

上传的附件 OPCODES.TXT

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功