[Discussion] Mở thêm chức năng cho Unikey |
27/08/2013 14:56:09 (+0700) | #1 | 278287 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
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 , 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é |
|
|
|
|
[Discussion] Mở thêm chức năng cho Unikey |
27/08/2013 22:19:03 (+0700) | #2 | 278294 |
|
quygia128
Member
|
0 |
|
|
Joined: 15/07/2009 20:50:28
Messages: 119
Location: Somewhere
Offline
|
|
Ý 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::. |
|
|
|
[Discussion] Mở thêm chức năng cho Unikey |
28/08/2013 09:34:38 (+0700) | #3 | 278301 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
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).
|
|
|
|
|
[Discussion] Mở thêm chức năng cho Unikey |
28/08/2013 11:13:21 (+0700) | #4 | 278303 |
|
no1roses
Member
|
0 |
|
|
Joined: 17/04/2009 03:01:30
Messages: 9
Offline
|
|
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 |
|
|
|
[Discussion] Mở thêm chức năng cho Unikey |
28/08/2013 23:32:31 (+0700) | #5 | 278307 |
|
xnohat
Moderator
|
Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
|
|
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
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
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 |
|
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 |
|
|