2017-10-08 3 views
2

점프 (E9 XX XX) 근처에서 작업해야하며 코드에서 TASM (및 MASM)이 어셈블 한 후 Short (EB XX NOP)로 변경해야한다고 지정합니다.점프 부근이 자동으로 점프로 변경

MAIN SEGMENT BYTE 

ASSUME CS:MAIN,DS:MAIN,SS:NOTHING 

ORG 100H 


HOST: 

jmp NEAR PTR VIRUS_START 

db ’VI’ 

mov ah,4CH 

mov al,0 

int 21H ;terminate normally with DOS 

COMFILE DB ’*.COM’,0 ;search string for a com file 
VIRUS_START: 
+0

왜 중요한가요? 그리고 당신이 당신의 바이러스 작업을 돕기 위해 * 우리 *를 얻으려고합니까? –

+0

나는 교육적인 목적으로 이것을 필요로한다. 알고 있다면 고마워요. –

+0

어셈블러가 저의 점프를 고쳤고, 그렇게하지 않으려 고 노력하지 않았을 때 저는 항상 행복했습니다. –

답변

3

쉬운 방법 대신 짧은 점프의 점프 근처 의 사용을 강제하는 동안 점프 할 수있는 충분한 바이트를 가지고있다! 라벨 또 다른 가능성은 인코딩하는 것입니다 VIRUS_START

하기 전에 몇 가지 유용한 서브 루틴 (들)을 추가

COMFILE DB ’*.COM’,0 ;search string for a com file 
padding db 127 dup (0) 
VIRUS_START: 
  • 또는 다른 :

    • 하나 같은 몇 가지 패딩을 사용 수동으로 이동하십시오.
      그냥 db 0E9h, 14, 0

  • 1

    내가 MASM 또는 TASM에 대한 답을 모르는 쓰기, 그러나 아마이 사람에게 도움이 될 것입니다 : NASM에서

    , jmp near VIRUS_START 긴 인코딩을 적용한다. 또한 add dx, strict word 1과 같은 것을 사용하여 imm8 대신 imm16 인코딩을 강제 실행할 수 있습니다. http://www.nasm.us/doc/nasmdoc3.html#section-3.7

    ; ASSUME: I think there's a way to port that to NASM, but IDK how. 
    ORG 100H 
    
    HOST: 
    jmp NEAR VIRUS_START ; with override 
    jmp VIRUS_START  ; without 
    ... ; your code unmodified 
    VIRUS_START: 
    

    nasm -fbin foo.asm와 조립을 참조하십시오. 그런 다음 우리가 얻은 것을 ndisasm -o 0x100 foo (평이한 바이너리에 대해서만 알고있는 것)으로보십시오 :

    00000100 E91000   jmp 0x113 
    00000103 EB0E    jmp short 0x113