运行分析
- 选择验证方式,破解字符串
- 标题提示为vb程序
PE分析
- VB程序,32位,无壳
静态分析&动态调试
- 使用VB Decompiler进行分析,发现Command1_Click_403604为check按钮事件,需要使Me = 1
CBool(expression) ' 将表达式转换为布尔值
CByte(expression) ' 将表达式转换为字节类型
CCur(expression) ' 将表达式转换为货币类型
CDate(expression) ' 将表达式转换为日期类型
CDbl(expression) ' 将表达式转换为双精度浮点数
CDec(expression) ' 将表达式转换为十进制类型
CInt(expression) ' 将表达式转换为整数类型
CLng(expression) ' 将表达式转换为长整型
CLngLng(expression) ' (只在 64 位平台上有效)将表达式转换为长长整型
CLngPtr(expression) ' 将表达式转换为指针类型(长整型)
CSng(expression) ' 将表达式转换为单精度浮点数
CStr(expression) ' 将表达式转换为字符串类型
CVar(expression) ' 将表达式转换为变体类型
CStr(expression) ' 将表达式转换为字符串类型(重复)
- 上面是VB数据转换函数
String
- 打开strin_40449F函数,发现和String字符串对比
- 验证成功
Variant
- 打开vari_4045D2函数,与字符串Empty对比
- 验证成功
Long
- 打开vari_4045D2函数进行分析:
- var_28 = Text1.Text,即将输入字符串赋值给var_28
- var_20 = CLng(var_28) ,将var_28转int赋值给var_20
- If var_24 = 0 Then,需要满足这个比较,但是感觉反编译有问题,需要查看汇编代码
- 打开反汇编代码搜索var_24,发现赋值为002C2FAE
- 搜索地址004047F7处,发现关键对比为cmp eax, var_20
- 向上追踪eax,发现是var_20 = CLng(var_28)所在地址,即eax = cLng(Text1.Text),也就是字符串转十进制处
- 计算器得到输入字符串为2,895,790
- 验证成功
Currency
- 双击 curr_40486D分析
- 找到Var_2C为08180754
- ccur会将输入的值*1000
- 即eax = 0x08180754 / 10000 = 135792468 /10000 = 13579.2468
- 验证成功
Single
- 双击sing_404B05函数分析,发现与9764317691904作对比
- 验证成功
Double
- 双击dou_404C4D分析,发现1.47258369789456E17,即1.47258369789456 * 10^17次方
- 验证成功
Integer
- 双击 inte_404D95分析,发现输入与var_24需要相等,查找到var_24值为5BEF,变为int型为
- 验证成功
Byte
- 分析byt_4049BE函数,输入值要与var_24相等,查看到var_24疑似00EF(十进制为239)
- 验证成功