汇编学习二-VB(常见函数分析)
- 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(常见函数分析)的更多相关文章
- FFmpeg 结构体学习(二): AVStream 分析
在上文FFmpeg 结构体学习(一): AVFormatContext 分析我们学习了AVFormatContext结构体的相关内容.本文,我们将讲述一下AVStream. AVStream是存储每一 ...
- FFmpeg 结构体学习(三): AVPacket 分析
在上文FFmpeg 结构体学习(二): AVStream 分析我们学习了AVStream结构体的相关内容.本文,我们将讲述一下AVPacket. AVPacket是存储压缩编码数据相关信息的结构体.下 ...
- Quartz学习--二 Hello Quartz! 和源码分析
Quartz学习--二 Hello Quartz! 和源码分析 三. Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...
- 个人作业2 — 英语学习APP的案例分析
一.调研准备: 1.软件:必应词典 2.平台:安卓 3.bug定义:(引用自<构建之法>13.1节) Bug:软件的缺陷 Bug可以分解为:症状(Symptom). ...
- FFmpeg 结构体学习(四): AVFrame 分析
在上文FFmpeg 结构体学习(三): AVPacket 分析我们学习了AVPacket结构体的相关内容.本文,我们将讲述一下AVFrame. AVFrame是包含码流参数较多的结构体.下面我们来分析 ...
- FFmpeg 结构体学习(五): AVCodec 分析
在上文FFmpeg 结构体学习(四): AVFrame 分析我们学习了AVFrame结构体的相关内容.本文,我们将讲述一下AVCodec. AVCodec是存储编解码器信息的结构体.下面我们来分析一下 ...
- FFmpeg 结构体学习(六): AVCodecContext 分析
在上文FFmpeg 结构体学习(五): AVCodec 分析我们学习了AVCodec结构体的相关内容.本文,我们将讲述一下AVCodecContext. AVCodecContext是包含变量较多的结 ...
- FFmpeg 结构体学习(七): AVIOContext 分析
在上文FFmpeg 结构体学习(六): AVCodecContext 分析我们学习了AVCodec结构体的相关内容.本文,我们将讲述一下AVIOContext. AVIOContext是FFMPEG管 ...
- 汇编实现: C库常见函数,串操作指令作用
目录 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 二丶loads实现Strlen操作. 三丶stos的作用 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 void _ ...
随机推荐
- 第十章、Vue项目的联调上线
抓包 Fiddler 一.解决跨域 proxyTable(查看博客总结) 二.解决用本机ip地址不能访问 在dev中加上 --host 0.0.0.0就可以用本机ip访问,这样的话可以用手机在内网(局 ...
- java中的while循环和do while循环
那么在讲解循环之前呢我们先来了解一下什么是循环 生活中的例子 车子的轮胎他就是一直在循环 马拉松跑到也是在循环 因为运动员不停的一圈一圈在跑这也是一个循环 那么我们为什么要学习循环呢? 下面看一个 ...
- 一致性hash算法之php实现
源码地址:https://github.com/killallspree/myFrame/blob/master/framework/components/Flexihash.php
- Java反射之对JavaBean的内省操作
上一篇我们说了Java反射之数组的反射应用 这篇我们来模拟实现那些javabean的框架(BeanUtils)的基本操作. [一] 什么是JavaBean JavaBean 是一种JAVA语言写成的可 ...
- django中CBV源码分析
前言:Django的视图处理方式有两种: FBV(function base views) 是在视图里基于函数形式处理请求. CBV(class base views)是在视图里基于类的形式处理请求. ...
- Netty源码分析之ChannelPipeline—出站事件的传播
上篇文章中我们梳理了ChannelPipeline中入站事件的传播,这篇文章中我们看下出站事件的传播,也就是ChannelOutboundHandler接口的实现. 1.出站事件的传播示例 我们对上篇 ...
- Altium Designer 20下载与安装教程
目录 一.Altium Designer 20下载 二.Altium Designer 20安装 三.Altium Designer 20破解 四.Altium Designer 20汉化 作者:st ...
- JVM入门必看——JVM结构
转载自:http://blog.csdn.net/yfqnihao 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让 ...
- 记 2020蓝桥杯校内预选赛(JAVA组) 赛后总结
目录 引言 结果填空 1. 签到题 2. 概念题 3. 签到题 4. 签到题 程序题 5. 递增三元组[遍历] 6. 小明的hello[循环] 7. 数位递增[数位dp] 8. 小明家的草地[bfs] ...
- 【简说Python WEB】视图函数操作数据库
目录 [简说Python WEB]视图函数操作数据库 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6.9 ...