Crackme--Afkayas2

这题需要输入正确的用户名和序列号才能通过
image
使用peid查下,发现是vb的程序
image
使用vb decompiler反编译看下,发现0x00408200的地址上的代码和Afkayas1这道题相同的算法,这里不再赘述。从这里可以当作是调试的时候第一个断点的位置。
image
顺着断点往下走,在0x4082e9的地方调用了一个函数,将之前根据用户输入的字符串的值转成了浮点数,然后进行了浮点数运算
image
后续的解题步骤就是找代码中存在浮点数运算的位置,例如:

00408318   | 0F85 A1040000              | jne afkayas.2.4087BF                 
0040831E   | DEC1                       | faddp st(1),st(0)                    
00408320   | DFE0                       | fnstsw ax                            

观察ST寄存器中值的变化即可得到最终生成的序列号。

注:本题中对用户输入的字符串运算的加减乘除的值都是固定值,例如上图的0x40100c位置的值,在程序运行前查看此部分浮点数的值就能看到,这个地址属于.text段的地址
image
注册机代码如下:

#include <stdio.h>
#include <string.h>
int main()
{
    char szBuffer[30] = {0};
    printf("请输入用户名:");
    scanf("%s", szBuffer);
    int result = szBuffer[0] + 88888 * strlen(szBuffer);
    result+=2;
    result*=3;
    result-=2;
    result+=15;
    printf("%d", result);
    return 0;
}
posted @ 2023-07-28 14:53  墨宸  阅读(113)  评论(0)    收藏  举报