selph
selph
发布于 2022-08-12 / 182 阅读
0
0

新160个CrackMe练习:041-genocidel

算法难度:⭐⭐⭐

爆破难度:⭐

信息收集

运行情况:

弹窗提示说这里应该有个Reg.dat文件

image

创建这个文件之后就能打开页面了:

image

查壳与脱壳:

UPX壳,ESP定律即可脱壳

image

调试分析

OK按钮按下的时候:直接弹窗Success

image

但是这个OK按钮按不下去,应该是验证在别的地方

这里还有一个事件就是Serial的四个框发生值改变的时候:

image

会调用同一个函数,这个函数应是校验了,参数是第几个框的标识

这个函数一进去就是一个switch分支,分别对应四个框处理

image

四个框的处理相同:都是把值保存在一个数组里,然后调用同一个函数

image

这个调用的函数才是真正验证的部分:

首先获取Name部分,Name长度需要大于等于5,这里分别取1345四个字符除以10保存到一个数组里

image

然后接下来就是一个循环:这个循环的作用是刚刚那个数组里保存的值是否为个位数,如果不是,就再次除以10,得到一个个位数的值

image

最后,又是一个循环,依次比对刚刚保存的四个值,和上一层函数从四个框里保存的四个值是否相同,如果都相同就启用OK按钮,否则就不启用

image

注册机

注册码生成算法:(CSharp)

string Name = Console.ReadLine();
if (Name == null) return;

for (int i = 0; i < Name.Length; i++)
    if(i is 0 or 2 or 3 or 4)
    {
        int tmp = (int)Name[i];
        if (tmp >= 100) tmp /= 100;
        else if (tmp >= 10) tmp /= 10;
        Console.Write(tmp+" ");
    }

效果:

image

总结

编辑框更变事件里验证,首先把编辑框4个值保存起来,然后用Name计算4个值,然后进行比对,4个值都比对成功,就成功

比之前遇到的那些还算有了点新意


评论