EmEditor 3.28 簡體中文版

看雪資料發表於2003-03-07

目標軟體: EmEditor 3.28 簡體中文版

檔案大小: 1086 KB

使用平臺: Win9x/NT/2000/XP

軟體授權: 共享軟體

使用限制: 功能限制

檔案大小: 1086 KB

下載地址: http://www.emurasoft.com/pub/eme328cs.exe


軟體簡介: 大名鼎鼎的 EmEditor 是一款優秀的文書處理軟體,與同類軟體相比,它具有輕便快速的優點。它的功能非常強大,不管你的文章是否含有換行符、即使容量為幾MB的檔案也可以很快地開啟編輯;透過外掛匯入支援,幾乎可實現所有的特殊功能;鍵盤、工具列、選單、字型和色彩等的自訂功能,實現輕鬆編輯。EmEditor還獲得了“Designed for Windows”徽標認證,可在各作業系統下獲得最佳的效能體驗。網頁設計者用它來編輯HTML或者Perl程式檔案,程式設計師用它來編輯源程式,普通使用者用它作為記事本――這正是它的出眾之處。新版本更新內容:在檢索,替換以及在文件中檢索的時候,增加了利用正規表現的方法,增加了“終了後關閉”的勾選欄;解決了在tag jump時,如果檔案不存在,會出現的異常結束的問題;勾選“以空格代替tab插入”後,如果輸入tab,就會自動將tab變為空格;在命令欄中增加了“不增加最近使用過的文件的快速路徑”選項。

使用工具: TRW2000 v1.22

破解過程:

輸入序列號:1000-2000-3000-4000,記為SN(1)-SN(2)-SN(3)-SN(4)。

Hmemcpy 設斷,來到:

CMP      EAX,03F1
JNZ      004196DE
PUSH     BYTE +01
CALL     00418CF1
MOV      ESI,EAX
CMP      ESI,EBX
JZ       004196C7
PUSH     ESI
CALL     004194AA           / * Shit!竟然不符合人體工程學!追進!* /
CMP      EAX,EBX
JNG      004196A4           / * 跳走就 Game Over !* /
XOR      ECX,ECX
CMP      EAX,BYTE +02
SETZ     CL
MOV      [00447B74],EAX
PUSH     BYTE +40
ADD      ECX,0455
JMP      SHORT 004196BA
JZ       004196C0
XOR      ECX,ECX
CMP      EAX,BYTE -02
SETNZ    CL
PUSH     BYTE +30
DEC      ECX
AND      ECX,BYTE +03
ADD      ECX,0454
PUSH     ECX
CALL     0041ABEA             / * Call 對話方塊 * /
PUSH     ESI
CALL     `ADVAPI32!RegCloseKey`
LEA      ECX,[EBP+08]
CALL     0040C0AA
XOR      EAX,EAX
MOV      [004499A4],BL
INC      EAX
POP      ESI
POP      EBX
LEAVE  
RET      04

PUSH     EBP
MOV      EBP,ESP
SUB      ESP,BYTE +30
PUSH     ESI
PUSH     BYTE +02
PUSH     DWORD 004464F8
LEA      EAX,[EBP-30]
PUSH     DWORD 0043FBB8
PUSH     EAX
CALL     `USER32!wsprintfA`
MOV      ESI,[0043F004]
AND      DWORD [EBP-04],BYTE +00
ADD      ESP,BYTE +10
LEA      EAX,[EBP-04]
PUSH     EAX
PUSH     BYTE +00
LEA      EAX,[EBP-08]
PUSH     EAX
PUSH     BYTE +00
LEA      EAX,[EBP-30]
PUSH     EAX
PUSH     DWORD [EBP+08]
CALL     ESI
TEST     EAX,EAX
JNZ      0041951F
CMP      DWORD [EBP-08],BYTE +03
JNZ      0041951F
CMP      DWORD [EBP-04],BYTE +08
JNZ      0041951F
LEA      EAX,[EBP-04]
PUSH     EAX
LEA      EAX,[EBP-10]
PUSH     EAX
LEA      EAX,[EBP-08]
PUSH     EAX
PUSH     BYTE +00
LEA      EAX,[EBP-30]
PUSH     EAX
PUSH     DWORD [EBP+08]
CALL     ESI
TEST     EAX,EAX
JNZ      0041951F
LEA      EAX,[EBP-10]
PUSH     EAX
CALL     00423EDA          / * 兵來將擋,“你”來我訪!* /
JMP      SHORT 00419521
XOR      EAX,EAX
POP      ESI
LEAVE  
RET      04

PUSH     ESI
MOV      ESI,[ESP+08]
MOVZX    EAX,WORD [ESI]    / * SN(1)的十六進位制值送入 EAX * /
PUSH     BYTE +0A          / * 0xA 入棧 * /
CDQ    
POP      ECX               / * ECX 出棧 * /
IDIV     ECX               / * 除以 ECX * /
CMP      EAX,AB            / * 比較商是否等於0xAB * /
JZ       00423EF4          / * 是就進入下一步計算 * /
OR       EAX,BYTE -01
JMP      SHORT 00423F12    / * 否則返回 * /


從上面我們知道: SN(1)/0xA=0xAB,即 SN(1)=0xAB*0xA=0x6AE。

哎,等等先~!我以前校隊球衣號碼是7號,那就:SN(1)=0x6AE+0x7=0x6B5 吧 :)!

重新填入註冊資訊繼續:

PUSH     EDI
MOV      DI,[ESI+06]
PUSH     ESI
CALL     00423DD1          / * 可疑呀~~~ * /
CMP      EAX,BYTE +01      / * EAX 必須等於 1 哦 * /
JNZ      00423F11          / * 跳走就 Game Over !

PUSH     ECX
PUSH     ESI
MOV      ESI,[ESP+0C]
MOV      AX,[ESI+02]       / * SN(2) 送入 AX * /
AND      WORD [ESI+06],BYTE +00
CMP      AX,270F
JA       NEAR 00423ED2     / * 大於 0x270F 就 Game Over !
MOV      DX,[ESI+04]       / * SN(3) 送入 DX * /
CMP      DX,270F
JA       NEAR 00423ED2     / * 大於0x270F 就跳向 423ED2 * /
TEST     AX,AX             / * 測試 SN(2) * /
JZ       NEAR 00423ECE     / * 為空就跳向 423ECE * /
CMP      AX,08AE           / * 比較 AX 是否等於 0x8AE * /
JZ       NEAR 00423ECE     / * 為空就跳向 423ECE * /
CMP      AX,162E           / * 比較 AX 是否等於 0x162E * /
JZ       NEAR 00423ECE     / * 為空就跳向 423ECE * /
CMP      AX,2516           / * 比較 AX 是否等於 0x2516 * /
JZ       NEAR 00423ECE     / * 為空就跳向 423ECE * /
XOR      ECX,ECX           / * ECX 清零 * /
MOV      CX,[ESI]          / * SN(1)送入 CX * /
CMP      CX,06AE           / * 比較是否等於 0x6AE * /
MOV      [ESP+04],ECX      / * ECX 的值送入[ESP+4]處 * /
JZ       NEAR 00423ECE     / * 是就送你回姥姥家!
CMP      AX,0B2C           / * 比較 SN(2)是否等於 0xB2C  * /
JZ       NEAR 00423ECE     / * 是就 Game Over !
CMP      AX,1F80           / * 比較 SN(2)是否等於 0x1F80  * /
JZ       NEAR 00423ECE     / * 是就 Game Over !
PUSH     EBX
MOVZX    EAX,AX            / * SN(2)的值送入 EAX * /
PUSH     EBP
PUSH     EDI
MOVZX    EDI,DX            / * SN(3)的值送入 EDI * /
MOV      [ESP+18],EAX      / * EAX 的值送入 [ESP+18]處 * /
PUSH     BYTE +64          / * 0x64 入棧 * /
POP      EBX               / * EBX 出棧 * /
MOV      EAX,EDI           / * EDI 送入 EAX * /
CDQ    
IDIV     EBX               / * 除以 EBX * /
PUSH     BYTE +0A          / * 0xA 入棧 * /
POP      EBP               / * EBP 出棧 * /
MOVZX    ECX,CX            / * SN(1)送入 ECX * /
PUSH     BYTE +64
MOV      EBX,EAX           / * EAX 送入 EBX * /
MOV      EAX,ECX           / * ECX 送入 EAX * /
CDQ    
IDIV     EBP               / * 除以 EBP * /
MOV      EDX,[ESP+1C]      / * SN(2)送入 EDX * /
ADD      EDX,EBX           / * EDX + EBX * /
ADD      EAX,EDX           / * EAX + EDX * /
ADD      EAX,EDI           / * EAX + EDI * /
CDQ    
POP      EDI               / * SN(3)出棧 * /
IDIV     EDI               / * 除以 EDI * /
MOV      EAX,[ESP+18]      / * SN(2)送入 EAX * /
PUSH     BYTE +64          / * 0x64 入棧 * /
POP      EBX               / * EBX 出棧 * /
PUSH     BYTE +64
POP      EBP               / * EBP 出棧 * /
PUSH     EBP
MOV      DI,[EDX*4+00446B10]   / * 查表取值 * /
CDQ    
IMUL     DI,DI,BYTE +64    / * 乘以 0x64 * /
IDIV     EBX               / * 除以 EBX * /
MOV      EBX,EAX           / * EAX 送入 EBX * /
MOV      EAX,ECX           / * ECX 送入 EAX * /
CDQ    
IDIV     EBP               / * 除以 EBP * /
ADD      ECX,EBX           / * ECX + EBX * /
ADD      EAX,ECX           / * EAX + ECX * /
POP      ECX               / * ECX 出棧 * /
CDQ    
IDIV     ECX               / * 除以 ECX * /
ADD      DI,[EDX*4+00446B10]   / * 查表取值 * /
CMP      WORD [ESP+10],06B3    / * 比較 SN(1) 是否等於 0x6B3 * /
MOV      [ESI+06],DI       / * DI 的值 送入 ESI+06 處 * /
POP      EDI               / * SN(4)出棧 * /
POP      EBP
POP      EBX
JZ       00423EC9          / * 是就跳向教學註冊版本 * /
CMP      WORD [ESP+04],06B2    / * 比較SN(1)是否等於 0x6B2 * /
JZ       00423EC9          / * 是就跳向教學註冊版本 * /
XOR      EAX,EAX           / * 否則將 EAX 清零 * /
INC      EAX               / * EAX + 1 * /
JMP      SHORT 00423ED5    / * 成功返回 * /
PUSH     BYTE +02          / * 0x2 入棧 * /
POP      EAX               / * EAX 出棧 * /
JMP      SHORT 00423ED5
PUSH     BYTE -02          / * 0xFFFFFFFE 入棧 * /
JMP      SHORT 00423ECB
OR       EAX,BYTE -01      / * EAX 與 0xFFFFFFFF 做與運算 * /
POP      ESI
POP      ECX
RET      04                / * 返回 * /

XOR      EAX,EAX           / * EAX 清零 * /
CMP      DI,[ESI+06]       / * 關鍵比較 * /
SETZ     AL                / * 相等就將 AL 置 1 * /
LEA      EAX,[EAX+EAX-01]  / * 將 EAX+EAX-1 的值儲存到 EAX * /
POP      EDI
POP      ESI
RET      04                / * 返回 * /


附表:

0030:00446B10 26 00 00 00 5B 00 00 00-62 00 00 00 36 00 00 00 &...[...b...6...
0030:00446B20 34 00 00 00 60 00 00 00-13 00 00 00 35 00 00 00 4...`.......5...
0030:00446B30 19 00 00 00 54 00 00 00-3F 00 00 00 44 00 00 00 ....T...?...D...
0030:00446B40 4C 00 00 00 38 00 00 00-5D 00 00 00 33 00 00 00 L...8...]...3...
0030:00446B50 56 00 00 00 61 00 00 00-42 00 00 00 21 00 00 00 V...a...B...!...
0030:00446B60 3E 00 00 00 2D 00 00 00-23 00 00 00 0E 00 00 00 >...-...#.......
0030:00446B70 1E 00 00 00 5F 00 00 00-57 00 00 00 12 00 00 00 ...._...W.......
0030:00446B80 1B 00 00 00 17 00 00 00-22 00 00 00 58 00 00 00 ........"...X...
0030:00446B90 2C 00 00 00 63 00 00 00-5C 00 00 00 18 00 00 00 ,...c...\.......
0030:00446BA0 37 00 00 00 41 00 00 00-59 00 00 00 4D 00 00 00 7...A...Y...M...
0030:00446BB0 15 00 00 00 5A 00 00 00-53 00 00 00 0B 00 00 00 ....Z...S.......
0030:00446BC0 05 00 00 00 1C 00 00 00-10 00 00 00 2E 00 00 00 ................
0030:00446BD0 49 00 00 00 40 00 00 00-0D 00 00 00 07 00 00 00 I...@...........
0030:00446BE0 50 00 00 00 3D 00 00 00-32 00 00 00 46 00 00 00 P...=...2...F...
0030:00446BF0 0A 00 00 00 43 00 00 00-2B 00 00 00 00 00 00 00 ....C...+.......
0030:00446C00 3B 00 00 00 48 00 00 00-5E 00 00 00 4E 00 00 00 ;...H...^...N...
0030:00446C10 51 00 00 00 1F 00 00 00-20 00 00 00 3A 00 00 00 Q....... ...:...
0030:00446C20 01 00 00 00 2A 00 00 00-45 00 00 00 55 00 00 00 ....*...E...U...
0030:00446C30 4A 00 00 00 02 00 00 00-52 00 00 00 27 00 00 00 J.......R...'...
0030:00446C40 03 00 00 00 4B 00 00 00-08 00 00 00 3C 00 00 00 ....K.......<...
0030:00446C50 0F 00 00 00 14 00 00 00-24 00 00 00 25 00 00 00 ........$...%...
0030:00446C60 28 00 00 00 29 00 00 00-16 00 00 00 1D 00 00 00 (...)...........
0030:00446C70 1A 00 00 00 11 00 00 00-2F 00 00 00 39 00 00 00 ......../...9...
0030:00446C80 09 00 00 00 47 00 00 00-06 00 00 00 4F 00 00 00 ....G.......O...
0030:00446C90 04 00 00 00 31 00 00 00-0C 00 00 00 30 00 00 00 ....1.......0...
0030:00446CA0 01 00 00 00 01 00 00 00-FF FF FF FF FF FF FF FF ........

呵呵,好像長征一樣!不過總算寫完了!:)

寫了個小程式,刪掉了前面的地址,這下初學者朋友就不會“偷懶”了!:)

總結一下吧:

 1:序列號只能為數字;

 2:SN(1)<> 0x6AE、0x6B2、0x6B3;

 3:SN(2)<>0xB2C、0x1F80、0x8AE、0x162E、0x2516;

 4:(SN(1)/0xA+SN(2)+SN(3)/0x64+SN(3)) MOD 0x64;

 5:根據步驟 4 的結果查表取值,然後乘以 0x64;

 6:(SN(1)+SN(1)/0x64+SN(2)/0x64)) MOD 0x64;

 7:根據步驟 6 的結果查表;
 
 8:SN4 = 步驟 5 的結果 + 步驟 7 的結果。

剩下的工作就是寫序號產生器了:

#include <stdlib.h>
main()
{ int sn1,sn2,sn3,sn4,i,p,q,data[]={0x26,0x5B,0x62,0x36,0x34,0x60,0x13,0x35,0x19,0x54,0x3F,0x44,0x4C,0x38,0x5D,0x33,0x56,0x61,0x42,0x21,0x3E,0x2D,0x23,0x0E,0x1E,0x5F,0x57,0x12,0x1B,0x17,0x22,0x58,0x2C,0x63,0x5C,0x18,0x37,0x41,0x59,0x4D,0x15,0x5A,0x53,0x0B,0x05,0x1C,0x10,0x2E,0x49,0x40,0x0D,0x07,0x50,0x3D,0x32,0x46,0x0A,0x43,0x2B,0x00,0x3B,0x48,0x5E,0x4E,0x51,0x1F,0x20,0x3A,0x01,0x2A,0x45,0x55,0x4A,0x02,0x52,0x27,0x03,0x4B,0x08,0x3C,0x0F,0x14,0x24,0x25,0x28,0x29,0x16,0x1D,0x1A,0x11,0x2F,0x39,0x09,0x47,0x06,0x4F,0x04,0x31,0x0C,0x30,0x01,0x01,0xFF};

 clrscr();  

 randomize();
 
 printf("*****************************************************\n");
 printf("*                  EmEditor 3.28 Keygen             *\n");
 printf("*                     Made by fengma                *\n");
 printf("*                  Mail:fengma@2911.net             *\n");
 printf("*****************************************************\n");

 printf("\nYour registration code:");

 for(i=0;;i++)
   {sn1=random(10)+0x6AE;
    if(sn1/0xA==0xAB&&(sn1)!=0x6AE&&(sn1)!=0x6B2&&(sn1)!=0x6B3&&(sn1)!=0x0)
       break;
   }
 printf("%d",sn1);

 printf("-");


 for(i=0;;i++)
   {sn2=random(10000);
    if((sn2)!=0xB2C&&(sn2)!=0x1F80&&(sn2)!=0x8AE&&(sn2)!=0x162E&&(sn2)!=0x2516&&(sn2)!=0x0)
       break;
   }
  if     (sn2<10)   printf("000%d",sn2);
  else if(sn2<100)  printf("00%d",sn2);
  else if(sn2<1000) printf("0%d",sn2);
  else              printf("%d",sn2);

 printf("-");

 sn3=random(10000);
  if     (sn3<10)   printf("000%d",sn3);
  else if(sn3<100)  printf("00%d",sn3);
  else if(sn3<1000) printf("0%d",sn3);
  else              printf("%d",sn3);

 printf("-");

 p=(sn1/0xA+sn2+sn3/0x64+sn3)%0x64;
 q=(sn1+sn1/0x64+sn2/0x64)%0x64;
 sn4=data[p]*0x64+data[q];
  if     (sn4<10)   printf("000%d",sn4);
  else if(sn4<100)  printf("00%d",sn4);
  else if(sn4<1000) printf("0%d",sn4);
  else              printf("%d",sn4);

 printf("\n");

 getch();
}


fengma[BCG] Cracked

17:48 02-15-2003

相關文章