귀하는 손님 이십니다
로그인
회원가입
  
  델마당 공식 은행계좌
  하나은행 227-910235-83607
  예금주 이상국(운영진)
프로젝트 게시판
투표게시판
델마당소개
기초부터 활용까지! 델파이 교육 - 데브기어
 광고문의 :
강좌, 팁, 정보 강좌, 팁, 정보 입니다.
글내용 - 강좌, 팁, 정보
 델파이로 만들어진 프로그램 해킹???
coding
(권순호)
2018-01-27 오전 4:41:48
카테고리: 팁
4417회 조회



첨부파일 다운로드
hack(2).zip
질문란에 관련 질문이 올라와서 간단하게 적어요 ^^

델파이로 만들어진 프로그램이 있는데
그 프로그램의 특정 버튼 같은 VCL 버튼이 눌러 졌을 때

다른 툴로 만들어진 프로그램에서 VCL 버튼의 콘트롤 네임을 알수 있다면
유용하게 쓸 수 있겠죠

사실상 VCL 콘트롤의 네임 뿐만 아니라, 다른 프로그램에서
델파이로 만들어진 프로그램의 이벤트 핸들러 네임이나 주소, 패런트 클래스, 버추얼 함수 주소 등등 

소스코드가 없더라도 델파이로 만들어진 프로그램의 모든 것을 해킹할 수 있어요

팁의 목적이 해킹이 아니므로 다른 프로그램에서 
델파이로 만들어진 프로그램의 VCL 콘트롤 네임 알아내는 내용만 올립니다. ㅋㅋ

hack.exe 는 VC++ 로 만든 콘솔모드 프로그램이고요. 도스박스에서 실행해서

VCL 콘트롤의 윈도우 핸들을 넘겨주면 콘트롤 네임을 출력할 겁니다. ㅋㅋ



#include <windows.h>
#include <string>
#include <iostream>
#include <sstream>
#include <regex>

using namespace std;

int main()
{
    cout << "input window handle (hex): ";

    string inputStr;
    cin >> inputStr;

    regex rx("(?:0[xX])?[0-9a-fA-F]+");
    if (!regex_match(inputStr, rx)) {
        cout << "invalid hex value.." << endl;
        return -1;
    }

    DWORD inHex;
    istringstream(inputStr) >> hex >> inHex;

    DWORD pid = 0;
    GetWindowThreadProcessId((HWND)inHex, &pid);

    if (!pid) {
     cout << "invalid window handle..." << endl;
     return -1;
    }

    wchar_t buf[1024];
    swprintf_s(buf, L"Delphi%08X", pid);

    LPVOID p = GetPropW((HWND)inHex, (LPCWSTR)GlobalFindAtomW(buf));
    if (!p) {
     cout << "it's not a delphi or c++ builder application..." << endl;
     return -1;
    }

    HANDLE hProcess = OpenProcess(PROCESS_VM_READ, TRUE, pid);
    if (!hProcess) {
     cout << "invalid process..." << endl; 
     return -1;
    }

    ReadProcessMemory(hProcess, (PBYTE(p) + 8), buf, 4, &pid);
    ReadProcessMemory(hProcess, LPCVOID(*PDWORD(buf)), buf, sizeof(buf), &pid);
    CloseHandle(hProcess);

    wcout << L"  hacked vcl control name: " << buf << endl;

    return 0;
}