You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
3个16位的寄存器分别为control word, status word和tag word(这里为了方便理解,不直接翻译)
control word状态字
各个状态位的标志含义
无限状态标志位IC(Infinity Control)
0 = Both -infinity and +infinity are treated as unsigned infinity (initialized state)
1 = Respects both -infinity and +infinity
四舍五入控制位RC(Rounding Control)
00 = Round to nearest, or to even if equidistant (this is the initialized state)
01 = Round down (toward -infinity)
10 = Round up (toward +infinity)
11 = Truncate (toward 0)
精确度控制位PC(Precision Control)
00 = 24 bits (REAL4)
01 = Not used
10 = 53 bits (REAL8)
11 = 64 bits (REAL10) (this is the initialized state)
PM (bit 5) or Precision Mask
UM (bit 4) or Underflow Mask
OM (bit 3) or Overflow Mask
ZM (bit 2) or Zero divide Mask
DM (bit 1) or Denormalized operand Mask
IM (bit 0) or Invalid operation Mask
status word
这里只重点关注C3,C2,C0
Opcode
Mnemonic
Description
D8 /2
FCOM m32fp
Compare ST(0) with m32fp.
DC /2
FCOM m64fp
Compare ST(0) with m64fp.
D8 D0+i
FCOM ST(i)
Compare ST(0) with ST(i).
D8 D1
FCOM
Compare ST(0) with ST(1).
D8 /3
FCOMP m32fp
Compare ST(0) with m32fp and pop register stack.
DC /3
FCOMP m64fp
Compare ST(0) with m64fp and pop register stack.
D8 D8+i
FCOMP ST(i)
Compare ST(0) with ST(i) and pop register stack.
D8 D9
FCOMP
Compare ST(0) with ST(1) and pop register stack.
DE D9
FCOMPP
Compare ST(0) with ST(1) and pop register stack twice.
比较操作会影响C3, C2, C0
Condition
C3
C2
C0
ST(0) > Source
0
0
0
ST(0) < Source
0
0
1
ST(0) = Source
1
0
0
Unordered*
1
1
1
NOTE: * Flags not set if unmasked invalid-arithmetic-operand (#IA) exception is generated.
a) __vbaStrCopy 将一个字符串拷贝到内存,类似于 Windows API HMEMCPY
b) __vbaVarCopy 将一个变量值串拷贝到内存
c) __vbaVarMove 变量在内存中移动,或将一个变量值串拷贝到内存
数学运算
a) __vbavaradd 两个变量值相加
b) __vbavarsub 第一个变量减去第二个变量
c) __vbavarmul 两个变量值相乘
d) __vbavaridiv 第一个变量除以第二个变量,得到一个整数商
e) __vbavarxor 两个变量值做异或运算
程序设计杂项
a) __vbavarfornext 这是VB程序里的循环结构, For... Next... (Loop)
b) __vbafreestr 释放出字符串所占的内存,也就是把内存某个位置的字符串给抹掉
c) __vbafreeobj 释放出VB一个对象(一个窗口,一个对话框)所占的内存,也就是把内存某个位置的一个窗口,一个对话框抹掉
d) __vbastrvarval 从字符串特点位置上获取其值
e) multibytetowidechar 将数据转换为宽字符格式,VB在处理数据之都要这样做,在TRW2000显示为7.8.7.8.7.8.7.8
f) rtcMsgBox 调用一个消息框,类似于WINDOWS里的messagebox/a/exa,此之前一定有个PUSH命令将要在消息框中显示的数据压入椎栈
g) __vbavarcat 将两个变量值相连,如果是两个字符串,就连在一起
h) __vbafreevar 释放出变量所占的内存,也就是把内存某个位置的变量给抹掉
i) __vbaobjset
j) __vbaLenBstr 获得一个字符串的长度,注:VB中一个汉字的长度也为1
k) rtcInputBox 显示一个VB标准的输入窗口,类似window's API getwindowtext/a, GetDlgItemtext/a
l) __vbaNew 调用显示一个对话框,类似 Windows' API Dialogbox
m) __vbaNew2 调用显示一个对话框,类似 Windows' API Dialogboxparam/a
n) rtcTrimBstr 将字串左右两边的空格去掉
比较函数
a) __vbastrcomp 比较两个字符串,类似于 Window's API lstrcmp
b) __vbastrcmp 比较两个字符串,类似于 Window's API lstrcmp
c) __vbavartsteq 比较两个变量值是否相等
d)__vbaFpCmpCy - Compares Floating point to currency. sp; Compares Floating point to currency
Crackme160-003
ollydbg版本: 吾爱破解改进版
测试数据name=33333, serial=666666
开始的操作和
002
基本相同,找到带有Wrong
字符串的汇编代码调用部分,在该函数的开始部分设下断点,Ctrl+F2
,一直运行,直到第一次出现输入的name
,可以认为这是算法的开始部分,一步一步分析具体的分析加注释
第一部分
第二部分
第三部分
第四部分
注册机算法
其中我们可以看出,前三部分相对来说都是比较容易理解的,关键部分就是在第四部分
第四部分最关键的部分
此时
st(0)=compute_serial/input_serial
,地址里面存的是1.0,也就是st(0)
和1.0的比较,然后将status word
放入ax中,可以从数据面板中看出来ax=0x0120
=>ah=0x01h
,从下面的扩展知识我们可看到,
test
命令是为了探测C3
位是否为1,即两值是否相等相等,那么
C3
位为1,test
结果ZF=0
,不跳转 => 破解成功不相等,那么
C3
位为0,test
结果ZF=1
,跳转 => 破解失败扩展
浮点数运算
浮点数运算由专门的
FPU
(浮点运算器)完成,它由8个80位的寄存器和3个16位的状态寄存器组成,其中8个80位的寄存器分别为
st(0)-st(7)
8个80位寄存器组成了一个栈,每次出栈/进栈都是通过这个
TOP
值指定的,TOP
值始终指向栈顶元素
举个例子:
现在要将
value0
,value1
,value2
压入这8个栈中,TOP
指向st(0)
,将value0
送入st(0)
中value1
进入这个栈中,将value0
送入st(1)
中,并将value1
送入st(0)
中value2
进入这个栈中,将value1
送入st(2)
中,并将value1
送入st(1)
中,将value2
送入st(0)
中3个16位的寄存器分别为
control word
,status word
和tag word
(这里为了方便理解,不直接翻译)control word
状态字各个状态位的标志含义
IEM(Interrupt Enable Mask )决定是否中断可用,设置为0表示中断可用,为1表示中断不可用.
status word
这里只重点关注
C3,C2,C0
比较操作会影响
C3, C2, C0
tag word
状态字暂时未用到
浮点数运算重点操作指令
VB逆向分析重点关注函数
Btw:
Reference
FPU
FCOMP
VB程序逆向常用的函数
The text was updated successfully, but these errors were encountered: