天然碼輸入法

《天然碼輸入法》是一款公務版電腦軟體,支持Win9x/Me/NT/2000/XP。

軟體介紹

《三維天然碼輸入法6.18c智慧型版》亦稱"公務版"這是惟一入選《中國政府採購首選產品指南》的輸入法產品(國家信息產業部頒證).特點是"三不"不記字根、不用拼音、不論老少,人人可以當場學會電腦打字並上網聊天;優勢是"三絕"沒有打不出的字、沒有打不出的詞、沒有學不會的人.優點是"十強"四鍵百字、簡繁雙打、打字發音、自動校對、英漢雙語朗讀、智慧型造詞、螢幕造句、高頻優先、聯想輸入、萬能查詢;能列印輸出20902個各種簡繁、異體漢字和300多個特殊符號,基本詞組80000條,智慧型詞組無限量.內置《打字當日通》和《天然打字寶》,讓您無師自通.還可升級為《天然大字型檔版》 .智慧型版的特點如下:一、《三維天然碼6.19a智慧型版》在原基礎上完善了如下功能:1.修改了省鍵編碼的特例;2.增加了兩萬條現代用語;3.統一了電腦打字當日通;4.完善了軟體註冊與服務;5.開通了網上升級與服務;6.充實了高級功能的設定;7.最佳化了用戶詞庫的管理;8.強化了編碼的萬能查詢;9.調整了語音校對的選擇,有八種高低快慢識讀方式選擇.二、《三維天然碼6.19a智慧型版》在原基礎上新增了如下功能:1.新增英文環境漢字輸入功能,純英文WIDOWS狀態下輸入漢字 2.新增智慧型詞庫直接備份功能,可備份到軟碟轉移到其它電腦 3.新增用戶詞庫萬能掛接功能,省去用戶自己掛接詞庫的麻煩 4.新增專業詞庫網上導入功能,用戶選擇使用自己的專業詞庫 5.新增特殊符號直接輸入功能,用代碼方式直接輸入特殊符號 6.新增以字帶詞聯想輸入功能,只要打出首字就顯示任意詞組 7.新增一鍵上網國際互聯功能,只要用戶點擊此鍵就立即上網 8.新增自動卸載清除垃圾功能,方便用戶升級或清除多餘程式 9.新增萬能編碼用戶作主功能,用戶可自己創造編碼當場使用 10.新增簡繁速換立即轉換功能,根據深圳李琦同志建議而改進 三、《三維天然碼6.19a智慧型版》內置如下贈送軟體:1.《電腦打字當日通XP版》即《天然碼練習版》 ;2.《天然打字寶》即《電腦打字當日通豪華版》 3.《天然大字型檔V1.0版》 適用對象適合各種使用特殊漢字的人,如工商稅務、公安戶籍、經理老闆、秘書文書、作家記者、機關團體、圖書資料、新聞出版、地方志編輯、中醫中藥、農林牧漁等等行業.使用方法下載到硬碟、軟碟、隨身碟均可,按說明安裝即可.

特點

加密特點

在比較註冊碼前,先產生另外的進程調用vxd繞過window api讀指紋盤,如果沒有指紋盤就不比較註冊碼。其實這個軟體是明碼比較不用脫殼的,但對dll脫殼是很多初學者還沒掌握的基本技能,所以還是多此一舉把trm32.ime的殼脫了。(trm32.ime說穿了就是一個dll)

dll殼脫的難點在於dll是動態載入的(廢話!),所以不能用loader。那么我們只好在dll的entry point加上int 3的指令了。

安裝

用peditor裝入windowssystemtrm32.ime,可看到entry point = 0003D210;Image Base = 10000000;用peditor的FLC計算entry point(1003d210)的偏移為:00013610。再用二進制編輯器在偏移為00013610處機器碼為80H的內容改為CC(即 int 3的機器碼)。

現在運行trw2k,下命令“I3HERE ON”,打開任務條的輸入法管理器。選天然碼,點“屬性”將激活trw2k,停在dll的入口處:

017F:1003D210 CC INT3

017F:1003D211 7C24 JL 1003D237 (NO JUMP)

017F:1003D213 0801 OR [ECX],AL

017F:1003D215 0F8581010000 JNZ NEAR 1003D39C

017F:1003D21B 60 PUSHA

017F:1003D21C BE00A00210 MOV ESI,1002A000

“r eip eip-1”,“d eip”,將017F:1003D210處改為80H:

017F:1003D210 807C240801 CMP BYTE [ESP+08],01

017F:1003D215 0F8581010000 JNZ NEAR 1003D39C

017F:1003D21B 60 PUSHA

017F:1003D21C BE00A00210 MOV ESI,1002A000

017F:1003D221 8DBE0070FDFF LEA EDI,[ESI+FFFD7000]

017F:1003D227 57 PUSH EDI

f10跟蹤,來到這裡:

017F:1003D344 95 XCHG EAX,EBP

017F:1003D345 8A07 MOV AL,[EDI]

017F:1003D347 47 INC EDI 《===EDI為引入的函式名

017F:1003D348 08C0 OR AL,AL

017F:1003D34A 74DC JZ 1003D328

017F:1003D34C 89F9 MOV ECX,EDI

017F:1003D34E 57 PUSH EDI

017F:1003D34F 48 DEC EAX

017F:1003D350 F2AE REPNE SCASB

017F:1003D352 55 PUSH EBP

017F:1003D353 FF9634DA0300 CALL NEAR [ESI+0003DA34] 〈==getprocessaddress

017F:1003D359 09C0 OR EAX,EAX

017F:1003D35B 7407 JZ 1003D364

017F:1003D35D 8903 MOV [EBX],EAX

017F:1003D35F 83C304 ADD EBX,BYTE +04

017F:1003D362 EBE1 JMP SHORT 1003D345

以上代碼為恢復引入表。繼續f10跟蹤,來到這裡:

017F:1003D38C EBE2 JMP SHORT 1003D370

017F:1003D38E 240F AND AL,0F

017F:1003D390 C1E010 SHL EAX,10

017F:1003D393 668B07 MOV AX,[EDI]

017F:1003D396 83C702 ADD EDI,BYTE +02

017F:1003D399 EBE2 JMP SHORT 1003D37D

017F:1003D39B 61 POPA 〈====很眼熟吧!

017F:1003D39C E906BBFCFF JMP 10008EA7〈====OEP

所以OEP在10008EA7處。在10008EA7處DUMP出檔案。先看一下trm32.ime的IMTE。“MOD32 TRM32.IME”

可看到IMTE 為:xxxxxxxx;“PEDUMP C:TRM32.DLL xxxxxxxx”。並掛起進程“SUSPEND”。

回到window運行Imprec 1.3。在任務列表選rundll32.exe 點“pick dll”找到trm32.ime。輸入OEP(8EA7)

“get Imports”可修復IAT。再“fix dump”。將產生TRM32_.DLL,把它改名為trm32.ime 即可。到此脫殼完成。

用dump出的trm32.ime替換原來的檔案。再次運行輸入法管理器。選天然碼,點“屬性”,將彈出MESSAGEBOX說沒有指紋盤或disk serial不對。control-n激活trw2k,“pmodule”,“確定”後,回到trw2k:

:00401514 89442410 mov dword ptr [esp+10], eax

:00401518 8B442434 mov eax, dword ptr [esp+34]

:0040151C 50 push eax

:0040151D E88EFCFFFF call 004011B0 〈=====進入

:00401522 8BD8 mov ebx, eax

:00401524 3BDE cmp ebx, esi

:00401526 7528 jne 00401550

:00401528 56 push esi

* Possible StringData Ref from Data Obj ->"DiskSerial"

|

:00401529 68DC704000 push 004070DC

:0040152E B8847F4000 mov eax, 00407F84

* Possible StringData Ref from Data Obj ->"Disk not exists or process failed "

->"!"

|

:00401533 68B8704000 push 004070B8

:00401538 56 push esi

:00401539 89442424 mov dword ptr [esp+24], eax

:0040153D 89442428 mov dword ptr [esp+28], eax

:00401541 89442420 mov dword ptr [esp+20], eax

* Reference To: USER32.MessageBoxA, Ord:01BEh

|

:00401545 FF15C8604000 Call dword ptr [004060C8]

:0040154B E9A1000000 jmp 004015F1

注意這時是在getdiskserial.exe的領空。(也就是說trm32.ime產生getdiskserial.exe進程)。往上看,注意0040151D處的call 004011B0,在此處下斷點,再次運行進入“call 004011B0”來到這:

017F:00401439 50 PUSH EAX

017F:0040143A 8D8C2488030000 LEA ECX,[ESP+0388]

017F:00401441 6A04 PUSH BYTE +04

017F:00401443 51 PUSH ECX

017F:00401444 6A00 PUSH BYTE +00

017F:00401446 6A00 PUSH BYTE +00

017F:00401448 6A01 PUSH BYTE +01

017F:0040144A 56 PUSH ESI

017F:0040144B FF1514604000 CALL `KERNEL32!DeviceIoControl` 〈=調用vxd

017F:00401451 56 PUSH ESI

017F:00401452 FF151C604000 CALL `KERNEL32!FindCloseChangeNotification`

017F:00401458 8BB42490130000 MOV ESI,[ESP+1390]

017F:0040145F 8A843484030000 MOV AL,[ESP+ESI+0384]

017F:00401466 84C0 TEST AL,AL 〈==是否有指紋盤或disk serial ?

017F:00401468 744D JZ 004014B7 〈==沒有就跳

017F:0040146A 8BC6 MOV EAX,ESI

017F:0040144B處調用diskserial.vxd絕對讀磁碟,017F:00401468處是判斷。因為沒有指紋盤,將此處改為nop;nop;替換getdiskserial.exe(在window的system下)。

再次運行,這次可以來到“屬性”視窗,點“確定”可來到註冊視窗,我的機器碼為123456789012,輸入用戶名leo_cyl,註冊碼12121212。下斷點hmemcpy,跟蹤來到這裡:

:10001FC2 8D4C240C lea ecx, dword ptr [esp+0C]

:10001FC6 8D542414 lea edx, dword ptr [esp+14]

:10001FCA 51 push ecx

:10001FCB 8D442434 lea eax, dword ptr [esp+34]

:10001FCF 52 push edx

:10001FD0 50 push eax

:10001FD1 E85A5E0000 call 10007E30

:10001FD6 83C40C add esp, 0000000C

:10001FD9 E822600000 call 10008000 《=====注意

:10001FDE A1ACF90110 mov eax, dword ptr [1001F9AC]

:10001FE3 6A00 push 00000000

:10001FE5 85C0 test eax, eax

:10001FE7 7425 je 1000200E 〈===跳的話就註冊失敗

:10001FE9 6878F10010 push 1000F178

:10001FEE 686CF10010 push 1000F16C

:10001FF3 56 push esi

* Reference To: user32.MessageBoxA, Ord:01B7h

|

:10001FF4 FF15A0D10010 Call dword ptr [1000D1A0]

:10001FFA 6A01 push 00000001

:10001FFC 56 push esi

* Reference To: user32.EndDialog, Ord:00B9h

|

:10001FFD FF1590D20010 Call dword ptr [1000D290]

:10002003 5F pop edi

:10002004 5E pop esi

:10002005 33C0 xor eax, eax

:10002007 5B pop ebx

:10002008 83C438 add esp, 00000038

:1000200B C21000 ret 0010

進入:10001FD9 處的call 10008000:

。。。。。

。。。。。

:10008038 894C2450 mov dword ptr [esp+50], ecx

:1000803C 89542410 mov dword ptr [esp+10], edx

:10008040 89442420 mov dword ptr [esp+20], eax

:10008044 894C2454 mov dword ptr [esp+54], ecx

:10008048 56 push esi

:10008049 6689542418 mov word ptr [esp+18], dx

:1000804E 6689442428 mov word ptr [esp+28], ax

:10008053 66894C245C mov word ptr [esp+5C], cx

:10008058 57 push edi

:10008059 8854241E mov byte ptr [esp+1E], dl

:1000805D 8844242E mov byte ptr [esp+2E], al

:10008061 884C2462 mov byte ptr [esp+62], cl

:10008065 E826A4FFFF call 10002490 〈======注意此call

:1000806A 8BF8 mov edi, eax

:1000806C 83C9FF or ecx, FFFFFFFF

:1000806F 33C0 xor eax, eax

:10008071 8D542410 lea edx, dword ptr [esp+10]

:10008075 F2 repnz

:10008076 AE scasb

:10008077 F7D1 not ecx

10008065 處的call將調用ShellExecuteA的window api 產生getdiskserial.exe進程。假設剛才沒改getdiskserial.exe的話,有兩個進程要跟蹤,比較麻煩,如果非法用戶的話getdiskserial將彈出MESSAGEBOX,註冊失敗。

繼續跟蹤來到這裡:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:10008191(C)

|

:1000817D 8A540430 mov dl, byte ptr [esp+eax+30] 〈==這是假註冊碼

:10008181 8A4C0468 mov cl, byte ptr [esp+eax+68] 〈==正確註冊碼

:10008185 3AD1 cmp dl, cl

:10008187 0F851BFFFFFF jne 100080A8

:1000818D 40 inc eax

:1000818E 83F809 cmp eax, 00000009

:10008191 7CEA jl 1000817D

:10008193 5F pop edi

:10008194 C705ACF9011001000000 mov dword ptr [1001F9AC], 00000001

:1000819E 5E pop esi

:1000819F 81C480000000 add esp, 00000080

:100081A5 C3 ret

相關詞條

熱門詞條

聯絡我們