首页
社区
课程
招聘
[旧帖] 8002是什么意思? 0.00雪花
发表于: 2010-1-28 16:30 4189

[旧帖] 8002是什么意思? 0.00雪花

2010-1-28 16:30
4189
在浅谈VB6逆向工程(3)中
代码:
    Dim a   //注意:这里定义的是变体变量。
            //如果不用变体变量,编译器将优化掉太多的代码。:(
            //当你熟悉变体类型后,其他的将很容易分析 ^_^
    a = 5
    
    If a < 5 Then
        MsgBox ("a < 5")
    ElseIf a = 5 Then
        MsgBox ("a = 5")
    Else
        MsgBox ("a > 5")
    End If
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    反汇编代码:
00401A72  XOR ESI,ESI
00401A74  MOV EDI,5
00401A79  MOV DWORD PTR SS:[EBP-74],ESI
00401A7C  LEA EDX,DWORD PTR SS:[EBP-74]
00401A7F  LEA ECX,DWORD PTR SS:[EBP-24]
00401A82  MOV DWORD PTR SS:[EBP-24],ESI
00401A85  MOV DWORD PTR SS:[EBP-34],ESI ----> 这些变量是为 MsgBox 使用的
00401A88  MOV DWORD PTR SS:[EBP-44],ESI   |
00401A8B  MOV DWORD PTR SS:[EBP-54],ESI   |
00401A8E  MOV DWORD PTR SS:[EBP-64],ESI ---
00401A91  MOV DWORD PTR SS:[EBP-6C],EDI  // 5
00401A94  MOV DWORD PTR SS:[EBP-74],2    //整数类型
00401A9B  CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarMove>]//赋值
                                         //到这里  a = 5  //[ebp-24]
00401AA1  LEA EAX,DWORD PTR SS:[EBP-24]
00401AA4  LEA ECX,DWORD PTR SS:[EBP-74]  
00401AA7  MOV EBX,8002
00401AAC  PUSH EAX
00401AAD  PUSH ECX
00401AAE  MOV DWORD PTR SS:[EBP-6C],EDI  // 5
00401AB1  MOV DWORD PTR SS:[EBP-74],EBX  // 8002 
00401AB4  CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarTstLt>] // a < 5 ?
00401ABA  TEST AX,AX
00401ABD  JE SHORT 工程2.00401AE4   //不小于则跳走

00401ABF  MOV ECX,80020004
00401AC4  MOV EAX,0A
00401AC9  MOV DWORD PTR SS:[EBP-5C],ECX
00401ACC  MOV DWORD PTR SS:[EBP-64],EAX
00401ACF  MOV DWORD PTR SS:[EBP-4C],ECX
00401AD2  MOV DWORD PTR SS:[EBP-54],EAX
00401AD5  MOV DWORD PTR SS:[EBP-3C],ECX
00401AD8  MOV DWORD PTR SS:[EBP-44],EAX
00401ADB  MOV DWORD PTR SS:[EBP-6C],工程2.004016C4;  UNICODE "a < 5"
00401AE2  JMP SHORT 工程2.00401B63

00401AE4  LEA ECX,DWORD PTR SS:[EBP-24]
00401AE7  LEA EDX,DWORD PTR SS:[EBP-74]
00401AEA  PUSH ECX
00401AEB  PUSH EDX
00401AEC  MOV DWORD PTR SS:[EBP-6C],EDI  // 5
00401AEF  MOV DWORD PTR SS:[EBP-74],EBX  // 8002
00401AF2  CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarTstEq>]// a = 5 ?
00401AF8  TEST AX,AX
00401AFB  MOV ECX,80020004
00401B00  MOV EAX,0A
00401B05  MOV DWORD PTR SS:[EBP-5C],ECX
00401B08  MOV DWORD PTR SS:[EBP-64],EAX
00401B0B  MOV DWORD PTR SS:[EBP-4C],ECX
00401B0E  MOV DWORD PTR SS:[EBP-54],EAX
00401B11  MOV DWORD PTR SS:[EBP-3C],ECX
00401B14  MOV DWORD PTR SS:[EBP-44],EAX
00401B17  JE SHORT 工程2.00401B5C         //不相等则跳走

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 338
活跃值: (103)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
;------------------------------------------------
__vbaVarTstLt ;关系运算 <
lea eax,var1
push eax ;变量1
lea eax,var2
push eax ;变量2
call __vbaVarTstLt ;if var1 < var2 then ax = &Hffff
;else ax = 0
;end if
;------------------------------------------------
上面参考 http://blog.csdn.net/bysdy/archive/2009/09/04/4520001.aspx
先压入第一个变量的地址 在压入第二个变量的地址

00401AA4  LEA ECX,DWORD PTR SS:[EBP-74]  
00401AA7  MOV EBX,8002
00401AAC  PUSH EAX
00401AAD  PUSH ECX
00401AAE  MOV DWORD PTR SS:[EBP-6C],EDI  // 5
00401AB1  MOV DWORD PTR SS:[EBP-74],EBX  // 8002
[EBP-74]感觉应该是“a < 5” 后面的5的地址吧 先不出来为什么是 8002了 你程序改几个数 试一下 估计就知道了
2010-1-29 10:57
0
雪    币: 2568
活跃值: (399)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个应该是VBA函数的参数,但不知道是做什么的
2010-1-29 14:50
0
雪    币: 292
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
__vbaVarTstEq(VARIANT:****, VARIANT:****) returns DWORD:0

解释:
__vbaVarTstEq 通常用来比较变量.如果它们不一样 , DWORD=0 (so eax=0)
如果它们一样, DWORD将为FFFFFFFF (so eax=FFFFFFFF)

比较的好像是:[EBP-24]与[EBP-74]是否相等
2010-1-29 16:25
0
雪    币: 107
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我估计这个8002应该就是整数类型跟2一样,不知道是不是这样?
2010-1-29 18:36
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Message = MSG(8002)

PostMessage(hWindow ,0x8002 ,0,0x******) ;
#define WM_APP       0x8000
2010-1-30 00:48
0
游客
登录 | 注册 方可回帖
返回
//