2008-12-16 47 views
29

Whats cách dễ nhất để tìm hiểu ngôn ngữ lập trình mà ứng dụng được viết là gì? Tôi muốn biết vb hoặc C++ hoặc delphi hoặc .net, vv từ tệp exe của chương trình hay không.Tìm ngôn ngữ lập trình được sử dụng

+3

http://www.peid.info/ –

+0

Tôi nhớ 5 năm trước, tôi đã tìm thấy một cuộc gọi API yêu cầu xử lý cửa sổ và sẽ trả về tên lớp của cửa sổ. Tôi nhận thấy rằng nếu chương trình được viết bằng VB, tên lớp của bất kỳ đối tượng nào phải được bắt đầu bằng 'sấm'. Nếu nó được viết bằng Delphi, tên lớp thường là 'T'. Tôi không chắc liệu đây có phải là trường hợp không. –

Trả lời

23

Hãy thử PEiD

tất nhiên nếu họ đã sử dụng một nhà đóng gói, một số giải nén sẽ cần phải được thực hiện đầu tiên :)

+0

Hiện nó vẫn còn tồn tại? Nếu vậy bạn nhận được nó ở đâu (không có phần mềm độc hại của sofstsonic)? – Serge

+0

PEiD hiện không hoạt động. –

+0

Liên kết này không hoạt động nữa –

3

Bạn có thể thử sử dụng Depends để xem những gì runtime dependancies nó có, mà có thể đưa ra một số manh mối .

10

Khởi động và kiểm tra những DLL thời gian chạy mà nó sử dụng với Process Explorer.

Nếu điều đó không rõ ràng, hãy tìm kiếm trên web để tham khảo các tệp DLL đó.

Hầu hết các trình tháo rời (bao gồm cả Olly tôi nghĩ) có thể dễ dàng hiển thị cho bạn văn bản có trong một tệp EXE hoặc DLL và đôi khi có thể đưa ra một đầu mối. Các kiểu Delphi thường được bắt đầu bằng T như trong TMyClass.

Nếu đó là tệp thực thi nhỏ không có tham chiếu DLL và không có văn bản nào bạn có thể là SOL. Tại thời điểm đó, bạn cần phải tìm kiếm các thành ngữ của các trình biên dịch cụ thể, và nó sẽ chủ yếu là phỏng đoán.

1
  • Determine Delphi Application
  • Sử dụng eda_preview270.exe (từ here) hoặc một số công cụ gián điệp khác và kiểm tra các tên lớp cửa sổ. Nếu họ đọc như TButton hoặc TfrmBlubb, đó là một ứng dụng VCL. Nếu có một "Afx" trong họ, nó có thể là MFC.
2

Cách dễ nhất là hỏi nhà phát triển chương trình. Nó không đòi hỏi bất kỳ kiến ​​thức và chương trình tiện ích nào.

+0

Tôi đoán nếu anh ấy đang tìm kiếm một công cụ để khám phá điều này, anh ấy không có quyền truy cập dễ dàng vào nhà phát triển. –

+0

Có vẻ như một câu trả lời ngu ngốc, nhưng điều này là trong thực tế, làm thế nào "tin tặc" làm công việc của họ. "Kỹ thuật xã hội" được gọi là ... +1 –

1

Ngôn ngữ biên dịch (bằng cách này tôi có nghĩa là không có ngôn ngữ kịch bản hoặc Java, .NET, v.v.) được biên dịch thành các hướng dẫn lắp ráp CPU, về cơ bản là chuyển đổi một chiều. Nó thường không thể xác định ngôn ngữ mà chương trình đã được viết. Tuy nhiên, bằng cách sử dụng trình phụ thuộc, bạn có thể xác định thư viện runtime nào đang tải (nếu có) và do đó xác định ngôn ngữ nào được sử dụng (ví dụ: MS Visual C++ 9 sử dụng msvcr90.dll).

+2

Mặc dù bạn luôn có thể liên kết với phiên bản cũ hơn của CRT. –

+0

Tôi đoán vậy. Bạn sẽ biết rằng đó là VC++, mặc dù. – jgottula

1

bạn có thể kiểm tra xem đó có phải là hội đồng .net hay không bằng cách cố gắng mở bằng công cụ ildasm.exe

+0

Nhưng những gì bout các ngôn ngữ khác nhau trong. Net. – rahul

+2

phoenix - không có cách nào để xác định điều đó. C# và VB.NET có thể hoán đổi cho nhau khi biên dịch. –

+0

yea, không có cách nào để xác định rằng bởi vì tất cả các ngôn ngữ .net biên dịch mã sang cùng một ngôn ngữ IL –

0

Nói chung, bạn không thể.

Nếu bạn có thể tải nó vào Reflector, bạn biết đó là một hội đồng được quản lý.

0

Đó là một câu hỏi hay. Không có cách nào nói chung, nhưng tôi đặt cược hầu hết các trình biên dịch và thư viện để lại một dấu trong tập tin EXE kết quả. Nếu bạn muốn dành nhiều thời gian cho nó, bạn có thể thu thập một loạt các EXE được viết bằng các ngôn ngữ đã biết và quét các chuỗi thông thường. Tôi sẽ hình ảnh bạn sẽ tìm thấy một số.

Dependancy Walker, mà người khác đề cập sẽ là một cách tốt để tìm kiếm phụ thuộc hiệu, giống như phiên bản của MSVCRT, vv

0

Nếu tôi nhớ không lầm PE Explorer Disassembler đưa ra một số thông tin về trình biên dịch tạo nên tạp cho không .net và java nhị phân , cho.sử dụng ròng Reflector hoặc ILDAsm công cụ

0

tôi sẽ thử chạy chương trình .exe thông qua chương trình 'chuỗi' để nhận các gợi ý các loại.

7

Có một nghệ thuật để phát hiện ngôn ngữ chương trình được viết. Có thể nhưng không có quy tắc cứng và nhanh. Phải mất rất nhiều kinh nghiệm (và nó cũng dẫn đến câu hỏi "Tại sao bạn muốn ..." nhưng đây là một vài ý tưởng về cách đi về nó.

Những gì bạn đang tìm kiếm là một " Chữ ký có thể là một chuỗi nhất định được trình biên dịch đưa vào, một tham chiếu đến một API khá phổ biến trong công cụ lập trình đang được sử dụng hoặc thậm chí là một kiểu lập trình chung cho các công cụ được sử dụng, hiển thị trong . các chuỗi chứa trong ứng dụng

Bên cạnh đó, có phong cách như thế nào một ứng dụng được triển khai:. file cấu hình khác nhau được tìm thấy trong thư mục triển khai, dlls và lắp ráp và thậm chí cả hình ảnh, thư mục hoặc biểu tượng

Các ứng dụng Java được bao bọc trong một tệp thực thi tự khởi chạy sẽ chứa các tham chiếu đến các thư viện java, và có thể sẽ có các thư viện hoặc tệp nhất định được bao gồm trong cùng thư mục chỉ ra rằng đó là java.

Như được nêu trong các câu trả lời khác, một hội đồng quản lý cũng sẽ hiển thị một số dấu hiệu: bạn có thể mở nó trong Reflector, v.v. Trong khi chính xác là C# và VB được "hoán đổi" một khi được biên dịch, không đúng . Nếu bạn sử dụng Reflector để tháo rời mã VB, bạn sẽ thường thấy rằng assembly tham chiếu đến hội đồng Microsoft.VisualBasic.dll. Bạn sẽ có thể cho biết sự khác biệt giữa các ứng dụng Mono vì chúng rất có thể chứa các tham chiếu đến các hội đồng mono.

Nhiều trình biên dịch tập hợp và liên kết mã theo những cách nhất định và để lại dấu chân phía sau. Ví dụ, kiểm tra một cửa sổ thực thi bằng cách sử dụng "strings: tab trong Process Explorer, bạn sẽ thấy rất nhiều chuỗi. Bằng cách sử dụng chúng, bạn có thể xác định kiểu lập trình, phương pháp được gọi là, lỗi hoặc phương pháp theo dõi withint exe.

Một ví dụ là các trình biên dịch sử dụng các cơ chế khác nhau để bản địa hóa: Microsoft lưu trữ các chuỗi được bản địa hóa trong các tệp XML hoặc các tệp tài nguyên. tên của các biến thành viên và chức năng của cuộc gọi hơn Visual Studio.

Tôi cho rằng bạn có thể viết một cuốn sách về chủ đề xác định chính xác dòng truyền thừa của bất kỳ thực thi nào. Chủ đề này có lẽ sẽ được gọi là "khảo cổ học lập trình".

+0

Downvotes không có bình luận? Có bất kỳ downvoters có phản hồi mang tính xây dựng? –

+1

Re: "lập trình khảo cổ học", bây giờ có một khoa học chính thức có tên [Phần mềm khảo cổ học] (https://en.wikipedia.org/wiki/Software_archaeology) (Tôi không đề cập đến điều này rõ ràng). –

+0

Điều đó cực kỳ tuyệt vời. –

0

Dưới đây là một số tuyệt vời video giải thích cách bạn có thể giải nén tệp .exe-nếu tệp được đóng gói bằng UPX. Phần mềm bạn cần cho việc này: PEiD, OllyDbg, ImpREC

Sau khi bạn giải nén tệp nhị phân, bạn có thể kiểm tra với PEiD mà ngôn ngữ lập trình mà nhị phân có.

0

Cách dễ nhất mà tôi tìm thấy (ít nhất là trong trò chơi trên máy tính) là tìm trong thư mục "redist" được lồng trong thư mục chính của trò chơi. Nó có thể là hiển nhiên đối với một số bạn có nhiều kinh nghiệm trong việc lập trình cho mình, nhưng mục đích cụ thể của MSI trong thư mục này là cho phép tệp setup.exe tự động cài đặt các điều kiện tiên quyết cho chính trò chơi đó. Ví dụ: Trong Empire Total War, có một MSI được gọi là "vcredist_x86-sp1.exe".Điều này cho thấy rằng trò chơi/chương trình đã được viết trong "Visual C 2005" của Microsoft trong .NET Framework (thường). Trên thực tế, nếu bạn mở MSI/EXE, trình cài đặt phải ngay lập tức cho biết ngôn ngữ được viết và phiên bản nào. Lý do tôi quen thuộc là vì tôi viết mã trong C# và VB trong .NET Framework và chúng tôi tự động cài đặt các điều kiện tiên quyết cho ứng dụng doanh nghiệp của mình. Hy vọng điều này sẽ hữu ích!

Các vấn đề liên quan