crackme001

一、基本信息

1.1运行情况
在这里插入图片描述
当输入错误时,程序退出。

1.2可以看出是汇编程序,并且没有加壳
在这里插入图片描述

二、OD打开分析

2.1查看字符串
在这里插入图片描述
2.2双击跟进正确字符串,在函数头(一般是push ebp)下断点
在这里插入图片描述
2.3首先F9运行到断点位置,然后F8去分析汇编算法
这里我们输入123456方便与程序内部字符串区分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、破解方法

3.1直接修改JCC指令
目的使跳转执行
1、将cmp eax,0x0 改为cmp eax,0x1
2、将je 改为 jne或者jmp
3、修改标准寄存器将Z 0 改为 Z 1
在这里插入图片描述
3.2把输入改成最后比较的部分

L2C-5781Ykpfows-SSD4562-ABEX

四、编写脚本

#include<stdio.h>
#include<windows.h>

//系统内部字符串---》L2C-5781
//系统内部字符串---》4562-ABEX

int main()
{
    char szVolumeNameBuf[MAX_PATH] = { 0 };
    DWORD dwVolumeSerialNum;
    DWORD dwMaxComponentLength;
    DWORD dwSysFlags;
    char szFileSystemBuf[MAX_PATH] = { 0 };
    DWORD dwFileSystemBuf = MAX_PATH;

    BOOL bGet = GetVolumeInformationA("C:\\",//这个写调试文件所在的盘
        szVolumeNameBuf,
        MAX_PATH,
        &dwVolumeSerialNum,
        &dwMaxComponentLength,
        &dwSysFlags,
        szFileSystemBuf,
        MAX_PATH);
    for (int i = 0; i < 4; i++)
    {
        szVolumeNameBuf[i] += 2;
    }
    printf("L2C-5781%s4562-ABEX", szVolumeNameBuf);
	return 0;
}

五、总结

BOOL GetVolumeInformation( 
  [IN]  LPCTSTR lpRootPathName,           // root directory  卷所在的根目录,如:"C:\\", 如果为NULL,表示当前目录
  [OUT]  LPTSTR lpVolumeNameBuffer,        // volume name buffer ,输出参数,存放卷名缓冲区
  [IN]  DWORD nVolumeNameSize,            // length of name buffer,卷名缓冲区长度
  [OUT]  LPDWORD lpVolumeSerialNumber,     // volume serial number, 卷序列号
  [OUT]  LPDWORD lpMaximumComponentLength, // maximum file name length,最大文件文件名组件长度,随文件系而变化
  [OUT]  LPDWORD lpFileSystemFlags,        // file system options ,文件系统的一些属性,通常为一些宏的组合
  [OUT]  LPTSTR lpFileSystemNameBuffer,    // file system name buffer,说明何种文件系统,例如NTFS,  FAT等
  [IN]  DWORD nFileSystemNameSize         // length of file system name buffer,文件系统缓冲区长度
);
lstrcatA		字符串拼接
lstrcmpiA		字符串比较
je		结果为零则跳转(相等时跳转)    标志寄存器ZF=1

六、最重要的

**欢迎大佬批评交流**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值