우선, 나는 dll을 삽입하고 싶지 않습니다. WriteProcessMemory()를 사용하여 코드를 삽입하고 싶습니다 (가능한 경우). 필자는 이미 ReadProcessMemory()를 사용했기 때문에 글을 쓰는 것이 그리 큰 문제가 아니었다.
음, TargetProgram.exe + D78C612
에서 함수가 말할 수와의 그것이 다음과 같이 호출 할 수있는 가정 해 봅시다 :C++ : 함수 호출을위한 코드 삽입
push eax
push [esp+08]
push edx
push 00
push TargetProgram.exe+AF76235
push 04
call TargetProgram.exe+D78C612
가 정확히 어떻게 내가 위해 WriteProcessMemory()로이 작업을 수행 할 것 ?
중요한 내용을 덮어 쓰지 않고 코드를 삽입 할 수있는 섹션은 어디에서 찾을 수 있습니까? 가장 중요한 것은 함수를 어떻게 호출할까요?
활성 루틴에서 내 코드로 점프를하고 점프하고 다시 삭제하십시오. 하지만 어떻게 그 일상을 찾을 수 있을까요?
많은 질문이있어서 시작하는 법을 모릅니다 ... 저를 도울 수 있기를 바랍니다. :)
그리고 시간이 있다면 실제로 함수 호출 주입 예제 코드를보고 싶습니다.
OP와 비슷한 문제가 있지만 1 차 WriteProcessMemory 호출이 없습니다. local_address로서 함수의 주소를 전달할 수 있지만 다음 인수에서 길이를 전달할 수 없습니다. 간단히 말해 컴파일러가 아직 컴파일하지 못했기 때문에 얼마나 큰지 알지 못하기 때문입니다. WriteProcessMemory는 내 프로세스에서 다른 프로세스로 함수/코드를 작성하는 데 적합합니까? 편집 : 또는 C + + 대신 어셈블러에서 함수를 작성하는 유일한 열쇠 (나는 그것을 계산할 수 있습니까?)? – Kra
@Kra 대부분의 경우 점프 주소가 깨지기 때문에 C 함수를 다른 프로세스로 복사 할 수 없습니다. 재배치를 수정하거나 재배치 가능한 코드를 작성해야합니다.두 경우 모두 어셈블리 언어를 사용해야합니다. 함수 코드 길이에 대한 질문에 대답하기 위해 최적화를 사용하지 않고 f1() 및 f2() 함수를 작성할 수 있다고 생각합니다. 여기서 f2는 코드에서 f1을 따릅니다. 그런 다음 f2의 주소에서 f1의 주소를 빼고 f1의 길이를 얻을 수 있습니다. 그러나 함수 크기는 여기에있는 문제 중 가장 적은 것입니다. – Max
포인트를 얻었습니다. 감사. – Kra