【0day安全实验一】1.4Crack小实验

环境:

Win7 32位虚拟机
Visual C++ 6.0

工具:

IDA Pro32
OllyDbg
LordPE
UltraEdit

实验步骤:

编写C程序:

#include <stdio.h>
#include <string.h>
#define PASSWORD "1234567"
int verify_password(char *password)
{
    int authenticated;
    authenticated=strcmp(password,PASSWORD);
    return authenticated;
}
main()
{
    int valid_flag=0;
    char password[1024];
    while(1){
        printf("please inpute password:    ");
        scanf("%s",password);
        valid_flag=verify_password(password);
        if(valid_flag)
        {
            printf("incorrect password!\n\n");
        }
        else 
        {
            printf("congratulations!! You have passed the varification!");
            break;
        }
    }
}

程序主要实现功能为:输入“1234567”显示密码正确,输入其他显示密码错误

编译并生成.exe文档
在这里插入图片描述
IDA调试

将.exe文件拖入IDA查看,查看函数流程图,找到跳转分支处

在这里插入图片描述
鼠标点击程序分支点,空格切换到汇编指令界面

在这里插入图片描述
可以看到这条指令位于PE文件的.text节,并且IDA已经自动将该指令的地址换算成运行时的内存地址VA:0x004010D5

OllyDbg调试

Ctrl+G跳转到之前的虚拟地址:0x004010D5

在这里插入图片描述
F2下断点,F9运行程序,提示输入密码时输入一个错误密码,可以看到下方预执行区提示:“Jump os not taken”

在这里插入图片描述
密码验证函数的返回值存储在[lacal.1]中,if()语句通过以下代码实现

在这里插入图片描述
将指令中的je修改位jne,程序逻辑就会变成:输入错误密码被确认
双击je指令修改为jne,点击“Assemble”按钮写入,此时下方预执行变为taken

在这里插入图片描述
执行结果变为正确

在这里插入图片描述
LordPE查看节点信息
打开LordPE后点击PE编辑器,查看区段

在这里插入图片描述
前面已知VA=0x004010D5
换算文件偏移地址=虚拟内存地址(VA)-装载地址-节偏移=0x004010D5-0x00400000-(0x00001000-0x00001000)=0x000010D5。也就是说,这条指令在PE文件中位于距离文件开始出10D5字节的地方

UltraEdit修改可执行文件

安装UltraEdit
网址:看雪搜索即可
破解方法参考:http://www.downxia.com/downinfo/258802.html

使用UltraEdit打开.exe文件,ctrl+G直接跳转到10D5处,将74修改为75,如下

在这里插入图片描述
保存后运行,此时输入“1234567”显示密码错误,输入其他显示密码正确

在这里插入图片描述
实验完成
😃

总结

主要学习了几个基本软件的使用方法,更深刻理解了虚拟内存地址和文件偏移地址的差别。
好像大半天都在下镜像,装虚拟机,配环境下软件。不过终于搞出来了,感觉自己棒棒,加油!后面的实验也要好好完成!
😐

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值