name/serial系列
输入test/test1234
确定 弹出错误对话框
暂停 看栈回溯 找到用户态代码
确定该函数 仔细观察 找到有关我们输入数据的部分
0040240F . 8B45 E4 mov eax,dword ptr ss:[ebp-0x1C] ; unicode test
00402412 . 50 push eax ; /String = "日??琎"
00402413 . 8B1A mov ebx,dword ptr ds:[edx] ; |
00402415 . FF15 E4404000 call dword ptr ds:[<&MSVBVM50.__vbaLenBs>; \__vbaLenBstr
0040241B . 8BF8 mov edi,eax ; eax=4 len
0040241D . 8B4D E8 mov ecx,dword ptr ss:[ebp-0x18] ; test出现 不过是unicode
00402420 . 69FF FB7C0100 imul edi,edi,0x17CFB ; 0x17cfb ;edi=5f3ec
00402426 . 51 push ecx ; /String = NULL
00402427 . 0F80 91020000 jo Afkayas_.004026BE ; |
0040242D . FF15 F8404000 call dword ptr ds:[<&MSVBVM50.#516>] ; \rtcAnsiValueBstr
00402433 . 0FBFD0 movsx edx,ax
00402436 . 03FA add edi,edx ; edi=5f460 正确验证码出现
注册机:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char * gen(char *input){
if(strlen(input)<=0) return "error";
char *res;
res=(char *)malloc(100);
sprintf(res,"AKA-%d",strlen(input) *0x17cfb + *input);
return res;
}
int main()
{
printf("%s-->%s \n","test",gen("test"));
//test-->AKA-390240
return 0;
}
同1差不多。不过自己的看汇编的能力 和 分析作者的思路的能力 要加强。