2009-06-10 3 views
3

'업데이트'버튼이있는 윈도우를 여는 MFC 응용 프로그램 (소스 코드 없음)이 있습니다.이 응용 프로그램은 클릭 한 후 매우 긴 업데이트를 수행합니다.버튼을 위조하는 프로그램 수정

DoModal과 같은 창을 만들 때 단추를 눌렀다 고 생각하게하는 메시지가 프로그램에 전송되도록 프로그램을 수정하고 싶습니다.

저는 Ida Pro와 OllyDbg에서 잠시 동안 아무런 소용이 없었습니다. 아마도 PumpMessage를 사용하여 보았지만 성공하지 못했습니다.

어떤 조언이 필요합니까?

답변

3

를 사용하여 마우스 클릭을 보낼 것입니다, 당신은 원래의 프로그램의 바이너리를 패치 할 수 버튼의 BM_CLICK 핸들러를 호출한다. 호출을위한 공간 (인수없이 최소 5 바이트)을 찾을 수 있다면, OllyDbg만으로이 작업을 수행 할 수 있습니다 (코드를 편집하고 선택한 후 "실행 파일에 복사"-> "선택"을 마우스 오른쪽 단추로 클릭하십시오 메뉴). 그렇지 않으면 PE 편집기 (예 : LordPE 또는 PE Tools)를 사용하여 새 코드 섹션을 만들고 거기에 코드를 추가해야합니다 (일반적으로 프로그램의 호출을 섹션으로 건너 뛰고 싶을 것입니다. 버튼의 클릭 핸들러에 대한 호출과 원래 호출을 수행 한 다음 패치 된 점프 후 이전 위치로 다시 이동하십시오.

+0

어떻게이 패치를 설치할 수 있습니까? – samoz

+0

새로운 섹션을 만들지 않으려한다면 "코드 동굴"을 찾아보십시오. 실제로는 프로그램에서 사용하지 않는 작은 메모리 영역입니다. 일반적으로 이것은 "죽은"코드 (적어도 프로그램에서 실제로 호출하지 않는 코드, 적어도 사용하려는 경우는 아님) 또는 정렬을 위해 컴파일러가 남긴 공간에있을 수 있습니다 (일반적으로 ' 이 방법으로 15 바이트 이상을 얻지 마십시오.) –

+0

이 기사를 확인하십시오 : http://www.codeproject.com/KB/cpp/codecave.aspx - 새로운 섹션 (코드 동굴과 DLL을 사용하는 중간적인 근거)을 추가하는 것에 대해서는 설명하지 않습니다. DLL을 번들에 추가해도 괜찮 으면 가져 오기 테이블 (다시 PE 편집기 사용)에 DLL을 추가 한 다음 간단한 포인터 조작을 사용하여 DLL에서 관련 코드를 패치 할 수 있습니다. –

1

테스트 자동화 기술을 사용하여 몇 가지 방법이 있지만 가장 간단한 방법은 원하는 버튼의 창 핸들을 가져 와서 BM_CLICK message으로 보내는 것입니다. 이것은 Windows에서 C/C++에 대한 실무 지식이 있다고 가정합니다. 그렇지 않은 경우 .NET 또는 기타 기술을 사용하는 다른 방법이 있습니다. 나는 ida-pro 또는 ollydbg에 익숙하지 않습니다.

-1

그냥 점심 식사를하는 2 차 프로그램을 만들고 보조 "매크로"프로그램을 사용하는 아이디어를 좋아하지 않는 경우에 SendInput(...)

0

이 perl 모듈 win32 :: guitest를 참조하십시오.이 작업을 수행하는 데 도움이 될 수 있습니다. 펄 스크립트를 작성하여 프로그램에 임베드 할 수 있습니다. 또는 필요한 요구 사항을 감싸고 사용하는 win32 API를 사용할 수 있습니다.

관련 문제