-
-
[原创]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直播授课