首页
社区
课程
招聘
[原创]CrackMe第一天
发表于: 2020-2-5 14:03 5541

[原创]CrackMe第一天

2020-2-5 14:03
5541

但是由以上分析可以得到,当NumberOfBytesWritten等于1的时候才是输入正确,所以只要将加密后的字符串与另外一个数组内容byte_40A030完全相等

NumberOfBytesWritten =1即可

#include <iostream>
using namespace std;
int main()
{
 
    char cByte[20] = { 0x61, 0x6A, 0x79, 0x67, 0x6B,0x46,0x6D,0x2E,  0x7F,0x5F,  0x7E, 0x2D, 0x53, 0x56, 0x7B, 0x38,0x6D,0x4C, 0x6E };
    char a1[0x100] = { 0 };
    for (int i = 0; i < 19; i++)
    {
        if (i == 18)
        {
            a1[i] = cByte[18] ^ 0x13;

         }
        if (i % 2)
        {
            a1[i] = (cByte[i] ^ i) + i;
        }
        else
        {
            a1[i+2] = (cByte[i] ^ i) ;
        }
    }
   
}
解出来lag{Ho0k_w1th_Fun}

假期在家无聊做crackme 第一天
攻防世界的easyhook,观看管理员填写的题解时发现写的不是很清楚而且图片无法加载,所以打算自己重写一下
ida直接拖入F5,发现当我们输入字符串后,首先判断长度是否位19,为19位后在调用sub_401220,createfile,writefile, sub_401240 ,最后判断写入的字节数是否为1 ,为1则说明输入的flag正确
首先查看 sub_401220 ,首先发现是获取writefile  函数地址,记录了该地址原来的5个字节的内容,
在函数sub_4010d0在该地址处第一个写入了0xe9 即汇编指令的jmp,后四个字节写入要跳转到 00401080,再根据题目名称可以知道,sub_401220作用是将 Writefile流程转移到00401080处的函数地址上,每当调用writefile 就会调用00401080
代开od验证,在函数401220使下断点
查看原writefile处的地址,发现是jmp到系统的api处,
执行玩401220函数再次 查看 发现的确是jmp到00401080

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2020-2-5 18:22
1
游客
登录 | 注册 方可回帖
返回
//