Tôi phát hiện ra rằng có thể trích xuất các chuỗi được mã hóa cứng từ một nhị phân.
Ví dụ chế độ xem thuộc tính của Process Explorer hiển thị tất cả chuỗi có nhiều hơn 3 ký tự.Làm thế nào để ẩn các chuỗi trong một exe hoặc một dll?
Đây là mã của một thực thi đơn giản mà tôi đã viết chỉ đơn giản là kiểm tra nó:
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
_TCHAR* hiddenString1 =_T("4537774B-CC80-4eda-B3E4-7A9EE77991F5");
_TCHAR* hiddenString2 =_T("hidden_password_or_whatever");
for (int i= 0; i<argc; i++) {
if (0 == _tcscmp(argv[i],hiddenString1)) {
_tprintf (_T("The guid argument is correct.\n")); }
else if (0 == _tcscmp(argv[i],hiddenString2)) {
_tprintf (_T("Do something here.\n")); }
}
_tprintf (_T("This is a visible string.\n"));
//Keep Running
Sleep(60000);
return 0;
}
Các chuỗi rõ ràng có thể được chiết xuất từ thực thi tương ứng:
Tôi nghĩ rằng đó là một chút quá dễ dàng để tìm các chuỗi.
Câu hỏi của tôi là:
- Làm thế nào để đơn giản ẩn hiddenString1 hoặc hiddenString2 trong thực thi?
- Có cách nào an toàn hơn cách để sử dụng "mã cheat" hơn với một số thông tin ẩn bị che khuất không?
Câu hỏi này về GUID hoặc về chuỗi nói chung? – xtofl
GUID chỉ là một ví dụ: có các URL cho các yêu cầu http mà tôi cũng muốn ẩn. – Winz
Ẩn URL cho các yêu cầu http sẽ không hoạt động. Bất kỳ ai có trình thám thính sẽ có thể thấy chính xác ứng dụng của bạn đang làm gì và làm như vậy sẽ dễ dàng hơn nhiều so với việc kiểm tra bộ nhớ của quá trình của bạn. –