首页
社区
课程
招聘
easyCrackMe1 wp
发表于: 2019-6-24 08:16 2210

easyCrackMe1 wp

2019-6-24 08:16
2210

记一个非常简单的cm

mov     ds:hInstance, eax
push    0               ; dwInitParam
push    offset DialogFunc ; lpDialogFunc
push    0               ; hWndParent
push    64h ; 'd'       ; lpTemplateName
push    ds:hInstance    ; hInstance
call    DialogBoxParamA

程序非常短,一上来用DialogBoxParamA注册一个窗口,直接分析DialogFunc函数。DialogFunc就是一个典型的窗口处理函数,非常容易定位到sub_401139,这里调用了GetDlgItemTextA,显然是判断用户名和注册码的关键函数。这个函数的最后调用了sub_4011B7,这个函数是把注册码和4021BB地址的字符串做比较,而此地址处的内容是在sub_401139被写入的。

push    esi
push    ebx
push    offset aBsLxLu  ; "BS-%lX-%lu"
push    offset str_1_r  ; LPSTR
call    wsprintfA

esiebx都是由username计算而成的。

imul    eax, 4
add     ebx, eax
mov     esi, ebx
movsx   eax, ds:byte_4020F2[ecx]
dec     ebx
imul    eax, ebx, 2
add     ebx, eax
dec     ebx

可以编写如下注册机

#include <stdio.h>
#include <string.h>

int main()
{
    char username[33];
    printf("Input your user name: ");
    scanf("%32s",&username);
    /* cal serial */
    // BS-X_2-X_1
    // X_1
    int len=strlen(username);
    int x_1=0;
    for(int i=0; i<len; i++)
        x_1+=4*username[i];
    // X_2
    int x_2=0x654789;
    for(int i=len-1; i>=0; i--)
    {
        x_2--;
        x_2*=3;
        x_2--;
    }
    char serial_num[33]={0};
    sprintf(serial_num,"BS-%lX-%lu",x_2,x_1);
    printf("serial num is: %s\n",serial_num);
    return 0;
}


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

最后于 2019-6-24 15:40 被menglllong编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//