首页
社区
课程
招聘
[原创]EditPlus v3.80详细分析+keygen
发表于: 2015-4-17 01:18 12384

[原创]EditPlus v3.80详细分析+keygen

2015-4-17 01:18
12384

【文章标题】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 );
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (11)
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
前排支持。
2015-4-17 08:53
0
雪    币: 133
活跃值: (233)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持,分析的很透彻,
2015-4-17 09:18
0
雪    币: 5467
活跃值: (1430)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好详细,这个好,适合我等学习。。
2015-4-17 09:48
0
雪    币: 102
活跃值: (50)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
好久没有看到PC平台下的优质文章了,感觉大家都一窝蜂的去研究安卓了
2015-4-19 10:47
0
雪    币: 85
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
熟悉而又陌生的代码,呵呵!
2015-4-19 17:25
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
thx,努力学习实践。。
2015-4-20 07:45
0
雪    币: 3686
活跃值: (1036)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
9

其实这就是CRC16
2015-4-20 19:19
0
雪    币: 3003
活跃值: (479)
能力值: ( LV15,RANK:1395 )
在线值:
发帖
回帖
粉丝
10
你是指CalcNum 由用户名计算出来的值就是其CRC16值?
2015-4-20 20:47
0
雪    币: 102
活跃值: (102)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
好帖子,学习了!
2015-4-21 20:28
0
雪    币: 96
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
高手才 有这么NB
2015-4-22 21:43
0
雪    币: 222
活跃值: (1870)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
很好奇,所以也调试了一下这个程序。感觉貌似软件在检测调试器,因技术所限,又没有找到相关证据,所以也只是猜测,后来仔细查找原因,分析疏漏之处,使问题得以解决,证明我的猜测是错误的。事实正如楼主在文章结尾所言:确实是漏了某些地方,呵呵。
PS:软件作者很聪明。
2015-5-7 00:02
0
游客
登录 | 注册 方可回帖
返回
//