banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows [Find] running applicatio  XML
  [Programming]   [Find] running applicatio 28/04/2008 08:26:09 (+0700) | #1 | 127887
[Avatar]
levinthan
Member

[Minus]    0    [Plus]
Joined: 16/01/2008 22:38:43
Messages: 78
Offline
[Profile] [PM] [Yahoo!]
Hi các bạn trong forum.

Hiện nay mình có một vấn đề , mong các bạn bỏ chút ít thời gian ra chỉ giúp.

Mình muốn viết 1 dll anticheat add vào minigame của mình . Project của mình viết trên VISUAL C++ , có đoạn code tìm ứng dụng đang chạy . Nếu tìm thấy sẽ thông báo lên.
Code:
bool TimWindow(LPCSTR WindowTitle)
{
HWND MyWin = FindWindowA(0,WindowTitle);
if( MyWin > 0)
MessageBoxA(0,"Da tim thay chuong trinh.","Thong bao",0);
return false;
}


Như vậy . khi gọi TimWindow("Yahoo! Messenger");
nếu đang mở YM thì sẽ nhận đc thông báo . Tuy nhiên có một số ứng dụng rất khó tìm chính xác tên window nên mình hỏi liệu có cách nào tìm gần đúng . Ví dụ cho trường hợp trên , chỉ cần tìm từ khóa "Yahoo" là có thể tìm ra Yahoo! Messenger.
Đã mất 2 ngày mò trên msdn mà ko có hàm nào khả quan. Mình không tìm theo process vì process có thể đổi dễ dàng khi rename program file.

Vấn đề ở đây là mình muốn tìm gần chính xác class name của process đó (Caption text). Tuy nhiên dùng SPY++ của MSVC thì không tìm được một số classname của một số program. Ví dụ software !xSpeed ( có thể down tại đây : http://www.shareup.com/downloading-12553.html) là 1 soft tăng tốc xử lý hệ thống ( speed up ) và có thể dùng để cheat các gameonline , minigame,... Khi chạy soft này thì caption của process thay đổi theo tốc độ speed up ( ví dụ tăng tốc 2 lần thì caption là +2 ) . Như vậy thì làm sao tìm được chính xác với hàm FindWindowA smilie

Và 1 vấn đề thêm : nếu tìm theo process . mình đã thử thì khi rename tên file thì process name cũng thay đổi . Như thế thì nếu mình tìm process là !xSpeed.exe , người khác chỉ cần rename !xSpeed.exe thành blabla.exe là ko detect ra process nữa . Tuy nhiên mình nghe nói có một số thủ thuật , hàm , hoạt động dựa trên cơ chế tìm process trên ram và kiểm tra theo kiểu các software antivirus check virus nên sẽ nhận ra được đúng , chính xác tên gốc của process ( ví dụ 1 program có Internal name xem trong tab Version của properties . mình thấy khi rename file đi nữa thì internal name cũng ko thay đổi <- cái này cũng tạm chấp nhận nhưng nếu dùng resource hacker để edit lại thì cũng bó tay) smilie

Mình cũng có nghĩ tới cách kiểm tra xung nhịp hoạt động của hệ thống để kiểm tra , phát hiện những chương trình như !xSpeed,SpeedGear . Không biết cách này có khả quan không vì mình đã thử tìm khá nhiều tuy nhiên không thấy tài liệu nào nói cả .

Rất mong các bạn trong forum giúp đỡ . Đã tìm và hỏi nhiều người nhưng không ai có ý kiến gì , hỏi mấy Thầy dạy cũng bó tay . smilie
[Up] [Print Copy]
  [Question]   Re: [Find] running applicatio 28/04/2008 08:30:17 (+0700) | #2 | 127888
[Avatar]
levinthan
Member

[Minus]    0    [Plus]
Joined: 16/01/2008 22:38:43
Messages: 78
Offline
[Profile] [PM] [Yahoo!]
Một chương trình rất hay có liên quan đến vấn đề của mình là DWK . không biết phần mềm này theo dõi các process thế nào để chận nữa . Dù có rename file thì cũng phát hiện ra . Đang google từ khóa " source dwk" , " code giống dwk" mà toàn ra result " kill dwk " , " vượt qua dwk" smilie

// Edit : sorry . Nhầm . DWK sniff web , không phải sniff process.
[Up] [Print Copy]
  [Question]   [Find] running applicatio 28/04/2008 08:53:22 (+0700) | #3 | 127895
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

levinthan wrote:
Hi các bạn trong forum.

Hiện nay mình có một vấn đề , mong các bạn bỏ chút ít thời gian ra chỉ giúp.

Mình muốn viết 1 dll anticheat add vào minigame của mình . Project của mình viết trên VISUAL C++ , có đoạn code tìm ứng dụng đang chạy . Nếu tìm thấy sẽ thông báo lên.
Code:
bool TimWindow(LPCSTR WindowTitle)
{
HWND MyWin = FindWindowA(0,WindowTitle);
if( MyWin > 0)
MessageBoxA(0,"Da tim thay chuong trinh.","Thong bao",0);
return false;
}


Như vậy . khi gọi TimWindow("Yahoo! Messenger");
nếu đang mở YM thì sẽ nhận đc thông báo . Tuy nhiên có một số ứng dụng rất khó tìm chính xác tên window nên mình hỏi liệu có cách nào tìm gần đúng . Ví dụ cho trường hợp trên , chỉ cần tìm từ khóa "Yahoo" là có thể tìm ra Yahoo! Messenger.
Đã mất 2 ngày mò trên msdn mà ko có hàm nào khả quan. Mình không tìm theo process vì process có thể đổi dễ dàng khi rename program file.

Vấn đề ở đây là mình muốn tìm gần chính xác class name của process đó (Caption text). Tuy nhiên dùng SPY++ của MSVC thì không tìm được một số classname của một số program. Ví dụ software !xSpeed ( có thể down tại đây : http://www.shareup.com/downloading-12553.html) là 1 soft tăng tốc xử lý hệ thống ( speed up ) và có thể dùng để cheat các gameonline , minigame,... Khi chạy soft này thì caption của process thay đổi theo tốc độ speed up ( ví dụ tăng tốc 2 lần thì caption là +2 ) . Như vậy thì làm sao tìm được chính xác với hàm FindWindowA smilie

Và 1 vấn đề thêm : nếu tìm theo process . mình đã thử thì khi rename tên file thì process name cũng thay đổi . Như thế thì nếu mình tìm process là !xSpeed.exe , người khác chỉ cần rename !xSpeed.exe thành blabla.exe là ko detect ra process nữa . Tuy nhiên mình nghe nói có một số thủ thuật , hàm , hoạt động dựa trên cơ chế tìm process trên ram và kiểm tra theo kiểu các software antivirus check virus nên sẽ nhận ra được đúng , chính xác tên gốc của process ( ví dụ 1 program có Internal name xem trong tab Version của properties . mình thấy khi rename file đi nữa thì internal name cũng ko thay đổi <- cái này cũng tạm chấp nhận nhưng nếu dùng resource hacker để edit lại thì cũng bó tay) smilie

Mình cũng có nghĩ tới cách kiểm tra xung nhịp hoạt động của hệ thống để kiểm tra , phát hiện những chương trình như !xSpeed,SpeedGear . Không biết cách này có khả quan không vì mình đã thử tìm khá nhiều tuy nhiên không thấy tài liệu nào nói cả .

Rất mong các bạn trong forum giúp đỡ . Đã tìm và hỏi nhiều người nhưng không ai có ý kiến gì , hỏi mấy Thầy dạy cũng bó tay . smilie  


thay vì sử dụng windows title thì bạn thử dùng classname xem,vấn đề nhận ra process vẫn là nó thì mình nghĩ bạn nên đưa ra các tiêu chuẩn để đánh giá.
[Up] [Print Copy]
  [Question]   Re: [Find] running applicatio 28/04/2008 09:55:16 (+0700) | #4 | 127900
[Avatar]
hacnho
HVA Friend

Joined: 28/01/2003 12:07:45
Messages: 199
Location: OEP
Offline
[Profile] [PM]
Cái này nói cả ngày hem hít smilie. Nói chung nếu bạn thích cái nghiệp anti debug-anticheat thì khuyên thật lòng đừng smilie. Ngay cảm GameGuard,X-Trap, HackShield...nó dùng cả cơ chế chặn API, CRC memory mà còn có cách vượt qua mà.

Nếu thích tìm hiểu thì bạn xem cái này nhé: http://www.securityfocus.com/infocus/1893
Mọi câu hỏi vui lòng gửi lên diễn đàn!
[Up] [Print Copy]
  [Question]   Re: [Find] running applicatio 28/04/2008 12:22:47 (+0700) | #5 | 127930
[Avatar]
levinthan
Member

[Minus]    0    [Plus]
Joined: 16/01/2008 22:38:43
Messages: 78
Offline
[Profile] [PM] [Yahoo!]
Cái này nói cả ngày hem hít . Nói chung nếu bạn thích cái nghiệp anti debug-anticheat thì khuyên thật lòng đừng . Ngay cảm GameGuard,X-Trap, HackShield...nó dùng cả cơ chế chặn API, CRC memory mà còn có cách vượt qua mà.

Nếu thích tìm hiểu thì bạn xem cái này nhé: http://www.securityfocus.com/infocus/1893 

Hi. Mình không cần cao siêu . Nhưng nghĩ nếu mình làm được ý tưởng đã nêu ra thì cũng chống được một phần nào ròi . Các pro nào đủ trình độ để cheat thì đành chấp nhận thôi . Chứ phần đông toàn dùng ba cái soft có sẵn !xSpeed và SpeedGear để cheat , rồi bảo là hack tùm lum . Thế mà không chống được thì mới gọi là nhục smilie
Tài liệu bác đưa ra , hic sao mình đọc không hiểu lắm và .... project của mình viết trên VC++ , mình không rành ASM lắm nên ....

hay vì sử dụng windows title thì bạn thử dùng classname xem,vấn đề nhận ra process vẫn là nó thì mình nghĩ bạn nên đưa ra các tiêu chuẩn để đánh giá. 


Mình đang tìm thêm thông tin về classname . Về vấn đề tìm process như mình đã trình bày thì mình thấy trong MSDN chỉ có các hàm get cho phép lấy ra các thông tin của process , nhưng thật sự không tìm được cái nào như ý mình đã trình bày cả .
[Up] [Print Copy]
  [Question]   Re: [Find] running applicatio 28/04/2008 15:49:36 (+0700) | #6 | 127943
[Avatar]
levinthan
Member

[Minus]    0    [Plus]
Joined: 16/01/2008 22:38:43
Messages: 78
Offline
[Profile] [PM] [Yahoo!]
Hic . Tìm theo classname . Một số software như YM thì có classname là YahooBuddyMain ,... mấy cái này thì ok . tìm dễ . Nhưng một số phần mềm chạy trên CMD , khi chạy thì có classname là ConsoleWindowClass thì ... nếu mở cmd lên thôi ko thì cũng báo nhầm. Và một số phần mềm khi chạy thì classname sẽ được sinh ra đại loại như là "#32770 (Dialog)" . Và một số program như WPE PRO thì mỗi khi chạy lại , class name sẽ thay đổi
Afx:400000:8:10011:0:44038b
Afx:400000:8:10011:0:b405e3
<- thế này thì sao mà tìm chính xác được đây smilie

Xin được chỉ giúp giùm cái này .
[Up] [Print Copy]
  [Question]   Re: [Find] running applicatio 28/04/2008 18:46:01 (+0700) | #7 | 127949
[Avatar]
levinthan
Member

[Minus]    0    [Plus]
Joined: 16/01/2008 22:38:43
Messages: 78
Offline
[Profile] [PM] [Yahoo!]
Đây là project của mình một cách đơn giản ( dùng findwindow tìm classname và title ): http://thanhnienbaolam.com/Guard.rar
Sau cả đêm tìm tòi thì mình nhận ra rằng việc nhận biết file từ Window title , caption , classname là ko hay . caption thì dễ bị thay đổi và một số program thì cả classname và caption đều không có cố định. Nên mình đã chuyển sang phương hướng tìm tất cả các process đang chạy. và từ các process này , tìm ra path và fileversion info để lấy product name , internal name . Tuy cách này vẫn có thể bypass bằng các soft như resource hacker nhưng với trò game nhỏ của mình và thời điểm hiện tại thì có lẽ đây là khả quan nhất.

Mò miết bên codeproject thì thấy có cái Process viewer này khá hay . Source đầy đủ : http://www.codeproject.com/KB/cpp/processviewer.aspx
Process viewer list ra các running process và cho ra FileVersionInfo đầy đủ .
Ý tưởng của mình dựa trên đó , sẽ liệt kê product name , internal name của các process đang chạy để so sánh với các từ khóa mình định danh sẵn. Nhưng ôi thôi , đúng là Software Developer (Senior) của India , nhìn cái source mà chóng cả mặt , không biết nên " chôm cái nào , chôm cái gì , chôm từ đâu " luôn smilie

Mình không biết bây giờ với ý tưởng như trên thì phải làm thế nào nữa . Với kiến thức có hạn của mình , hi vọng nhận được sự giúp đỡ của các bạn.

[Up] [Print Copy]
  [Question]   Re: [Find] running applicatio 28/04/2008 20:28:33 (+0700) | #8 | 127952
[Avatar]
hacnho
HVA Friend

Joined: 28/01/2003 12:07:45
Messages: 199
Location: OEP
Offline
[Profile] [PM]
Tại sao không API hooking nhỉ smilie?. Thông thường các tools cheat đều dùng một số API cố định để "tham quan" process của bạn thì cách chặn tốt nhất là dùng API hooking (GameGuard là một ví dụ).
Mọi câu hỏi vui lòng gửi lên diễn đàn!
[Up] [Print Copy]
  [Question]   Re: [Find] running applicatio 28/04/2008 23:08:50 (+0700) | #9 | 127972
[Avatar]
levinthan
Member

[Minus]    0    [Plus]
Joined: 16/01/2008 22:38:43
Messages: 78
Offline
[Profile] [PM] [Yahoo!]
Các chương trình như SpeedGear , !xSpeed đâu có thèm tham quan process của mình đâu , nó tăng tốc toàn hệ thống . Cái gì cũng nhanh lên hết.
[Up] [Print Copy]
  [Question]   Re: [Find] running applicatio 29/04/2008 14:54:59 (+0700) | #10 | 128098
[Avatar]
levinthan
Member

[Minus]    0    [Plus]
Joined: 16/01/2008 22:38:43
Messages: 78
Offline
[Profile] [PM] [Yahoo!]
Hôm nay mình đã dùng EnumProcesses để lấy process , GetFileVersionInfoSize ,GetFileVersionInfo,VerQueryValue để lấy version. Nhưng chưa lấy được Product name , Internal name vì MSDN bảo phải dùng String Structure . Đọc hoài không hiểu . Mấy bác có ví dụ nào đơn giản , code ngắn gọn về cái này thì xin chỉ giúp giùm.
[Up] [Print Copy]
  [Question]   Re: [Find] running applicatio 30/04/2008 06:00:09 (+0700) | #11 | 128228
[Avatar]
levinthan
Member

[Minus]    0    [Plus]
Joined: 16/01/2008 22:38:43
Messages: 78
Offline
[Profile] [PM] [Yahoo!]
Code:
class version
{
public:
  version()
  {
      DWORD h = 0;	
      DWORD resource_size = ::GetFileVersionInfoSize(szProcessPath, &h);

	  _tprintf( TEXT("%s\n"),szProcessPath);
        resource_data_ = new unsigned char[resource_size];

          if(::GetFileVersionInfo(szProcessPath,
                                  0,
                                  resource_size,
                                  static_cast<LPVOID>(resource_data_)) != FALSE)
          {
            UINT size = 0;


            if(::VerQueryValue(static_cast<LPVOID>(resource_data_),
                               "\\VarFileInfo\\Translation",
                               reinterpret_cast<LPVOID*>(&language_information_),
                               &size) == FALSE)
              throw std::exception("Requested localized version information not available");
          }
  }
  ~version() { delete [] resource_data_; }
  std::string get_product_name(TCHAR *szProcessPath) const { return get_value("ProductName",szProcessPath); }

private:
  unsigned char          *resource_data_;
  version_nmsp::language *language_information_;
	TCHAR *szProcessPath;
  std::string get_value(const std::string &key,TCHAR *szProcessPath) const
  {
    if(resource_data_)
    {
      UINT              size   = 0;
      std::stringstream t;
      LPVOID            value  = 0;

      // Build query string
      t << "\\StringFileInfo\\" << std::setw(4) << std::setfill('0') << std::hex
        << language_information_->language_ << std::setw(4) << std::hex
        << language_information_->code_page_ << "\\" << key;

	_tprintf( TEXT("%s\n"),szProcessPath);

      if(::VerQueryValue(static_cast<LPVOID>(resource_data_),
                         const_cast<LPTSTR>(t.str().c_str()),
                         static_cast<LPVOID*>(&value),
                         &size) != FALSE)
        return static_cast<LPTSTR>(value);
    }

    return "";
  }
};



void main( )
{
TCHAR szProcessPath[MAX_PATH] = TEXT("D:\\Cheat.exe");
	version v;
	std::cout << v.get_product_name(szProcessPath) << std::endl;
}



Đã mò được cách lấy Product name . Nhưng có một vấn đề với cái class đang sử dụng . Mình muốn đưa szProcessPath từ void main vào trong class. Nhưng khi gọi theo get_product_name thì chỉ có Private hiểu , còn Public thì không. Nên khi xuất ra szProcessPath bên trong với lệnh _tprintf( TEXT("%s\n"),szProcessPath); thì chỉ có Private hiện ra . Nhờ các bác sửa hộ giúp mình vài chỗ để Public hiểu luôn . cám ơn nhiều.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|