-
-
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
esi
和ebx
都是由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编辑
,原因:
赞赏
看原图
赞赏
雪币:
留言: