File tự tắt khi Alt + F11 để xem code

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,952
Có ai gặp hiện tượng lạ này không? Số là tôi có 1 file Excel có chứa code VBA. Code đơn giản thế này thôi
PHP:
Sub Test()
  MsgBox "Hello"
End Sub
Tôi dùng chương trình XLtoEXE để convert file sang dạng EXE ---> trong Options của chương trình tôi chọn mục Read Only ---> Sau khi convert xong tôi mở file EXE lên và thấy nó hoạt động bình thường. Có điều khi bấm Alt + F11 vào xem code thì file bị tắt ngay lập tức
Thấy cũng... rất lạ mà cũng.. hay hay! Tôi gữi file lên các bạn kiểm tra giúp xem có gặp hiện tượng này không nha
 

File đính kèm

Hic, down về, extract ra chạy thử. Không cần Alt F11 gì hết, file không tự tắt mà là tự xoá.
(Bị ku Norton Security xơi)
 
Upvote 0
Nó tự chạy bằng 2007, có 2003 mở sẵn mà nó chê. Alt F11 nó lòi cái này ra, khà khà khà.

Hello.jpg
 
Upvote 0
Máy em Windows Vista, cài 2 Office 2003 và 2007 (default), mở bằn 2007 thì vẫn bình thường còn 2003 thì không mở được. Cũng có thể pm tạo exe cấy một mã bảo vệ VBA cho người dùng bằng cách bẫy cửa sổ hoạt động, nếu class name hoặc caption của nó là VBE thì đóng lại. Nếu họ có ý này thật thì nó vẫn chưa hoàn thiện vì 2007 vẫn mở được.

Để làm điều này cũng không khó, dùng kỹ thuật API Hook Window.

Nói chung đến thời điểm này, các phần mềm tạo xls->exe đều làm ảo thuật. Bản chất file Excel của mọi người không phải được đưa về exe đâu (tức không phải mã máy) mà nó nằm trong một exe (file Excel đóng vai trò như một file nén), khi file exe này chạy, nó bung ra (kiểu giải nén) file Excel này rồi vẫn dùng Excel mở nó ra. Họ làm thêm việc là cản trở truy cập vào cửa sổ VBE hoặc không vào được cửa sổ nhập password (giống pm LockXls). Tôi thấy không có gì là an toàn ở mấy pm này, người nào am hiểu API có thể lấy được file Excel nguyên bản của mọi người.
 
Lần chỉnh sửa cuối:
Upvote 0
Hack Excel Window

Máy em Windows Vista, cài 2 Office 2003 và 2007 (default), mở bằn 2007 thì vẫn bình thường còn 2003 thì không mở được. Cũng có thể pm tạo exe cấy một mã bảo vệ VBA cho người dùng bằng cách bẫy cửa sổ hoạt động, nếu class name hoặc caption của nó là VBE thì đóng lại. Nếu họ có ý này thật thì nó vẫn chưa hoàn thiện vì 2007 vẫn mở được.

Để làm điều này cũng không khó, dùng kỹ thuật API Hook Window.

Nói chung đến thời điểm này, các phần mềm tạo xls->exe đều làm ảo thuật. Bản chất file Excel của mọi người không phải được đưa về exe đâu (tức không phải mã máy) mà nó nằm trong một exe (file Excel đóng vai trò như một file nén), khi file exe này chạy, nó bung ra (kiểu giải nén) file Excel này rồi vẫn dùng Excel mở nó ra. Họ làm thêm việc là cản trở truy cập vào cửa sổ VBE hoặc không vào được cửa sổ nhập password (giống pm LockXls). Tôi thấy không có gì là an toàn ở mấy pm này, người nào am hiểu API có thể lấy được file Excel nguyên bản của mọi người.

Nhân topic này, tôi làm ví dụ về hack các cửa sổ mở trong Excel, các cửa sổ khi mở lên sẽ có thêm chữ "Hacked by: Nguyen Duy Tuan - www.bluesofts.net", riêng với cửa sổ VBA không mở được.
HookExcelWindow.jpg


Các bạn download file chạy và xem mã nguồn rất đơn giản.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Nếu đang chạy trong "Start Hook Excel Window" và tạo thêm Book mới (bấm phím "Ctrol+N") thì nó bị lỗi tự tắt Excel luôn. Anh Tuân hãy kiểm tra lại thử nhé!
 
Upvote 0
Nếu đang chạy trong "Start Hook Excel Window" và tạo thêm Book mới (bấm phím "Ctrol+N") thì nó bị lỗi tự tắt Excel luôn. Anh Tuân hãy kiểm tra lại thử nhé!
Đây chí là 1 ví dụ về việc Hack các cửa sổ Excel chứ có phải là ứng dụng hoàn chỉnh đâu bạn
Muốn ứng dụng thực sự e rằng bạn phải nghiên cứu thêm (với trình độ gà như tôi, nói thật vẫn chưa nghĩ ra sẽ dùng vào việc gì)
 
Upvote 0
Nhân topic này, tôi làm ví dụ về hack các cửa sổ mở trong Excel, các cửa sổ khi mở lên sẽ có thêm chữ "Hacked by: Nguyen Duy Tuan - www.bluesofts.net", riêng với cửa sổ VBA không mở được.
HookExcelWindow.jpg


Các bạn download file chạy và xem mã nguồn rất đơn giản.


Từ thủ thuật này, chúng ta có thể làm được nhiều việc có lợi cũng như "có hại" với người dùng.

Có thể không cho:

+ Mở của sổ in ấn, thậm chí luôn bắt in với số lượng 100 bản
+ Mở thiết lập trang in
+ Mở Validation
+ Sort
+ Advance Filter
+ Options
+ Customize - Cửa sổ thay đổi menu
...
+ ...

Các bạn viết chương trình đôi khi muốn khóa các chức năng thiết lập của người dùng để không ảnh hưởng tới chương trình của mình thì có thể vận dụng giải pháp này.

Như ví dụ ở trên, thay vì tôi viết chữ vào caption/title của Window thì tôi cũng có thể khóa nó lại, phá hủy nó luôn, hoặc trang điểm thêm cho nó...
 
Upvote 0
Sao mình lưu file HookExcelWindow của anh Tuân thành file HookExcelWindow.xla sau đó đổi tên thủ tục Sub StartHookExcelWindow thành Sub Auto_Open nó không tự chạy được, nhờ các Bạn giải thích?
 
Upvote 0
Từ thủ thuật này, chúng ta có thể làm được nhiều việc có lợi cũng như "có hại" với người dùng.

Có thể không cho:

+ Mở của sổ in ấn, thậm chí luôn bắt in với số lượng 100 bản
+ Mở thiết lập trang in
+ Mở Validation
+ Sort
+ Advance Filter
+ Options
+ Customize - Cửa sổ thay đổi menu
...
+ ...

Các bạn viết chương trình đôi khi muốn khóa các chức năng thiết lập của người dùng để không ảnh hưởng tới chương trình của mình thì có thể vận dụng giải pháp này.

Như ví dụ ở trên, thay vì tôi viết chữ vào caption/title của Window thì tôi cũng có thể khóa nó lại, phá hủy nó luôn, hoặc trang điểm thêm cho nó...
Nhưng nếu người ta Disable macro thì sao? Cái thằng EXE thì khác, nó chạy được với mọi mức Security
Vấn đề quan tâm ở đây là: Liệu với VBA hoặc VB ta có thể làm được giống như chương trình XLStoEXE hay không? Nếu được thì ta mới tính tiếp với cái vụ.. HACK
Đại khái mình đang tìm hiểu chương trình XLStoEXE, chưa rõ người ta dùng thuật toán gì....
Cái mà Tuân nói ở trên:
các phần mềm tạo xls->exe đều làm ảo thuật. Bản chất file Excel của mọi người không phải được đưa về exe đâu (tức không phải mã máy) mà nó nằm trong một exe (file Excel đóng vai trò như một file nén), khi file exe này chạy, nó bung ra (kiểu giải nén) file Excel này rồi vẫn dùng Excel mở nó ra
Nghe thì nghe thế thôi chứ cũng... hổng biết gì cả
 
Upvote 0
Bản chất chương trình XLStoEXE nó làm được một việc là tạo ra file EXE mà trong đó gói được file Excel của người dùng. Khi chạy file EXE này, nó làm các việc:

1. Bung file Excel ra và cất ở một nơi nào đó, cái này dễ tìm thôi, dùng ActiveWorkbook.Path là biết ngay.
2. Tạo đối tượng Excel để chạy độc lập. Trong VB6 hay các ngôn ngữ khác làm như sau:
Set MyApp = CreateObject("Excel.Application")
Set MyWb = MyApp.WorkBooks.Open("File Excel của ngườii dùng được lưu ở bước 1")

StartHookExcelWindow
...


Nói chung việc này không có gì cả.

Một người biết lập trình VB6 hay ngôn ngữ khác (ngoài trừ VBA) thì đều tự làm được việc tạo ra file Excel, lưu file Excel của người dùng vào Resource....

Cái bước 1, pm XLS->EXE làm tạo được file Exe mà không cần trình biên dịch-->Đây là cái khó, nhưng nếu không có nó người biết lập trình vẫn làm được.


Nói chung, làm việc này vẫn là thủ thuật API.
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Đưa file Excel vào EXE, hack Excel Window!

Từ thủ thuật này, chúng ta có thể làm được nhiều việc có lợi cũng như "có hại" với người dùng.

Có thể không cho:

+ Mở của sổ in ấn, thậm chí luôn bắt in với số lượng 100 bản
+ Mở thiết lập trang in
+ Mở Validation
+ Sort
+ Advance Filter
+ Options
+ Customize - Cửa sổ thay đổi menu
...
+ ...

Các bạn viết chương trình đôi khi muốn khóa các chức năng thiết lập của người dùng để không ảnh hưởng tới chương trình của mình thì có thể vận dụng giải pháp này.

Như ví dụ ở trên, thay vì tôi viết chữ vào caption/title của Window thì tôi cũng có thể khóa nó lại, phá hủy nó luôn, hoặc trang điểm thêm cho nó...

Từ ý tưởng trên, tôi làm thử ví dụ về đưa file Excel vào file EXE rồi chạy. File Excel này chạy sẽ khoá tất cả các cửa sổ của Excel dưới đây:
Options
Page Setup
Print
Customize
Data Validation
Sort
VBAProject Password

Với file này, dù Excel đặt khoá không cho chạy Macros ở mức "Very high" thì nó vẫn chạy theo đúng mục đích của tác giả.

File Excel này tôi không dùng các phần mềm LockXLS, XLSToEXE.

Tôi làm file EXE này đúng như những gì tôi mô tả trong topic này. Các bạn nếu quan tâm thì để ý các bài viết trong topic này sẽ làm được. Bạn có thể dùng Visual Basic 6.0 để tạo EXE.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Từ ý tưởng trên, tôi làm thử ví dụ về đưa file Excel vào file EXE rồi chạy. File Excel này chạy sẽ khoá tất cả các cửa sổ của Excel dưới đây:
Options
Page Setup
Print
Customize
Data Validation
Sort
VBAProject Password

Với file này, dù Excel đặt khoá không cho chạy Macros ở mức "Very high" thì nó vẫn chạy theo đúng mục đích của tác giả.

File Excel này tôi không dùng các phần mềm LockXLS, XLSToEXE.

Tôi làm file EXE này đúng như những gì tôi mô tả trong topic này. Các bạn nếu quan tâm thì để ý các bài viết trong topic này sẽ làm được. Bạn có thể dùng Visual Basic 6.0 để tạo EXE.
Lạ nhỉ? Code chỉ có đúng 1 dòng StartExcelDlgHook Application.hwnd mà sao nó lại khóa được Options, Page Setup, Customize nhỉ?
Nếu tôi đoán không lầm thì code thật sự nằm trong HookExcelWindow.dll (file do bạn lập trình và "quăng" vào System32) <--- Đúng không nhỉ?
Trò này hơi bị hay nha! Vì dù có xem được code thì... cũng bằng không, code thật sự nó nằm trong DLL chứ có nằm trong VBA đâu
------------------------
Tôi có mong muốn thế này: Sao Tuân không làm 1 chương trình giống như XLStoEXE nhỉ? Thế thì nó sẽ mang dấu ấn của GPE và của riêng bạn ---> Ta xài đồ của ta có phải sướng hơn không
 
Lần chỉnh sửa cuối:
Upvote 0
Lạ nhỉ? Code chỉ có đúng 1 dòng StartExcelDlgHook Application.hwnd mà sao nó lại khóa được Options, Page Setup, Customize nhỉ?
Nếu tôi đoán không lầm thì code thật sự nằm trong HookExcelWindow.dll (file do bạn lập trình và "quăng" vào System32) <--- Đúng không nhỉ?
Trò này hơi bị hay nha! Vì dù có xem được code thì... cũng bằng không, code thật sự nó nằm trong DLL chứ có nằm trong VBA đâu
------------------------
Tôi có mong muốn thế này: Sao Tuân không làm 1 chương trình giống như XLStoEXE nhỉ? Thế thì nó sẽ mang dấu ấn của GPE và của riêng bạn ---> Ta xài đồ của ta có phải sướng hơn không

Vâng đúng như anh đoán, code chính nằm ở HookExcelWindow.dll, nhưng file này và file Excel nằm trong EXE. Có thể nói, file EXE đóng vai trò gói tất cả các file cần thiết để đạt được ý đồ của chương trình (giống cách làm của các pm Portable, chỉ cần một file để chạy). Cái gì mình muốn che giấu thực sự thì cho vào DLL hay trong file EXE còn không thì viết trong VBA cũng được.

Em cũng có nghĩ tới (rất khoái là khác) việc tạo ra một chương trình hoàn chỉnh cho phép người dùng tạo ra file EXE và gói file Excel của họ lại, người dùng thích khóa chức năng nào của Excel thì chọn. Tuy nhiên có một số khó khăn:

1. Làm sao để người dùng chạy SP của mình biên dịch/tạo ra được file EXE (Cách tạo một file EXE từ chính phần mềm của mình).
2. Khi file EXE chạy và mở file Excel, sau quá trình soạn thảo muốn lưu lại thì không. Vấn đề này LOCKXLS, XLStoEXE cũng bị vậy thì phải.

Vụ này e rằng phải một thời gian nữa mới có thể thực hiện được.
 
Lần chỉnh sửa cuối:
Upvote 0
Từ ý tưởng trên, tôi làm thử ví dụ về đưa file Excel vào file EXE rồi chạy. File Excel này chạy sẽ khoá tất cả các cửa sổ của Excel dưới đây:
Options
Page Setup
Print
Customize
Data Validation
Sort
VBAProject Password

Với file này, dù Excel đặt khoá không cho chạy Macros ở mức "Very high" thì nó vẫn chạy theo đúng mục đích của tác giả.

File Excel này tôi không dùng các phần mềm LockXLS, XLSToEXE.

Tôi làm file EXE này đúng như những gì tôi mô tả trong topic này. Các bạn nếu quan tâm thì để ý các bài viết trong topic này sẽ làm được. Bạn có thể dùng Visual Basic 6.0 để tạo EXE.
Khi close nó yêu cầu nhập pass ban ơi! Mà mình không thấy bạn cho pass nào cả +-+-+-+
 
Upvote 0
Vâng đúng như anh đoán, code chính nằm ở HookExcelWindow.dll, nhưng file này và file Excel nằm trong EXE. Có thể nói, file EXE đóng vai trò gói tất cả các file cần thiết để đạt được ý đồ của chương trình (giống cách làm của các pm Portable, chỉ cần một file để chạy). Cái gì mình muốn che giấu thực sự thì cho vào DLL hay trong file EXE còn không thì viết trong VBA cũng được.

Em cũng có nghĩ tới (rất khoái là khác) việc tạo ra một chương trình hoàn chỉnh cho phép người dùng tạo ra file EXE và gói file Excel của họ lại, người dùng thích khóa chức năng nào của Excel thì chọn. Tuy nhiên có một số khó khăn:

1. Làm sao để người dùng chạy SP của mình biên dịch/tạo ra được file EXE (Cách tạo một file EXE từ chính phần mềm của mình).
2. Khi file EXE chạy và mở file Excel, sau quá trình soạn thảo muốn lưu lại thì không. Vấn đề này LOCKXLS, XLStoEXE cũng bị vậy thì phải.

Vụ này e rằng phải một thời gian nữa mới có thể thực hiện được.

Thực ra mấy vụ này không có gì khó. Một program có thể làm mọi chuyện, kể cả đóng Windows, vậy mấy trò mở cửa sổ in, in 100 bản, đóng cửa sổ nào đó, kết nối internet v...v thì có gì to tát.
Việc pm tạo EXE cũng không có gì lớn. Nếu tôii không lầm thì có thể làm như sau: EXE được tạo trước pm. Khi EXE khởi động thì nó nap chính nó từ đĩa cứng vào bộ nhớ --> nhẩy xuống cuối của mình (nhẩy bao nhiêu bai thì sẽ được ghi ở một "ô" định sẵn) --> đọc tất cả từ chỗ nhẩy tới cuối của EXE trên đĩa (EXE tạo trước pm và EXE ở trên đĩa là 2 EXE khác nhau, tạm gọi là A và B) --> ghi ra đĩa ở nơi kín đáo gọi là xyz.XLS --> khởi động XLS. Tác giả tạo EXE làm các việc trên xong (EXE A) thì kiểm tra xem nó có bao nhiêu bai (độ lớn EXE A) rồi ghi vào "ô" định sẵn ở trên (vd. dùng Hex Editor).
Bây giờ pm muốn gói XLS nào thì đọc EXE A (là "đồ" soạn trước) --> ghi thêm vào cuối EXE A toàn bộ XLS --> EXE A có thêm XLS được ghi trên đĩa với tên xyz.EXE (EXE B) và cung cấp cho người dùng. Khi khởi động xyz.EXE thì thực ra là EXE A chạy và nó làm tất cả các chuyện nói trên.
Cũng có thể tạo EXE A làm các việc: khi khởi động thì đọc resource (trong EXE) --> nếu có thì ghi lại trên đĩa với tên xyz.XLS --> khởi động XLS. Một EXE A như vậy khi tạo xong sẽ không có cái "resource - XLS" kia và khởi động nó chả làm gì cả. Nhưng pm khi có XLS rồi thì nó nạp EXE A kia (là "đồ" của nó) và "nhồi" vào nó resource (nhồi được, vd. bắt chước Resource Hacker), cuối cùng ghi lại EXE đó. EXE B này khi chạy thì do đã có resource nên nó ghi ra đĩa ở dạng XLS.
Như tôi đã nói thì chuyện pm làm được tất cả mọi chuyện "tầy đình" (in 100 bản, đóng Windows) là đương nhiên. Việc đó có thể làm bất cứ lúc nào, không cần cớ. Chuyện người ta dùng SetWindowsHookEx chỉ là muốn làm những việc "tầy đình" chỉ khi có một "sự kiện" nào đó sẩy ra. Nhưng vỏ quýt dầy có móng tay nhọn. SetWindowsHookEx hoạt động như sau: tất cả ai muốn theo dõi 1 sự kiện nào đó (bàn phím, chuột, cửa sổ ...) thì đăng ký với Windows (SetWindowsHookEx) và xếp hàng chờ. Khi sẩy ra sự kiện thì Windows thông báo cho anh A. Anh A có thể: làm gì đó nhân dịp này, vd. ghi vào sổ theo dõi. Hàm HookProc phải trả về một giá tri 0 hoặc 1. Nếu trả về 0 thì sự kiện được "báo" cho anh B. Anh B cũng làm những việc như A. Nếu tất cả các anh đăng ký đều trả về 0 thì sự kiện được "báo" cho cửa sổ đích (vd. người dùng nhấn trong Notepad phím "a" thì nó được báo cho Notepad). Nếu có anh D trả về 1 thì anh E, F, ... và cửa sổ đích sẽ không được thông báo. Vì trả về 1 có nghĩa là nói với Windows không truyền tiếp nữa. Nếu không được thông báo thì cái anh EXE tởm kia làm gì biết sự kiện để mà làm chuyện tầy đình nhi?
Vậy thì khi tôi gặp cái anh làm chuyện tầy đình kia thì tôi sẽ khởi động EXE của mình --> EXE đăng ký SetWindowsHookEx --> HookProc của tôi trả về 1 --> anh kia không được thông báo nữa. Mà nếu tôi "hứng" thì tôi làm chuyện tầy đình hơn: tôi tìm và tắt anh kia luôn. Chuyện cái gì đó được ghi ra đĩa thì ngay dùng công cụ của Windows cũng tìm ra được.
Ngoài chuyện "ghi vào sổ" thì pm có thể làm nhiều việc. Vd. chính Unikey đăng ký theo dõi bàn phím. Khi có phím nhấn thì nó được báo và nó kiểm tra. Vd. nếu đó là "u" thì nó ghi nhớ ("u" được báo cho cửa sổ đích vd. Notepad). Nếu lần tiếp theo nó thấy là "w" thì: nó simulate nhấn phím Backspace (notepad sẽ xóa "u") --> simulate ký tự "ư" - bằng cách gửi "vài bai" (notepad sẽ "nhập" "ư") v...v
 
Upvote 0
Web KT

Bài viết mới nhất

Đếm ngược thời gian

000
Ngày
00
Giờ
00
phút
00
giây
Back
Top Bottom