selph
selph
发布于 2022-08-25 / 179 阅读
0
0

新160个CrackMe练习:053-devilz KeyGen me#3

算法难度:⭐⭐

爆破难度:⭐

信息收集

运行情况:

image

查壳与脱壳:

有壳!Petite壳,第一次见,试着脱一下

image

首先跑到当前的OEP:

很明显这里有一个注册SEH异常处理程序的,然后就是保存当前寄存器环境,等壳解压解密完再恢复用

这里等pushf指令执行之后,对esp的地址下硬件访问断点

image

因为这里用到了异常,所以这里在x86dbg设置里把异常处理设置成由debugee处理

然后跑起来,遇到异常了直接接着跑,跑到硬件断点处:

很显然,这可能应该就是真正的OEP了

image

跟进查看:

这就是一个注册窗口的函数和退出进程的函数,确定了,这就是真正的OEP,接下来用插件脱壳即可

image

调试分析

ida打开继续分析:

image

跟进DialogFunc,找到nMsg = 111,且arg_8 = 0x12c的分支(Unlock按钮ID)继续跟进:

显示判断输入是否为空,有些函数没识别全,应该是导入表没修复好

image

接下来是对Name的处理:

反转字符串,然后对每个字符进行异或0x30

image

然后是对UnlockCode的处理:

遍历每个字符,对每个字符异或0x20,最后和各个处理过的Name进行比对,相同即可

image

注册机

注册码生成算法:(CSharp)

string? name = Console.ReadLine();
char[] UnlockCode = name.ToCharArray();
Array.Reverse(UnlockCode);

for (int i = 0; i < UnlockCode.Length; i++)
{
    UnlockCode[i] = (char)(UnlockCode[i] ^ 0x30);
    UnlockCode[i] = (char)(UnlockCode[i] ^ 0x20);
}

Console.WriteLine(UnlockCode);

效果:

image


评论