banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Mở thêm chức năng cho Unikey  XML
  [Discussion]   Mở thêm chức năng cho Unikey 27/08/2013 14:56:09 (+0700) | #1 | 278287
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
Tình hình là từ lâu mình có cái mong muốn Unikey trên Windows có tính năng rất hay như ibus trên Linux là nó phân biệt được enable/disable cho mỗi cửa sổ input thay vì global tất tật như bây giờ. Mình thường xuyên input trên nhiều loại cửa sổ nên hơi ngại switch, kể cả đã dùng phím tắt rồi.

Bắt tay vào nghiên cứu, Unikey thì không opensource rồi nên mình tính đi theo hướng hack một tí. Xem sourcecode Unikey bản cũ thấy có một chỗ tác giả lấy ClassName của cửa sổ đang typing vào, nếu ClassName là ConsoleWindowClass thì không để gõ tiếng Việt, chắc là tác giả cũng thấy việc gõ tiếng Việt trên cửa sổ console là không thường xuyên nên quyết định cho tắt luôn smilie, mở Unikey40.dll trên IDA:




1. ở chỗ này, mình có thể patch toàn bộ đoạn push param và gọi strcmp đến một hàm khác thực hiện việc kiểm tra xem có nên bỏ qua gõ tiếng Việt trên cửa sổ input hiện thời hay không. Hàm kiểm tra này được triển khai trên một DLL khác do mình viết. Sau khi có DLL chứa hàm kiểm tra customize rồi thì tiến hành Patch UniKey40.dll, thêm vào một import entry trong bảng IAT sử dụng Stub_PE hoặc LordPE, save lại.

2. Mở lại UniKey40.dll trong IDA sẽ thấy entry import mới:




3. tiến hành patch phần gọi strmp để gọi hàm kiểm tra mới:




Code của DLL chứa hàm kiểm tra mới mình có post lên github tại https://github.com/secmaskoss/unihami , mới chỉ dạng concept thôi. Vấn đề đang gặp phải là khi chạy bản đã patch này xong thì có hiện tượng lạ là chỉ gõ được tiếng Việt được ở lần đầu tiên bật Unikey lên, sau đó thì hoàn toàn không gõ được tiếng Việt nữa sau khi chuyển sang một cửa sổ input khác. Mình kiểm tra process thấy Unikey vẫn chạy bình thường, chỉ trừ đúng việc là không gõ được tiếng Việt. Mình đưa lên đây để nếu bạn nào có hứng thú thì cùng ngâm cứu xem vấn đề nằm ở đâu nhé smilie
[Up] [Print Copy]
  [Discussion]   Mở thêm chức năng cho Unikey 27/08/2013 22:19:03 (+0700) | #2 | 278294
[Avatar]
quygia128
Member

[Minus]    0    [Plus]
Joined: 15/07/2009 20:50:28
Messages: 119
Location: Somewhere
Offline
[Profile] [PM] [WWW]
Ý tưởng của em (chỉ là ý tưởng thôi nhé :-p )


Sau khi path hàm strcmp đến code của anh thì anh có thể GetActiveWindow, FindWindow, GetWindowText và so sánh với tên anh đã định sẵn muốn Enable hay disable -> kết quả trả về đúng sai gán vào EAX để điều khiển lệnh nhảy qua hàm hookey.

Anh có thể ví dụ cụ thể hai input windows nào không ?, để có thể demo.

Nói nghe có vẻ dễ ăn quá!
.::Mới bắt đầu trên con đường dài::.
.::Super Newbiez::.
[Up] [Print Copy]
  [Discussion]   Mở thêm chức năng cho Unikey 28/08/2013 09:34:38 (+0700) | #3 | 278301
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

quygia128 wrote:

Sau khi path hàm strcmp đến code của anh thì anh có thể GetActiveWindow, FindWindow, GetWindowText và so sánh với tên anh đã định sẵn muốn Enable hay disable -> kết quả trả về đúng sai gán vào EAX để điều khiển lệnh nhảy qua hàm hookey.
 


Nhất trí, cái hàm kiểm tra khi nào enable/disable Unikey thì sẽ tinh chỉnh sau để có kết quả tốt. Vấn đề là giờ hành vi của Unikey sau khi mình patch nó không ổn định, mặc dụ hàm doSkip kia mình thử để return true từ đầu hàm luôn để luôn cho gõ tiếng Viêt, mình đang vòng quanh một tí, có vẻ là việc reload DLL có cài Hook function ở trong không được sạch lắm, mình toàn phải logout hoặc restart máy mới có kết quả chính xác(sau khi build lại unihami.dll).
[Up] [Print Copy]
  [Discussion]   Mở thêm chức năng cho Unikey 28/08/2013 11:13:21 (+0700) | #4 | 278303
[Avatar]
no1roses
Member

[Minus]    0    [Plus]
Joined: 17/04/2009 03:01:30
Messages: 9
Offline
[Profile] [PM]
cá nhân mình lại khoái kiểu global như trên Windows, mình chỉ làm việc với 1 loại ngôn ngữ trong cùng 1 thời điểm nên cách đơn giản là phím tắt (alt+Z both Windows and Linux).

Khi chuyển qua Linux, nhiều khi đá hình thấy nó "En"rồi nhưng khi chuyển qua cửa khác nó lại thành "Vi", rất bất tiện.

Xu hướng của mình là chuyển qua kiểu như bên Windows, bằng cách iBus>preferences>advanced tab > tick chọn "Share the same input method among all applications"
V
n00b
[Up] [Print Copy]
  [Discussion]   Mở thêm chức năng cho Unikey 28/08/2013 23:32:31 (+0700) | #5 | 278307
[Avatar]
xnohat
Moderator

Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!] [MSN]
Mền thắc mắc là Unikey vốn là opensource với source code được public tại đây

http://unikey.org/source.php

Tại sao phải reverse rồi patch chi cho mất công nhẩy smilie

Trên mạng internet cũng còn lưu trữ một số thảo luận tại unikeyspell, có hồi đáp của tác giả Phạm Kim Long. Nếu các bồ thực sự thích và muốn phát triển Unikey mở rộng tiếp thì có thể liên lạc với bác ấy, tôi có thể làm cầu nối smilie

https://groups.google.com/forum/#!topic/unikeyspell/p3LrUKm72XA

Lời bàn: Unikey thực sự được viết rất tốt, suốt từ năm 2009 tới giờ thực tế là không cần bản vá lỗi nào mà sản phẩm này vẫn hoạt động bền bỉ trên mọi phiên bản hệ điều hành Windows. Điển hình của một phần mềm rất tốt smilie
iJust clear, "What I need to do and how to do it"/i
br
brBox tán gẫu dời về: http://www.facebook.com/hvaonline
[Up] [Print Copy]
  [Discussion]   Mở thêm chức năng cho Unikey 29/08/2013 19:12:14 (+0700) | #6 | 278319
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

xnohat wrote:
Mền thắc mắc là Unikey vốn là opensource với source code được public tại đây
http://unikey.org/source.php
Tại sao phải reverse rồi patch chi cho mất công nhẩy smilie
 

Bác ấy opensource bản trước đó thôi, còn bản mới nhất không có source vì lý do nào đó.

xnohat wrote:

Nếu các bồ thực sự thích và muốn phát triển Unikey mở rộng tiếp thì có thể liên lạc với bác ấy, tôi có thể làm cầu nối smilie
 

Hi, thx bác. Cái này mình làm theo nhu cầu cá nhân, và cũng để cho vui thôi, khi nào mình có ý định làm nghiêm túc hơn thì chắc phải liên hệ với bác Long thì mới ra hồn được.
[Up] [Print Copy]
  [Discussion]   Mở thêm chức năng cho Unikey 13/09/2013 07:48:19 (+0700) | #7 | 278440
[Avatar]
maithangbs
Elite Member

[Minus]    0    [Plus]
Joined: 28/11/2007 21:39:53
Messages: 567
Location: Д.и.Р
Offline
[Profile] [PM] [Email] [Yahoo!]
Unikey dạo này thấy chạy trên mấy cái máy của mình cũng hay gây ra lỗi, có thể do mình cài tá lả bùng binh các phần mềm
- Không gõ được tiếng việt dù Icon vẫn hiện lù lù trên taskbar;
- Chạy xong, hoặc Minimize mất hút luôn, dù kiểm tra vẫn thấy Unikey hiện trong danh sách Process.
- Một số bản cài không chỉnh sửa được cấu hình (bị Read Only)
[Up] [Print Copy]
  [Discussion]   Mở thêm chức năng cho Unikey 14/09/2013 17:01:44 (+0700) | #8 | 278455
degeawapsh
Member

[Minus]    0    [Plus]
Joined: 26/03/2012 09:09:27
Messages: 16
Offline
[Profile] [PM]
Em nghĩ chắc máy bác bị dính virus rồi! smilie
[Up] [Print Copy]
  [Discussion]   Mở thêm chức năng cho Unikey 14/09/2013 17:01:55 (+0700) | #9 | 278456
degeawapsh
Member

[Minus]    0    [Plus]
Joined: 26/03/2012 09:09:27
Messages: 16
Offline
[Profile] [PM]
Em nghĩ chắc máy bác bị dính virus rồi! smilie
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|