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. 【WPF学习】第五十七章 使用代码创建故事板

    在“[WPF学习]第五十章 故事板”中讨论了如何使用代码创建简单动画,以及如何使用XAML标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...

  2. JavaScript对象(二)

    Part One:对象的三个特性 原型(prototype)  类(class) 可扩展性(extensible attribute) 1,b.isPrototypeOf(o)  //判断b是不是o的 ...

  3. sonarqube配置全指南,集成阿里巴巴p3c规范

    环境准备 内置数据库 Sonar安装成功后,默认内置H2数据库,用于记录单次的扫描结果,对同一个project重复扫码,会覆盖之前的扫描记录,所以H2 数据库只应用于测试,不可以用于生产环境,那如果你 ...

  4. java算法--普通队列

    数据结构队列 首先明确一下队列的概念. 队列是一种有序列表,使用数组的结构来存储队列的数据. 队列是一种先进先出的算法.由前端加入,由后端输出. 如下图: ​ 第一个图 第二个图 第三个图 这就是队列 ...

  5. 关于 服务器ip和域名进行一个绑定

    最近想让人访问我做个一个网站,但是我发现让服务器ip地址直接暴露不是很好 (做着玩) 于是就去阿里云买了一个5块1年的域名 先在网上百度了一下是怎么绑定域名的,发现全是含糊不清的信息,果然是垃圾百度 ...

  6. Falsk 路由简析

    添加路由 我们熟知添加路由的方式是装饰器: @app.route('/') def hello_world(): return 'Hello World!' #访问web得到 'Hello World ...

  7. redis的批量操作命令pipeline(PHP实现)

    redis执行一条命令有四个过程:发送命令.命令排队.命令执行.返回结果:整个过程是一个往返时间(RTT).如果有n条命令,就会消耗n次RTT.Redis的客户端和服务端可能部署在不同的机器上.在两地 ...

  8. treeselect 异步拿到数据后 要经过一个过滤 然后放入options 否则组件会崩溃

    事件缘由:由于城市树会反复调用,所以不用api每次调用,改用数据缓存一次读取,各处使用.然后我把调用的数据放入treeselect,发现组件就崩溃了,但是api读取的数据就没问题. 查看不是props ...

  9. debug.js在手机上打印调试信息

    在做移动端开发的时候大家应该都遇到过这么一个问题:如何在手机上打印调试信息? 在pc端我们通常会用console.log 或者 alert,但大家知道console.log在手机上是看不到打印信息的: ...

  10. JDBC 查询 模板

    JDBC 查询 与增删改不同的是SQL语句的不同,还有查询反回的是结果集  需要定义 利用 next()方法逐层查询数据 使用getXXX方法获取数据 代码相关参数根据个人设置进行修改!!!! pac ...