汇编学习-三(VB)
- 闲来无事做了一下160个crackme,因为是VB程序,所以将得到的一点心得记录如下(OD加载注释)
00401ED7 . push eax ; Andréna.004018A8
00401ED8 . FF15 call dword ptr ds:[<&MSVBVM50.__vbaHresultCheckObj>] ; msvbvm50.__vbaHresultCheckObj
00401EDE > 8B45 A8 mov eax,dword ptr ss:[ebp-0x58] ; eax=0012f488=00ed28ec='12345678'
00401EE1 . A8 mov dword ptr ss:[ebp-0x58],esi ; esi='12345678'
00401EE4 . 8B35 F8404000 mov esi,dword ptr ds:[<&MSVBVM50.__vbaVarMove>] ; msvbvm50.__vbaVarMove
00401EEA . 8D55 lea edx,dword ptr ss:[ebp-0x6C] ; edx=0012f474
00401EED . 8D4D BC lea ecx,dword ptr ss:[ebp-0x44] ; ecx=0012f49c
00401EF0 . 9C mov dword ptr ss:[ebp-0x64],eax ; 0012f47c=00ed28ec
00401EF3 . C745 mov dword ptr ss:[ebp-0x6C],0x8 ; 0012f474=8
00401EFA . FFD6 call esi ; <&MSVBVM50.__vbaVarMove>
00401EFC . 8D4D A4 lea ecx,dword ptr ss:[ebp-0x5C] ; 上述函数交换了ecx和eax ecx=0012f484=00ed28ec='12345678'
00401EFF . FF15 AC414000 call dword ptr ds:[<&MSVBVM50.__vbaFreeObj>] ; msvbvm50.__vbaFreeObj
00401F05 . B9 mov ecx,0x2 ; ecx=2
00401F0A . B8 mov eax,0x1 ; eax=1
00401F0F . 898D 54FFFFFF mov dword ptr ss:[ebp-0xAC],ecx ; 0012f434=2
00401F15 . 898D 44FFFFFF mov dword ptr ss:[ebp-0xBC],ecx ; 0012f424=2
00401F1B . 8D8D 54FFFFFF lea ecx,dword ptr ss:[ebp-0xAC] ; ecx=0012f434
00401F21 . 5CFFFFFF mov dword ptr ss:[ebp-0xA4],eax ; 0012f43c=1
00401F27 . 4CFFFFFF mov dword ptr ss:[ebp-0xB4],eax ; 0012f42c=1
00401F2D . 8D55 BC lea edx,dword ptr ss:[ebp-0x44] ; edx=0012f49c
00401F30 . push ecx
00401F31 . 8D45 lea eax,dword ptr ss:[ebp-0x6C] ; eax=0012f474
00401F34 . push edx
00401F35 . push eax ; 参数1: 8 参数2: 0012f49c(00000080)
00401F36 . FF15 call dword ptr ds:[<&MSVBVM50.__vbaLenVar>] ; msvbvm50.__vbaLenVar
00401F3C . 8D8D 44FFFFFF lea ecx,dword ptr ss:[ebp-0xBC] ; ecx=0012f424(上述函数的返回值为ecx)
00401F42 . push eax ; Andréna.004018A8
00401F43 . 8D95 ECFEFFFF lea edx,dword ptr ss:[ebp-0x114]
00401F49 . push ecx
00401F4A . 8D85 FCFEFFFF lea eax,dword ptr ss:[ebp-0x104] ; eax=0012f3dc
00401F50 . push edx
00401F51 . 8D4D DC lea ecx,dword ptr ss:[ebp-0x24] ; ecx=0012F4bc
00401F54 . push eax ; Andréna.004018A8
00401F55 . push ecx ; 参数1:0 参数2:0 参数3:0 参数4:2 参数5:03 参数6:2
00401F56 . FF15 1C414000 call dword ptr ds:[<&MSVBVM50.__vbaVarForInit>] ; msvbvm50.__vbaVarForInit
00401F5C . 8B1D mov ebx,dword ptr ds:[<&MSVBVM50.__vbaVarCat>] ; msvbvm50.__vbaVarCat
00401F62 . 8B3D mov edi,dword ptr ds:[<&MSVBVM50.__vbaFreeVarList>] ; msvbvm50.__vbaFreeVarList
00401F68 > 85C0 test eax,eax ; eax=1,ecx=3,edx=9
00401F6A . 0F84 BB000000 je Andréna.0040202B
00401F70 . 8D55 lea edx,dword ptr ss:[ebp-0x6C] ; edx=0012f474
00401F73 . 8D45 DC lea eax,dword ptr ss:[ebp-0x24] ; eax=0012f4bc
00401F76 . push edx
00401F77 . push eax ; Andréna.004018A8
00401F78 . C745 9C mov dword ptr ss:[ebp-0x64],0x1 ; 0012f47c=1
00401F7F . C745 mov dword ptr ss:[ebp-0x6C],0x2 ; 0012f474=2
00401F86 . FF15 call dword ptr ds:[<&MSVBVM50.__vbaI4Var>] ; msvbvm50.__vbaI4Var
00401F8C . 8D4D BC lea ecx,dword ptr ss:[ebp-0x44] ; ecx=0012f49c
00401F8F . push eax ; eax=1
00401F90 . 8D55 lea edx,dword ptr ss:[ebp-0x7C] ; edx=0012f4bc
00401F93 . push ecx
00401F94 . push edx ; 参数1:0 参数2:8 参数3:1 参数4:2
00401F95 . FF15 call dword ptr ds:[<&MSVBVM50.#>] ; msvbvm50.rtcMidCharVar
00401F9B . 8D45 lea eax,dword ptr ss:[ebp-0x7C] ; eax=0012f464
00401F9E . 8D4D A8 lea ecx,dword ptr ss:[ebp-0x58] ; ecx=0012f488
00401FA1 . push eax ; Andréna.004018A8
00401FA2 . push ecx ; 参数1:0 参数2:(0012f0008)0
00401FA3 . FF15 call dword ptr ds:[<&MSVBVM50.__vbaStrVarVal>] ; msvbvm50.__vbaStrVarVal
00401FA9 . push eax ; eax=00f556fc='1'(下列函数eax)
00401FAA . FF15 call dword ptr ds:[<&MSVBVM50.#>] ; msvbvm50.rtcAnsiValueBstr
00401FB0 . : 0A00 add ax,0xA ; ax+=0xA
00401FB4 . 0F80 B0020000 jo Andréna.0040226A
00401FBA . 0FBFD0 movsx edx,ax ; edx=00f556fe,ax=003B
00401FBD . push edx ; 参数1:0x3b 参数2:(0012f4ec->0012f4fc)
00401FBE . FF15 call dword ptr ds:[<&MSVBVM50.#>] ; msvbvm50.rtcBstrFromAnsi
00401FC4 . 7CFFFFFF mov dword ptr ss:[ebp-0x84],eax ; 0012f45c=00f4d41c=';'
00401FCA . 8D45 CC lea eax,dword ptr ss:[ebp-0x34] ; eax=0012f4ac
00401FCD . 8D8D 74FFFFFF lea ecx,dword ptr ss:[ebp-0x8C] ; ecx=0012f454
00401FD3 . push eax ; Andréna.004018A8
00401FD4 . 8D95 64FFFFFF lea edx,dword ptr ss:[ebp-0x9C] ; edx=0012f444
00401FDA . push ecx
00401FDB . push edx
00401FDC . C785 74FFFFFF >mov dword ptr ss:[ebp-0x8C],0x8 ; 0012f454=8
00401FE6 . FFD3 call ebx
00401FE8 . 8BD0 mov edx,eax ; eax=0012f444
00401FEA . 8D4D CC lea ecx,dword ptr ss:[ebp-0x34] ; ecx=0012f4ac
00401FED . FFD6 call esi
00401FEF . 8D4D A8 lea ecx,dword ptr ss:[ebp-0x58] ; ecx=0012f488
00401FF2 . FF15 B0414000 call dword ptr ds:[<&MSVBVM50.__vbaFreeStr>] ; msvbvm50.__vbaFreeStr
00401FF8 . 8D85 74FFFFFF lea eax,dword ptr ss:[ebp-0x8C]
00401FFE . 8D4D lea ecx,dword ptr ss:[ebp-0x7C]
. push eax ; Andréna.004018A8
. 8D55 lea edx,dword ptr ss:[ebp-0x6C]
. push ecx
. push edx
. 6A push 0x3
. FFD7 call edi
0040200B . 83C4 add esp,0x10
0040200E . 8D85 ECFEFFFF lea eax,dword ptr ss:[ebp-0x114]
. 8D8D FCFEFFFF lea ecx,dword ptr ss:[ebp-0x104]
0040201A . 8D55 DC lea edx,dword ptr ss:[ebp-0x24]
0040201D . push eax ; Andréna.004018A8
0040201E . push ecx
0040201F . push edx
. FF15 A4414000 call dword ptr ds:[<&MSVBVM50.__vbaVarForNext>] ; msvbvm50.__vbaVarForNext
.^ E9 3DFFFFFF jmp Andréna.00401F68
0040202B > 8D45 CC lea eax,dword ptr ss:[ebp-0x34] ; eax=0012f4ac
0040202E . 8D8D 54FFFFFF lea ecx,dword ptr ss:[ebp-0xAC] ; ecx=0012f434
. push eax ; Andréna.004018A8
. push ecx
. C785 5CFFFFFF 8C1A40>mov dword ptr ss:[ebp-0xA4],Andréna.00401A8C ; UNICODE "kXy^rO|*yXo*m\kMuOn*+"
. C785 54FFFFFF >mov dword ptr ss:[ebp-0xAC],0x8008 ; 0012f434=0x8008
0040204A . FF15 call dword ptr ds:[<&MSVBVM50.__vbaVarTstEq>] ; msvbvm50.__vbaVarTstEq
. :85C0 test ax,ax
. 0F84 C0000000 je Andréna.
. FF15 6C414000 call dword ptr ds:[<&MSVBVM50.#>] ; msvbvm50.rtcBeep
0040205F . 8B1D mov ebx,dword ptr ds:[<&MSVBVM50.__vbaVarDup>] ; msvbvm50.__vbaVarDup
. B9 0A000000 mov ecx,0xA在分析VB的时候应该具体的了解到地址调用,善于追根朔源,从栈地址到具体的内容(data)。清楚每个函数的参数。
汇编学习-三(VB)的更多相关文章
- 汇编学习二-VB(常见函数分析)
VB代码如下所示 push ebp 00401FF1 . 8BEC mov ebp,esp 00401FF3 . 83EC 0C sub esp,0xC push <jmp.&MSVBV ...
- arm汇编学习(三)
一.ndk编译android上运行的c程序 新建个hello目录,底下要有jni目录,下面就是Android.mk文件 1.Android.mk文件内容如下: LOCAL_PATH:= $(call ...
- MIPS汇编学习
MIPS汇编学习 mips汇编不同于x86汇编,属于精简指令集,常见于路由器等一些嵌入式设备中. mips汇编没有对堆栈的直接操作,也就是没有push和pop指令,mips汇编中保留了32个通用寄存器 ...
- HTTP学习三:HTTPS
HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...
- TweenMax动画库学习(三)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) ...
- 汇编学习笔记(11)int指令和端口
格式 int指令也是一种内中断指令,int指令的格式为int n,n是中断类型码.也就是说,使用int指令可以调用任意的中断例程,例如我们可以显示的调用0号中断例程,还记得在汇编学习笔记(10)中我们 ...
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
- 4.机器学习——统计学习三要素与最大似然估计、最大后验概率估计及L1、L2正则化
1.前言 之前我一直对于“最大似然估计”犯迷糊,今天在看了陶轻松.忆臻.nebulaf91等人的博客以及李航老师的<统计学习方法>后,豁然开朗,于是在此记下一些心得体会. “最大似然估计” ...
- DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
随机推荐
- 【asp.net core】实现动态 Web API
序言: 远程工作已经一个月了,最近也算是比较闲,每天早上起床打个卡,快速弄完当天要做的工作之后就快乐摸鱼去了.之前在用 ABP 框架(旧版)的时候就觉得应用服务层写起来真的爽,为什么实现了个 IApp ...
- 解决Hexo博客模板hexo-theme-next的翻页按钮不正常显示问题
用Hexo搭了个Gitpage的博客,兴冲冲的发了11篇博文后发现翻页按钮不正常显示,显示为<i class="fa fa-angle-right"></i> ...
- 必备技能六、Vue框架引入JS库的正确姿势
在Vue.js应用中,可能需要引入Lodash,Moment,Axios,Async等非常好用的JavaScript库.当项目变得复杂庞大,通常会将代码进行模块化拆分.可能还需要跑在不同的环境下,比如 ...
- 数据结构 4 时间复杂度、B-树 B+树 具体应用与理解
前言 面试中,经常会问到有关于MYSQL 索引的相关概念,我们之前也都学过有关树的概念.以及二叉树.二叉查找树.红黑树等.这一节,来关注经常是数据库索引中使用的B-树 在说这些之前,我们需要了解时间复 ...
- go学习第四天、条件和循环
循环 Go语言仅支持循环关键字 for for i := 0; i<5; i++ 示例 while 条件循环 while(n<5) n := 0 for n < 5 { n++ fm ...
- Lucene查询语法汇总
目录 一.单词查询 二.通配符查询 三.模糊查询 四.近似查询 五.范围查询 六.优先级查询 七.逻辑操作 八.括号分组 九.转义特殊字符 Lucene是目前最为流行的开源全文搜索引擎工具包,提供了完 ...
- [android]从书中编码方式,看编程思想
<Android权威编程指南第3版>今天学习到第10章,感叹经验丰富的编程理念——解耦合. 编程理念肯定是尽可能解除耦合,让代码可以复用,书中多次提到关于参数传递的解耦,这又出现一次. 本 ...
- 我要打十个!详解建造者模式(builder pattern)
前言 "我要打十个",其实是我要打十个野怪! 这十个野怪呢,它们有不同的技能.装备和武器,长得也不一样.这里野怪是一个蛮复杂的对象,由各个不同的部分组成(技能.装备.武器等),不同 ...
- JS中的call()方法和apply()方法用法总结(挺好 转载下)
最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...
- 分享几个 PHP 编码的最佳实践
对于初学者而言,可能很难理解为什么某些做法更安全. 但是,以下一些技巧可能超出了 PHP 的范围. 始终使用大括号 让我们看下面的代码: if (isset($condition) && ...