1. VB代码如下所示
 00401FF0   > ?            push ebp
00401FF1 . 8BEC mov ebp,esp
00401FF3 . 83EC 0C sub esp,0xC
00401FF6 . push <jmp.&MSVBVM50.__vbaExceptHandler> ; SE handler installation
00401FFB . :A1 >mov eax,dword ptr fs:[]
. push eax
. : >mov dword ptr fs:[],esp
. 81EC sub esp,0x118
0040200F . push ebx
. 8B5D mov ebx,dword ptr ss:[ebp+0x8]
. 8BC3 mov eax,ebx
. push esi ; msvbvm50.__vbaVarMove
. 83E3 FE and ebx,0xFFFFFFFE
. push edi ; msvbvm50.__vbaFreeVarList
0040201A . F4 mov dword ptr ss:[ebp-0xC],esp
0040201D . 83E0 and eax,0x1
. 8B3B mov edi,dword ptr ds:[ebx]
. C745 F8 >mov dword ptr ss:[ebp-0x8],Andréna.
. push ebx
0040202A . FC mov dword ptr ss:[ebp-0x4],eax
0040202D . 895D mov dword ptr ss:[ebp+0x8],ebx
. FF57 call dword ptr ds:[edi+0x4]
. 33F6 xor esi,esi ; msvbvm50.__vbaVarMove
. push ebx
. DC mov dword ptr ss:[ebp-0x24],esi ; msvbvm50.__vbaVarMove
. CC mov dword ptr ss:[ebp-0x34],esi ; msvbvm50.__vbaVarMove
0040203C . BC mov dword ptr ss:[ebp-0x44],esi ; msvbvm50.__vbaVarMove
0040203F . AC mov dword ptr ss:[ebp-0x54],esi ; msvbvm50.__vbaVarMove
. A8 mov dword ptr ss:[ebp-0x58],esi ; msvbvm50.__vbaVarMove
. A4 mov dword ptr ss:[ebp-0x5C],esi ; msvbvm50.__vbaVarMove
. mov dword ptr ss:[ebp-0x6C],esi ; msvbvm50.__vbaVarMove
0040204B . mov dword ptr ss:[ebp-0x7C],esi ; msvbvm50.__vbaVarMove
0040204E . 89B5 74FFFFFF mov dword ptr ss:[ebp-0x8C],esi ; msvbvm50.__vbaVarMove
. 89B5 64FFFFFF mov dword ptr ss:[ebp-0x9C],esi ; msvbvm50.__vbaVarMove
0040205A . 89B5 54FFFFFF mov dword ptr ss:[ebp-0xAC],esi ; msvbvm50.__vbaVarMove
. 89B5 44FFFFFF mov dword ptr ss:[ebp-0xBC],esi ; msvbvm50.__vbaVarMove
. 89B5 14FFFFFF mov dword ptr ss:[ebp-0xEC],esi ; msvbvm50.__vbaVarMove
0040206C . 89B5 F8FEFFFF mov dword ptr ss:[ebp-0x108],esi ; msvbvm50.__vbaVarMove
. 89B5 E8FEFFFF mov dword ptr ss:[ebp-0x118],esi ; msvbvm50.__vbaVarMove
. FF97 FC020000 call dword ptr ds:[edi+0x2FC]
0040207E . 8D4D A4 lea ecx,dword ptr ss:[ebp-0x5C]
. push eax
. push ecx
. FF15 call dword ptr ds:[<&MSVBVM50.__vbaObjSet>] ; msvbvm50.__vbaObjSet
. 8BD8 mov ebx,eax
0040208B . 8D45 A8 lea eax,dword ptr ss:[ebp-0x58]
0040208E . push eax
0040208F . push ebx
. 8B13 mov edx,dword ptr ds:[ebx]
. FF92 A0000000 call dword ptr ds:[edx+0xA0] ; Andréna.00401A24
. 3BC6 cmp eax,esi ; msvbvm50.__vbaVarMove
0040209A . 7D jge short Andréna.004020AE
0040209C . A0000000 push 0xA0
004020A1 . 201C4000 push Andréna.00401C20
004020A6 . push ebx
004020A7 . push eax
004020A8 . FF15 call dword ptr ds:[<&MSVBVM50.__vbaHresultCheckObj>] ; msvbvm50.__vbaHresultCheckObj
004020AE > 8B45 A8 mov eax,dword ptr ss:[ebp-0x58] ; 用户名 0012f488=00ebcbdc='wlp'
004020B1 . A8 mov dword ptr ss:[ebp-0x58],esi ; 00ebcbdc='wlp'
004020B4 . 8B35 FC404000 mov esi,dword ptr ds:[<&MSVBVM50.__vbaVarMove>] ; msvbvm50.__vbaVarMove
004020BA . 8D55 lea edx,dword ptr ss:[ebp-0x6C] ; edx=0012f474
004020BD . 8D4D BC lea ecx,dword ptr ss:[ebp-0x44] ; ecx=0012f49c
004020C0 . 9C mov dword ptr ss:[ebp-0x64],eax ; 0012f47c=00ebcbdc='wlp'
004020C3 . C745 >mov dword ptr ss:[ebp-0x6C],0x8 ; 0012f474
004020CA . FFD6 call esi ; msvbvm50.__vbaVarMove; <&MSVBVM50.__vbaVarMove>
004020CC . 8D4D A4 lea ecx,dword ptr ss:[ebp-0x5C] ; 上述函数交换ecx,eax .ecx=0012f484
004020CF . FF15 B4414000 call dword ptr ds:[<&MSVBVM50.__vbaFreeObj>] ; msvbvm50.__vbaFreeObj
004020D5 . B8 mov eax,0x1 ; eax=1
004020DA . 8D8D 54FFFFFF lea ecx,dword ptr ss:[ebp-0xAC] ; ecx=0012f434
004020E0 . 5CFFFFFF mov dword ptr ss:[ebp-0xA4],eax ; 0012f43c=eax=1
004020E6 . 4CFFFFFF mov dword ptr ss:[ebp-0xB4],eax ; 0012f42c=eax=1
004020EC . 8D55 BC lea edx,dword ptr ss:[ebp-0x44] ; edx=0012f49c
004020EF . push ecx
004020F0 . 8D45 lea eax,dword ptr ss:[ebp-0x6C] ; eax=0012f474
004020F3 . BB mov ebx,0x2
004020F8 . push edx
004020F9 . push eax
004020FA . 899D 54FFFFFF mov dword ptr ss:[ebp-0xAC],ebx ; 已知ebx=2
. 899D 44FFFFFF mov dword ptr ss:[ebp-0xBC],ebx
. FF15 call dword ptr ds:[<&MSVBVM50.__vbaLenVar>] ; msvbvm50.__vbaLenVar
0040210C . 8D8D 44FFFFFF lea ecx,dword ptr ss:[ebp-0xBC] ; ecx=序列号长度+1
. push eax
. 8D95 E8FEFFFF lea edx,dword ptr ss:[ebp-0x118]
. push ecx
0040211A . 8D85 F8FEFFFF lea eax,dword ptr ss:[ebp-0x108]
. push edx
. 8D4D DC lea ecx,dword ptr ss:[ebp-0x24]
. push eax
. push ecx
. FF15 call dword ptr ds:[<&MSVBVM50.__vbaVarForInit>] ; msvbvm50.__vbaVarForInit
0040212C . 8B3D mov edi,dword ptr ds:[<&MSVBVM50.__vbaFreeVarList>] ; msvbvm50.__vbaFreeVarList
> 85C0 test eax,eax ; 循环开始judge
. 0F84 9C000000 je Andréna.004021D6
0040213A . 8D55 lea edx,dword ptr ss:[ebp-0x6C] ; 寄存器赋予栈地址 edx=0012f474
0040213D . 8D45 DC lea eax,dword ptr ss:[ebp-0x24] ; eax=0012f4bc
. push edx
. push eax
. C745 9C >mov dword ptr ss:[ebp-0x64],0x1 ; 0012f47c=1
. 895D mov dword ptr ss:[ebp-0x6C],ebx ; 0012f474=ebx=02
0040214C . FF15 call dword ptr ds:[<&MSVBVM50.__vbaI4Var>] ; msvbvm50.__vbaI4Var
. 8D4D BC lea ecx,dword ptr ss:[ebp-0x44] ; ecx=0012f49c
. push eax ; eax=1
. 8D55 lea edx,dword ptr ss:[ebp-0x7C] ; edx=0012f464
. push ecx
0040215A . push edx
0040215B . FF15 call dword ptr ds:[<&MSVBVM50.#>] ; msvbvm50.rtcMidCharVar
. 8D45 lea eax,dword ptr ss:[ebp-0x7C]
. 8D4D A8 lea ecx,dword ptr ss:[ebp-0x58]
. push eax
. push ecx
. FF15 call dword ptr ds:[<&MSVBVM50.__vbaStrVarVal>] ; msvbvm50.__vbaStrVarVal
0040216F . push eax ; eax='w'取值
. FF15 0C414000 call dword ptr ds:[<&MSVBVM50.#>] ; msvbvm50.rtcAnsiValueBstr
. : 4CFFF>mov word ptr ss:[ebp-0xB4],ax ; Unicode转变ansi,返回值eax
0040217D . 8D55 CC lea edx,dword ptr ss:[ebp-0x34]
. 8D85 44FFFFFF lea eax,dword ptr ss:[ebp-0xBC]
. push edx
. 8D8D 74FFFFFF lea ecx,dword ptr ss:[ebp-0x8C]
0040218D . push eax
0040218E . push ecx
0040218F . 899D 44FFFFFF mov dword ptr ss:[ebp-0xBC],ebx ; 下列函数的返回值寄存在ecx
. FF15 call dword ptr ds:[<&MSVBVM50.__vbaVarAdd>] ; msvbvm50.__vbaVarAdd
0040219B . 8BD0 mov edx,eax
0040219D . 8D4D CC lea ecx,dword ptr ss:[ebp-0x34]
004021A0 . FFD6 call esi ; msvbvm50.__vbaVarMove
004021A2 . 8D4D A8 lea ecx,dword ptr ss:[ebp-0x58] ; 修改了ecx的值
004021A5 . FF15 B8414000 call dword ptr ds:[<&MSVBVM50.__vbaFreeStr>] ; msvbvm50.__vbaFreeStr
004021AB . 8D55 lea edx,dword ptr ss:[ebp-0x7C]
004021AE . 8D45 lea eax,dword ptr ss:[ebp-0x6C]
004021B1 . push edx
004021B2 . push eax
004021B3 . push ebx
004021B4 . FFD7 call edi ; msvbvm50.__vbaFreeVarList
004021B6 . 83C4 0C add esp,0xC
004021B9 . 8D8D E8FEFFFF lea ecx,dword ptr ss:[ebp-0x118]
004021BF . 8D95 F8FEFFFF lea edx,dword ptr ss:[ebp-0x108]
004021C5 . 8D45 DC lea eax,dword ptr ss:[ebp-0x24]
004021C8 . push ecx ; arg3
004021C9 . push edx ; arg2
004021CA . push eax ; arg1
004021CB . FF15 AC414000 call dword ptr ds:[<&MSVBVM50.__vbaVarForNext>] ; msvbvm50.__vbaVarForNext
004021D1 . E9 5CFFFFFF jmp Andréna.
004021D6 > 8D4D CC lea ecx,dword ptr ss:[ebp-0x34]
004021D9 . 8D95 54FFFFFF lea edx,dword ptr ss:[ebp-0xAC]
004021DF . push ecx ; name的计算值
004021E0 . 8D45 lea eax,dword ptr ss:[ebp-0x6C]
004021E3 . push edx ; arg2
004021E4 . push eax ; arg1
004021E5 . C785 5CFFFFFF>mov dword ptr ss:[ebp-0xA4],0x499602D2 ; 把1234567890推进栈地址
004021EF . C785 54FFFFFF>mov dword ptr ss:[ebp-0xAC],0x3 ; //两变量相乘
004021F9 . FF15 5C414000 call dword ptr ds:[<&MSVBVM50.__vbaVarMul>] ; msvbvm50.__vbaVarMul
004021FF . 8BD0 mov edx,eax
. 8D4D CC lea ecx,dword ptr ss:[ebp-0x34]
. FFD6 call esi ; msvbvm50.__vbaVarMove
. 8B1D A0414000 mov ebx,dword ptr ds:[<&MSVBVM50.__vbaMidStmtVar>] ; msvbvm50.__vbaMidStmtVar
0040220C . 8D4D CC lea ecx,dword ptr ss:[ebp-0x34]
0040220F . push ecx
. 6A push 0x4
. 8D95 54FFFFFF lea edx,dword ptr ss:[ebp-0xAC]
. 6A push 0x1
0040221A . push edx
0040221B . C785 5CFFFFFF>mov dword ptr ss:[ebp-0xA4],Andréna.00401C34 ; UNICODE "-"
. C785 54FFFFFF>mov dword ptr ss:[ebp-0xAC],0x8
0040222F . FFD3 call ebx ; <&MSVBVM50.__vbaMidStmtVar>
. 8D45 CC lea eax,dword ptr ss:[ebp-0x34]
. 8D8D 54FFFFFF lea ecx,dword ptr ss:[ebp-0xAC]
0040223A . push eax
0040223B . 6A push 0x9
0040223D . 6A push 0x1
0040223F . push ecx
. C785 5CFFFFFF>mov dword ptr ss:[ebp-0xA4],Andréna.00401C34 ; UNICODE "-"
0040224A . C785 54FFFFFF>mov dword ptr ss:[ebp-0xAC],0x8
. FFD3 call ebx
. 8B45 mov eax,dword ptr ss:[ebp+0x8] ; 取字符串(string, start, num)
. push eax
0040225A . 8B10 mov edx,dword ptr ds:[eax]
0040225C . FF92 call dword ptr ds:[edx+0x304]
. push eax
. 8D45 A4 lea eax,dword ptr ss:[ebp-0x5C]
. push eax
. FF15 call dword ptr ds:[<&MSVBVM50.__vbaObjSet>] ; msvbvm50.__vbaObjSet
0040226D . 8BD8 mov ebx,eax
0040226F . 8D55 A8 lea edx,dword ptr ss:[ebp-0x58]
. push edx
. push ebx
. 8B0B mov ecx,dword ptr ds:[ebx]
. FF91 A0000000 call dword ptr ds:[ecx+0xA0]
0040227C . 85C0 test eax,eax
0040227E . 7D jge short Andréna.
. A0000000 push 0xA0
. 201C4000 push Andréna.00401C20
0040228A . push ebx
0040228B . push eax
0040228C . FF15 call dword ptr ds:[<&MSVBVM50.__vbaHresultCheckObj>] ; msvbvm50.__vbaHresultCheckObj
> 8B45 A8 mov eax,dword ptr ss:[ebp-0x58]
. 8D4D CC lea ecx,dword ptr ss:[ebp-0x34]
. 9C mov dword ptr ss:[ebp-0x64],eax
0040229B . 8D45 lea eax,dword ptr ss:[ebp-0x6C] ; lea指令用于取变量的地址
0040229E . push eax
0040229F . push ecx
004022A0 . C745 A8 >mov dword ptr ss:[ebp-0x58],0x0
004022A7 . C745 >mov dword ptr ss:[ebp-0x6C],0x8008
004022AE . FF15 call dword ptr ds:[<&MSVBVM50.__vbaVarTstEq>] ; msvbvm50.__vbaVarTstEq
004022B4 . 8D4D A4 lea ecx,dword ptr ss:[ebp-0x5C]
004022B7 . 8BD8 mov ebx,eax
004022B9 . FF15 B4414000 call dword ptr ds:[<&MSVBVM50.__vbaFreeObj>] ; msvbvm50.__vbaFreeObj
004022BF . 8D4D lea ecx,dword ptr ss:[ebp-0x6C]
004022C2 . FF15 call dword ptr ds:[<&MSVBVM50.__vbaFreeVar>] ; msvbvm50.__vbaFreeVar
004022C8 . :85DB test bx,bx
004022CB . 0F84 C0000000 je Andréna. ; 注册码关键跳
004022D1 . FF15 call dword ptr ds:[<&MSVBVM50.#>] ; msvbvm50.rtcBeep
004022D7 . 8B1D mov ebx,dword ptr ds:[<&MSVBVM50.__vbaVarDup>] ; msvbvm50.__vbaVarDup
004022DD . B9 mov ecx,0x80020004
004022E2 . 898D 6CFFFFFF mov dword ptr ss:[ebp-0x94],ecx
004022E8 . B8 0A000000 mov eax,0xA
004022ED . 898D 7CFFFFFF mov dword ptr ss:[ebp-0x84],ecx
004022F3 . 8D95 44FFFFFF lea edx,dword ptr ss:[ebp-0xBC]
004022F9 . 8D4D lea ecx,dword ptr ss:[ebp-0x7C]
004022FC . 64FFFFFF mov dword ptr ss:[ebp-0x9C],eax
. 74FFFFFF mov dword ptr ss:[ebp-0x8C],eax
. C785 4CFFFFFF>mov dword ptr ss:[ebp-0xB4],Andréna.00401CA8 ; UNICODE "RiCHTiG !"
. C785 44FFFFFF>mov dword ptr ss:[ebp-0xBC],0x8
0040231C . FFD3 call ebx ; <&MSVBVM50.__vbaVarDup>
0040231E . 8D95 54FFFFFF lea edx,dword ptr ss:[ebp-0xAC]

一般情况分析VB程序,需要观察OD里面的汇编代码,栈区域,以及数据区域。在分析的过程中会大量的使用地址来传递参数(经常会有地址的地址这种方法来操作),要想真正能理解,那还是需要多做一些练习。

汇编学习二-VB(常见函数分析)的更多相关文章

  1. FFmpeg 结构体学习(二): AVStream 分析

    在上文FFmpeg 结构体学习(一): AVFormatContext 分析我们学习了AVFormatContext结构体的相关内容.本文,我们将讲述一下AVStream. AVStream是存储每一 ...

  2. FFmpeg 结构体学习(三): AVPacket 分析

    在上文FFmpeg 结构体学习(二): AVStream 分析我们学习了AVStream结构体的相关内容.本文,我们将讲述一下AVPacket. AVPacket是存储压缩编码数据相关信息的结构体.下 ...

  3. Quartz学习--二 Hello Quartz! 和源码分析

    Quartz学习--二  Hello Quartz! 和源码分析 三.  Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...

  4. 个人作业2 — 英语学习APP的案例分析

    一.调研准备:   1.软件:必应词典   2.平台:安卓   3.bug定义:(引用自<构建之法>13.1节)    Bug:软件的缺陷    Bug可以分解为:症状(Symptom). ...

  5. FFmpeg 结构体学习(四): AVFrame 分析

    在上文FFmpeg 结构体学习(三): AVPacket 分析我们学习了AVPacket结构体的相关内容.本文,我们将讲述一下AVFrame. AVFrame是包含码流参数较多的结构体.下面我们来分析 ...

  6. FFmpeg 结构体学习(五): AVCodec 分析

    在上文FFmpeg 结构体学习(四): AVFrame 分析我们学习了AVFrame结构体的相关内容.本文,我们将讲述一下AVCodec. AVCodec是存储编解码器信息的结构体.下面我们来分析一下 ...

  7. FFmpeg 结构体学习(六): AVCodecContext 分析

    在上文FFmpeg 结构体学习(五): AVCodec 分析我们学习了AVCodec结构体的相关内容.本文,我们将讲述一下AVCodecContext. AVCodecContext是包含变量较多的结 ...

  8. FFmpeg 结构体学习(七): AVIOContext 分析

    在上文FFmpeg 结构体学习(六): AVCodecContext 分析我们学习了AVCodec结构体的相关内容.本文,我们将讲述一下AVIOContext. AVIOContext是FFMPEG管 ...

  9. 汇编实现: C库常见函数,串操作指令作用

    目录 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 二丶loads实现Strlen操作. 三丶stos的作用 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 void _ ...

随机推荐

  1. Codeforces Round #295 (Div. 2) B. Two Buttons 520B

    B. Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  2. 盘点Linux运维常用工具(一)-web篇之httpd

    #前言:想把自己学的各种服务进行分类归档起来,于是就写了盘点Linux运维常用工具,Linux方面使用到的web应用服务有httpd(apache).nginx.tomcat.lighttpd,先了解 ...

  3. 解决IOS下window.open页面打不开问题

    问题如标题所写,在ajax回调里面拿到即将要跳转的链接url,使用window.open(linkUrl),没有起作用,而且代码也没有报错,查找原因是:大部分现代的浏览器(Chome/Firefox/ ...

  4. 10个机器学习人工智能开发框架和AI库(优缺点对比表)/贪心学院

    概述 通过本文我们来一起看一些用于人工智能的高质量AI库,它们的优点和缺点,以及它们的一些特点. 人工智能(AI)已经存在很长时间了.然而,由于这一领域的巨大进步,近年来它已成为一个流行语.人工智能曾 ...

  5. Xcode调试之exc_bad_access以及 message sent to deallocated instance

    如果出现exc_bad_access错误,基本上是由于内存泄漏,错误释放,对一个已经释放的对象进行release操作.但是xcode有时候不会告诉你错误在什么地方(Visual Studio这点做得很 ...

  6. 关于form表单:hover没有修改表单子元素样式

    原来在写todolist的时候遇到的一个问题 是关于form表单的hover属性设置背景颜色 想要实现的效果如下: 但是一开始直接给form加hover选择器的时候是这样: 可以看到这样子直接加会使得 ...

  7. Fabric 源码学习:如何实现批量管理远程服务器?

    前不久,我写了一篇<Fabric教程>,简单来说,它是一个用 Python 开发的轻量级的远程系统管理工具,在远程登录服务器.执行 Shell 命令.批量管理服务器.远程部署等场景中,十分 ...

  8. 详解分页组件中查count总记录优化

    1 背景 研究mybatis-plus(以下简称MBP),使用其分页功能时.发现了一个JsqlParserCountOptimize的分页优化处理类,官方对其未做详细介绍,网上也未找到分析该类逻辑的只 ...

  9. go例子(二) 使用go语言实现数独游戏

    例子托管于github example.go package main import (     "./sudoku" ) func main() {     //var smap ...

  10. Java的反射基础技术

    今天本人给大家讲解一下Java的反射基础技术,如有不对的或者讲的不好的可以多多提出,我会进行相应的更改,先提前感谢提出意见的各位了!!! 什么是反射? 反射它是根据字节码文件可以反射出类的信息.字段. ...