【文章标题】EditPlus v3.80详细分析+keygen
【文章作者】lacoucou
【软件名称】EditPlus Text Editor 3.80(805) 32位Evaluation Version
【软件大小】 1.98 MB
【原版下载】https://www.editplus.com/download.html
【保护方式】用户名 序列号
【软件简介】一套功能强大,可取代记事本的文字编辑器,拥有无限制的 Undo/Redo、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件。。。。。
【作者声明】本文仅供研究学习,本人对因这篇文章而导致的一切后果,不承担任何法律责任。本文中的不足之处请各位多多指教。
【分析过程】
老套路,弹出错误之后,F12暂停,然后栈回溯找到重点:
004D2B57 > \57 PUSH EDI
004D2B58 . 53 PUSH EBX
004D2B59 . E8 F2F8FFFF CALL editplus.004D2450 ; 注册名都传进去了
004D2450 /$ 83EC 10 SUB ESP,0x10 ; 验证算法
004D2453 |. A1 744D5C00 MOV EAX,DWORD PTR DS:[0x5C4D74]
004D2458 |. 33C4 XOR EAX,ESP
004D245A |. 894424 0C MOV DWORD PTR SS:[ESP+0xC],EAX
004D245E |. 53 PUSH EBX
004D245F |. 55 PUSH EBP
004D2460 |. 8B6C24 1C MOV EBP,DWORD PTR SS:[ESP+0x1C] ; 参数 用户名
004D2464 |. 56 PUSH ESI
004D2465 |. 8B7424 24 MOV ESI,DWORD PTR SS:[ESP+0x24] ; 参数 注册码
004D2469 |. 8BC5 MOV EAX,EBP
004D246B |. 57 PUSH EDI
004D246C |. 8D50 01 LEA EDX,DWORD PTR DS:[EAX+0x1]
004D246F |. 90 NOP
004D2470 |> 8A08 /MOV CL,BYTE PTR DS:[EAX]
004D2472 |. 40 |INC EAX
004D2473 |. 84C9 |TEST CL,CL
004D2475 |.^ 75 F9 \JNZ SHORT editplus.004D2470
004D2477 |. 2BC2 SUB EAX,EDX ; 求用户名长度
004D2479 |. 8BD8 MOV EBX,EAX ; ebx 用户名长度
004D247B |. 8BC6 MOV EAX,ESI
004D247D |. 8D50 01 LEA EDX,DWORD PTR DS:[EAX+0x1]
004D2480 |> 8A08 /MOV CL,BYTE PTR DS:[EAX]
004D2482 |. 40 |INC EAX
004D2483 |. 84C9 |TEST CL,CL
004D2485 |.^ 75 F9 \JNZ SHORT editplus.004D2480
004D2487 |. 2BC2 SUB EAX,EDX
004D2489 |. 8BF8 MOV EDI,EAX ; edi注册码长度
004D248B |. E8 E0F6FFFF CALL <editplus.CreateTable> ; 5eb7b8填表
004D2490 |. 53 PUSH EBX ; ebx 用户名长度
004D2491 |. 55 PUSH EBP ; 用户名
004D2492 |. 6A 00 PUSH 0x0
004D2494 |. E8 37F7FFFF CALL <editplus.calcNum>
004D2499 |. 0FB7C0 MOVZX EAX,AX
004D249C |. 50 PUSH EAX ; /<%02X>
004D249D |. 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+0x20] ; |
004D24A1 |. 68 50105900 PUSH editplus.00591050 ; |format = "%02X"
004D24A6 |. 51 PUSH ECX ; |s
004D24A7 |. E8 44F9FFFF CALL <editplus.sprintf> ; \sprintf(szBuf(ecx),"%02x",eax)
004D24AC |. 0FB656 02 MOVZX EDX,BYTE PTR DS:[ESI+0x2]
004D24B0 |. 0FBE4C24 28 MOVSX ECX,BYTE PTR SS:[ESP+0x28]
004D24B5 |. 8D46 02 LEA EAX,DWORD PTR DS:[ESI+0x2]
004D24B8 |. 83C4 18 ADD ESP,0x18
004D24BB |. 3BD1 CMP EDX,ECX
004D24BD |. 74 15 JE SHORT editplus.004D24D4
004D24BF |> 5F POP EDI ; lable_end
004D24C0 |. 5E POP ESI
004D24C1 |. 5D POP EBP
004D24C2 |. 33C0 XOR EAX,EAX
004D24C4 |. 5B POP EBX
004D24C5 |. 8B4C24 0C MOV ECX,DWORD PTR SS:[ESP+0xC]
004D24C9 |. 33CC XOR ECX,ESP
004D24CB |. E8 C6760700 CALL editplus.00549B96
004D24D0 |. 83C4 10 ADD ESP,0x10
004D24D3 |. C3 RETN
004D24D4 |> 0FB656 03 MOVZX EDX,BYTE PTR DS:[ESI+0x3]
004D24D8 |. 0FBE4C24 11 MOVSX ECX,BYTE PTR SS:[ESP+0x11]
004D24DD |. 3BD1 CMP EDX,ECX
004D24DF |.^ 75 DE JNZ SHORT editplus.004D24BF
004D24E1 |. 83C7 FE ADD EDI,-0x2
004D24E4 |. 57 PUSH EDI
004D24E5 |. 50 PUSH EAX
004D24E6 |. 6A 00 PUSH 0x0
004D24E8 |. E8 E3F6FFFF CALL <editplus.calcNum> ; calcNum(0,(pass+2),strlen(pass)-2)
004D24ED |. 0FB7D0 MOVZX EDX,AX
004D24F0 |. 52 PUSH EDX ; /<%02X>
004D24F1 |. 8D4424 20 LEA EAX,DWORD PTR SS:[ESP+0x20] ; |
004D24F5 |. 68 50105900 PUSH editplus.00591050 ; |format = "%02X"
004D24FA |. 50 PUSH EAX ; |s
004D24FB |. E8 F0F8FFFF CALL <editplus.sprintf> ; \sprintf
004D2500 |. 0FB60E MOVZX ECX,BYTE PTR DS:[ESI] ; 第一位
004D2503 |. 0FBE5424 28 MOVSX EDX,BYTE PTR SS:[ESP+0x28]
004D2508 |. 83C4 18 ADD ESP,0x18
004D250B |. 3BCA CMP ECX,EDX
004D250D |.^ 75 B0 JNZ SHORT editplus.004D24BF
004D250F |. 0FB646 01 MOVZX EAX,BYTE PTR DS:[ESI+0x1] ; 第二位
004D2513 |. 0FBE4C24 11 MOVSX ECX,BYTE PTR SS:[ESP+0x11]
004D2518 |. 33D2 XOR EDX,EDX
004D251A |. 3BC1 CMP EAX,ECX
004D251C |. 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+0x1C]
004D2520 |. 5F POP EDI
004D2521 |. 0F94C2 SETE DL
004D2524 |. 5E POP ESI
004D2525 |. 5D POP EBP
004D2526 |. 5B POP EBX
004D2527 |. 33CC XOR ECX,ESP
004D2529 |. 8BC2 MOV EAX,EDX
004D252B |. E8 66760700 CALL editplus.00549B96
004D2530 |. 83C4 10 ADD ESP,0x10
004D2533 \. C3 RETN
004D1B70 <CreateTable> $ 68 00020000 PUSH 0x200 ; /n = 200 (512.)
004D1B75 . 6A 00 PUSH 0x0 ; |c = 00
004D1B77 . 68 B8B75E00 PUSH editplus.005EB7B8 ; |s = editplus.005EB7B8
004D1B7C . E8 EF870700 CALL <editplus.memset> ; \memset
004D1B81 . 83C4 0C ADD ESP,0xC
004D1B84 . 33D2 XOR EDX,EDX
004D1B86 . EB 08 JMP SHORT editplus.004D1B90
004D1B88 . 8DA424 000000>LEA ESP,DWORD PTR SS:[ESP]
004D1B8F . 90 NOP
004D1B90 > B8 C1C00000 MOV EAX,0xC0C1
004D1B95 . B9 01000000 MOV ECX,0x1
004D1B9A . 8D9B 00000000 LEA EBX,DWORD PTR DS:[EBX]
004D1BA0 > 85CA TEST EDX,ECX
004D1BA2 . 74 08 JE SHORT editplus.004D1BAC
004D1BA4 . 66:310455 B8B>XOR WORD PTR DS:[EDX*2+0x5EB7B8],AX
004D1BAC > 03C0 ADD EAX,EAX
004D1BAE . 35 03400000 XOR EAX,0x4003
004D1BB3 . 03C9 ADD ECX,ECX
004D1BB5 . 81F9 00010000 CMP ECX,0x100
004D1BBB . 0FB7C0 MOVZX EAX,AX
004D1BBE .^ 7C E0 JL SHORT editplus.004D1BA0
004D1BC0 . 42 INC EDX
004D1BC1 . 81FA 00010000 CMP EDX,0x100
004D1BC7 .^ 7C C7 JL SHORT editplus.004D1B90
004D1BC9 . C3 RETN
unsigned char g_szTable[0x200]={0};
void CreateTable() //4d1870
{
memset(g_szTable,0,0x200);
unsigned short* pSBuf=(unsigned short*)g_szTable;
int nCount1=0;
int nCount2=0;
int nTemp=0;
do
{
//LOWORD(nTemp) = 0xC0C1u;
nTemp = 0xC0C1;
nTemp &=0xffff;
nCount2 = 1;
do
{
if ( nCount2 & nCount1 )
{
pSBuf[nCount1] ^= nTemp;
}
nCount2 *= 2;
nTemp = (unsigned __int16)(2 * nTemp ^ 0x4003);
}
while ( nCount2 < 256 );
++nCount1;
}
while ( nCount1 < 256 );
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!