2016-09-04 3 views
0

제목에서 말했듯이, 어떻게 수행 될까요? opcode의 시작 부분에 1 바이트를 추가하면 메모리의 주소가 1 바이트로 푸시됩니다. 원래실행에 영향을 미치지 않고 PE에 바이트 추가

:

0x1 mov ecx, 10 
0x2 mov eax, 1 
0x3 inc eac 
0x4 cmp eax 
0x5 jl 0x3 

추가 바이트 : 당신은 질문을 이해 해달라고하면 수동으로 모든 JMP를 설정

0x1 NOP 
0x2 mov ecx, 10 
0x3 mov eax, 1 
0x4 inc eac 
0x5 cmp eax 
0x6 jl 0x3 

내가 을까, 전화 등을하거나 할 수있는 다른 방법이 있습니다 그것?

+1

프로그램에서 사용 된 모든 메모리 주소를 수동으로 검사하여 조정해야하는지 확인해야합니다. 평범하지 않은 프로그램에서는 수정해야 할 주소가 어디든지있을 수 있으므로 실용적이지 않습니다. 또한 목록에있는 대부분의 명령어는 1 바이트 이상입니다. –

+0

흠, 이것은 정확한 복제물이 아닐 수도 있습니다. 필자가 골랐던 dup-target은 새로운 코드를 추가하는 특정 방법 (새로운 섹션에 넣고 기존 insns를 jmp로 바꾸는 방법)이지만 Jean-François의 대답은 다른 기술을 지적합니다. –

답변

2
코드가 위치 독립적이 아닌 경우가

  • 변화 어떤 상대 점프 (안 모두)
  • 시프트 재배치 오프셋 것처럼

    나쁜 생각 나는 게임을 크랙하는 데 사용

NOP 대신 코드를 넣었지만 괜찮 았지만 때로는 그 이상을해야했습니다.

대체품 :

  • 예를 들어 도달 할 수없는 견고성 코드와 같은 사용 가능/사용되지 않는 프로그램 영역을 찾고 거기에 원래 코드를 옮기십시오. 그런 다음 jsr을 추가하고 사용자 정의 코드를 추가하십시오.
  • 실행 파일을 디스 어셈블하여 다시 어셈블 할 수 있도록 코드를 추가하십시오. 이 방법을 사용하려면 모든 코드 & 데이터 섹션을 식별해야하므로 더 어렵지 만 결국에는 프로그램에 아무 것도 추가 할 수 없습니다.
+0

만약 내가 실행 파일을 분해. 바이트가 명령인지 메모리 위치인지 어떻게 알 수 있습니까? 예를 들면 : mov 명령 0x89를 찾고 모든 0x89 mov에서 찾을 수 있지만 mov eax, dword_0x4C89에서도 찾을 수 있습니다. –

+0

@JF : 다시 열어야한다고 생각하면 알려주세요. 나는 dup-hammering 그것을 서둘 렀을지도 모른다. –

+0

@ Peter 당신에게 맞는 코드가 있지만 나는 당신이 옳다고 생각합니다. 링크 된 답변은 우수하고 매우 완벽합니다. –