<font face=
"宋体"
>GetR32:
代码:
004060AE 50 push eax
004060AF FEC8 dec al
004060B1 D2D2 rcl dl,cl
004060B3 66:0FBED1 movsx dx,cl
004060B7 0F94C6 sete dh
004060BA C0C0 02 rol al,0x2
004060BD 60 pushad
004060BE 80DA E4 sbb dl,0xE4
004060C1 66:0FBCD3 bsf dx,bx
004060C5 2C 7A sub al,0x7A
004060C7 30CE xor dh,cl
004060C9 66:FFC2 inc dx
004060CC FEC6 inc dh
004060CE 24 3C and al,0x3C
004060D0 D2DA rcr dl,cl
004060D2 66:C1C2 05 rol dx,0x5
004060D6 C0D6 07 rcl dh,0x7
004060D9 8B1438 mov edx,dword ptr ds:[eax+edi]
004060DC 66:0FBAE3 01 bt bx,0x1
004060E1 F5 cmc
004060E2 83ED 04 sub ebp,0x4
004060E5 51 push ecx
004060E6 8955 00 mov dword ptr ss:[ebp],edx
004060E9 54 push esp
004060EA 68 2BA533D4 push 0xD433A52B
004060EF 66:896424 08 mov word ptr ss:[esp+0x8],sp
004060F4 8D6424 30 lea esp,dword ptr ss:[esp+0x30]
00405F43 66:0FA5C0 shld ax,ax,cl
00405F47 0FBAE1 07 bt ecx,0x7
00405F4B D2C0 rol al,cl
00405F4D 8D47 50 lea eax,dword ptr ds:[edi+0x50]
00405F50 F9 stc
00406B72 F8 clc
00406B73 39C5 cmp ebp,eax
00406B75 9C pushfd
00405DB0 8D6424 08 lea esp,dword ptr ss:[esp+0x8]
00405DB4 ^ 0F87 C0F5FFFF ja Test_vmp.0040537A
作用:
将EDI堆栈数据以解密出来的EAX为偏移,以Dword保存到栈顶,并检查堆栈是否碰撞。
GetESP:
代码:
004058EF D2F0 sal al,cl
004058F1 20D4 and ah,dl
004058F3 D0CC ror ah,1
004058F5 F6D8 neg al
004058F7 89E8 mov eax,ebp
004058F9 F6C2 E8 test dl,0xE8
004058FC 83ED 04 sub ebp,0x4
00406700 8945 00 mov dword ptr ss:[ebp],eax
00406703 50 push eax
00406704 8D6424 04 lea esp,dword ptr ss:[esp+0x4]
00405F43 66:0FA5C0 shld ax,ax,cl
00405F47 0FBAE1 07 bt ecx,0x7
00405F4B D2C0 rol al,cl
00405F4D 8D47 50 lea eax,dword ptr ds:[edi+0x50]
00405F50 F9 stc
00406B73 39C5 cmp ebp,eax
00405DB0 8D6424 08 lea esp,dword ptr ss:[esp+0x8]
00405DB4 ^ 0F87 C0F5FFFF ja Test_vmp.0040537A
作用:
以EBP栈顶地址为数据保存在EBP栈顶,并检查堆栈是否碰撞。
GetI8To16
代码:
00405E14 52 push edx ;
00405E15 51 push ecx
00405E16 34 48 xor al,0x48
00405E18 8A46 FF mov al,byte ptr ds:[esi-0x1]
00405E1B C64424 04 F8 mov byte ptr ss:[esp+0x4],0xF8
00405E20 66:897424 04 mov word ptr ss:[esp+0x4],si
00405E25 28D8 sub al,bl
00405E27 FF7424 04 push dword ptr ss:[esp+0x4]
00405E2B 60 pushad
00405E2C FEC8 dec al
00405E2E 0FA3FD bt ebp,edi
00405E31 F6D0 not al
00405E33 68 4E13BE6A push 0x6ABE134E
00405E38 66:81FB E930 cmp bx,0x30E9
00405EF3 04 0C add al,0xC
00405EF5 66:0FBAE6 03 bt si,0x3
00405EFA 28C3 sub bl,al
00405EFC FF7424 04 push dword ptr ss:[esp+0x4]
00405F00 66:0FBAE3 06 bt bx,0x6
00405F05 F8 clc
00405F06 83ED 02 sub ebp,0x2
00405F09 9C pushfd
00405F0A 66:8945 00 mov word ptr ss:[ebp],ax
00405F0E 68 ED219CFC push 0xFC9C21ED
0040563F 8D76 FF lea esi,dword ptr ds:[esi-0x1]
00405642 9C pushfd
00405643 880C24 mov byte ptr ss:[esp],cl
00405646 9C pushfd
00405647 8D6424 44 lea esp,dword ptr ss:[esp+0x44]
00405F43 66:0FA5C0 shld ax,ax,cl
00405F47 0FBAE1 07 bt ecx,0x7
00405F4B D2C0 rol al,cl
00405F4D 8D47 50 lea eax,dword ptr ds:[edi+0x50]
00405F50 F9 stc
00406B72 F8 clc
00406B73 39C5 cmp ebp,eax
00406B75 9C pushfd
作用:
从指令表获取一个Byte立即数,扩展到word字节保存到EBP栈顶并检查堆栈是否碰撞。
SetR16:
代码:
00405424 66:0FBAEA 09 bts dx,0x9 ;
00405429 60 pushad
0040542A 66:0FBDD2 bsr dx,dx
0040542E 66:0FCA bswap dx
00405431 8A46 FF mov al,byte ptr ds:[esi-0x1]
00405434 80CA EA or dl,0xEA
00405437 28D8 sub al,bl
00405439 F6D6 not dh
0040543B 66:0FB6D1 movzx dx,cl
0040518B 4E dec esi ; Test_vmp.004086E7
0040518C FEC2 inc dl
0040518E 9C pushfd
0040518F 54 push esp
00405190 FEC0 inc al
00406A89 28CE sub dh,cl
00406A8B F9 stc
00406A8C 34 BD xor al,0xBD
00406A8E C0FA 04 sar dl,0x4
00406A91 F6D6 not dh
00406A93 D0DA rcr dl,1
00406A95 04 93 add al,0x93
00406A97 D0CA ror dl,1
00406A99 FEC6 inc dh
00406A9B 80C2 70 add dl,0x70
00406A9E 9C pushfd
00406A9F 28C3 sub bl,al
00406AA1 00EA add dl,ch
00406AA3 80F2 6A xor dl,0x6A
00406AA6 0F9AC2 setpe dl
00406AA9 38DF cmp bh,bl
00406AAB 66:8B55 00 mov dx,word ptr ss:[ebp]
00406AAF 66:F7C6 80D4 test si,0xD480
00406AB4 C60424 F9 mov byte ptr ss:[esp],0xF9
00406AB8 83C5 02 add ebp,0x2
00406ABB 68 FA91AC0D push 0xDAC91FA
00406AC0 66:891438 mov word ptr ds:[eax+edi],dx
00406AC4 55 push ebp
00406AC5 68 2A1F493D push 0x3D491F2A
00406ACA 881424 mov byte ptr ss:[esp],dl
00406ACD 8D6424 40 lea esp,dword ptr ss:[esp+0x40]
作用:
从EBP堆栈栈顶读取Word长度数据保存到[EAX+EDI]堆栈。
RmDs32
代码:
00405706 F6D0 not al
00405708 8B45 00 mov eax,dword ptr ss:[ebp]
00406BCB 9C pushfd
00406BCC 9C pushfd
00406BCD FF7424 04 push dword ptr ss:[esp+0x4]
00406BD1 8B00 mov eax,dword ptr ds:[eax]
00406BD3 68 503CC298 push 0x98C23C50
00406BD8 68 8717E2A4 push 0xA4E21787
00406BDD 8945 00 mov dword ptr ss:[ebp],eax
00406BE0 C60424 00 mov byte ptr ss:[esp],0x0
00406BE4 9C pushfd
00406BE5 FF3424 push dword ptr ss:[esp]
00406BE8 C74424 08 BCE71>mov dword ptr ss:[esp+0x8],0x361FE7BC
00406BF0 8D6424 1C lea esp,dword ptr ss:[esp+0x1C]
作用:
以EBP堆栈栈顶数据为地址,取出Dwrod长度数据保存到EBP栈顶。
GetR16
代码:
00405808 28D8 sub al,bl ;
0040580A 18F8 sbb al,bh
0040580C D0C8 ror al,1
0040580E 8A46 FF mov al,byte ptr ds:[esi-0x1]
00406005 3C 3C cmp al,0x3C
00406007 28D8 sub al,bl
00406009 9C pushfd
0040600A 68 FBA19387 push 0x8793A1FB
0040600F FEC0 inc al
00406011 60 pushad
00406012 66:85E2 test dx,sp
00406015 C60424 72 mov byte ptr ss:[esp],0x72
00406019 34 BD xor al,0xBD
0040601B F5 cmc
0040601C 04 93 add al,0x93
0040601E 9C pushfd
0040601F 66:C74424 04 CB>mov word ptr ss:[esp+0x4],0xA4CB
00406026 66:0FA3EE bt si,bp
0040602A 28C3 sub bl,al
0040602C 9C pushfd
0040602D 66:8B0438 mov ax,word ptr ds:[eax+edi]
00406031 66:0FA3DC bt sp,bx
00406035 83C6 FF add esi,-0x1
00406038 66:0FBAE2 09 bt dx,0x9
0040603D 83ED 02 sub ebp,0x2
00406040 9C pushfd
00406041 66:8945 00 mov word ptr ss:[ebp],ax
00406045 884C24 08 mov byte ptr ss:[esp+0x8],cl
00406049 68 E954CEDF push 0xDFCE54E9
0040604E 68 2141065F push 0x5F064121
00406053 9C pushfd
00405F43 66:0FA5C0 shld ax,ax,cl
00405F47 0FBAE1 07 bt ecx,0x7
00405F4B D2C0 rol al,cl
00405F4D 8D47 50 lea eax,dword ptr ds:[edi+0x50]
00405F50 F9 stc
00406B72 F8 clc
00406B73 39C5 cmp ebp,eax
00406B75 9C pushfd
00405DB0 8D6424 08 lea esp,dword ptr ss:[esp+0x8]
00405DB4 ^ 0F87 C0F5FFFF ja Test_vmp.0040537A
作用:
从EDI堆栈以EAX为偏移量取出数据保存到EBP栈顶,并检查堆栈是否碰撞。
RmSs32
代码:
00406A35 66:F7D0 not ax ;
00406A38 8B45 00 mov eax,dword ptr ss:[ebp]
00406A3B 53 push ebx
00406A3C 57 push edi
00406A3D 9C pushfd
00406A3E FF3424 push dword ptr ss:[esp]
00406A41 36:8B00 mov eax,dword ptr ss:[eax]
00406A44 60 pushad
00406A45 53 push ebx
00406A46 66:895424 04 mov word ptr ss:[esp+0x4],dx
00406A4B 8945 00 mov dword ptr ss:[ebp],eax
00406A4E 9C pushfd
00406A4F 884424 0C mov byte ptr ss:[esp+0xC],al
00406A53 9C pushfd
00406A54 8D6424 3C lea esp,dword ptr ss:[esp+0x3C]
作用:
从EPB堆栈栈顶读取Dword长度数据为地址保存到EBP堆栈栈顶。
GetI8To32
代码:
00406C47 C0C8 07 ror al,0x7 ;
00406C4A 8A46 FF mov al,byte ptr ds:[esi-0x1]
00406B26 66:0FBAE6 05 bt si,0x5
00406B2B 66:0FBAE2 03 bt dx,0x3
00406B30 F5 cmc
00406B31 28D8 sub al,bl
00406A74 9C pushfd
004063C2 FEC8 dec al
004063C4 51 push ecx
00405D71 66:C70424 C3CB mov word ptr ss:[esp],0xCBC3
00405D77 4E dec esi
00405D78 FF7424 04 push dword ptr ss:[esp+0x4]
00405D7C F6D0 not al
00405D7E 9C pushfd
00405D7F 881424 mov byte ptr ss:[esp],dl
00405D82 9C pushfd
00405D83 04 0C add al,0xC
00405D85 882C24 mov byte ptr ss:[esp],ch
00405D88 28C3 sub bl,al
00405D8A 883424 mov byte ptr ss:[esp],dh
00401005 F9 stc
00401006 F9 stc
00401007 66:98 cbw
00401009 80FA C2 cmp dl,0xC2
00405ED4 84F1 test cl,dh
00406315 98 cwde
00406316 9C pushfd
00406317 F9 stc
00406318 83ED 04 sub ebp,0x4
0040631B 9C pushfd
0040540C 8945 00 mov dword ptr ss:[ebp],eax
0040540F C64424 10 8F mov byte ptr ss:[esp+0x10],0x8F
00405414 55 push ebp
00405415 66:C70424 890C mov word ptr ss:[esp],0xC89
0040541B 8D6424 38 lea esp,dword ptr ss:[esp+0x38]
00405F43 66:0FA5C0 shld ax,ax,cl
00405F47 0FBAE1 07 bt ecx,0x7
00405F4B D2C0 rol al,cl
00405F4D 8D47 50 lea eax,dword ptr ds:[edi+0x50]
00405F50 F9 stc
00406B72 F8 clc
00406B73 39C5 cmp ebp,eax
00406B75 9C pushfd
00405DB0 8D6424 08 lea esp,dword ptr ss:[esp+0x8]
00405DB4 ^ 0F87 C0F5FFFF ja Test_vmp.0040537A
作用:
从指令表里取出
BYTE
长度立即数,扩展为32位保存到EBP堆栈栈顶,并检查堆栈大小
WmSs32
代码:
00406D56 66:F7C7 C521 test di,0x21C5 ;
00406D5B 66:0FBAE7 06 bt di,0x6
00406D60 F7DA neg edx
00406D62 8B45 00 mov eax,dword ptr ss:[ebp]
00406D65 8D97 A6EA741E lea edx,dword ptr ds:[edi+0x1E74EAA6]
00406D6B F7D2 not edx
00406D6D 8B55 04 mov edx,dword ptr ss:[ebp+0x4]
00406D70 F9 stc
00406D71 F9 stc
00405F1D 51 push ecx
00405F1E 83C5 08 add ebp,0x8
00405F21 50 push eax
00405DF5 68 2AACF49B push 0x9BF4AC2A
00405DFA 36:8910 mov dword ptr ss:[eax],edx
00405DFD 68 C47FBCD1 push 0xD1BC7FC4
00405E02 60 pushad
00405E03 884424 04 mov byte ptr ss:[esp+0x4],al
00405E07 886424 08 mov byte ptr ss:[esp+0x8],ah
00405E0B 8D6424 34 lea esp,dword ptr ss:[esp+0x34]
作用:
从EBP栈顶读出Dword长度数据作为数据,并将[EBP+4]保存到该地址中。
nor32
代码:
0040589D 66:92 xchg ax,dx ;
0040589F 20DE and dh,bl
004058A1 8B45 00 mov eax,dword ptr ss:[ebp]
004058A4 0F92C6 setb dh
004058A7 8B55 04 mov edx,dword ptr ss:[ebp+0x4]
004058AA F7C2 7A44722B test edx,0x2B72447A
004058B0 F7D0 not eax
004058B2 68 946AEF00 push 0xEF6A94
004058B7 F9 stc
004058B8 60 pushad
004058B9 F9 stc
004058BA F7D2 not edx
004058BC 66:0FA3F5 bt bp,si
004058C0 66:0FBAE0 0F bt ax,0xF
004058C5 66:0FA3F0 bt ax,si
004058C9 60 pushad
004058CA 21D0 and eax,edx
004058CC 57 push edi
004058CD 8945 04 mov dword ptr ss:[ebp+0x4],eax
00405E70 9C pushfd
00405E71 8F4424 48 pop dword ptr ss:[esp+0x48]
00405E75 68 9FFA557B push 0x7B55FA9F
00405E7A C64424 1C D0 mov byte ptr ss:[esp+0x1C],0xD0
00405E7F 66:895424 04 mov word ptr ss:[esp+0x4],dx
00405E84 FF7424 4C push dword ptr ss:[esp+0x4C]
00405E88 8F45 00 pop dword ptr ss:[ebp]
00405E8B C60424 F7 mov byte ptr ss:[esp],0xF7
00405E8F C60424 F5 mov byte ptr ss:[esp],0xF5
00405E93 880C24 mov byte ptr ss:[esp],cl
00405E96 8D6424 50 lea esp,dword ptr ss:[esp+0x50]
作用:
Dword版Nand门。从EBP堆栈栈顶和[EBP+4]读取出两个数据作为操作数,运算结果保存到[EBP+4],标志位保存到EBP栈顶。
例子:</font>