* updated by Kii Ali, 12-11-2001 Eudora 4.3.0.46 (正式版) 修改法: 1.解決郵件亂碼 ============= 檔案: Eudora.exe 搜尋: 0F 8C E5 05 (共一組) 修改: E9 46 06 00 0FBEC3 MOVSX EAX,BL 3DC0000000 CMP EAX,000000C0 0F8CDF050000 JL 00530560 3DFF000000 CMP EAX,000000FF 0F8FD4050000 JG 00530560 80FBC0 CMP BL,C0 解決錯誤視窗內的文字會顯示亂碼問題 =================================== 檔案: Eudora.exe 搜尋: 74 09 8A 44 (共一組) 修改: -- 00 -- -- 解決首字空白亂碼問題 ===================== 檔案: Eudora.exe 搜尋: F7 46 64 00 00 00 08 8A 44 24 08 74 12 3C 20 75 0E 66 83 BE B8 07 00 00 20 0F 86 92 00 00 00 8B 8E 98 07 00 00 修改: 8B 8E 98 07 00 00 8A 44 24 08 3C 20 74 08 3C A0 75 13 B0 20 EB 0F 80 79 FF 09 0F 82 91 00 00 00 90 90 90 90 90 (增加對 A0 及 09 字元的判斷,共一組) F7466400000008 TEST DWORD PTR [ESI+64],08000000 8A442408 MOV AL,[ESP+08] 7412 JZ 004AD852 3C20 CMP AL,20 750E JNZ 004AD852 6683BEB807000020 CMP WORD PTR [ESI+000007B8],20 0F8692000000 JBE 004AD8E4 8B8E98070000 MOV ECX,[ESI+00000798] 8801 MOV [ECX],AL ↓ 8BBE98070000 MOV ECX,[ESI+00000798] 8A442408 MOV AL,[ESP+08] 3C20 CMP AL,20 7408 JZ 004AD849 3CFF CMP AL,A0 7513 JNZ 004AD858 B020 MOV AL,20 EB0F JMP 004AD858 8079FF09 CMP BYTE PTR [ECX-1],09 0F8291000000 JB 004AD8E4 90 NOP 90 NOP 90 NOP 90 NOP 90 NOP 8801 MOV [ECX],AL 解決附加檔案不相容中文問題 (含 '\' 字元問題) ============================================= 檔案: Eudora.exe .搜尋: 3C FF 15 70 17 67 00 修改: -- E8 84 DB 02 00 90 (寄信時的檔名檢查副程式,現在將流程轉向執行相容中文字的副程式,共一組) .搜尋: F9 FF FF 83 C4 10 85 C0 74 53 8D 8C 24 30 02 00 00 6A 5C 51 FF 15 70 17 67 00 修改: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- E8 FC 53 0C 00 90 (收信時的檔名檢查副程式,處理同上將流程轉向,共一組) 搜尋: 00 3D FF 00 00 00 0F 8F D4 05 00 00 80 FB C0 75 13 68 0C 52 6B 00 8D 4C 24 14 E8 2D A2 0D 00 E9 7D 0F 00 00 80 FB C1 75 13 68 10 52 6B 00 8D 4C 24 14 E8 15 A2 0D 00 E9 65 0F 00 00 80 FB C2 75 13 68 78 52 6B 00 8D 4C 24 14 E8 FD A1 0D 00 E9 4D 0F 00 00 80 FB C3 75 13 68 28 52 6B 00 8D 4C 24 14 E8 E5 修改: 57 8B 7C 24 08 56 51 33 F6 57 8A 07 47 3C 00 75 F9 8D 4F FF 5F E8 19 00 00 00 85 C0 74 07 8B F7 47 3B F9 72 F0 85 F6 75 04 33 C0 EB 02 8B C6 59 5E 5F C3 8A 07 3C A1 73 0B 3C 00 74 0E 3C 5C 74 07 47 EB EF 47 47 EB EB 8B C7 C3 33 C0 C3 8B 31 E8 F5 E0 0E 00 8B F8 8A 06 3C 00 74 06 88 07 46 47 EB F4 C3 (修改無用的程式碼,另外寫一個較聰明的副程式,增加對 '\' 字元的判斷,共一組) .搜尋: 74 07 E8 A0 F8 (直接跳開字元過濾,共一組) 修改: EB 0C -- -- -- .搜尋: 05 B8 04 07 6E 00 (跳開目錄尾端 '\' 字元判斷,共三組) 修改: 00 -- -- -- -- -- .6A5C PUSH 5C ---> '\' 51 PUSH ECX FF1564556300 CALL [00635564] 直接轉向改為 --> CALL 0052FF80 (呼叫我們寫好的副程式) 8BD0 MOV EDX,EAX 83C408 ADD ESP,08 8D7C2420 LEA EDI,[ESP+20] 83C9FF OR ECX,-01 33C0 XOR EAX,EAX 42 INC EDX F2AE REPNZ SCASB F7D1 NOT ECX 49 DEC ECX 8A440C1F MOV AL,[ECX+ESP+1F] 3C5C CMP AL,5C B8CCD46A00 MOV EAX,006AD4CC --> 指向 00 7405 JZ 0047647B B898F96900 MOV EAX,0069F998 --> 指向 '\' 字元 .57 PUSH EDI 8B7C2408 MOV EDI,[ESP+08] 56 PUSH ESI 51 PUSH ECX 33F6 XOR ESI,ESI 57 PUSH EDI 8A07 MOV AL,[EDI] 47 INC EDI 3C00 CMP AL,00 75F9 JNZ 005322F6 8D4FFF LEA ECX,[EDI-01] 5F POP EDI E819000000 CALL 0053231F 85C0 TEST EAX,EAX 7407 JZ 00532311 8BF7 MOV ESI,EDI 47 INC EDI 3BF9 CMP EDI,ECX 72F0 JB 00532301 85F6 TEST ESI,ESI 7504 JNZ 00532319 33C0 XOR EAX,EAX EB02 JMP 0053231B 8BC6 MOV EAX,ESI 59 POP ECX 5E POP ESI 5F POP EDI C3 RET 8A07 MOV AL,[EDI] 3CA1 CMP AL,A1 730B JAE 0053232E 3C00 CMP AL,00 740E JZ 00532335 3C5C CMP AL,5C 7407 JZ 00532332 47 INC EDI EBEF JMP 0053231D 47 INC EDI 47 INC EDI EBEB JMP 0053231D 8BC7 MOV EAX,EDI C3 RET 33C0 XOR EAX,EAX C3 RET 8B31 MOV ESI,[ECX] E883A30D00 CALL 0060C404 ---> 將大寫英文轉換為小寫 8BF8 MOV EDI,EAX 8A06 MOV AL,[ESI] ---> 將未轉換過的原字串複製到處理過後的字串位址 3C00 CMP AL,0 7406 JZ 0053234F 8807 MOV [EDI],AL 46 INC ESI 47 INC EDI EBF4 JMP 00532343 C3 RET .FF1528736300 CALL [KERNEL32!FindClose] 8D4C2420 LEA ECX,[ESP+20] 51 PUSH ECX E85C3A1000 CALL 005795C6 8BBC248C040000 MOV EDI,[ESP+0000048C] 83C404 ADD ESP,04 8BF0 MOV ESI,EAX 85F6 TEST ESI,ESI 57 PUSH EDI 7407 JZ 00475B82 -------------------------------+ E8B0F8FFFF CALL 00475440 (字元過濾副程式) | EB05 JMP 00475B87 | E8C9F7FFFF CALL 00475350 (跳過這個 call 不要執行) | 83C404 ADD ESP,04 <--------------------------------+ 8D942430020000 LEA EDX,[ESP+00000230] 8D442420 LEA EAX,[ESP+20] 56 PUSH ESI 52 PUSH EDX 57 PUSH EDI 50 PUSH EAX 解決 Eudora 本身內含的解碼程式不正確問題 ========================================= Beta 54 的程式已經內含 Base64 信件解碼功能,所以之前版本所增加的解碼修改 已經不需要了,但是 Beta 54 的解碼還是有 bug 要修。 例如:"國棠xQ==" 程式將字串解碼後卻未處理好長度問題,所以我們必須幫它在解碼結尾的地方補 0。 檔案: Eudora.exe .搜尋: 5D 5F 8B 44 24 18 (解碼完成後跳到補 0 程式碼,共一組) 修改: EB 34 -- -- -- -- .搜尋: 90 90 90 90 90 90 90 90 90 90 90 A1 30 35 (新增補 0 的程式碼,共一組) 修改: C6 03 00 5D 5F EB C5 -- -- -- -- -- -- -- Eudora 本身內含的 Base64 解碼副程式尾部) B09 JMP 0040A30F F442410 INC DWORD PTR [ESP+10] B03 JMP 0040A30F F4608 INC DWORD PTR [ESP+08] B44241C MOV EAX,[ESP+1C] 5 INC EBP 8 DEC EAX 944241C MOV [ESP+1C],EAX F8518FFFFFF JNZ 0040A237 D POP EBP ---> JMP 0040A355 (跳到補 0 程式碼)--+ F POP EDI | B442418 MOV EAX,[ESP+18] | E POP ESI | BD8 SUB EBX,EAX | B442418 MOV EAX,[ESP+18] | 918 MOV [EAX],EBX | B442404 MOV EAX,[ESP+04] | B POP EBX | 9 POP ECX | 21000 RET 0010 | | 60300 MOV BYTE PTR [EBX],00 <------------------------+ D POP EBP F POP EDI BC5 JMP 0040A321 解決 Eudora 信件寄出時會在首字空白前面 (或 '>' 引言前面) 多加一個空白字元問題 ============================================================================== 檔案: Eudora.exe .搜尋: C6 45 00 20 45 (共一組) 修改: -- -- -- -- 90 .搜尋: 74 18 83 7C 24 30 (共一組) 修改: -- 27 -- -- -- -- .搜尋: C0 75 09 6A 20 修改: -- -- -- EB 0D (首字   會產生 2 個空白字元,跳過第一次比對後的空白,共一組) .8A06 MOV AL,[ESI] 3C20 CMP AL,20 7419 JZ 005042BB 3C3E CMP AL,3E 7415 JZ 005042BB 6A05 PUSH 05 680C2E6A00 PUSH 006A2E0C 56 PUSH ESI FF15EC966300 CALL [006396EC] 83C40C ADD ESP,0C 85C0 TEST EAX,EAX 7505 JNZ 005042C0 C6450020 MOV BYTE PTR [EBP+00],20 45 INC EBP -------> NOP 即可 6A0A PUSH 0A 56 PUSH ESI FF15FC966300 CALL [006396FC] 8BD8 MOV EBX,EAX 83C408 ADD ESP,008 85DB TEST EBX,EBX 85C0 TEST EAX,EAX (比對 > 後,跳過額外增加 20h 的副程式) 7418 JZ 0044CB8E -----------------------+ 837C243005 CMP DWORD PTR [ESP+30],05 | 721A JB 0044CB97 | 6A05 PUSH 05 | 680C3E6A00 PUSH 006A3E0C | 57 PUSH EDI | FFD5 CALL EBP | 83C40C ADD ESP,0C | 85C0 TEST EAX,EAX | 7509 JNZ 0044CB97 | 6A20 PUSH 20 ---------> 填入空白 20h | 8BCB MOV ECX,EBX | E87F021C00 CALL 0060CE16 | 8B44242C MOV EAX,[ESP+2C] | 85C0 TEST EAX,EAX | 740D JZ 0044CBAC <----------------------+ 6A20 PUSH 20 ---------> 填入空白 20h 8D8EB0020000 LEA EAX,[ESI+000002B0] E86A021C00 CALL 0060CE16 .修改附加檔案的長度被限定在 8.3 格式問題 ======================================== 檔案: Eudora.exe 搜尋: 2B C1 3B F0 7C 02 8B F0 修改: -- -- -- -- EB -- -- -- (修改主檔名 8 個字元的限制,修改搜尋到的第一組) 2BC1 SUB EAX,ECX 3BF0 CMP ESI,EAX ---> ESI 是儲存「正確」字數 7C02 JL 00475855 8BF0 MOV ESI,EAX 解決系統處理中文字會當機問題 ============================= 檔案: Paige32.dll 搜尋: 74 20 8D 85 (共一組) 修改: EB -- -- -- .解決無法建立中文名稱檔案,系統只取英文和數字的問題 ==================================================== 為了相容中文,我們應該避開中文字的用字範圍: High Byte = A1h∼FEh,Low Byte = 40h∼7Eh、A1h∼FEh 檔案: QCUtils.dll (共一組) 搜尋: 3C 20 74 2E 3C 7F 7F 2A 3C 61 7C 04 3C 7A 7E 22 3C 41 7C 04 3C 5A 7E 1A 3C 30 7C 04 3C 39 7E 12 修改: 3C 22 74 18 3C 2A 74 14 3C 2E 74 10 3C 2F 74 0C 3C 7C 74 00 3C 3A 72 1C 3C 3F 77 18 B0 20 EB 14 3C20 CMP AL,20 CMP AL,22 '"' 742E JZ 60003FA9 JZ 60003F93 3C7F CMP AL,7F CMP AL,2A '*' 7F2A JG 60003FA9 JZ 60003F93 3C61 CMP AL,61 CMP AL,2E '.' 7C04 JL 60003F87 改為 JZ 60003F93 3C7A CMP AL,7A -----> CMP AL,2F '/' 7E22 JLE 60003FA9 JZ 60003F93 3C41 CMP AL,41 CMP AL,7C (保留 \ 和 | 字元) 7C04 JL 60003F8F JZ 60003F8B 3C5A CMP AL,5A CMP AL,3A ':' (: ; < = > ?) 7E1A JLE 60003FA9 JB 60003FAB 3C30 CMP AL,30 CMP AL,3F '?' 7C04 JL 60003F97 JA 60003FAB 3C39 CMP AL,39 MOV AL,20 7E12 JLE 60003FA9 JMP 60003FAB 0.解決修改 Eudora 解碼判斷字串 iso-8859-1 後會發生解碼失效問題並增加對 big5 的判斷 ================================================================================== 案: Eudora.exe 尋: 00 83 C4 0C F7 D8 1B C0 40 C3 改: -- -- -- -- -- -- 33 -- -- -- 將字串比對後的結果設定為 "符合",共一組) 442404 MOV EAX,[ESP+04] AFF PUSH FF 0 PUSH EAX 85D0D0000 PUSH 00000D5D 83F0D0800 CALL 004F5650 --> 比對 "iso-8859-1" 字串,若正確則繼續解碼動作。 3C40C ADD ESP,0C 7D8 NEG EAX BC0 SBB EAX,EAX ---> XOR EAX,EAX 0 INC EAX 3 RET Eudora 內部的解碼程式 // 39 JA 00451608 3C9 XOR ECX,ECX A8820164500 MOV CL,[EAX+00451620] F248D0C164500 JMP [ECX*4+0045160C] B542404 MOV EDX,[ESP+04] 2 PUSH EDX 808FFFFFF CALL 004514F0 -----> qp 解碼 3C404 ADD ESP,04 801000000 MOV EAX,00000001 3 RET B442404 MOV EAX,[ESP+04] 0 PUSH EAX 875FFFFFF CALL 00451570 -----> Base64 解碼 3C404 ADD ESP,04 5C0 TEST EAX,EAX 506 JNZ 00451608 801000000 MOV EAX,00000001 3 RET 3C0 XOR EAX,EAX 3 RET qp 解碼副程式 // PUSH EBX 6 PUSH ESI B74240C MOV ESI,[ESP+0C] 7 PUSH EDI BFE MOV EDI,ESI 3C9FF OR ECX,-01 3C0 XOR EAX,EAX BDE MOV EBX,ESI 2AE REPNZ SCASB 7D1 NOT ECX 9 DEC ECX 3CE ADD ECX,ESI BF1 CMP ESI,ECX 94C2410 MOV [ESP+10],ECX 34C JAE 0045155B 5 PUSH EBP BE9 MOV EBP,ECX D7E01 LEA EDI,[ESI+01] BEE SUB EBP,ESI A03 MOV AL,[EBX] C3D CMP AL,3D 40F JZ 0045152C C5F CMP AL,5F 405 JZ 00451526 806 MOV [ESI],AL 6 INC ESI B2D JMP 00451553 60620 MOV BYTE PTR [ESI],20 6 INC ESI B27 JMP 00451553 3FD03 CMP EBP,03 D06 JGE 00451537 6063D MOV BYTE PTR [ESI],3D 6 INC ESI B1C JMP 00451553 BC6 MOV EAX,ESI A02 PUSH 02 7 PUSH EDI 0 PUSH EAX 6 INC ESI 87D540200 CALL 004769C0 B4C2420 MOV ECX,[ESP+20] 3C40C ADD ESP,0C 3C302 ADD EBX,02 3ED02 SUB EBP,02 3C702 ADD EDI,02 3 INC EBX D DEC EBP 7 INC EDI BD9 CMP EBX,ECX 2BD JB 00451517 D POP EBP 60600 MOV BYTE PTR [ESI],00 F POP EDI E POP ESI B POP EBX 3 RET .解決 Eudora 4.2 版互相回覆信件時會自動加上 format=flowed 字串使得觀看信件時顯示灰線問題 ========================================================================================= 案: Eudora.exe 尋: 74 02 B3 01 8B (共一組) 改: -- -- -- 00 -- 685C0 TEST AX,AX 402 JZ 00502A4C 301 MOV BL,01 -----------> MOV BL,00 B8424D4000000 MOV EAX,[ESP+000000D4] 5C0 TEST EAX,EAX 408 JZ 00502A5F D700C LEA ESI,[EAX+0C] D682C LEA EBP,[EAX+2C] 2DB XOR BL,BL 4DB TEST BL,BL B1DC4966300 MOV EBX,[006396C4] F8497000000 JZ 00502B04 --------> 此處判斷若不為 Zero 時則自動加上 format=flowed 字串 Eudora 4.2 版收到信件內容含 format=flowed 字串時,會自動在信件內容頭尾處加上 ,使得 Eudora 觀看信件時會顯示灰線。 .解決 Find Messages 有某些文字搜尋不到的問題 (例如搜尋: 新聞、主編) ==================================================================== 檔案: Eudora.exe a.搜尋: E8 C4 17 00 00 (跳到新增處理,保留原搜尋字串,要配合第 4. 項修改,共一組) 修改: -- C8 36 F1 FF .搜尋: 8D 8D 54 FF FE FF 51 FF (跳開內容大寫英文轉小寫副程式,共一組) 修改: -- -- -- -- -- -- EB 08 E88E170000 CALL 0060C6C4 ----> CALL 0053233A (保留原搜尋字串) 8B4C2410 MOV ECX,[ESP+10] 5F POP EDI 64890D00000000 MOV FS:[00000000],ECX 5E POP ESI 83C414 ADD ESP,14 C3 RET 8D8D54FFFEFF LEA ECX,[EBP+FFFEFF54] 51 PUSH ECX FF15C0856300 CALL [006395B4] --> (內容大寫英文轉小寫副程式) 83C404 ADD ESP,04 : 修改後 Find Messages 英文大小寫有分 的 asm 程式是前幾版的,並沒有和修改碼互相對應,但有 考價值我就貼出來了.