一个VMP1.20程序伪指令总结
参照几位牛人的精华贴,依葫芦画瓢总结如下:
1、VMP1.20的伪指令和VMP1.22略有不同:VMP1.20很多双字节的指令到1.22中是单字节的,1.22的SWITCH到跳转表通常使用的是jmp命令,1.20通常使用retn。。。。
2、使用堆栈进行交互和传递参数。
3、分为单字节、双字节(操作数1个字节),三字节(操作数2个字节),5字节指令(操作数4字节)如下几个伪指令
序 号 :[跳转表地址]->跳转地址 ||[机器码地址]->机器码 操作数 | 栈 |伪指令
第000061条:[0x1000141A]->0x100017DE||[0x10023F87]->0x29 |0036|VM_PUSH_ESP
第000062条:[0x10001726]->0x10001A41||[0x10023F88]->0xec 32b3b174 |0032|VM_PUSH_IMM
第000063条:[0x1000153E]->0x10001B68||[0x10023F8D]->0x72 9b61 |0030|VM_PUSHW_IMMW
第000064条:[0x1000165E]->0x100012FD||[0x10023F90]->0xba 07 |0032|VM_POPW_CONTEXT
4、按功能分:POP类,PUSH类,MOV类,Shift类,MUL/ADD/DIV类,Float类,杂类(包括RET和wait等)
助记名称规则:W为字操作指令,B为byte操作指令,_F为有标志位操作
PUSH类:
VM_PUSHW 1000177F
VM_PUSHW_CONTEXT 10001957
VM_PUSHW_CONTEXTBH 100019A7
VM_PUSHW_CONTEXTBL 10001A61
VM_PUSHW_IMMW 10001B68
VM_PUSH_CONTEXT 10001AB3
VM_PUSH_CR0 1000185E
VM_PUSH_CR1 10001164
VM_PUSH_CR2 10001820
VM_PUSH_CR3 100012D9
VM_PUSH_CR4 10001776
VM_PUSH_CR5 10001A31
VM_PUSH_CR6 10001AF6
VM_PUSH_CR7 100012F4
VM_PUSH_CS 10001B44
VM_PUSH_DR0 100045CB
VM_PUSH_DR1 100012EB
VM_PUSH_DR2 10001180
VM_PUSH_DR3 10001090
VM_PUSH_DR4 10001087
VM_PUSH_DR5 10001019
VM_PUSH_DR6 100010F6
VM_PUSH_DR7 10001855
VM_PUSH_DS 1000123B
VM_PUSH_ES 1000122C
VM_PUSH_ESP 100017DE
VM_PUSH_FS 1000114D
VM_PUSH_GS 100045A7
VM_PUSH_IMM 10001A41
VM_PUSH_IMMB 10001099
VM_PUSH_IMMW 100019F7
VM_PUSH_SP 1000458F
VM_PUSH_SS 1000184B
POP类:
VM_POPW_CONTEXT 100012FD
VM_POPW_CONTEXTBH 10001867
VM_POPW_CONTEXTBL 10001BE1
VM_POP_CONTEXT 10001BBB
VM_POP_CR0 100012E2
VM_POP_CR1 100018E7
VM_POP_CR2 100012A8
VM_POP_CR3 10001032
VM_POP_CR4 100018DE
VM_POP_CR5 10001A9E
VM_POP_CR6 1000116D
VM_POP_CR7 10001A7B
VM_POP_CX 10001368
VM_POP_DR0 100017B7
VM_POP_DR1 1000119F
VM_POP_DR2 10001AED
VM_POP_DR3 10001BFB
VM_POP_DR4 10001BA7
VM_POP_DR5 10001945
VM_POP_DR6 1000113A
VM_POP_DR7 100011B0
VM_POP_DS 100018F0
VM_POP_ECX 100018B4
VM_POP_ES 100012CF
VM_POP_ESP 100011CB
VM_POP_FS 100011A8
VM_POP_GS 100045C1
VM_POP_SP 1000102B
MUL/ADD/DIV类:
VM_ADD 10001838
VM_ADDB 100010DD
VM_ADDB_F 10001AA7
VM_ADDW 10001BB0
VM_ADDW_F 100012B1
VM_ADD_F 100019C2
VM_DIV 1000190A
VM_DIVW 100010CB
VM_DIVW_QUOTIENT 10001123
VM_IDIV 100018A8
VM_IDIVW 1000121A
VM_IDIVW_QUOTIENT 10001B24
VM_IMULB_F 1000104A
VM_IMULW_F 1000124A
VM_IMUL_F 10001157
VM_MULB_F 1000196D
VM_MULW_F 1000197C
VM_MUL_F 100019EA
FLOAT类:
VM_F2XM1 10001898
VM_FABS 100011F9
VM_FADD 100018BA
VM_FADDQ 10001060
VM_FCHS 10001998
VM_FCOMP 10001AE5
VM_FCOMPQ 1000199F
VM_FCOS 1000136F
VM_FDECSTP 10001AFF
VM_FDIV 10001233
VM_FDIVQ 100017EF
VM_FILD 1000455C
VM_FILDQ 10001916
VM_FINCSTP 10001071
VM_FISTP 10004554
VM_FISTPQ 100012A0
VM_FISTPW 1000100A
VM_FISUB 10001200
VM_FISUBW 10001B52
VM_FLD 10001932
VM_FLD1 100010FF
VM_FLDCW 100017A8
VM_FLDLG2 100017B0
VM_FLDLN2 10001346
VM_FLDPI 10001A3A
VM_FLDQ 10001208
VM_FLDT 10001B15
VM_FLDZ 10001B1D
VM_FMUL 10001242
VM_FMULQ 10001A84
VM_FNCLEX 10001059
VM_FNINIT 100017CA
VM_FNSTCWW 100018F7
VM_FNSTSWW 10001A28
VM_FPATAN 10001829
VM_FPREM 1000453A
VM_FPREM1 100010EF
VM_FPTAN 10001B4B
VM_FRNDINT 100019DC
VM_FSIN 1000133F
VM_FSQRT 10001012
VM_FST 100010E7
VM_FSTP 10001830
VM_FSTPQ 1000457D
VM_FSTPT 10001890
VM_FSTQ 100018CF
VM_FSUB 10001B85
VM_FSUBQ 10001805
VM_FSUBR 10001197
VM_FSUBRQ 100011C3
VM_FTST 100018D7
VM_FYL2X 100019E3
MOV类(分为byte,Word,DW几种),将[esp+0]定义为参数A,[esp+sizeof(operand)]定义为参数B,
VM_MOVB_A_TO_B 10004571
VM_MOVB_B_TO_A 100011EF
VM_MOVB_B_TO_CSA 10001ACA
VM_MOVB_B_TO_ESA 100011E4
VM_MOVB_B_TO_FSA 100017E4
VM_MOVB_B_TO_GSA 1000193A
VM_MOVB_B_TO_SSA 1000135D
VM_MOVB_CSA_TO_B 1000191E
VM_MOVB_GSA_TO_B 100010C0
VM_MOVW_A_TO_B 10001887
VM_MOVW_A_TO_SS 100011B9
VM_MOVW_B_TO_A 10001B31
VM_MOVW_B_TO_CSA 10001176
VM_MOVW_B_TO_ESA 100017C0
VM_MOVW_B_TO_FSA 1000125C
VM_MOVW_B_TO_GSA 100045AF
VM_MOVW_B_TO_SSA 1000198E
VM_MOVW_CSA_TO_B 10001B3A
VM_MOVW_ESA_TO_B 10001143
VM_MOVW_FSA_TO_B 10001130
VM_MOVW_GSA_TO_B 10001841
VM_MOVW_SSA_TO_B 10004585
VM_MOVZXB_ESA_TO_B 10001B9A
VM_MOVZXB_FSA_TO_B 100018C2
VM_MOVZXB_SSA_TO_B 10001BD4
VM_MOV_A_TO_B 10004541
VM_MOV_B_TO_A 100045B9
VM_MOV_B_TO_CSA 10001068
VM_MOV_B_TO_ESA 10001078
VM_MOV_B_TO_FSA 1000194E
VM_MOV_B_TO_GSA 10001A95
VM_MOV_B_TO_SSA 10001929
VM_MOV_CSA_TO_B 10001A8C
VM_MOV_ESA_TO_B 1000179F
VM_MOV_FSA_TO_B 10001022
VM_MOV_GSA_TO_B 1000189F
VM_MOV_SSA_TO_B 1000111A
移位类
VM_SHL 10004549
VM_SHLB 10004564
VM_SHLB_F 100019CD
VM_SHLD_F 10001811
VM_SHLW 10004599
VM_SHLW_F 1000134D
VM_SHL_F 10001B8D
VM_SHR 100018FF
VM_SHRB 10001322
VM_SHRB_F 10001313
VM_SHRD_F 10001B06
VM_SHRW 10001B5A
VM_SHRW_F 10001AD5
VM_SHR_F 100017D1
变形类
VM_NA_B_ANDW 100017F7
VM_NA_B_ANDW_F 1000132F
VM_NA_NB_AND 10001189
VM_NA_NB_ANDW 100012BE
VM_NA_NB_ANDW_F 100011D1
VM_NA_NB_AND_F 10001A14
杂类
VM_RETF 1000180D
VM_RETN 10001A24
VM_WAIT 10001081
5、伪指令
; ???????????????????????????????????????????????????????????????????????????
VM_PUSH_DR5: ;
mov ecx, dr5
push ecx
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_MOV_FSA_TO_B: ; DATA XREF: ????13CEo
pop edx
push dword ptr fs:[edx]
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_SP proc near
pop sp
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_SP endp
; ???????????????????????????????????????????????????????????????????????????
VM_POP_CR3:
pop edx
mov cr3, edx
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_IMULB_F proc near
pop dx
pop ax
imul dl
push ax
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_IMULB_F endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FNCLEX proc near ; DATA XREF: ????1602o
fnclex
jmp VMLoop_EP ; fetch Instruction Byte
VM_FNCLEX endp
; ???????????????????????????????????????????????????????????????????????????
VM_FADDQ: ; DATA XREF: ????137Eo
fadd qword ptr [esp]
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_MOV_B_TO_CSA: ; DATA XREF: ????1392o
pop ecx ; des?
pop dword ptr cs:[ecx] ; src?
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FINCSTP proc near ; DATA XREF: ????15B2o
; ????15D6o
fincstp
jmp VMLoop_EP ; fetch Instruction Byte
VM_FINCSTP endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOV_B_TO_ESA proc near ; DATA XREF: ????14B6o
pop edx
pop dword ptr es:[edx]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOV_B_TO_ESA endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_WAIT proc near ; DATA XREF: ????146Eo
wait
jmp VMLoop_EP ; fetch Instruction Byte
VM_WAIT endp
; ???????????????????????????????????????????????????????????????????????????
VM_PUSH_DR4: ; DATA XREF: ????1516o
mov edx, dr4
push edx
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_PUSH_DR3: ; DATA XREF: ????170Eo
mov eax, dr3
push eax
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_IMMB proc near ; DATA XREF: ????145Eo
movzx eax, byte ptr [esi]
add al, bl
sub al, 0C4h
lea esi, [esi+1]
not al
inc al
ror al, 5
inc al
ror al, 6
not al
add al, 85h
ror al, 1
add bl, al
cbw
cwde
push eax
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_IMMB endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVB_GSA_TO_B proc near ; DATA XREF: ????1592o
pop edx
mov al, gs:[edx]
push ax
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVB_GSA_TO_B endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_DIVW proc near ; DATA XREF: ????1562o
pop dx
pop ax
pop cx
div cx
push ax
push dx
jmp VMLoop_EP ; fetch Instruction Byte
VM_DIVW endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_ADDB proc near ; DATA XREF: ????16D6o
pop dx
add [esp+0], dl
jmp VMLoop_EP ; fetch Instruction Byte
VM_ADDB endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FST proc near ; DATA XREF: ????1652o
fst dword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FST endp
; ???????????????????????????????????????????????????????????????????????????
VM_FPREM1: ; DATA XREF: ????13BAo
fprem1 ; è?óàêy£¨IEEE£?£?í?FPREM£?μ?ê?ê1ó?IEEE±ê×?[486]
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_DR6 proc near ; DATA XREF: ????166Ao
mov ecx, dr6
push ecx
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_DR6 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FLD1 proc near ; DATA XREF: ????168Ao
fld1
jmp VMLoop_EP ; fetch Instruction Byte
VM_FLD1 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOV_SSA_TO_B proc near ; DATA XREF: ????1416o
pop eax
push dword ptr ss:[eax]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOV_SSA_TO_B endp
; ???????????????????????????????????????????????????????????????????????????
VM_DIVW_QUOTIENT: ; DATA XREF: .text:VM_OP_TABLEo
pop ax
pop cx
div cl
push ax
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVW_FSA_TO_B proc near ; DATA XREF: ????15A2o
pop eax
push small word ptr fs:[eax]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVW_FSA_TO_B endp
; ???????????????????????????????????????????????????????????????????????????
VM_POP_DR6: ; DATA XREF: ????139Eo
pop ecx
mov dr6, ecx
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVW_ESA_TO_B proc near ; DATA XREF: ????1556o
pop eax
push small word ptr es:[eax]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVW_ESA_TO_B endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_FS proc near ; DATA XREF: ????13AAo
mov cx, fs
push cx
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_FS endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_IMUL_F proc near ; DATA XREF: ????169Eo
pop edx
pop eax
imul edx
push eax
push edx
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_IMUL_F endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_CR1 proc near ; DATA XREF: ????155Eo
mov edx, cr1
push edx
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_CR1 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_CR6 proc near ; DATA XREF: ????16DEo
pop ecx
mov cr6, ecx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_CR6 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVW_B_TO_CSA proc near ; DATA XREF: ????1476o
pop edx
pop small word ptr cs:[edx]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVW_B_TO_CSA endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_DR2 proc near ; DATA XREF: ????13DAo
; ????15C6o
mov eax, dr2
push eax
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_DR2 endp
; ???????????????????????????????????????????????????????????????????????????
VM_NA_NB_AND: ; DATA XREF: ????163Ao
pop eax
not eax
not dword ptr [esp]
and [esp], eax
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FSUBR proc near ; DATA XREF: ????1552o
; ????15DEo
fsubr dword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FSUBR endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_DR1 proc near ; DATA XREF: ????1422o
pop ecx
mov dr1, ecx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_DR1 endp
; ???????????????????????????????????????????????????????????????????????????
VM_POP_FS: ; DATA XREF: ????170Ao
db 66h
pop fs
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_DR7 proc near ; DATA XREF: ????172Eo
pop eax
mov dr7, eax
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_DR7 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVW_A_TO_SS proc near ; DATA XREF: ????16CAo
pop ax
db 66h
mov ss, ax
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVW_A_TO_SS endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FSUBRQ proc near ; DATA XREF: ????1656o
fsubr qword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FSUBRQ endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_ESP proc near ; DATA XREF: ????144Ao
pop esp
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_ESP endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_NA_NB_ANDW_F proc near ; DATA XREF: ????14AAo
pop dx
pop cx
not dl
not cl
and dl, cl
push dx
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_NA_NB_ANDW_F endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVB_B_TO_ESA proc near ; DATA XREF: ????140Eo
pop ecx
pop dx
mov es:[ecx], dl
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVB_B_TO_ESA endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVB_B_TO_A proc near ; DATA XREF: ????14EAo
pop eax
pop cx
mov [eax], cl
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVB_B_TO_A endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
; abs(st(0))=>st(0)
VM_FABS proc near ; DATA XREF: ????14D2o
; ????1696o
fabs
jmp VMLoop_EP ; fetch Instruction Byte
VM_FABS endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
; float sub int
VM_FISUB proc near ; DATA XREF: ????13D6o
fisub dword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FISUB endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FLDQ proc near ; DATA XREF: ????1606o
fld qword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FLDQ endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_IDIVW proc near ; DATA XREF: ????1436o
pop dx
pop ax
pop cx
idiv cx
push ax
push dx
jmp VMLoop_EP ; fetch Instruction Byte
VM_IDIVW endp
; ???????????????????????????????????????????????????????????????????????????
VM_PUSH_ES: ; DATA XREF: ????13E2o
db 66h
push es
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FDIV proc near ; DATA XREF: ????16FEo
fdiv dword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FDIV endp
; ???????????????????????????????????????????????????????????????????????????
VM_PUSH_DS: ; DATA XREF: ????1642o
db 66h
push ds
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FMUL proc near ; DATA XREF: ????13CAo
fmul dword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FMUL endp
; ???????????????????????????????????????????????????????????????????????????
VM_IMULW_F: ; DATA XREF: ????13A6o
pop dx
pop ax
imul dx
push ax
push dx
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVW_B_TO_FSA proc near ; DATA XREF: ????16B2o
pop ecx
pop small word ptr fs:[ecx]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVW_B_TO_FSA endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FISTPQ proc near ; DATA XREF: ????1646o
fistp qword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FISTPQ endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_CR2 proc near ; DATA XREF: ????1512o
pop edx
mov cr2, edx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_CR2 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_ADDW_F proc near ; DATA XREF: ????15FAo
pop ax
add [esp+0], ax
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_ADDW_F endp
; ???????????????????????????????????????????????????????????????????????????
VM_NA_NB_ANDW: ; DATA XREF: ????138Ao
pop cx
pop dx
not cl
not dl
and cl, dl
push cx
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_ES proc near ; DATA XREF: ????1396o
pop cx
db 66h
mov es, cx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_ES endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_CR3 proc near ; DATA XREF: ????161Eo
mov edx, cr3
push edx
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_CR3 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_CR0 proc near ; DATA XREF: ????158Eo
pop ecx
mov cr0, ecx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_CR0 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_DR1 proc near ; DATA XREF: ????157Ao
mov ecx, dr1
push ecx
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_DR1 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_CR7 proc near ; DATA XREF: ????13EEo
; ????1682o
mov eax, cr7
push eax
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_CR7 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POPW_CONTEXT proc near ; DATA XREF: ????165Eo
VM_CONTEXT = edi
lodsb
add al, bl
inc al
not al
add al, 1Bh
xor al, 0A8h
add bl, al
pop small word ptr [VM_CONTEXT+eax*4]
jmp VMLoop_EP ; fetch Instruction Byte
VM_POPW_CONTEXT endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_SHRB_F proc near ; DATA XREF: ????1546o
pop ax
pop cx
shr al, cl
push ax
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_SHRB_F endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_SHRB proc near ; DATA XREF: ????148Ao
pop dx
pop cx
shr dl, cl
push dx
jmp VMLoop_EP ; fetch Instruction Byte
VM_SHRB endp
; ???????????????????????????????????????????????????????????????????????????
VM_NA_B_ANDW_F: ; DATA XREF: ????1402o
not dword ptr [esp]
pop dx
and [esp], dx
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FSIN proc near ; DATA XREF: ????138Eo
fsin
jmp VMLoop_EP ; fetch Instruction Byte
VM_FSIN endp
; ???????????????????????????????????????????????????????????????????????????
VM_FLDLN2: ; DATA XREF: ????13F2o
fldln2
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_SHLW_F proc near ; DATA XREF: ????143Eo
; ????14EEo
pop ax
pop cx
shl ax, cl
push ax
ushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_SHLW_F endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVB_B_TO_SSA proc near ; DATA XREF: ????1446o
pop eax
pop dx
mov ss:[eax], dl
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVB_B_TO_SSA endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_CX proc near ; DATA XREF: ????1582o
pop cx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_CX endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FCOS proc near ; DATA XREF: ????13B2o
fcos
jmp VMLoop_EP ; fetch Instruction Byte
VM_FCOS endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_CR4 proc near ; DATA XREF: ????174Ao
mov edx, cr4
push edx
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_CR4 endp
; ???????????????????????????????????????????????????????????????????????????
VM_PUSHW: ; DATA XREF: ????14DAo
lodsb
add al, bl
sub al, 0C4h
not al
inc al
ror al, 5
inc al
ror al, 6
not al
add al, 85h
ror al, 1
add bl, al
push ax
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_MOV_ESA_TO_B: ; DATA XREF: ????14E6o
pop ecx
push dword ptr es:[ecx]
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
; load src to FPU CW(control word)
VM_FLDCW proc near ; DATA XREF: ????1706o
fldcw word ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FLDCW endp
; ???????????????????????????????????????????????????????????????????????????
VM_FLDLG2: ; DATA XREF: ????14D6o
fldlg2 ; load log2 to st0
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_DR0 proc near ; DATA XREF: ????16C6o
pop ecx
mov dr0, ecx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_DR0 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVW_B_TO_ESA proc near ; DATA XREF: ????143Ao
pop eax
pop small word ptr es:[eax]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVW_B_TO_ESA endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
; Initilize FPU without checking out FP exception
VM_FNINIT proc near ; DATA XREF: ????14F2o
fninit
jmp VMLoop_EP ; fetch Instruction Byte
VM_FNINIT endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_SHR_F proc near ; DATA XREF: ????16A2o
pop edx
pop cx
shr edx, cl
push edx
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_SHR_F endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_ESP proc near ; DATA XREF: ????141Ao
push esp
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_ESP endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVB_B_TO_FSA proc near ; DATA XREF: ????160Eo
pop ecx
pop dx
mov fs:[ecx], dl
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVB_B_TO_FSA endp
; ???????????????????????????????????????????????????????????????????????????
VM_FDIVQ: ; DATA XREF: ????14CEo
fdiv qword ptr [esp]
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_NA_B_ANDW proc near ; DATA XREF: ????1686o
not dword ptr [esp+0]
pop ax
and [esp+0], ax
jmp VMLoop_EP ; fetch Instruction Byte
VM_NA_B_ANDW endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FSUBQ proc near ; DATA XREF: ????175Eo
fsub qword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FSUBQ endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_RETF proc far ; DATA XREF: ????1596o
pop eax
popa
popf
retf
VM_RETF endp ; sp = 28h
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_SHLD_F proc near ; DATA XREF: ????141Eo
; ????16EEo
pop eax
pop edx
pop cx
shld eax, edx, cl
push eax
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_SHLD_F endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_CR2 proc near ; DATA XREF: ????1466o
mov eax, cr2
push eax
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_CR2 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FPATAN proc near ; DATA XREF: ????1616o
fpatan
jmp VMLoop_EP ; fetch Instruction Byte
VM_FPATAN endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FSTP proc near ; DATA XREF: ????1662o
fstp dword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FSTP endp
; ???????????????????????????????????????????????????????????????????????????
VM_ADD: ; DATA XREF: ????15EAo
pop edx
add [esp], edx
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVW_GSA_TO_B proc near ; DATA XREF: ????14AEo
pop edx
push small word ptr gs:[edx]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVW_GSA_TO_B endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_SS proc near ; DATA XREF: ????173Ao
mov ax, ss
push ax
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_SS endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_DR7 proc near ; DATA XREF: ????15F2o
mov ecx, dr7
push ecx
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_DR7 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_CR0 proc near ; DATA XREF: ????15CAo
mov edx, cr0
push edx
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_CR0 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POPW_CONTEXTBH proc near ; DATA XREF: ????151Eo
movzx eax, byte ptr [esi]
add al, bl
xor al, 0B9h
inc al
not al
ror al, 6
add al, 0F2h
add bl, al
lea esi, [esi+1]
pop cx
mov [edi+eax*4+1], cl
jmp VMLoop_EP ; fetch Instruction Byte
VM_POPW_CONTEXTBH endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVW_A_TO_B proc near ; DATA XREF: ????162Eo
pop ecx
push small word ptr [ecx]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVW_A_TO_B endp
; ???????????????????????????????????????????????????????????????????????????
VM_FSTPT: ; DATA XREF: ????14DEo
fstp tbyte ptr [esp]
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
; (2^x)-1
VM_F2XM1 proc near ; DATA XREF: ????14CAo
f2xm1
jmp VMLoop_EP ; fetch Instruction Byte
VM_F2XM1 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOV_GSA_TO_B proc near ; DATA XREF: ????15B6o
pop eax
push dword ptr gs:[eax]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOV_GSA_TO_B endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_IDIV proc near ; DATA XREF: ????15FEo
pop edx
pop eax
pop ecx
idiv ecx
push eax
push edx
jmp VMLoop_EP ; fetch Instruction Byte
VM_IDIV endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_ECX proc near ; DATA XREF: ????1442o
pop ecx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_ECX endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FADD proc near ; DATA XREF: ????1462o
fadd dword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FADD endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVZXB_FSA_TO_B proc near ; DATA XREF: ????14A2o
pop ecx
movzx dx, byte ptr fs:[ecx]
push dx
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVZXB_FSA_TO_B endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FSTQ proc near ; DATA XREF: ????167Ao
fst qword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FSTQ endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FTST proc near ; DATA XREF: ????16BAo
ftst
jmp VMLoop_EP ; fetch Instruction Byte
VM_FTST endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_CR4 proc near ; DATA XREF: ????1626o
pop edx
mov cr4, edx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_CR4 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_CR1 proc near ; DATA XREF: ????155Ao
pop eax
mov cr1, eax
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_CR1 endp
; ???????????????????????????????????????????????????????????????????????????
VM_POP_DS: ; DATA XREF: ????14BAo
db 66h
pop ds
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FNSTCWW proc near ; DATA XREF: ????160Ao
fnstcw word ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FNSTCWW endp
; ???????????????????????????????????????????????????????????????????????????
VM_SHR: ; DATA XREF: ????14C6o
pop eax
pop cx
shr eax, cl
push eax
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_DIV proc near ; DATA XREF: ????16F6o
pop edx
pop eax
pop ecx
div ecx
push eax
push edx
jmp VMLoop_EP ; fetch Instruction Byte
VM_DIV endp
; ???????????????????????????????????????????????????????????????????????????
VM_FILDQ: ; DATA XREF: ????13C6o
; ????145Ao
fild qword ptr [esp]
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_MOVB_CSA_TO_B: ; DATA XREF: ????1542o
pop ecx
mov al, cs:[ecx]
push ax
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_MOV_B_TO_SSA: ; DATA XREF: ????1576o
pop edx
pop dword ptr ss:[edx]
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_FLD: ; DATA XREF: ????1426o
; ????1756o
fld dword ptr [esp]
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_MOVB_B_TO_GSA: ; DATA XREF: ????1716o
pop ecx
pop dx
mov gs:[ecx], dl
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_DR5 proc near ; DATA XREF: ????154Ao
pop edx
mov dr5, edx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_DR5 endp
; ???????????????????????????????????????????????????????????????????????????
VM_MOV_B_TO_FSA: ; DATA XREF: ????1712o
pop edx
pop dword ptr fs:[edx]
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_PUSHW_CONTEXT: ; DATA XREF: ????139Ao
lodsb
add al, bl
inc al
not al
add al, 1Bh
xor al, 0A8h
add bl, al
push small word ptr [edi+eax*4]
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_MULB_F: ; DATA XREF: ????1456o
; ????176Eo
pop dx
pop ax
mul dl
push ax
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_MULW_F: ; DATA XREF: ????1382o
pop dx
pop ax
mul dx
push ax
push dx
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_MOVW_B_TO_SSA: ; DATA XREF: ????151Ao
pop ecx
pop small word ptr ss:[ecx]
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FCHS proc near ; DATA XREF: ????1676o
fchs
jmp VMLoop_EP ; fetch Instruction Byte
VM_FCHS endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FCOMPQ proc near ; DATA XREF: ????1692o
fcomp qword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FCOMPQ endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSHW_CONTEXTBH proc near ; DATA XREF: ????150Ao
lodsb
add al, bl
xor al, 0B9h
inc al
not al
ror al, 6
add al, 0F2h
add bl, al
mov al, [edi+eax*4+1]
push ax
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSHW_CONTEXTBH endp
; ???????????????????????????????????????????????????????????????????????????
VM_ADD_F: ; DATA XREF: ????1772o
pop edx
add [esp], edx
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_SHLB_F proc near ; DATA XREF: ????14FAo
pop dx
pop cx
shl dl, cl
push dx
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_SHLB_F endp
; ???????????????????????????????????????????????????????????????????????????
VM_FRNDINT: ; DATA XREF: ????13FEo
frndint ; st(0) <- INT( st(0) ); depends on RC flag
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FYL2X proc near ; DATA XREF: ????1536o
fyl2x
jmp VMLoop_EP ; fetch Instruction Byte
VM_FYL2X endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MUL_F proc near ; DATA XREF: ????1566o
pop edx
pop eax
mul edx
push eax
push edx
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_MUL_F endp
; ???????????????????????????????????????????????????????????????????????????
VM_PUSH_IMMW: ; DATA XREF: ????13DEo
lodsw
add ax, bx
xor ax, 6609h
not ax
ror ax, 8
dec ax
add bx, ax
cwde
push eax
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_NA_NB_AND_F: ; DATA XREF: ????1526o
pop ecx
not ecx
not dword ptr [esp]
and [esp], ecx
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_RETN: ; DATA XREF: ????1406o
pop eax
popa
popf
retn
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
; save status word to dest
VM_FNSTSWW proc near ; DATA XREF: ????16BEo
fnstsw ax
push ax
jmp VMLoop_EP ; fetch Instruction Byte
VM_FNSTSWW endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_CR5 proc near ; DATA XREF: ????174Eo
mov edx, cr5
push edx
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_CR5 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
; st(0) <- ?(ie, pi)
VM_FLDPI proc near ; DATA XREF: ????16AAo
fldpi
jmp VMLoop_EP ; fetch Instruction Byte
VM_FLDPI endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_IMM proc near ; DATA XREF: ????1726o
mov eax, [esi]
add eax, ebx
add eax, 23D30F4Fh ; <suspicious>
rol eax, 1Fh
inc eax
add esi, 4
rol eax, 0Bh
sub eax, 8E5C6C84h
add ebx, eax
push eax
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_IMM endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSHW_CONTEXTBL proc near ; DATA XREF: ????158Ao
lodsb
add al, bl
xor al, 0B9h
inc al
not al
ror al, 6
add al, 0F2h
add bl, al
mov al, [edi+eax*4]
push ax
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSHW_CONTEXTBL endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_CR7 proc near ; DATA XREF: ????14B2o
pop edx
mov cr7, edx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_CR7 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FMULQ proc near ; DATA XREF: ????171Eo
fmul qword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FMULQ endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOV_CSA_TO_B proc near ; DATA XREF: ????147Eo
pop ecx
push dword ptr cs:[ecx]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOV_CSA_TO_B endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOV_B_TO_GSA proc near ; DATA XREF: ????1472o
pop eax
pop dword ptr gs:[eax]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOV_B_TO_GSA endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_CR5 proc near ; DATA XREF: ????153Ao
pop eax
mov cr5, eax
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_CR5 endp
; ???????????????????????????????????????????????????????????????????????????
VM_ADDB_F: ; DATA XREF: ????13AEo
; ????13C2o
pop cx
add [esp], cl
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_CONTEXT proc near ; DATA XREF: ????1502o
lodsb
add al, bl
xor al, 4Ah
ror al, 4
sub al, 0B7h
rol al, 6
add bl, al
push dword ptr [edi+eax*4]
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_CONTEXT endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVB_B_TO_CSA proc near ; DATA XREF: ????13A2o
pop ecx
pop ax
mov cs:[ecx], al
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVB_B_TO_CSA endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_SHRW_F proc near ; DATA XREF: ????173Eo
pop ax
pop cx
shr ax, cl
push ax
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_SHRW_F endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FCOMP proc near ; DATA XREF: ????15A6o
fcomp dword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FCOMP endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_DR2 proc near ; DATA XREF: ????13FAo
pop ecx
mov dr2, ecx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_DR2 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSH_CR6 proc near ; DATA XREF: ????13EAo
mov ecx, cr6
push ecx
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSH_CR6 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FDECSTP proc near ; DATA XREF: ????1432o
fdecstp
jmp VMLoop_EP ; fetch Instruction Byte
VM_FDECSTP endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_SHRD_F proc near ; DATA XREF: ????1522o
pop eax
pop edx
pop cx
shrd eax, edx, cl
push eax
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_SHRD_F endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FLDT proc near ; DATA XREF: ????1762o
fld tbyte ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FLDT endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FLDZ proc near ; DATA XREF: ????14FEo
fldz
jmp VMLoop_EP ; fetch Instruction Byte
VM_FLDZ endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_IDIVW_QUOTIENT proc near ; DATA XREF: ????15CEo
pop ax
pop cx
idiv cl
push ax
jmp VMLoop_EP ; fetch Instruction Byte
VM_IDIVW_QUOTIENT endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVW_B_TO_A proc near ; DATA XREF: ????15E2o
pop edx
pop small word ptr [edx]
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVW_B_TO_A endp
; ???????????????????????????????????????????????????????????????????????????
VM_MOVW_CSA_TO_B: ; DATA XREF: ????13E6o
pop eax
push small word ptr cs:[eax]
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
VM_PUSH_CS: ; DATA XREF: ????149Ao
db 66h
push cs
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FPTAN proc near ; DATA XREF: ????1482o
fptan
jmp VMLoop_EP ; fetch Instruction Byte
VM_FPTAN endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FISUBW proc near ; DATA XREF: ????16A6o
fisub word ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FISUBW endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_SHRW proc near ; DATA XREF: ????15AEo
pop ax
pop cx
shr ax, cl
push ax
jmp VMLoop_EP ; fetch Instruction Byte
VM_SHRW endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_PUSHW_IMMW proc near ; DATA XREF: ????153Eo
lodsw
add ax, bx
xor ax, 6609h
not ax
ror ax, 8
dec ax
add bx, ax
push ax
jmp VMLoop_EP ; fetch Instruction Byte
VM_PUSHW_IMMW endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FSUB proc near ; DATA XREF: ????1492o
fsub dword ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FSUB endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_SHL_F proc near ; DATA XREF: ????168Eo
pop edx
pop cx
shl edx, cl
push edx
pushfw
jmp VMLoop_EP ; fetch Instruction Byte
VM_SHL_F endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVZXB_ESA_TO_B proc near ; DATA XREF: ????1622o
pop eax
movzx dx, byte ptr es:[eax]
push dx
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVZXB_ESA_TO_B endp
; ???????????????????????????????????????????????????????????????????????????
VM_POP_DR4: ; DATA XREF: ????159Ao
; ????1732o
pop edx
mov dr4, edx
jmp VMLoop_EP ; fetch Instruction Byte
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_ADDW proc near ; DATA XREF: ????1752o
pop cx
add [esp+0], cx
jmp VMLoop_EP ; fetch Instruction Byte
VM_ADDW endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_CONTEXT proc near ; DATA XREF: ????171Ao
mov al, [esi]
add al, bl
xor al, 4Ah
ror al, 4
sub al, 0B7h
rol al, 6
add bl, al
pop dword ptr [edi+eax*4]
inc esi
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_CONTEXT endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_MOVZXB_SSA_TO_B proc near ; DATA XREF: ????140Ao
pop eax
movzx dx, byte ptr ss:[eax]
push dx
jmp VMLoop_EP ; fetch Instruction Byte
VM_MOVZXB_SSA_TO_B endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POPW_CONTEXTBL proc near ; DATA XREF: ????1612o
lodsb
add al, bl
xor al, 0B9h
inc al
not al
ror al, 6
add al, 0F2h
add bl, al
pop cx
mov [edi+eax*4], cl
jmp VMLoop_EP ; fetch Instruction Byte
VM_POPW_CONTEXTBL endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_POP_DR3 proc near ; DATA XREF: ????15F6o
pop ecx
mov dr3, ecx
jmp VMLoop_EP ; fetch Instruction Byte
VM_POP_DR3 endp
; ??????????????? S U B R O U T I N E ???????????????????????????????????????
VM_FISTPW proc near
fistp word ptr [esp+0]
jmp VMLoop_EP ; fetch Instruction Byte
VM_FISTPW endp
; ???????????????????????????????????????????????????????????????????????????
VM_FSQRT:
fsqrt
jmp VMLoop_EP ; fetch Instruction Byte
; ???????????????????????????????????????????????????????????????????????????
6、伪指令块
通常每个伪指令块从一组VM_POP_CONTEXT开始,到一组VM_PUSH_CONTEXT+VM_RET结束。每个块可以
认为是更高一级的伪指令,或视为函数。指令执行记录顺序如下:
第000368条:[0x1000171A]->0x10001BBB||[0x10036BFE]->0xe9 00 |-012|VM_POP_CONTEXT
第000369条:[0x1000171A]->0x10001BBB||[0x10036C00]->0xe9 02 |-008|VM_POP_CONTEXT
第000370条:[0x1000171A]->0x10001BBB||[0x10036C02]->0xe9 0c |-004|VM_POP_CONTEXT
第000371条:[0x1000171A]->0x10001BBB||[0x10036C04]->0xe9 0b |0000|VM_POP_CONTEXT
第000372条:[0x1000171A]->0x10001BBB||[0x10036C06]->0xe9 04 |0004|VM_POP_CONTEXT
第000373条:[0x1000171A]->0x10001BBB||[0x10036C08]->0xe9 0a |0008|VM_POP_CONTEXT
第000374条:[0x1000171A]->0x10001BBB||[0x10036C0A]->0xe9 01 |0012|VM_POP_CONTEXT
第000375条:[0x1000171A]->0x10001BBB||[0x10036C0C]->0xe9 03 |0016|VM_POP_CONTEXT
第000376条:[0x1000171A]->0x10001BBB||[0x10036C0E]->0xe9 08 |0020|VM_POP_CONTEXT
第000377条:[0x1000171A]->0x10001BBB||[0x10036C10]->0xe9 04 |0024|VM_POP_CONTEXT
第000378条:[0x10001442]->0x100018B4||[0x10036C12]->0x33 |0028|VM_POP_ECX
第000379条:[0x10001726]->0x10001A41||[0x10036C13]->0xec 2d236673 |0024|VM_PUSH_IMM
第000380条:[0x100014DA]->0x1000177F||[0x10036C18]->0x59 78 |0022|VM_PUSHW
第000381条:[0x1000165E]->0x100012FD||[0x10036C1A]->0xba 05 |0024|VM_POPW_CONTEXT
第000382条:[0x10001726]->0x10001A41||[0x10036C1C]->0xec d2dc9a72 |0020|VM_PUSH_IMM
...........
第000423条:[0x10001686]->0x100017F7||[0x10036C70]->0xc4 |0022|VM_NA_B_ANDW
第000424条:[0x10001502]->0x10001AB3||[0x10036C71]->0x63 06 |0018|VM_PUSH_CONTEXT
第000425条:[0x100015E2]->0x10001B31||[0x10036C73]->0x9b |0024|VM_MOVW_B_TO_A
第000426条:[0x10001502]->0x10001AB3||[0x10036C74]->0x63 04 |0020|VM_PUSH_CONTEXT
第000427条:[0x10001502]->0x10001AB3||[0x10036C76]->0x63 09 |0016|VM_PUSH_CONTEXT
第000428条:[0x10001502]->0x10001AB3||[0x10036C78]->0x63 03 |0012|VM_PUSH_CONTEXT
第000429条:[0x10001502]->0x10001AB3||[0x10036C7A]->0x63 08 |0008|VM_PUSH_CONTEXT
第000430条:[0x10001502]->0x10001AB3||[0x10036C7C]->0x63 0a |0004|VM_PUSH_CONTEXT
第000431条:[0x10001502]->0x10001AB3||[0x10036C7E]->0x63 09 |0000|VM_PUSH_CONTEXT
第000432条:[0x10001502]->0x10001AB3||[0x10036C80]->0x63 0b |-004|VM_PUSH_CONTEXT
第000433条:[0x10001502]->0x10001AB3||[0x10036C82]->0x63 0c |-008|VM_PUSH_CONTEXT
第000434条:[0x10001502]->0x10001AB3||[0x10036C84]->0x63 02 |-012|VM_PUSH_CONTEXT
第000435条:[0x10001502]->0x10001AB3||[0x10036C86]->0x63 00 |-016|VM_PUSH_CONTEXT
第000436条:[0x10001406]->0x10001A24||[0x10036C88]->0x24 |0024|VM_RETN
对应的伪指令块如下:
VMInsBuff_03 db 1Dh ; VM_POP_CONTEXT
db 0E1h ; á
db 32h ; 2 ; VM_POP_CONTEXT
db 79h ; y
db 3Dh ; = ; VM_POP_CONTEXT
db 0C4h ; ?
db 49h ; I ; VM_POP_CONTEXT
db 92h ; ’
db 5Ch ; \ ; VM_POP_CONTEXT
db 26h ; &
db 69h ; i ; VM_POP_CONTEXT
db 6Dh ; m
db 7Fh ; ; VM_POP_CONTEXT
db 8
db 93h ; “ ; VM_POP_CONTEXT
db 0DDh ; Y
db 0A2h ; ¢ ; VM_POP_CONTEXT
db 0EBh ; ?
db 92h ; ’ ; VM_POP_ECX
db 8 ; VM_PUSH_IMM
dd 8A186535h
db 0Bh ; VM_PUSHW
db 6
db 0Bh ; VM_POPW_CONTEXT
db 0
db 19h ; VM_PUSH_IMM
dd 5C9E6D93h
db 63h ; c ; VM_ADD
db 98h ; ? ; VM_POP_CONTEXT
db 0A2h ; ¢
db 86h ; ? ; VM_PUSH_ESP
db 7Dh ; } ; VM_POP_CONTEXT
db 0C7h ; ?
db 12h ; VM_PUSH_IMM
dd 0FA3FCC82h
db 0A9h ; ? ; VM_OP_114
dw 0DAC5h
db 0DEh ; T ; VM_PUSH_SP
db 25h ; % ; VM_POP_CX
db 4Dh ; M ; VM_PUSH_ESP
db 0A4h ; ¤ ; VM_MOV_SSA_TO_B
db 0D5h ; ? ; VM_POPW_CONTEXT
db 0D2h ; ò
db 55h ; U ; VM_POP_CONTEXT
db 59h ; Y
db 0F1h ; ? ; VM_PUSH_IMM
dd 0AC9EC40Ah
db 85h ; … ; VM_ADD
db 7Fh ; ; VM_PUSH_CONTEXT
db 84h
db 85h ; … ; VM_ADD
db 40h ; @ ; VM_PUSH_IMM
dd 0BDC0F22Dh
db 11h ; VM_PUSH_REG
db 5Bh ; [
db 28h ; ( ; VM_SHRB_F
db 72h ; r ; VM_POP_CONTEXT
db 7Bh ; {
db 64h ; d ; VM_PUSH_ESP
db 0A6h ; | ; VM_MOVZXB_SSA_TO_B
db 0AEh ; ? ; VM_POPW_CONTEXT
db 0A7h ; §
db 0C0h ; à ; VM_PUSH_IMM
dd 8BC56656h
db 59h ; Y ; VM_ADD
db 6Eh ; n ; VM_PUSH_ESP
db 0DEh ; T ; VM_PUSH_IMMB
db 28h ; (
db 55h ; U ; VM_ADD
db 49h ; I ; VM_MOV_SSA_TO_B
db 0EBh ; ? ; VM_PUSH_ESP
db 0A1h ; ? ; VM_MOV_SSA_TO_B
db 63h ; c ; VM_POP_CONTEXT
db 2Ch ; ,
db 0EDh ; í ; VM_PUSH_IMMB
db 27h ; '
db 65h ; e ; VM_ADD
db 6 ; VM_MOV_B_TO_A
db 0C7h ; ? ; VM_PUSHW_IMMW
dw 123Bh
db 6Ch ; l ; VM_PUSH_IMM
dd 82EB9F59h
db 0DCh ; ü ; VM_POP_IMMWL
db 0D5h ; ?
db 21h ; ! ; VM_POPW_CONTEXT
db 16h
db 0E6h ; ? ; VM_PUSHW_IMMW
dw 0DAAAh
db 9Fh ; ? ; VM_NA_B_ANDW
db 6 ; VM_PUSH_CONTEXT
db 90h ; ?
db 21h ; ! ; VM_MOVW_B_TO_A
db 2 ; VM_PUSH_CONTEXT
db 0Ch
db 9Bh ; ? ; VM_PUSH_CONTEXT
db 66h ; f
db 2Fh ; / ; VM_PUSH_CONTEXT
db 79h ; y
db 0C9h ; é ; VM_PUSH_CONTEXT
db 0D4h ; ?
db 5Eh ; ^ ; VM_PUSH_CONTEXT
db 0E9h ; é
db 0F1h ; ? ; VM_PUSH_CONTEXT
db 0BCh ; ?
db 85h ; … ; VM_PUSH_CONTEXT
db 0CDh ; í
db 17h ; VM_PUSH_CONTEXT
db 1Fh
db 0A8h ; ¨ ; VM_PUSH_CONTEXT
db 2Dh ; -
db 43h ; C ; VM_PUSH_CONTEXT
db 48h ; H
db 85h ; … ; VM_RETN
7、多个伪指令块记录范例如下:
第0139次跳转,跳转到:0x10021F0F(VMInsBuff_14)
第0140次跳转,跳转到:0x10021622(VMInsBuff_20)
第0141次跳转,跳转到:0x1002186A(VMInsBuff_21)
第0142次跳转,跳转到:0x10022A11(VMInsBuff_22)
第0143次跳转,跳转到:0x1002202E(VMInsBuff_23)
第0144次跳转,跳转到:0x10021622(VMInsBuff_20)
第0145次跳转,跳转到:0x1002186A(VMInsBuff_21)
第0146次跳转,跳转到:0x10022A11(VMInsBuff_22)
第0147次跳转,跳转到:0x1002202E(VMInsBuff_23)
第0148次跳转,跳转到:0x10021622(VMInsBuff_20)
第0149次跳转,跳转到:0x1002186A(VMInsBuff_21)
第0150次跳转,跳转到:0x10022A11(VMInsBuff_22)
第0151次跳转,跳转到:0x1002202E(VMInsBuff_23)
第0152次跳转,跳转到:0x10021622(VMInsBuff_20)
第0153次跳转,跳转到:0x1002186A(VMInsBuff_21)
第0154次跳转,跳转到:0x10022A11(VMInsBuff_22)
第0155次跳转,跳转到:0x1002202E(VMInsBuff_23)
。。。。。。。。。
如上伪指令块执行记录,其中VMInsBuff_20到VMInsBuff_23循环执行