Вирусология Движки

Добро пожаловать! хакерский форум к вашим услугам!
У нас вы найдёте всё что вам нужно, вам необходимо только войти в систему.
Войти...

DARKS

Пользователь
112
15
18
#1
Прошу всех начинающих писателей не стыдится скидывать движки а крутым и продвинутым помогать нам.
 

DARKS

Пользователь
112
15
18
#3
Вот мой , поиск нужных функций в таблице экспортов ядра windows.
Немного ламерский но это мой первый экспериментальный но он работает на CRC32.


CRC1F DD 0121F346h ; CRC OF FUNC. FOR TESTS
DD 0044DB28h
DD 0195CD2Fh
DD 00CEDFCDh

SRC1F DQ 8 DUP(0) ; FUNC. SAVE


STCRG DD 12345678 ; START STATE CRCGEN
FEEDB DD 21235432 ; FEEDBACK
BSIZE DD 21 ; BUFFER SIZE



MOV ECX, 0C0000082h ; <-- SYSCALL REG LSTAR
RDMSR ; GET nt!KiSystemCall64 , IN ECX -> OUT RDX + RAX
SHL RDX, 20h
ADD RDX, RAX ; RDX = nt!KiSystemCall64 ADDRESS
MOV RDI, RDX
MOV AL, 'P'
STD
LOOP1:
REPNE SCASB
CMP WORD PTR:[RDI-107],"ZM"
JNZ LOOP1
CLD
LEA RDX,[RDI-107H] ; OSBASE
MOV RSI,[RDI+89H] ; ADDRESS OFF EXPORT TABLE
ADD RSI, RDX ; NORMALIZE
LEA RSI,[RSI+1CH] ; ADDRESS OFF FUNCTIONS
ADD RSI, RDX ; NORM. FUN.TABLE <-FIRST FUNC ADDRESS

MOV R15D, 4 ; NUM OF FUNC.
LOOP2:
MOV ECX, 4 ; NUM OF FUNC.
LEA RDI, CRC1F ; CRC FUNC. FOR SEARCH
LEA RBX, SRC1F ; CRC FUNC. TO SAVE


; FIND ALL CRC FUNC.
LODSD
PUSH RSI
ADD RAX, RDX ; NORM.
PUSH RAX
POP RSI
CALL CRC_32
REPNE SCASD
POP RSI
JNZ LOOP2
PUSH RCX
PUSH RBX
IMUL ECX, ECX, 8
ADD RBX, RCX
MOV [RBX],RSI
POP RBX
POP RCX
DEC R15B
JNZ LOOP2



; Низкий поклон господину Будареву, Иванову и Тетерину
; Этот код взят из замечательные книги - Ассемблер в задачах защиты информации

; Я его немного переделал

CRC_32:
;DS:SI = ESI BUFF ADDR.
;AX START STATE CRCGEN
;DX FEEDBACK
;CX BUFF SIZE

PUSH RSI
PUSH RDX
PUSH RCX
PUSH RBX
PUSH RDI

; INI CRC32
MOV EAX, [STCRG] ; START STATE CRCGEN
MOV EDX, [FEEDB] ; FEEDBACK
MOV ECX, [BSIZE] ; BSIZE

MOV EDI, 32D ; число повторений внутреннего цикла

NEXTDWORD:
PUSH RAX
LODSB
PUSH RAX
POP RBX
POP RAX
PUSH RCX
MOV ECX, EDI

NEXTBIT:
SHR EAX, 1
JNC ZEROFB1
XOR EAX, EDX

ZEROFB1:
SHL EBX, 1
JNC ZEROFB2
XOR EAX, EDX

ZEROFB2:
LOOP NEXTBIT
POP RCX
LOOP NEXTDWORD

POP RDI
POP RBX
POP RCX
POP RDX
POP RSI
RET
 

DARKS

Пользователь
112
15
18
#8
; Hебольшой дизассемблер выдает размер 64 битной команды
; рассчитан на мой будущий мутирующий движок с целью
; изучения ассемблера, испытал его не на все 100
; может быть наеб/ся на какой нибудь команде но это
; легко поправимо, пользуйтесь на здоровья

\lib\win7\amd64\kernel32.lib
\lib\win7\amd64\ntdll.lib


.CODE
Start PROC


MOV RCX,[RSP]
STAR:
CALL DISAM
ADD RCX, RDX
JMP STAR


DISAM PROC
PUSH RCX
;----- INI ----
;MOV RCX,[RSP] ; RCX = OPCODE
XOR RDX, RDX ; COUNTER
XOR RAX, RAX ; OPCE BYTE
XOR RBX, RBX ; TABLE
XOR RSI, RSI ; SAVER
MOV AL, [RCX]

CMP BYTE PTR AL, 0E8h ; CALL OPKE
JZ DISPL32
CMP BYTE PTR AL, 64h ;
JB NOPREFIXA ; JB/JNAE если ниже
CMP BYTE PTR AL, 67h ;
JA NOPREFIXA ; JA/JNBE если выше
INC DL

NOPREFIXA:
INC DL
LEA RBX, TABLE
ADD RBX, RAX
ADD DL, [RBX]
TEST DL, DL
JZ QUIT0
CMP DL, 0FFh
JZ QUIT0
ADD RCX, RDX
MOV AL, [RCX]

;CHECK SIB
PUSH RAX
SHL AL, 5
XOR AL, 10000000b
POP RAX
JNZ NOSIB
XOR RBX, RBX ; SIB FLAG
INC DL


NOSIB:
;CHECK 11
PUSH RAX ; Direct addressing mode 11000000b
SHR AL, 6
XOR AL, 0
POP RAX
JZ CHECK_M

DISPL8:
;CHEK DISP-8
BT AX, 6 ; 01000000b
JNC DISPL32
BT AX, 7 ; 10000000b
JC QUIT1
QUIT0:
ADD DL, 2 ; MODRM+1 BYTE
JMP EXIT

QUIT1:
INC DL
JMP EXIT

CHECK_M:
;CHECK MOD00
PUSH RAX
SHR AL, 6
XOR AL, 3
POP RAX
JNZ MOD00

DISPL32:
ADD DL, 5
JMP EXIT

;CHECK MOD_101
MOD00: ; 0000 0101
PUSH RAX
SHL AL, 5
XOR AL, 10100000b
POP RAX
JZ DISPL32

TEST BL, BL ; TEST SIB FLAG 101
JNZ NOSIBFLAG
INC DL
JMP DISPL32

NOSIBFLAG:
JMP QUIT1

EXIT:
POP RCX
RET
DISAM ENDP
Start ENDP
.DATA

TABLE label BYTE
DB 0; 00
DB 0; 01
DB 0; 02
DB 0; 03
DB 0; 04
DB 0; 05
DB 0; 06
DB 0; 07
DB 0; 08
DB 0; 09
DB 0; 0A
DB 0; 0B
DB 0; 0C
DB 0; 0D
DB 0; 0E
DB 0; 0F
DB 0; 10
DB 0; 11
DB 0; 12
DB 0; 13
DB 0; 14
DB 0; 15
DB 0; 16
DB 0; 17
DB 0; 18
DB 0; 19
DB 0; 1A
DB 0; 1B
DB 0; 1C
DB 0; 1D
DB 0; 1E
DB 0; 1F
DB 0; 20
DB 0; 21
DB 0; 22
DB 0; 23
DB -1; 24
DB 0; 25
DB 0; 26
DB 0; 27
DB 0; 28
DB 0; 29
DB 0; 2A
DB 0; 2B
DB 0; 2C
DB 0; 2D
DB 0; 2E
DB 0; 2F
DB 0; 30
DB 0; 31
DB 0; 32
DB 0; 33
DB -1; 34
DB 0; 35
DB 0; 36
DB 0; 37
DB 0; 38
DB 0; 39
DB 0; 3A
DB 0; 3B
DB 0; 3C
DB 0; 3D
DB 0; 3E
DB 0; 3F
DB 1; 40
DB 1; 41
DB 1; 42
DB 1; 43
DB 1; 44
DB 1; 45
DB 1; 46
DB 1; 47
DB 1; 48
DB 0; 49
DB 0; 4A
DB 0; 4B
DB 0; 4C
DB 0; 4D
DB 0; 4E
DB 0; 4F
DB 0; 50
DB 0; 51
DB 0; 52
DB 0; 53
DB 0; 54
DB 0; 55
DB 0; 56
DB -2; 57
DB 0; 58
DB 0; 59
DB 0; 5A
DB 0; 5B
DB 0; 5C
DB 0; 5D
DB 0; 5E
DB -2; 5F
DB 0; 60
DB 0; 61
DB 0; 62
DB 0; 63
DB 0; 64
DB 0; 65
DB 0; 66
DB 0; 67
DB 0; 68
DB 0; 69
DB 0; 6A
DB 0; 6B
DB 0; 6C
DB 0; 6D
DB 0; 6E
DB 0; 6F
DB 0; 70
DB 0; 71
DB 0; 72
DB 0; 73
DB 0; 74
DB 0; 75
DB 0; 76
DB 0; 77
DB 0; 78
DB 0; 79
DB 0; 7A
DB 0; 7B
DB 0; 7C
DB 0; 7D
DB 0; 7E
DB 0; 7F
DB 1; 80
DB 0; 81
DB 0; 82
DB 0; 83
DB 0; 84
DB 0; 85
DB 0; 86
DB 0; 87
DB 0; 88
DB 0; 89
DB 0; 8A
DB 0; 8B
DB 0; 8C
DB 0; 8D
DB 0; 8E
DB 0; 8F
DB 0; 90
DB 0; 91
DB 0; 92
DB 0; 93
DB 0; 94
DB 0; 95
DB 0; 96
DB 0; 97
DB 0; 98
DB 0; 99
DB 0; 9A
DB 0; 9B
DB 0; 9C
DB 0; 9D
DB 0; 9E
DB 0; 9F
DB 0; A0
DB 0; A1
DB 0; A2
DB 0; A3
DB 0; A4
DB 0; A5
DB 0; A6
DB 0; A7
DB 0; A8
DB 0; A9
DB 0; AA
DB 0; AB
DB 0; AC
DB 0; AD
DB 0; AE
DB 0; AF
DB 0; B0
DB 0; B1
DB 0; B2
DB 0; B3
DB 0; B4
DB 0; B5
DB 0; B6
DB 0; B7
DB 0; B8
DB 0; B9
DB 0; BA
DB 0; BB
DB 0; BC
DB 0; BD
DB 0; BE
DB 0; BF
DB 1; C0
DB 0; C1
DB 0; C2
DB -2; C3
DB 0; C4
DB 0; C5
DB 0; C6
DB 0; C7
DB 0; C8
DB 0; C9
DB 0; CA
DB 0; CB
DB -2; CC
DB 0; CD
DB 0; CE
DB 0; CF
DB 0; D0
DB 0; D1
DB 0; D2
DB 0; D3
DB 0; D4
DB 0; D5
DB 0; D6
DB 0; D7
DB 0; D8
DB 0; D9
DB 0; DA
DB 0; DB
DB 0; DC
DB 0; DD
DB 0; DE
DB 0; DF
DB 0; E0
DB 0; E1
DB 0; E2
DB 0; E3
DB 0; E4
DB 0; E5
DB 0; E6
DB 0; E7
DB 0; E8
DB 0; E9
DB 0; EA
DB 0; EB
DB 0; EC
DB 0; ED
DB 0; EE
DB 0; EF
DB 0; F0
DB 0; F1
DB 0; F2
DB 0; F3
DB 0; F4
DB 0; F5
DB 0; F6
DB 0; F7
DB 0; F8
DB 0; F9
DB 0; FA
DB 0; FB
DB 0; FC
DB 0; FD
DB 0; FE
DB 0; FF

END
 

DARKS

Пользователь
112
15
18
#9
Hебольшой дизассемблер размер 64 - update
Pешена проблема SIB
Добавлена новая таблица для op настроек
осталось разобраться 0F префиксом
не судите строго это мой первые движки

.CODE
Start PROC


MOV RCX,[RSP]
STAR:
CALL DISAM
ADD RCX, RDX
JMP STAR


DISAM PROC
PUSH RCX
;----- INI ----
;MOV RCX,[RSP] ; RCX = OPCODE
XOR RDX, RDX ; COUNTER
XOR RAX, RAX ; OPCE BYTE
XOR RBX, RBX ; TABLE
XOR RSI, RSI ; SAVER
MOV AL, [RCX]


CMP BYTE PTR AL, 0E8h ; CALL OPKE
JZ DISPL32
CMP BYTE PTR AL, 0E9h ; JMP OPKE
JZ DISPL32
;==============================
CMP BYTE PTR AL, 64h ;
JB NOPREFIXA ; JB/JNAE если ниже
CMP BYTE PTR AL, 67h ;
JA NOPREFIXA ; JA/JNBE если выше
INC DL

NOPREFIXA:
INC DL
LEA RBX, TABLE
ADD RBX, RAX
ADD DL, [RBX]
TEST DL, DL
JZ QUIT0
CMP DL, 0FFh
JZ QUIT0
ADD RCX, RDX

;UPDATE MORE INSTR..
MOV AL, [RCX-1]
LEA RBX, TABLE2
ADD RBX, RAX
CMP BYTE PTR [RBX], 0FFh
JZ EXIT
ADD DL, [RBX]
MOV AL, [RCX]
;-----------------

;CHECK SIB
PUSH RAX
SHL AL, 5
XOR AL, 10000000b
POP RAX
JNZ NOSIB
XOR RBX, RBX ; SIB FLAG
INC DL

NOSIB:
;CHECK11:
PUSH RAX ; Direct addressing mode 11000000b
SHR AL, 6
XOR AL, 0
POP RAX
JZ CHECK_M

DISPL8:
;CHEK DISP-8
BT AX, 6 ; 01000000b
JNC DISPL32
BT AX, 7 ; 10000000b
JC QUIT1

QUIT0:
ADD DL, 2
TEST BL, BL ; TEST SIB FLAG
JZ CHECKSIB
JMP EXIT

QUIT1:
INC DL
TEST BL, BL ; TEST SIB FLAG
JZ CHECKSIB
JMP EXIT


CHECK_M: ; = MOD00
;CHECK MOD00
PUSH RAX
SHR AL, 6
XOR AL, 3
POP RAX
JNZ MOD00 ; JMP IF MOD00

DISPL32:
ADD DL, 5
JMP EXIT

;CHECK MOD_101
MOD00: ; 0000 0101
PUSH RAX
SHL AL, 5
XOR AL, 10100000b
POP RAX
JZ DISPL32
TEST BL, BL ; TEST SIB FLAG
JNZ EXITB ; NOSIBFLAG

CHECKSIB: ;
PUSH RAX ; Direct addressing mode 11000000b
SHR AL, 6
XOR AL, 0
POP RAX
JZ EXITSIB00

PUSH RAX
MOV AL, [RCX+1]
SHR AL, 6
XOR AL, 3
POP RAX
JNZ EXIT

EXITB:
INC DL
JMP DISPL32

EXITSIB00:
INC DL
PUSH RAX
MOV AL, [RCX+1]
SHL AL, 5
XOR AL, 10100000b
POP RAX
JZ DISPL32

EXIT:
POP RCX
RET
DISAM ENDP
Start ENDP
.DATA

TABLE label BYTE ; normal instructions
DB 0; 00
DB 0; 01
DB 0; 02
DB 0; 03
DB 0; 04
DB 0; 05
DB 0; 06
DB 0; 07
DB 0; 08
DB 0; 09
DB 0; 0A
DB 0; 0B
DB 0; 0C
DB 0; 0D
DB 0; 0E
DB 0; 0F
DB 0; 10
DB 0; 11
DB 0; 12
DB 0; 13
DB 0; 14
DB 0; 15
DB 0; 16
DB 0; 17
DB 0; 18
DB 0; 19
DB 0; 1A
DB 0; 1B
DB 0; 1C
DB 0; 1D
DB 0; 1E
DB 0; 1F
DB 0; 20
DB 0; 21
DB 0; 22
DB 0; 23
DB -1; 24
DB 0; 25
DB 0; 26
DB 0; 27
DB 0; 28
DB 0; 29
DB 0; 2A
DB 0; 2B
DB 0; 2C
DB 0; 2D
DB 0; 2E
DB 0; 2F
DB 0; 30
DB 0; 31
DB 0; 32
DB 0; 33
DB -1; 34
DB 0; 35
DB 0; 36
DB 0; 37
DB 0; 38
DB 0; 39
DB 0; 3A
DB 0; 3B
DB 0; 3C
DB 0; 3D
DB 0; 3E
DB 0; 3F
DB 1; 40
DB 1; 41
DB 1; 42
DB 1; 43
DB 1; 44
DB 1; 45
DB 1; 46
DB 1; 47
DB 1; 48
DB 1; 49
DB 1; 4A
DB 1; 4B
DB 1; 4C
DB 1; 4D
DB 1; 4E
DB 1; 4F
DB -2; 50
DB -2; 51
DB -2; 52
DB -2; 53
DB -2; 54
DB -2; 55
DB -2; 56
DB -2; 57
DB -2; 58
DB -2; 59
DB -2; 5A
DB -2; 5B
DB -2; 5C
DB -2; 5D
DB -2; 5E
DB -2; 5F
DB 0; 60
DB 0; 61
DB 0; 62
DB 0; 63
DB 0; 64
DB 0; 65
DB 0; 66
DB 0; 67
DB 0; 68
DB 0; 69
DB 0; 6A
DB 0; 6B
DB 0; 6C
DB 0; 6D
DB 0; 6E
DB 0; 6F
DB 0; 70
DB 0; 71
DB 0; 72
DB 0; 73
DB -1; 74
DB -1; 75
DB 0; 76
DB 0; 77
DB -1; 78
DB 0; 79
DB 0; 7A
DB 0; 7B
DB 0; 7C
DB 0; 7D
DB 0; 7E
DB 0; 7F
DB 1; 80
DB 0; 81
DB 0; 82
DB 0; 83
DB 0; 84
DB 0; 85
DB 0; 86
DB 0; 87
DB 0; 88
DB 0; 89
DB 0; 8A
DB 0; 8B
DB 0; 8C
DB 0; 8D
DB 0; 8E
DB 0; 8F
DB -2; 90
DB 0; 91
DB 0; 92
DB 0; 93
DB 0; 94
DB 0; 95
DB 0; 96
DB 0; 97
DB 0; 98
DB 0; 99
DB 0; 9A
DB 0; 9B
DB 0; 9C
DB 0; 9D
DB 0; 9E
DB 0; 9F
DB 0; A0
DB 0; A1
DB 0; A2
DB 0; A3
DB 0; A4
DB 0; A5
DB 0; A6
DB 0; A7
DB 0; A8
DB 0; A9
DB 0; AA
DB 0; AB
DB 0; AC
DB 0; AD
DB -2; AE
DB -2; AF
DB 0; B0
DB 0; B1
DB 0; B2
DB 0; B3
DB 0; B4
DB 0; B5
DB 0; B6
DB 0; B7
DB 0; B8
DB 0; B9
DB 0; BA
DB 0; BB
DB 0; BC
DB 0; BD
DB 0; BE
DB 0; BF
DB 1; C0
DB 0; C1
DB 0; C2
DB -2; C3
DB 0; C4
DB 0; C5
DB 0; C6
DB 0; C7
DB 0; C8
DB 0; C9
DB 0; CA
DB 0; CB
DB -2; CC
DB -1; CD
DB 0; CE
DB 0; CF
DB 0; D0
DB 0; D1
DB 0; D2
DB 0; D3
DB 0; D4
DB 0; D5
DB 0; D6
DB 0; D7
DB 0; D8
DB 0; D9
DB 0; DA
DB 0; DB
DB 0; DC
DB 0; DD
DB 0; DE
DB 0; DF
DB 0; E0
DB 0; E1
DB 0; E2
DB 0; E3
DB 0; E4
DB 0; E5
DB 0; E6
DB 0; E7
DB 0; E8
DB 0; E9
DB 0; EA
DB 0; EB
DB 0; EC
DB 0; ED
DB 0; EE
DB 0; EF
DB 0; F0
DB 0; F1
DB 0; F2
DB -1; F3
DB 0; F4
DB 0; F5
DB 0; F6
DB 0; F7
DB 0; F8
DB 0; F9
DB 0; FA
DB 0; FB
DB 0; FC
DB 0; FD
DB 0; FE
DB 0; FF

TABLE2 label BYTE
DB 0; 00
DB 0; 01
DB 0; 02
DB 0; 03
DB 0; 04
DB 0; 05
DB 0; 06
DB 0; 07
DB 0; 08
DB 0; 09
DB 0; 0A
DB 0; 0B
DB 0; 0C
DB 0; 0D
DB 0; 0E
DB 0; 0F
DB 0; 10
DB 0; 11
DB 0; 12
DB 0; 13
DB 0; 14
DB 0; 15
DB 0; 16
DB 0; 17
DB 0; 18
DB 0; 19
DB 0; 1A
DB 0; 1B
DB 0; 1C
DB 0; 1D
DB 0; 1E
DB 0; 1F
DB 0; 20
DB 0; 21
DB 0; 22
DB 0; 23
DB 0; 24
DB 0; 25
DB 0; 26
DB 0; 27
DB 0; 28
DB 0; 29
DB 0; 2A
DB 0; 2B
DB 0; 2C
DB 0; 2D
DB 0; 2E
DB 0; 2F
DB 0; 30
DB 0; 31
DB 0; 32
DB 0; 33
DB 0; 34
DB 0; 35
DB 0; 36
DB 0; 37
DB 0; 38
DB 0; 39
DB 0; 3A
DB 0; 3B
DB 0; 3C
DB 0; 3D
DB 0; 3E
DB 0; 3F
DB 0; 40
DB 0; 41
DB 0; 42
DB 0; 43
DB 0; 44
DB 0; 45
DB 0; 46
DB 0; 47
DB 0; 48
DB 0; 49
DB 0; 4A
DB 0; 4B
DB 0; 4C
DB 0; 4D
DB 0; 4E
DB 0; 4F
DB 1; 50
DB 1; 51
DB 1; 52
DB 1; 53
DB 1; 54
DB 1; 55
DB 1; 56
DB 1; 57
DB 1; 58
DB 1; 59
DB 1; 5A
DB 1; 5B
DB 1; 5C
DB 1; 5D
DB 1; 5E
DB 1; 5F
DB 0; 60
DB 0; 61
DB 0; 62
DB 0; 63
DB 0; 64
DB 0; 65
DB 0; 66
DB 0; 67
DB 0; 68
DB 0; 69
DB 0; 6A
DB 0; 6B
DB 0; 6C
DB 0; 6D
DB 0; 6E
DB 0; 6F
DB 0; 70
DB 0; 71
DB 0; 72
DB 0; 73
DB 0; 74
DB 0; 75
DB 0; 76
DB 0; 77
DB 0; 78
DB 0; 79
DB 0; 7A
DB 0; 7B
DB 0; 7C
DB 0; 7D
DB 0; 7E
DB 0; 7F
DB 0; 80
DB 3; 81
DB 0; 82
DB 0; 83
DB 0; 84
DB 0; 85
DB 0; 86
DB 0; 87
DB 0; 88
DB 0; 89
DB 0; 8A
DB 0; 8B
DB 0; 8C
DB 0; 8D
DB 0; 8E
DB 0; 8F
DB 0; 90
DB 0; 91
DB 0; 92
DB 0; 93
DB 0; 94
DB 0; 95
DB 0; 96
DB 0; 97
DB 0; 98
DB 0; 99
DB 0; 9A
DB 0; 9B
DB 0; 9C
DB 0; 9D
DB 0; 9E
DB 0; 9F
DB 0; A0
DB 0; A1
DB 0; A2
DB 0; A3
DB 0; A4
DB 0; A5
DB 0; A6
DB 0; A7
DB 0; A8
DB 0; A9
DB 0; AA
DB 0; AB
DB 0; AC
DB 0; AD
DB 0; AE
DB -1; AF
DB 0; B0
DB 0; B1
DB 0; B2
DB 0; B3
DB 0; B4
DB 0; B5
DB 0; B6
DB 0; B7
DB 0; B8
DB 0; B9
DB 0; BA
DB 0; BB
DB 0; BC
DB 0; BD
DB 0; BE
DB 0; BF
DB 0; C0
DB 0; C1
DB 0; C2
DB 0; C3
DB 0; C4
DB 0; C5
DB 0; C6
DB 0; C7
DB 0; C8
DB 0; C9
DB 0; CA
DB 0; CB
DB 0; CC
DB 0; CD
DB 0; CE
DB 0; CF
DB 0; D0
DB 0; D1
DB 0; D2
DB 0; D3
DB 0; D4
DB 0; D5
DB 0; D6
DB 0; D7
DB 0; D8
DB 0; D9
DB 0; DA
DB 0; DB
DB 0; DC
DB 0; DD
DB 0; DE
DB 0; DF
DB 0; E0
DB 0; E1
DB 0; E2
DB 0; E3
DB 0; E4
DB 0; E5
DB 0; E6
DB 0; E7
DB 0; E8
DB 0; E9
DB 0; EA
DB 0; EB
DB 0; EC
DB 0; ED
DB 0; EE
DB 0; EF
DB 0; F0
DB 0; F1
DB 0; F2
DB 0; F3
DB 0; F4
DB 0; F5
DB 0; F6
DB 0; F7
DB 0; F8
DB 0; F9
DB 0; FA
DB 0; FB
DB 0; FC
DB 0; FD
DB 0; FE
DB 0; FF

END
 

DARKS

Пользователь
112
15
18
#10
Oчередной update - дизассемблер размер 64 были ошибки запарился немного.
Все отлажено - все налажено - следующей версии добавлю 0F префикс 2 byte instr.

Kому нужен там префикс 66-77 замените в начале jmp etc.
пока работает без 0F , ну может еще чего упустил
пользуйтесь, делайте что хотите - нужная вещь
.CODE
Start PROC


MOV RCX,[RSP]
STAR:
CALL DISAM
ADD RCX, RDX
JMP STAR


DISAM PROC
PUSH RCX
;----- INI ----
;MOV RCX,[RSP] ; RCX = OPCODE
XOR RDX, RDX ; COUNTER
XOR RAX, RAX ; OPCE BYTE
XOR RBX, RBX ; TABLE
XOR RSI, RSI ; SAVER
MOV AL, [RCX]

CMP BYTE PTR AL, 0E8h ; CALL OPKE
JZ DISPL32
CMP BYTE PTR AL, 0E9h ; JMP OPKE
JZ DISPL32
;==============================
CMP BYTE PTR AL, 64h ;
JB NOPREFIXA ; JB/JNAE если ниже
CMP BYTE PTR AL, 67h ;
JA NOPREFIXA ; JA/JNBE если выше
INC DL

NOPREFIXA:
INC DL
LEA RBX, TABLE
ADD RBX, RAX
ADD DL, [RBX]
TEST DL, DL
JZ QUIT0
CMP DL, 0FFh
JZ QUIT0
ADD RCX, RDX

;UPDATE MORE INSTR..
MOV AL, [RCX-1]
LEA RBX, TABLE2
ADD RBX, RAX
CMP BYTE PTR [RBX], 0FFh
JZ EXIT
ADD DL, [RBX]
MOV AL, [RCX]
;-----------------

;CHECK SIB
PUSH RAX
SHL AL, 5
XOR AL, 10000000b
POP RAX
JNZ NOSIB
XOR RBX, RBX ; SIB FLAG
INC DL

NOSIB:
;CHECK11:
PUSH RAX ; Direct addressing mode 11000000b
SHR AL, 6
XOR AL, 0
POP RAX
;JZ CHECK_M
JZ MOD00

DISPL8:
;CHEK DISP-8
BT AX, 6 ; 01000000b
JNC DISPL32
BT AX, 7 ; 10000000b
JC QUIT1

QUIT0:
ADD DL, 2
TEST BL, BL ; TEST SIB FLAG
JZ CHECKSIB
JMP EXIT

QUIT1:
TEST BL, BL ; TEST SIB FLAG
JZ FKSIB
INC DL

FKSIB:
JMP EXIT

DISPL32:
ADD DL, 5
JMP EXIT

;CHECK MOD_101
MOD00: ; 0000 0101
PUSH RAX
SHL AL, 5
XOR AL, 10100000b
POP RAX
JZ DISPL32
TEST BL, BL ; TEST SIB FLAG
JNZ EXITB ; NOSIBFLAG

CHECKSIB: ;
PUSH RAX ; Direct addressing mode 11000000b
SHR AL, 6
XOR AL, 0
POP RAX
JZ EXITSIB00

PUSH RAX
MOV AL, [RCX+1]
SHR AL, 6
XOR AL, 3
POP RAX
JNZ EXIT

EXITB:
INC DL
JMP EXIT; DISPL32

EXITSIB00:
INC DL
PUSH RAX
MOV AL, [RCX+1]
SHL AL, 5
XOR AL, 10100000b
POP RAX
JZ DISPL32

EXIT:
POP RCX
RET
DISAM ENDP
Start ENDP
.DATA


; -1 = 2 Byte OPKE
; -2 = 1 Byte OPKE
TABLE label BYTE ; normal instructions
DB 0; 00
DB 0; 01
DB 0; 02
DB 0; 03
DB -1;04 AL imm8
DB 0; 05
DB 0; 06
DB 0; 07
DB 0; 08
DB 0; 09
DB 0; 0A
DB 0; 0B
DB -1;0C AL imm8
DB 0; 0D
DB 0; 0E
DB 0; 0F
DB 0; 10
DB 0; 11
DB 0; 12
DB 0; 13
DB -1;14 AL imm8
DB 0; 15
DB 0; 16
DB 0; 17
DB 0; 18
DB 0; 19
DB 0; 1A
DB 0; 1B
DB -1;1C AL imm8
DB 0; 1D
DB 0; 1E
DB 0; 1F
DB 0; 20
DB 0; 21
DB 0; 22
DB 0; 23
DB -1;24 AL imm8
DB 0; 25
DB 0; 26
DB 0; 27
DB 0; 28
DB 0; 29
DB 0; 2A
DB 0; 2B
DB -1;2C AL imm8
DB 0; 2D
DB 0; 2E
DB 0; 2F
DB 0; 30
DB 0; 31
DB 0; 32
DB 0; 33
DB -1;34 AL imm8
DB 0; 35
DB 0; 36
DB 0; 37
DB 0; 38
DB 0; 39
DB 0; 3A
DB 0; 3B
DB -1;3C AL imm8
DB 0; 3D
DB 0; 3E
DB 0; 3F
DB 1; 40
DB 1; 41
DB 1; 42
DB 1; 43
DB 1; 44
DB 1; 45
DB 1; 46
DB 1; 47
DB 1; 48
DB 1; 49
DB 1; 4A
DB 1; 4B
DB 1; 4C
DB 1; 4D
DB 1; 4E
DB 1; 4F
;;;;;;;;;;;;;;;;;;;;
DB -2; 50 ; PUSH/POP
DB -2; 51
DB -2; 52
DB -2; 53
DB -2; 54
DB -2; 55
DB -2; 56
DB -2; 57
DB -2; 58
DB -2; 59
DB -2; 5A
DB -2; 5B
DB -2; 5C
DB -2; 5D
DB -2; 5E
DB -2; 5F
;;;;;;;;;;;;;;;;;;;;
DB 0; 60 invalid
DB 0; 61 invalid
DB 0; 62 invalid
DB 0; 63
DB 0; 64
DB 0; 65
DB 0; 66
DB 0; 67
DB 0; 68
DB 0; 69
DB 0; 6A
DB 0; 6B
DB 0; 6C
DB 0; 6D
DB 0; 6E
DB 0; 6F
DB -1;70 JUMPS
DB -1;71
DB -1;72
DB -1;73
DB -1;74
DB -1;75
DB -1;76
DB -1;77
DB -1;78
DB -1;79
DB -1;7A
DB -1;7B
DB -1;7C
DB -1;7D
DB -1;7E
DB -1;7F
DB 0; 80
DB 0; 81
DB 0; 82
DB 0; 83
DB 0; 84
DB 0; 85
DB 0; 86
DB 0; 87
DB 0; 88
DB 0; 89
DB 0; 8A
DB 0; 8B
DB 0; 8C
DB 0; 8D
DB 0; 8E
DB 0; 8F
DB -2;90 NOP
DB 0; 91
DB 0; 92
DB 0; 93
DB 0; 94
DB 0; 95
DB 0; 96
DB 0; 97
DB 0; 98
DB 0; 99
DB 0; 9A
DB 0; 9B
DB 0; 9C
DB 0; 9D
DB 0; 9E
DB 0; 9F
DB 0; A0
DB 0; A1
DB 0; A2
DB 0; A3
DB 0; A4
DB 0; A5
DB 0; A6
DB 0; A7
DB -1;A8 AL imm8
DB 0; A9
DB 0; AA
DB 0; AB
DB 0; AC
DB 0; AD
DB 0; AE
DB 0; AF
DB 0; B0
DB 0; B1
DB 0; B2
DB 0; B3
DB 0; B4
DB 0; B5
DB 0; B6
DB 0; B7
DB 0; B8
DB 0; B9
DB 0; BA
DB 0; BB
DB 0; BC
DB 0; BD
DB 0; BE
DB 0; BF
DB 0; C0
DB 0; C1
DB 0; C2 RETN - imm16 | C2 05 00 retn 5 dont work, fix after 3b opke
DB -2;C3 ret
DB 0; C4
DB 0; C5
DB 0; C6
DB 0; C7
DB 0; C8
DB 0; C9
DB 0; CA
DB 0; CB
DB -2;CC int3
DB -1;CD int 25
DB 0; CE
DB 0; CF
DB 0; D0
DB 0; D1
DB 0; D2
DB 0; D3
DB 0; D4
DB 0; D5
DB 0; D6
DB -1;D7 AL imm8
DB 0; D8
DB 0; D9
DB 0; DA
DB 0; DB
DB 0; DC
DB 0; DD
DB 0; DE
DB 0; DF
DB 0; E0
DB 0; E1
DB 0; E2
DB 0; E3
DB -1;E4 AL imm8
DB 0; E5
DB 0; E6
DB 0; E7
DB 0; E8
DB 0; E9
DB 0; EA
DB -1;EB JMP rel8
DB -2;EC IN AL DX
DB 0; ED
DB 0; EE
DB 0; EF
DB 0; F0
DB 0; F1
DB 0; F2
DB 0; F3
DB 0; F4
DB 0; F5
DB 0; F6
DB 0; F7
DB 0; F8
DB 0; F9
DB 0; FA
DB 0; FB
DB 0; FC
DB 0; FD
DB 0; FE
DB 0; FF

; ADD EXTRA BYTE
TABLE2 label BYTE
DB 0; 00
DB 0; 01
DB 0; 02
DB 0; 03
DB 0; 04
DB 0; 05
DB 0; 06
DB 0; 07
DB 0; 08
DB 0; 09
DB 0; 0A
DB 0; 0B
DB 0; 0C
DB 0; 0D
DB 0; 0E
DB 0; 0F
DB 0; 10
DB 0; 11
DB 0; 12
DB 0; 13
DB 0; 14
DB 0; 15
DB 0; 16
DB 0; 17
DB 0; 18
DB 0; 19
DB 0; 1A
DB 0; 1B
DB 0; 1C
DB 0; 1D
DB 0; 1E
DB 0; 1F
DB 0; 20
DB 0; 21
DB 0; 22
DB 0; 23
DB 0; 24
DB 0; 25
DB 0; 26
DB 0; 27
DB 0; 28
DB 0; 29
DB 0; 2A
DB 0; 2B
DB 0; 2C
DB 0; 2D
DB 0; 2E
DB 0; 2F
DB 0; 30
DB 0; 31
DB 0; 32
DB 0; 33
DB 0; 34
DB 0; 35
DB 0; 36
DB 0; 37
DB 0; 38
DB 0; 39
DB 0; 3A
DB 0; 3B
DB 0; 3C
DB 0; 3D
DB 0; 3E
DB 0; 3F
DB 0; 40
DB 0; 41
DB 0; 42
DB 0; 43
DB 0; 44
DB 0; 45
DB 0; 46
DB 0; 47
DB 0; 48
DB 0; 49
DB 0; 4A
DB 0; 4B
DB 0; 4C
DB 0; 4D
DB 0; 4E
DB 0; 4F
DB 0; 50
DB 0; 51
DB 0; 52
DB 0; 53
DB 0; 54
DB 0; 55
DB 0; 56
DB 0; 57
DB 0; 58
DB 0; 59
DB 0; 5A
DB 0; 5B
DB 0; 5C
DB 0; 5D
DB 0; 5E
DB 0; 5F
DB 0; 60
DB 0; 61
DB 0; 62
DB 0; 63
DB 0; 64
DB 0; 65
DB 0; 66
DB 0; 67
DB 0; 68
DB 0; 69
DB 0; 6A
DB 0; 6B
DB 0; 6C
DB 0; 6D
DB 0; 6E
DB 0; 6F
DB 0; 70
DB 0; 71
DB 0; 72
DB 0; 73
DB 0; 74
DB 0; 75
DB 0; 76
DB 0; 77
DB 0; 78
DB 0; 79
DB 0; 7A
DB 0; 7B
DB 0; 7C
DB 0; 7D
DB 0; 7E
DB 0; 7F
DB 1; 80 r/m8 imm8
DB 0; 81
DB 0; 82
DB 1; 83 r/m16/32/64 imm8
DB 0; 84
DB 0; 85
DB 0; 86
DB 0; 87
DB 0; 88
DB 0; 89
DB 0; 8A
DB 0; 8B
DB 0; 8C
DB 0; 8D
DB 0; 8E
DB 0; 8F
DB 0; 90
DB 0; 91
DB 0; 92
DB 0; 93
DB 0; 94
DB 0; 95
DB 0; 96
DB 0; 97
DB 0; 98
DB 0; 99
DB 0; 9A
DB 0; 9B
DB 0; 9C
DB 0; 9D
DB 0; 9E
DB 0; 9F
DB 0; A0
DB 0; A1
DB 0; A2
DB 0; A3
DB 0; A4
DB 0; A5
DB 0; A6
DB 0; A7
DB 0; A8
DB 0; A9
DB 0; AA
DB 0; AB
DB 0; AC
DB 0; AD
DB 0; AE
DB 0; AF
DB 0; B0
DB 0; B1
DB 0; B2
DB 0; B3
DB 0; B4
DB 0; B5
DB 0; B6
DB 0; B7
DB 0; B8
DB 0; B9
DB 0; BA
DB 0; BB
DB 0; BC
DB 0; BD
DB 0; BE
DB 0; BF
DB 1; C0 r/m8 imm8
DB 1; C1 r/m16/32/64 imm8
DB 0; C2
DB 0; C3
DB 0; C4
DB 0; C5
DB 1; C6 r/m8 imm8
DB 0; C7
DB 0; C8
DB 0; C9
DB 0; CA
DB 0; CB
DB 0; CC
DB 0; CD
DB 0; CE
DB 0; CF
DB 0; D0
DB 0; D1 OK Word r/m16/32/64 1
DB 0; D2 OK Byte r/m8 CL
DB 0; D3 OK - r/m16/32/64 CL
DB 0; D4
DB 0; D5
DB 0; D6
DB 0; D7
DB 0; D8
DB 0; D9
DB 0; DA
DB 0; DB
DB 0; DC
DB 0; DD
DB 0; DE
DB 0; DF
DB 0; E0
DB 0; E1
DB 0; E2
DB 0; E3
DB 0; E4
DB 0; E5
DB 0; E6
DB 0; E7
DB 0; E8
DB 0; E9
DB 0; EA
DB 0; EB
DB 0; EC
DB 0; ED
DB 0; EE
DB 0; EF
DB 0; F0
DB 0; F1
DB 0; F2
DB 0; F3
DB 0; F4
DB 0; F5
DB 0; F6 Fuck me
DB 0; F7
DB 0; F8
DB 0; F9
DB 0; FA
DB 0; FB
DB 0; FC
DB 0; FD
DB 0; FE
DB 0; FF

END
 

DARKS

Пользователь
112
15
18
#11
Предлагаю вашему вниманию улучшенный дизассемблер x64.
Заточен под определенные инструкции с небольшими ограничениями.
не судите строго это мой первые признаки слабоумия ;)
валялся в папке никому не нужен.

; DISAS.ASM
DISAM:
;----- INI ----
;MOV RCX,[RSP] ; RCX = OPCODE
XOR RDX, RDX ; COUNTER
XOR RAX, RAX ; OPCE BYTE
XOR RBX, RBX ; TABLE ADDR - SIB FLAG
XOR RSI, RSI ; PREFIX FLAG
XOR RDI, RDI ; 40-48 FLAG



MOV AL, [RCX]

xchg al, bl
CMP BYTE PTR bl, 0E8h ; CALL OPKE
xchg al, bl
JZ DISPL32

xchg al, bl
CMP BYTE PTR bl, 0E9h ; JMP OPKE
xchg al, bl
JZ DISPL32

;============================== FOR ONE VIR NEXT MODIFIED
cmp byte ptr [rcx], 0Fh ;Check 0F
jnz NOF0
CMP WORD PTR [RCX], 800Fh ; FOR TEST 0F8Xh JUMP INS..
JB NOF0 ; JB/JNAE если ниже
CMP WORD PTR [RCX], 8F0Fh ; FOR TEST 0F8Xh JUMP INS..
JA NOF0 ; JA/JNBE если выше
ADD DL, 6
JMP EXIT


NOF0:
;==============================
xchg al, bl
CMP BYTE PTR bl, 64h ;
xchg al, bl
JB NOPREFIXA ; JB/JNAE если ниже

xchg al, bl
CMP BYTE PTR bl, 67h ;
xchg al, bl
JA NOPREFIXA ; JA/JNBE если выше

INC DL
INC RCX
MOV AL, [RCX]
INC SI ; PREFIX FLAG
;==============================

NOPREFIXA:
INC DL
LEA RBX, TABLE
ADD RBX, RAX
ADD DL, [RBX]
TEST DL, DL
JZ QUIT0
CMP DL, 0FFh
JZ QUIT0
CMP DL, 9h
JZ EXIT

;============================== FOR ONE VIR
CMP BYTE PTR [RBX], 1;;;;;
JNZ NOFLAGA
INC DI
NOFLAGA:
;==============================

;============================== FOR ONE VIR
CMP DL, 5 ; FOR TEST 81 ; FOR ONE VIR 05 OP also
JZ EXIT ; FOR NEXT MUST BE MODIFIED

;B8-F - CHECKS
xchg al, bl
CMP BYTE PTR bl, 0B0h ;
xchg al, bl
JB NEXTA ; JB/JNAE если ниже

xchg al, bl
CMP BYTE PTR bl, 0BFh ;
xchg al, bl
JA NEXTA ; JA/JNBE если выше

TEST SI, SI
JZ NOSUB

xchg al, bl
CMP BYTE PTR bl, 0B7h ;
xchg al, bl
JA NOADD ; JA/JNBE если выше

ADD DL, 2
JMP EXIT
NOADD:
CMP BYTE PTR [RCX-1], 67h
JZ EXIT
SUB DL, 2
NOSUB:
JMP EXIT

NEXTA:
ADD RCX, RDX
TEST SI, SI
JZ NEXT
DEC RCX

NEXT:
;UPDATE MORE INSTR..
MOV AL, [RCX-1]

;B0-F - CHECKS
xchg al, bl
CMP BYTE PTR bl, 0B0h ;
xchg al, bl
JB NEXTB ; JB/JNAE если ниже
xchg al, bl
CMP BYTE PTR bl, 0BFh ;
xchg al, bl
JA NEXTB ; JA/JNBE если выше

PUSH RAX
MOV AL, [RCX-2]
LEA RBX, TABLE2
ADD RBX, RAX
ADD DL, [RBX]
POP RAX
JMP EXIT
;===========

NEXTB:
LEA RBX, TABLE2
ADD RBX, RAX
CMP BYTE PTR [RBX], 0FFh
JZ EXIT

;============================== FOR ONE VIR
CMP BYTE PTR [RBX], 0FEh ; FOR ONE VIR
JZ J0F ; FOR ONE VIR

ADD DL, [RBX]
MOV AL, [RCX]

DisasmProc1:
;CHECK SIB
PUSH RAX
SHL AL, 5
XOR AL, 10000000b
POP RAX
JNZ NOSIB
XOR RBX, RBX ; SIB FLAG
INC DL

NOSIB:
;CHECK11:
PUSH RAX ; Direct addressing mode 11000000b
SHR AL, 6
XOR AL, 0
POP RAX
JZ MOD00

DISPL8:
;CHEK DISP-8
BT AX, 6 ; 01000000b
JNC DISPL32
BT AX, 7 ; 10000000b
JC QUIT1

QUIT0:
ADD DL, 2
TEST BL, BL ; TEST SIB FLAG
JZ CHECKSIB
JMP EXIT

QUIT1:
TEST BL, BL ; TEST SIB FLAG
JZ FKSIB
INC DL

FKSIB:
JMP EXIT
DISPL32:
INC DL
DISPL32B:
ADD DL, 4
JMP EXIT

;CHECK MOD_101
MOD00: ; 0000 0101
PUSH RAX
SHL AL, 5
XOR AL, 10100000b
POP RAX
JZ DISPL32
TEST BL, BL ; TEST SIB FLAG
JNZ EXITB ; NOSIBFLAG

CHECKSIB: ;
PUSH RAX ;
SHR AL, 6
XOR AL, 0
POP RAX
JZ EXITSIB00

PUSH RAX
MOV AL, [RCX+1]
SHR AL, 6
XOR AL, 3
POP RAX
JNZ EXIT

EXITB:
INC DL
JMP EXIT

EXITSIB00:
INC DL
PUSH RAX
MOV AL, [RCX+1]
SHL AL, 5
XOR AL, 10100000b
POP RAX
JZ DISPL32B

EXIT:
RET

;============================== FOR ONE VIR
J0F:
ADD DL, 3
JMP EXIT


Include
; ListOP.asm
; -1 = 2 Byte OPKE
; -2 = 1 Byte OPKE
TABLE label BYTE ; normal instructions
DB 0; 00
DB 0; 01
DB 0; 02
DB 0; 03
DB-1; 04 AL imm8
DB 0; 05 05 C3 9E 26 00 add eax,269EC3 add 4 or 3 , Excluded RAX commands
DB 0; 06
DB 0; 07
DB 0; 08
DB 0; 09
DB 0; 0A
DB 0; 0B
DB-1; 0C AL imm8
DB 0; 0D
DB 0; 0E
DB 0; 0F
DB 0; 10
DB 0; 11
DB 0; 12
DB 0; 13
DB-1; 14 AL imm8
DB 0; 15
DB 0; 16
DB 0; 17
DB 0; 18
DB 0; 19
DB 0; 1A
DB 0; 1B
DB-1; 1C AL imm8
DB 0; 1D
DB 0; 1E
DB 0; 1F
DB 0; 20
DB 0; 21
DB 0; 22
DB 0; 23
DB-1; 24 AL imm8
DB 0; 25
DB 0; 26
DB 0; 27
DB 0; 28
DB 0; 29
DB 0; 2A
DB 0; 2B
DB-1; 2C AL imm8
DB 0; 2D
DB 0; 2E
DB 0; 2F
DB 0; 30
DB 0; 31
DB 0; 32
DB 0; 33
DB-1; 34 AL imm8
DB 0; 35
DB 0; 36
DB 0; 37
DB 0; 38
DB 0; 39
DB 0; 3A
DB 0; 3B
DB-1; 3C AL imm8
DB 0; 3D
DB 0; 3E
DB 0; 3F
;;;;;;;;
DB 1; 40
DB 1; 41
DB 1; 42
DB 1; 43
DB 1; 44
DB 1; 45
DB 1; 46
DB 1; 47
DB 1; 48
DB 1; 49
DB 1; 4A
DB 1; 4B
DB 1; 4C
DB 1; 4D
DB 1; 4E
DB 1; 4F
;;;;;;;;;;;;;;;;;;;;
DB -2; 50 ; PUSH/POP
DB -2; 51
DB -2; 52
DB -2; 53
DB -2; 54
DB -2; 55
DB -2; 56
DB -2; 57
DB -2; 58
DB -2; 59
DB -2; 5A
DB -2; 5B
DB -2; 5C
DB -2; 5D
DB -2; 5E
DB -2; 5F
;;;;;;;;;;;;;;;;;;;;
DB 0; 60 invalid
DB 0; 61 invalid
DB 0; 62 invalid
DB 0; 63
DB 0; 64
DB 0; 65
DB 0; 66
DB 0; 67
DB 0; 68
DB 0; 69
DB 0; 6A
DB 0; 6B
DB 0; 6C
DB 0; 6D
DB 0; 6E
DB 0; 6F
DB -1;70 JUMPS
DB -1;71
DB -1;72
DB -1;73
DB -1;74
DB -1;75
DB -1;76
DB -1;77
DB -1;78
DB -1;79
DB -1;7A
DB -1;7B
DB -1;7C
DB -1;7D
DB -1;7E
DB -1;7F
DB 0; 80
DB 3; 81 ; FOR ONE VIR NEXT MOD
DB 0; 82
DB 0; 83
DB 0; 84
DB 0; 85
DB 0; 86
DB 0; 87
DB 0; 88
DB 0; 89
DB 0; 8A
DB 0; 8B
DB 0; 8C
DB 0; 8D
DB 0; 8E
DB 0; 8F
DB-2; 90 NOP
DB 0; 91
DB 0; 92
DB 0; 93
DB 0; 94
DB 0; 95
DB 0; 96
DB 0; 97
DB 0; 98
DB 0; 99
DB 0; 9A
DB 0; 9B
DB 0; 9C
DB 0; 9D
DB 0; 9E
DB 0; 9F
DB 0; A0
DB 0; A1
DB 7; A2
DB 0; A3
DB-2; A4
DB 0; A5
DB 0; A6
DB 0; A7
DB-1; A8 AL imm8
DB 0; A9
DB 0; AA
DB 0; AB
DB 0; AC
DB 0; AD
DB 0; AE
DB 0; AF
;;;;;;;;
DB-1; B0
DB-1; B1
DB-1; B2
DB-1; B3
DB-1; B4
DB-1; B5
DB-1; B6
DB-1; B7
;;;;;;;;
DB 4; B8 ; PX. BA 3B FA 75 05 - mov edx, 575FA3B
DB 4; B9
DB 4; BA
DB 4; BB
DB 4; BC
DB 4; BD
DB 4; BE
DB 4; BF
;;;;;;;;
DB 0; C0
DB 0; C1
DB 0; C2 RETN - imm16 | C2 05 00 retn 5 dont work, fix after 3b opke
DB-2; C3 ret
DB 0; C4
DB 0; C5
DB 0; C6
DB 0; C7
DB 0; C8
DB 0; C9
DB 0; CA
DB 0; CB
DB-2 ;CC int3
DB-1 ;CD int 25
DB 0; CE
DB 0; CF
DB 0; D0
DB 0; D1
DB 0; D2
DB 0; D3
DB 0; D4
DB 0; D5
DB 0; D6
DB-1; D7 AL imm8
DB 0; D8
DB 0; D9
DB 0; DA
DB 0; DB
DB 0; DC
DB 0; DD
DB 0; DE
DB 0; DF
DB 0; E0
DB 0; E1
DB 0; E2
DB 0; E3
DB-1; E4 AL imm8
DB 0; E5
DB 0; E6
DB 0; E7
DB 0; E8
DB 0; E9
DB 0; EA
DB-1 ;EB JMP rel8
DB-2 ;EC IN AL DX
DB 0; ED
DB 0; EE
DB 0; EF
DB 0; F0
DB 0; F1
DB 0; F2
DB 0; F3
DB 0; F4
DB 0; F5
DB 0; F6
DB 0; F7
DB 0; F8
DB 0; F9
DB-2; FA
DB 0; FB
DB 0; FC
DB 0; FD
DB 0; FE
DB 0; FF

; ADD EXTRA BYTE
TABLE2 label BYTE
DB 0; 00
DB 0; 01
DB 0; 02
DB 0; 03
DB 0; 04
DB 0; 05
DB 0; 06
DB 0; 07
DB 0; 08
DB 0; 09
DB 0; 0A
DB 0; 0B
DB 0; 0C
DB 0; 0D
DB 0; 0E
DB 0FEH; 0F ; FOR ONE VIR NEXT MOD
DB 0; 10
DB 0; 11
DB 0; 12
DB 0; 13
DB 0; 14
DB 0; 15
DB 0; 16
DB 0; 17
DB 0; 18
DB 0; 19
DB 0; 1A
DB 0; 1B
DB 0; 1C
DB 0; 1D
DB 0; 1E
DB 0; 1F
DB 0; 20
DB 0; 21
DB 0; 22
DB 0; 23
DB 0; 24
DB 0; 25
DB 0; 26
DB 0; 27
DB 0; 28
DB 0; 29
DB 0; 2A
DB 0; 2B
DB 0; 2C
DB 0; 2D
DB 0; 2E
DB 0; 2F
DB 0; 30
DB 0; 31
DB 0; 32
DB 0; 33
DB 0; 34
DB 0; 35
DB 0; 36
DB 0; 37
DB 0; 38
DB 0; 39
DB 0; 3A
DB 0; 3B
DB 0; 3C
DB 0; 3D
DB 0; 3E
DB 0; 3F
;;;;;;;;
DB 4; 40
DB 4; 41
DB 4; 42
DB 4; 43
DB 4; 44
DB 4; 45
DB 4; 46
DB 4; 47
;;;;;;;;
DB 8; 48
DB 8; 49
DB 8; 4A
DB 8; 4B
DB 8; 4C
DB 8; 4D
DB 8; 4E
DB 8; 4F
;;;;;;;;
DB 0FFh; 50 PUSH/POP
DB 0FFh; 51
DB 0FFh; 52
DB 0FFh; 53
DB 0FFh; 54
DB 0FFh; 55
DB 0FFh; 56
DB 0FFh; 57
DB 0FFh; 58
DB 0FFh; 59
DB 0FFh; 5A
DB 0FFh; 5B
DB 0FFh; 5C
DB 0FFh; 5D
DB 0FFh; 5E
DB 0FFh; 5F
;;;;;;;;
DB 0; 60
DB 0; 61
DB 0; 62
DB 0; 63
DB 0; 64
DB 0; 65
DB 0; 66
DB 0; 67
DB 0; 68
DB 0; 69
DB 0; 6A
DB 0; 6B
DB 0; 6C
DB 0; 6D
DB 0; 6E
DB 0; 6F
DB 0; 70
DB 0; 71
DB 0; 72
DB 0; 73
DB 0; 74
DB 0; 75
DB 0; 76
DB 0; 77
DB 0; 78
DB 0; 79
DB 0; 7A
DB 0; 7B
DB 0; 7C
DB 0; 7D
DB 0; 7E
DB 0; 7F
DB 1; 80 r/m8 imm8
DB 4; 81 r/m16/32/64 imm16/32 NEW
DB 0; 82
DB 1; 83 r/m16/32/64 imm8
DB 0; 84
DB 0; 85
DB 0; 86
DB 0; 87
DB 0; 88
DB 0; 89
DB 0; 8A
DB 0; 8B
DB 0; 8C
DB 0; 8D
DB 0; 8E
DB 0; 8F
DB 0; 90
DB 0; 91
DB 0; 92
DB 0; 93
DB 0; 94
DB 0; 95
DB 0; 96
DB 0; 97
DB 0; 98
DB 0; 99
DB 0; 9A
DB 0; 9B
DB 0; 9C
DB 0; 9D
DB 0; 9E
DB 0; 9F
DB 0; A0
DB 0; A1
DB 0; A2
DB 0; A3
DB 0; A4
DB 0; A5
DB 0; A6
DB 0; A7
DB 0; A8
DB 0; A9
DB 0; AA
DB 0; AB
DB 0; AC
DB 0; AD
DB 0; AE
DB 0; AF
;;;;;;;;
DB 0; B0
DB 0; B1
DB 0; B2
DB 0; B3
DB 0; B4
DB 0; B5
DB 0; B6
DB 0; B7
;;;;;;;;
DB 0; B8 ; PX. BA 3B FA 75 05 - mov edx, 575FA3B
DB 0; B9
DB 0; BA
DB 0; BB
DB 0; BC
DB 0; BD
DB 0; BE
DB 0; BF
;;;;;;;;
DB 1; C0 r/m8 imm8
DB 1; C1 r/m16/32/64 imm8
DB 0; C2
DB 0; C3
DB 0; C4
DB 0; C5
DB 1; C6 r/m8 imm8
DB 0; C7
DB 0; C8
DB 0; C9
DB 0; CA
DB 0; CB
DB 0; CC
DB 0; CD
DB 0; CE
DB 0; CF
DB 0; D0
DB 0; D1 OK Word r/m16/32/64 1
DB 0; D2 OK Byte r/m8 CL
DB 0; D3 OK - r/m16/32/64 CL
DB 0; D4
DB 0; D5
DB 0; D6
DB 0; D7
DB 0; D8
DB 0; D9
DB 0; DA
DB 0; DB
DB 0; DC
DB 0; DD
DB 0; DE
DB 0; DF
DB 0; E0
DB 0; E1
DB 0; E2
DB 0; E3
DB 0; E4
DB 0; E5
DB 0; E6
DB 0; E7
DB 0; E8
DB 0; E9
DB 0; EA
DB 0; EB
DB 0; EC
DB 0; ED
DB 0; EE
DB 0; EF
DB 0; F0
DB 0; F1
DB 0; F2
DB 0; F3
DB 0; F4
DB 0; F5
DB 1; F6 r/m8 imm8
DB 0; F7
DB 0; F8
DB 0; F9
DB 0; FA
DB 0; FB
DB 0; FC
DB 0; FD
DB 0; FE
DB 0; FF
 

DARKS

Пользователь
112
15
18
#12
Разбиваем инструкцию на мелкие кусочки все почти готово к мутации,
дело вот в чем в первую очередь я надеюсь на мутацию регистров,
регистр RAX очень хреново мутируется.

Короче что должен делать этот disassembler, дизассемблировать самого себя,
разбивать свой инструкции на части в список чтоб в дальнейшем предать мутирующим движкам.
Это все было собрано по инструкциям Zombie.

extrn ExitProcess: PROC
extrn GetTickCount: PROC


LISTSIZE equ sizeof PIZDA

;flags
CM_STOP equ 1 ;CM_STOP JMP/RET-alike instruction - CALL
CM_HAVEREL equ 2 ;CM_HAVEREL have relative argument (JMP,JCC,CALL,etc.)
CM_EXTREL equ 3 ;CM_EXTREL rel. arg points to external label
CM_XREF equ 4 ;CM_XREF label, i.e. have XREF
CM_ASSEMBLED equ 5 ;CM_ASSEMBLED alredy assembled (while assembling)



PIZDA STRUC
cmd DB 0 ;cmd[16]; // opcode OK
oper1 DB 0 ;register OK
oper2 DB 0 ;register OK
len DB 0 ;len; // length of the opcode OK
sibfl DB 0 ;Sib Flag 0 True 1 Fails OK
pre0f DB 0 ;0F Prefix OK
flags DB 0 ;flags; // flags. see CM_xxx OK
prefa DB 0 ;Prefix 64-67 Pref. SI DISAM OK
prefb DB 0 ;Prefix 40-4F Pref. DI DISAM OK
ofs DQ 0 ;ofs; // current (temporary) offset OK
rel DQ 0 ;rel; NOW For test OFFSET OK
next DQ 0 ;next; // next entry OFFSET or NULL OK


;------Other See Zombie
;rel XYI <0> ;rel; // see below --
;nxt XYI <0> ;nxt; // see below --
;next XYI <0> ;next; // next entry or NULL --
PIZDA ENDS




.DATA

LIST1 PIZDA <0>
LIST1_Back PIZDA <0> ;<----------------- Just help dont forget to del
randseed dd 12345678h ;<----------------- Just help dont forget to del
LISTSAVE db LISTSIZE*100 DUP (0) ;<----------------- Just help dont forget to del
CopyOPTEST dq 2 DUP (0) ;<----------------- Just help dont forget to del
INCLUDE ListOP.ASM


.CODE
Start PROC
;call TESTA ;Testing disassembler <----------------- Just help dont forget to del

lea rdx, LISTSAVE ;<----------------- Just help dont forget to del
mov LIST1.next, rdx
LEA R15, LIST1 ;<----------------- Just help dont forget to del
lea r13, CopyOPTEST ;<----------------- Just help dont forget to del
MOV RCX, [RSP] ;Descriptor BUFFER <----------------- Just help dont forget to del

AS: PUSH RCX ;IN RCX CODE BUF - EXIT RDX LEN.
CALL DISAM ;DI 40-4F Prefix, SI 64-67 Pref.
POP RCX ;BX SIB FLAG, RAX - MOD

call CrList


ADD RCX, RDX
JMP AS



CrList: push rax ;MOD
push rdx ;len; // length of the opcode
push rbx ;Sib Flag or 0
push rdi ;Prefix 64-67 Pref. SI DISAM
push rsi ;Prefix 40-4F Pref. DI DISAM
push rcx ;ofs; // current (temporary) offset

mov LIST1.ofs, rcx ;ofs; // current (temporary) offset
mov LIST1.len, dl ;len; // length of the opcode
mov LIST1.sibfl,bl ;Sib Flag 0 or NO ZERO


test si, si
jz noprefa
mov bl, byte ptr [rcx]
mov LIST1.prefa,bl ;Prefix 64-67 Pref. SI DISAM
inc rcx

noprefa: test di, di
mov bl, byte ptr [rcx]
mov LIST1.prefb,bl ;Prefix 64-67 Pref. SI DISAM
jz noprefb
inc rcx

noprefb: mov al, byte ptr [rcx]
mov LIST1.cmd, al ;cmd[16]; // opcode

lea rbx, TABLE3
add rbx, rax
cmp byte ptr [rbx],0FFh ;Check A2
jz CrList_SAVE

cmp byte ptr [rbx],0FEh ;Check 0F
jz Checks0FJMPS

cmp byte ptr [rbx],0FDh ;Check 70-7F jumps
jz Checks70XJPS

cmp byte ptr [rbx],0FCh ;Check E9-E8 jumps-call
jz ChecksE9_E8JPS

cmp byte ptr [rbx],0C3h ;C3 ret
jnz No0c3h
mov LIST1.flags, CM_STOP ;Add Flag
jmp CrList_SAVE
No0c3h:
CrList_NoF0: inc rcx
mov al, byte ptr [rcx]
call GetOpers

CrList_SAVE: call SaveMe

CrList_exit1: pop rcx
pop rsi
pop rdi
pop rbx
pop rdx
pop rax
ret

SaveMe: mov rbx, LIST1.next
lea rdx, LIST1
mov di, LISTSIZE

LoopSave: mov cl, byte ptr [rdx]
mov byte ptr [rbx], cl
inc rdx
inc rbx
dec di
jnz LoopSave
mov LIST1.next, rbx ;next; // next entry OFFSET or NULL
xchg rbx, r14 ;<----------------- Just help dont forget to del
call ListZero
ret

ListZero: lea rdx, LIST1
mov di, LISTSIZE-8

LoopZero: xor cl, cl
dec cl
mov byte ptr [rdx], cl
inc rdx
dec di
jnz LoopZero
ret


GetOpers: push rax
and ax, 00111000b ; 00111000b First Operand
shr al, 3
mov LIST1.oper1, al ; MOV REG 1
pop rax

push rax
and ax, 00000111b ; 00111000b Second Operand
mov LIST1.oper2, al ; MOV REG 1
pop rax
ret

ChecksE9_E8JPS: mov LIST1.flags, CM_STOP ;Add Flag

pop rbx ;Restore OP - RCX Offset
push rbx

add rbx, rdx ;Add len = rbx next Op
lea rcx, [rcx+1] ;Get jmps 4 byte Offset
mov edi, [rcx]
add rbx, rdi
mov LIST1.rel, rbx ;Save X offset
jmp CrList_SAVE


Checks70XJPS: mov LIST1.flags, CM_HAVEREL ;Add Flag

pop rbx ;Restore OP - RCX Offset
push rbx

add rbx, rdx ;Add len = rbx next Op
lea rcx, [rcx+1] ;Get jmps 4 byte Offset
mov dl, [rcx]
add rbx, rdx
mov LIST1.rel, rbx ;Save X offset
jmp CrList_SAVE


Checks0FJMPS: mov LIST1.pre0f, al ;Save 0F prefix
mov al, byte ptr [rcx+1] ;Get 0F-XX OP
lea rbx, TABLE4
add rbx, rax
cmp byte ptr [rbx],0FFh ;Check 0F-Jumps and other , 0F84
jnz CrList_NoF0
mov LIST1.cmd, al ;Save 0F-XX OP See Flags
mov LIST1.flags, CM_HAVEREL ;Add Flag

pop rbx ;Restore OP - RCX Offset
push rbx

add rbx, rdx ;Add len = rbx next Op
lea rcx, [rcx+2] ;Get jmps 4 byte Offset
mov edi, [rcx]
add rbx, rdi
mov LIST1.rel, rbx ;Save X offset
jmp CrList_SAVE



CopyOP: push rbx
push rcx
push rdx

lea rbx, CopyOPTEST

CopyOpLoop: mov r12b, byte ptr [rcx]
mov byte ptr [rbx], r12b
inc rcx
inc rbx
dec dl
jnz CopyOpLoop

pop rdx
pop rcx
pop rbx
ret

TESTA: mov rcx, [rsp+8]
xor rax, rax
STAR: push rax
PUSH rcx
CALL DISAM
pop rcx
ADD rcx, rdx
POP rax
ADD rax, rdx
CMP rax, 368H ; Add Value
JNZ STAR
INT 3
nop
nop
nop
nop
nop
nop
nop


Start ENDP
INCLUDE DISAS.ASM
END
 

DARKS

Пользователь
112
15
18
#13
C оптимизацией получился салат, я в замешательстве переход с 32 битной системы на 64 довольно мозго\koe дело , пока не начнешь писать не разберешь а потом просто лень исправлять
 

DARKS

Пользователь
112
15
18
#14
!!!!!! Ето не вирус !!!!!! - На virustotal не заливать !!!!! После расшифровки int 3
--------------------------------------------------------------------------------------------------------
1) Crypthider 0.1 - Размазывает криптор по секции кода.
2) + дизассемблер.
3) + пример MD5 mobsync.exe = c2ef3473c81e8ee3bfcfea13e13e3b25
MD5 (Crypthider.zip) = 249e6cdbaf43b59b19e2d43bbc0ec6b2
--------------------------------------------------------------------------------------------------------
 

Вложения

DARKS

Пользователь
112
15
18
#15
Инициализация Crypthider 0.1. Если криптор больше 10-15 инструкций скорее всего не хватит места и будет торчат хвост который нужно будет разбавить мусором, "этот пример на 7 инструкций", короче чем меньше ваш код тем лучше.
Zeros__:
DisMorphSizees dq 0
DisMorphOffsets dq 8 dup (0)
DisMorphOffsetsHideOffs dq 8 dup (0)
dq 8 dup (0)
Zeros__end:
FreeStack db 8 dup (0FFh)
DisMorphOffsetsHideNum db 8*2 dup (0FFh)
db 0FFH
db 8*2 dup (0FFh)

FffZz_end: