2017-03-13 8 views
0

모든,64 비트 PE 주입 - 주입, 이력서 일시 중단

나는 끝없이 디버깅 응용 프로그램에서이 문제를 알아 내려고 노력하고있어,하지만 난 내 대답을 찾을 수가 없어 (EAX 변화에 64 동등한?) .

내 32 비트 PE 삽입시 주입 된 PE의 새로운 EntryPoint로 결국 EAX를 변경 한 다음 스레드를 다시 시작합니다. 필자는 커널이 엔트리 포인트에 도달하기 위해 EAX를 호출한다고 읽었습니다. (응용 프로그램을 디버깅 할 때 이것을 보지 못했습니다.

그러나 이것이 x64 (모든 레지스터에 대한 시도)에서 가능한지 찾을 수없는 것 같습니다.). 모두 두 가지 질문에 그래서

모든 :

  1. 내가
  2. 을 디버깅 할 때 전화를 볼 수있는 새를 얻기 위해 레지스터를 변경 사용할 수있는 동일한 방법으로인가 할 수 없기 때문에 커널이 실제로, EAX를 호출합니까 entrypoint가 x64로 실행되거나 예를 들어 의존해야합니다. CreateRemoteThread?

P.S는 : 나는 보안 연구원 : 64에서

+0

오 와우. 이것은 실제로 내 문제를 해결했습니다. 내가 왜 내 코드가 작동하지 않는지에 대한 머리를 아프게했지만 명령 포인터를 변경하려고했습니다. 나는 EAX가 호출 된 것을 몰랐다. 디스 어셈블 된 버전을 디버깅하는 데 1 시간을 보냈습니다 ... – user2073973

답변

0

RCX 레지스터 스레드의 응용 프로그램 정의 진입 점으로 사용 해요. in x86 - EAX 레지스터가 사용되었습니다. 커널이이 주소를 호출하지 않습니다. 하지만 kernel32.dll

+0

안녕하세요, 감사합니다! RCX라는 사실을 실제로 알았습니다. 코드에서 실수로 작동하지 않게 만들었습니다. 처음부터 프로그램을 디버깅 할 때 실제 어셈블리 opcode "call RCX/call EAX"를 찾을 수 없습니다.이 작업을 수행하는 실제 명령을 표시 할 수있는 사람은 누구나 실제 응용 프로그램에서 어셈블리를 만들 수 있습니까? – yannickwe87

+0

@ yannickwe87 - 이것은 Windows 버전에 따라 다릅니다. 모든 버전의 다른 코드에서. win10에서 말하기 - ntdll.RtlUserThreadStart (FARPROC ep, PEB peb)'에 bp 설정 - 이것은'LdrInitializeThunk' 이후의 프로세스 EP이고 첫 번째 param (* rcx * register)는 exe 엔트리 포인트 – RbMm

+0

@ yannickwe87입니다. 이 2 함수의 asm 코드와 rcx 호출 방법 [here] (http://stackoverflow.com/a/41396596/6401656) – RbMm