Skip to content

Commit ea33182

Browse files
committed
removed rand32 function
1 parent 9d371c7 commit ea33182

File tree

2 files changed

+50
-64
lines changed

2 files changed

+50
-64
lines changed

mkpoly.inc

+2-33
Original file line numberDiff line numberDiff line change
@@ -8,42 +8,11 @@ extern mprotect
88
%define PROT_WRITE 0x2
99
%define PROT_EXEC 0x4
1010

11-
; prefixes and opcodes of 8 invertible instructions:
12-
; instructions | inverted instructions
13-
; - add reg, reg | - sub reg, reg
14-
; - sub reg, reg | - add reg, reg
15-
; - xor reg, reg | - xor reg, reg
16-
; - add reg, i32 | - sub reg, i32
17-
; - sub reg, i32 | - add reg, i32
18-
; - xor reg, i32 | - xor reg, i32
19-
; - rol reg, i8 | - ror reg, i8
20-
; - ror reg, i8 | - rol reg, i8
21-
; - inc reg
22-
; - dec reg
23-
; - not reg
24-
; - neg reg
25-
%define OPCODE_ADD_RM 0x01
26-
%define OPCODE_SUB_RM 0x29
27-
%define OPCODE_XOR_RM 0x31
28-
%define PREFIX_ASX_IMM 0x81
29-
%define OPCODE_ADD_RI 0xC0
30-
%define OPCODE_SUB_RI 0xE8
31-
%define OPCODE_XOR_RI 0xF0
32-
%define PREFIX_ROT_IMM 0xC1
33-
%define OPCODE_ROL_RI 0xC0
34-
%define OPCODE_ROR_RI 0xC8
35-
%define PREFIX_INC_DEC 0xFF
36-
%define OPCODE_INC_R 0xC0
37-
%define OPCODE_DEC_R 0xC8
38-
%define PREFIX_NOT_NEG 0xF7
39-
%define OPCODE_NOT_R 0xD0
40-
%define OPCODE_NEG_R 0xD8
41-
4211
; no operation x86 opcode
4312
%define OPCODE_NOP 0x90
4413

4514
; the size of the encryption/decryption functions
46-
%define POLY_FUNC_SIZE 0x100
15+
%define MKPOLY_FUNC_SIZE 0x100
4716

4817
; %1 the label of the section to decrypt
4918
; %2 the size of the section to decrypt
@@ -74,7 +43,7 @@ extern mprotect
7443
mov edx, [rdi+0x8]
7544
mov ebx, [rdi+0xC]
7645
.mkpoly_func:
77-
times POLY_FUNC_SIZE db OPCODE_NOP
46+
times MKPOLY_FUNC_SIZE db OPCODE_NOP
7847
mov [rdi ], eax
7948
mov [rdi+0x4], ecx
8049
mov [rdi+0x8], edx

polyeng.asm

+48-31
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,37 @@
11

22
%include "mkpoly.inc"
33

4+
; prefixes and opcodes of 8 invertible instructions:
5+
; instructions | inverted instructions
6+
; - add reg, reg | - sub reg, reg
7+
; - sub reg, reg | - add reg, reg
8+
; - xor reg, reg | - xor reg, reg
9+
; - add reg, i32 | - sub reg, i32
10+
; - sub reg, i32 | - add reg, i32
11+
; - xor reg, i32 | - xor reg, i32
12+
; - rol reg, i8 | - ror reg, i8
13+
; - ror reg, i8 | - rol reg, i8
14+
; - inc reg
15+
; - dec reg
16+
; - not reg
17+
; - neg reg
18+
%define OPCODE_ADD_RM 0x01
19+
%define OPCODE_SUB_RM 0x29
20+
%define OPCODE_XOR_RM 0x31
21+
%define PREFIX_ASX_IMM 0x81
22+
%define OPCODE_ADD_RI 0xC0
23+
%define OPCODE_SUB_RI 0xE8
24+
%define OPCODE_XOR_RI 0xF0
25+
%define PREFIX_ROT_IMM 0xC1
26+
%define OPCODE_ROL_RI 0xC0
27+
%define OPCODE_ROR_RI 0xC8
28+
%define PREFIX_INC_DEC 0xFF
29+
%define OPCODE_INC_R 0xC0
30+
%define OPCODE_DEC_R 0xC8
31+
%define PREFIX_NOT_NEG 0xF7
32+
%define OPCODE_NOT_R 0xD0
33+
%define OPCODE_NEG_R 0xD8
34+
435
global polyeng
536

637
section .data
@@ -31,15 +62,6 @@ section .data
3162

3263
section .text
3364

34-
; generate a random 32-bit number
35-
;
36-
; [out] eax : a random number
37-
;
38-
align 16
39-
rand32:
40-
rdrand eax
41-
ret
42-
4365
; the polymorphic engine
4466
;
4567
; [in] rdi : the binary data to modify
@@ -69,7 +91,7 @@ polyeng:
6991
mov rcx, rax
7092
sub rcx, 1
7193
mov rdi, .crypt_func
72-
mov rsi, POLY_FUNC_SIZE
94+
mov rsi, MKPOLY_FUNC_SIZE
7395
mov rax, rdi
7496
add rsi, rcx
7597
not rcx
@@ -87,14 +109,14 @@ polyeng:
87109
lea r14, [rel mod_reg_rm]
88110
mov r15d, 0xC
89111
mov r12, .crypt_func
90-
lea rbx, [r12+POLY_FUNC_SIZE-0x6]
112+
lea rbx, [r12+MKPOLY_FUNC_SIZE-0x6]
91113
mov r13, [rbp-0x30]
92114
add r13, [rbp-0x18]
93-
add r13, POLY_FUNC_SIZE
115+
add r13, MKPOLY_FUNC_SIZE
94116
.cryptor_gen_loop:
95117
cmp r12, rbx
96118
ja .cryptor_gen_end
97-
call rand32
119+
rdrand eax
98120
xor edx, edx
99121
div r15d
100122
jmp [.instr_jmp_table+rdx*8]
@@ -112,7 +134,7 @@ polyeng:
112134
dq .neg_reg
113135
.add_reg_reg:
114136
sub r13, 0x2
115-
call rand32
137+
rdrand eax
116138
xor edx, edx
117139
div r15d
118140
mov al, [r14+rdx]
@@ -126,7 +148,7 @@ polyeng:
126148
jmp .cryptor_gen_loop
127149
.sub_reg_reg:
128150
sub r13, 0x2
129-
call rand32
151+
rdrand eax
130152
xor edx, edx
131153
div r15d
132154
mov al, [r14+rdx]
@@ -140,7 +162,7 @@ polyeng:
140162
jmp .cryptor_gen_loop
141163
.xor_reg_reg:
142164
sub r13, 0x2
143-
call rand32
165+
rdrand eax
144166
xor edx, edx
145167
div r15d
146168
mov al, [r14+rdx]
@@ -152,8 +174,7 @@ polyeng:
152174
jmp .cryptor_gen_loop
153175
.add_reg_i32:
154176
sub r13, 0x6
155-
call rand32
156-
mov ecx, eax
177+
rdrand ecx
157178
mov al, PREFIX_ASX_IMM
158179
and ah, 0x3
159180
mov dx, ax
@@ -167,8 +188,7 @@ polyeng:
167188
jmp .cryptor_gen_loop
168189
.sub_reg_i32:
169190
sub r13, 0x6
170-
call rand32
171-
mov ecx, eax
191+
rdrand ecx
172192
mov al, PREFIX_ASX_IMM
173193
and ah, 0x3
174194
mov dx, ax
@@ -182,8 +202,7 @@ polyeng:
182202
jmp .cryptor_gen_loop
183203
.xor_reg_i32:
184204
sub r13, 0x6
185-
call rand32
186-
mov ecx, eax
205+
rdrand ecx
187206
mov al, PREFIX_ASX_IMM
188207
and ah, 0x3
189208
or ah, OPCODE_XOR_RI
@@ -195,8 +214,7 @@ polyeng:
195214
jmp .cryptor_gen_loop
196215
.rol_reg_i8:
197216
sub r13, 0x3
198-
call rand32
199-
mov ecx, eax
217+
rdrand ecx
200218
shr ecx, 16
201219
mov al, PREFIX_ROT_IMM
202220
and ah, 0x3
@@ -213,8 +231,7 @@ polyeng:
213231
jmp .cryptor_gen_loop
214232
.ror_reg_i8:
215233
sub r13, 0x3
216-
call rand32
217-
mov ecx, eax
234+
rdrand ecx
218235
shr ecx, 16
219236
mov al, PREFIX_ROT_IMM
220237
and ah, 0x3
@@ -231,7 +248,7 @@ polyeng:
231248
jmp .cryptor_gen_loop
232249
.inc_reg:
233250
sub r13, 0x2
234-
call rand32
251+
rdrand eax
235252
mov al, PREFIX_INC_DEC
236253
and ah, 0x3
237254
mov dx, ax
@@ -243,7 +260,7 @@ polyeng:
243260
jmp .cryptor_gen_loop
244261
.dec_reg:
245262
sub r13, 0x2
246-
call rand32
263+
rdrand eax
247264
mov al, PREFIX_INC_DEC
248265
and ah, 0x3
249266
mov dx, ax
@@ -255,7 +272,7 @@ polyeng:
255272
jmp .cryptor_gen_loop
256273
.not_reg:
257274
sub r13, 0x2
258-
call rand32
275+
rdrand eax
259276
mov al, PREFIX_NOT_NEG
260277
and ah, 0x3
261278
or ah, OPCODE_NOT_R
@@ -265,7 +282,7 @@ polyeng:
265282
jmp .cryptor_gen_loop
266283
.neg_reg:
267284
sub r13, 0x2
268-
call rand32
285+
rdrand eax
269286
mov al, PREFIX_NOT_NEG
270287
and ah, 0x3
271288
or ah, OPCODE_NEG_R
@@ -292,7 +309,7 @@ polyeng:
292309
mov edx, [rdi+0x8]
293310
mov ebx, [rdi+0xC]
294311
.crypt_func:
295-
times POLY_FUNC_SIZE db OPCODE_NOP
312+
times MKPOLY_FUNC_SIZE db OPCODE_NOP
296313
mov [rdi ], eax
297314
mov [rdi+0x4], ecx
298315
mov [rdi+0x8], edx

0 commit comments

Comments
 (0)