软件安全第一次实验报告,切勿直接搬运(改改再交)
实验要求
1、逆向分析目标程序运行过程,找到程序的关键校验点;
2、以非爆破的方式正确计算crackme的校验值;
内容
使用x32dbg对文件进行分析
打开文件后查找字符串,可以看到关键字符串“Serial is Correct!!!”
记录该地址0040143D
设置地址0040143D为断点
向上查看代码,发现有很多个跳转指令,并且跳转的地址相同,则这些跳转应该是判断serial是否正确的指令
共有9个跳转
接下来依次分析这9个跳转
1.
cmp eax,8
判断字符串长度,字符串长度应为8
2.
cmp byte ptr ss:[esp+9],2D
寄存器ss:[esp+9]中的字符为2D表示的字符‘-’
3.
movsx ecx,byte ptr ss:[esp+4]
shl ecx,1
cmp ecx,64
将ss:[esp+4]中的值逻辑左移1位后,应该和64相等
计算得到对应32H
则ss:[esp+4]中的字符为‘2’
4.
mov al,byte ptr ss:[esp+B]
test al,al
ss:[esp+B]中的值进行与运算
得ss:[esp+B]中的字符为‘0’
5.
cmp byte ptr ss:[esp+8],2B
将ss:[esp+8]中的值与2B进行比较,不等于则跳转
则ss:[esp+8]中的字符为2BH对应的‘+’
6.
movsx edx,byte ptr ss:[esp+5]
add edx,A
cmp edx,44
将ss:[esp+5]中的值+A,并与44比较
计算得到3AH
则ss:[esp+5]中的字符为3AH对应的’:’
7.
movsx eax,byte ptr ss:[esp+7]
sub eax,2E
将ptr ss:[esp+7]中的值减去2E,不等于0则跳转
则ptr ss:[esp+7]中的字符为2EH对应的‘.’
8.
cmp byte ptr ss:[esp+A],4D
将ss:[esp+A]中的值与4D比较,不等则跳转
则ss:[esp+A]中的字符为4DH对应的‘M’
9.
movsx ecx,byte ptr ss:[esp+6]
add ecx,A
cmp ecx,33
将ss:[esp+6]中的值+A,并与33比较,不等则跳转
计算得到29H
则ss:[esp+6]中的字符为29H对应的‘)’
根据刚才对9个跳转的分析可以得到
ss:[esp+4]中的字符为‘2’
ss:[esp+5]中的字符为3AH对应的’:’
ss:[esp+6]中的字符为29H对应的‘)’
ss:[esp+7]中的字符为2E对应的‘.’
ss:[esp+8]中的字符为2B对应的‘+’
ss:[esp+9]中的字符为2D表示的字符‘-’
ss:[esp+A]中的字符为4D对应的‘M’
ss:[esp+B]中的字符为‘0’
综上可得serial为2:).+-M0
将2:).+-M0输入测试
得到
说明推断正确
crackme的校验值为2:).+-M0