2017-10-08 13 views
2

J'ai besoin de près de sauter (E9 XX XX) et spécifiez que dans le code, mais TASM (et MASM) a changé cela à court (EB XX NOP) après l'assemblage.près du saut changé en saut court automatiquement

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

Pourquoi est-ce important? Et essayez-vous d'obtenir * nous * pour vous aider à faire fonctionner votre virus? –

+0

J'ai besoin de ceci à des fins éducatives, s'il vous plaît aider si vous le savez, merci –

+0

J'ai toujours été heureux quand l'assembleur a fixé mes sauts et n'ai jamais essayé de le faire ne pas le faire. –

Répondre

3

Un moyen facile d'imposer l'utilisation du près saut au lieu du court saut est d'avoir suffisamment d'octets pour sauter par-dessus!

  • Soit utiliser un rembourrage comme:

    COMFILE DB ’*.COM’,0 ;search string for a com file 
    padding db 127 dup (0) 
    VIRUS_START: 
    
  • ou bien ajouter un peu de sous-programme utile (s) avant que l'étiquette VIRUS_START

Une autre possibilité est d'encoder la sauter manuellement.
Il suffit d'écrire db 0E9h, 14, 0

1

Je ne connais pas la réponse pour MASM ou TASM, mais peut-être cela sera utile à quelqu'un:

En MSNA, jmp near VIRUS_START n'applique à long encodage. Vous pouvez également utiliser des trucs comme add dx, strict word 1 pour forcer l'encodage imm16 au lieu de l'imm8. Voir 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: 

avec assemblez nasm -fbin foo.asm. Ensuite, voyez ce que nous avons obtenu avec ndisasm -o 0x100 foo (qui ne connaît que les binaires plats):

00000100 E91000   jmp 0x113 
00000103 EB0E    jmp short 0x113