2009-09-18 7 views
8

Một tình huống rất đơn giản. Tôi đang làm việc trên một ứng dụng trong Delphi 2007 mà thường được biên dịch là 'Release' nhưng vẫn chạy dưới một trình gỡ lỗi. Và đôi khi nó sẽ chạy dưới SilkTest quá, để thử nghiệm hồi quy. Trong khi điều này khá thú vị, tôi muốn làm một cái gì đó đặc biệt ...Làm cách nào để phát hiện trình gỡ lỗi hoặc công cụ khác có thể đang phân tích phần mềm của tôi?

Tôi muốn phát hiện xem ứng dụng của tôi có đang chạy trong trình gỡ rối/hồi quy hay không và nếu trường hợp đó xảy ra, tôi muốn ứng dụng biết công cụ nào được sử dụng ! (Do đó, khi ứng dụng gặp sự cố, tôi có thể báo cáo thông tin này trong báo cáo lỗi của nó.)

Bất kỳ đề xuất, giải pháp nào?

+0

Bạn không phải đang viết phần mềm độc hại, phải không?? – Mick

Trả lời

10

Bạn có thể kiểm tra quá trình cha mẹ mà bắt đầu ứng dụng của bạn. Với CreateToolhelp32Snapshot/Process32First/Process32Next lấy phụ huynh PID (PROCESSENTRY32.th32ParentProcessID hoặc TProcessEntry32.th32ParentProcessID) cho ứng dụng PID của bạn. Sau đó lấy tên tệp cho PID mẹ để so sánh với các ứng dụng bạn muốn kiểm tra, như SilkTest.

Kiểm tra this article để sử dụng mã.

Ngoài IsDebuggerPresentCheckRemoteDebuggerPresent, bạn cũng có thể truy vấn PEB.BeingDebugged (PEB là khối môi trường quy trình, để nhận PEB, bạn phải truy vấn TEB, là khối môi trường luồng).

3

Có thể bạn đang tìm kiếm hàm IsDebuggerPresent.

+0

Nhưng nó cũng sẽ phát hiện SilkTest và các phần mềm thử nghiệm khác hay các trình gỡ rối từ xa? –

+1

Ngoài ra còn có chức năng 'CheckRemoteDebuggerPresent', có vẻ như nó có thể xác định các trình gỡ rối từ xa. Tôi không quen với SilkTest nên tôi không biết liệu nó có hoạt động như một Nếu không, sau đó ở trên sẽ làm việc.Nếu không, sau đó bạn sẽ cần phải tìm một kỹ thuật khác –

0

Bạn cũng có thể làm

if DebugHook <> 0 then ... 
+0

Điều đó chỉ hoạt động từ bên trong IDE Delphi, không phải là debuggers khác.Ngoài ra, hãy ghi nhớ các ứng dụng được gỡ lỗi trong Chế độ "Phát hành", không phải chế độ "Gỡ lỗi". –

1

Để phát hiện SilkTest, bạn có thể thử đính kèm vào một tệp DLL chỉ được SilkTest sử dụng để phát hiện sự hiện diện của nó. Ví dụ: nếu Đại lý mở được đính kèm với quy trình, Win32HookDll_x86.dll hoặc Win32HookDll_amd64.dll sẽ có mặt (các tên có thể dễ dàng được tìm thấy bằng công cụ như Process Explorer.