AX CX DX BX SP BP SI DI WORD registre[8]; 02 44 ?? : ADD AL, DS:[SI+??h] (FF = -1) 02 84 ?? ?? : ADD AL, DS:[SI+????h] 03 C0 : ADD EAX, EAX 03 DA : ADD EBX, EDX 07 : POP ES 0F AF D7 : IMUL EDX, EDI 0F B7 C0 : MOVZX EAX, AX 0F B7 CB : MOVZX ECX, BX 1F : ??? 24 ?? : AND AL, ??h 2D ?? ?? : SUB AX, imm16 1 Subtract immediate word from AX 32 C0 : XOR AL, AL 33 45 ?? : XOR EAX, DWORD PTR [EBP + ??h] 33 C0 : XOR EAX, EAX 33 C9 : XOR ECX, ECX 33 DB : XOR EBX, EBX 33 F1 : XOR ESI, ECX 33 FF : XOR EDI, EDI 35 B0 10 : ______ 38 07 : CMP BYTE PTR[EDIT,AL 3C ib : CMP AL, imm8 1 Compare immediate byte to AL 16 bit: if (40 à 47) registre[C-40]++; 40 : INC AX 41 : INC CX 42 : INC DX 43 : INC BX 44 : INC SP 45 : INC BP 46 : INC ESI 47 : INC EDI if (48 à 4F) registre[C-40]--; 48 : DEC AX 49 : DEC CX 4A : DEC EDX 4B : DEC BX 4C : DEC SP 4D : DEC BP 4E : DEC SI 4F : DEC DI if (50 à 57) 50 : PUSH EAX 51 : PUSH ECX 52 : PUSH DX 53 : PUSH BX 54 : PUSH SP 55 : PUSH EBP 56 : PUSH SI 57 : PUSH DI if (58 à 5F) 58 : POP AX 59 : POP CX 5A : POP EDX 5B : POP BX 5C : POP SP 5D : POP EBP 5E : POP ESI 5F : POP DI 66 : instruction 32 bits 66 0F B6 C9 : movzx cx, cl 66 0F B6 D2 : movzx dx, dl 66 33 FF : xor edi, edi [ db 66h; xor di, di ] 66 F7 C6 ?? ?? : test si, ????h 68 @@ @@ : PUSH @@ @@h 68 @@ @@ @@ @@ : PUSH OFFSET STRING " ... " ou PUSH OFFSET _... 6A ?? : PUSH ??h 73 cb : ?? 74 cb : JZ ou JE rel8 3/1 Jump short if equal (ZF=1) 75 cb : JNZ ou JNE rel8 3/1 Jump short if not equal (ZF=0) 77 cb : JA rel8 3/1 Jump short if above (CF=0 and ZF=0) 7F cb : JG rel8 3/1 Jump short if greater (ZF=0 and SF=OF) 80 3D @@ @@ @@ @@ ?? : cmp byte ptr [@@ @@ @@ @@], ??h 80 D4 ?? : ADC AH, ??h 80 F9 ?? : CMP CL, ??h 81 C3 ?? ?? : ADD __, ????h 81 C6 ?? ?? : ADD SI, ????h 83 BD @@ @@ @@ @@ ?? : CMP DWORD PTR[@@@@], ??h 83 C0 ?? : ADD EAX, ??h 83 C4 ?? : ADD ESP, ??h 83 C9 ?? : OR ECX, ??h 83 EC ?? : MOV ESP, ??h 83 FB ?? : CMP BX, ??h 84 D2 : TEST DL, DL 85 C0 : TEST EAX,EAX 88 14 : MOV DS:[SI], DL 88 84 ?? ?? : MOV DS:[SI+????h],AL (-320d = 10000h - 320d = FEC0h) 89 @@ @@ : MOV DWORD PTR [mainret],EAX 89 85 @@ @@ @@ @@: MOV DWORD PTR [@@@@],EAX 8A ?? : MOV r8, r/m8 1 Move r/m byte into byte register 8A 04 : MOV AL, DS:[SI] ??? 8A 09 : MOV CL, BYTE PTR [ECX] 8A 11 : MOV DL, BYYE PTR [ECX] 8A 1E ?? ?? : MOV BL, BYTE PTR [@@@@] 8A 45 0C : MOV AL, BYTE PTR [chr] 8A 56 ?? : MOV DL, BYTE PTR [ESI + ??h] 8A CD ?? : MOV CH, BYTE PTR [EBP + ??h] 8A D0 : MOV DL,AL 8A D1 : MOV DL,CL 8B @@ @@ : MOV EAX,DWORD PTR [mainret] 8B 45 ?? : MOV EAX,DWORD PTR [EBP+??h] 8B 4D ?? : MOV ECX,DWORD PTR [EBP-??h] 8B 55 ?? : MOV EDX,DWORD PTR [EBP-??h] 8B 7D 08 : MOV EDI, DWORD PTR [string] 8B 8D @@ @@ @@ @@ : MOV ECX, DWORD PTR [@@@@@@@@] 8B C7 : MOV EAX, EDI 8B EC : MOV EBP, ESP 8B E5 : MOV ESP, EBP 8B F0 : MOV ESI, EAX 8B F1 : MOV ESI, ECX 8D 85 @@ @@ @@ @@ : LEA EAX, DWORD PTR [@@@@@@@@] [FFFFFEC0 = ebp - 140] 8D 95 @@ @@ @@ @@ : LEA EDX, [@@@@@@@@] 8E ?? : MOV Sreg, r/m16 3/9 Move r/m word to segment register 8E D8 : MOV DS, AX 90 : NOP 1 No operation NOP performs no operation. NOP is a one-byte instruction that takes up space but affects none of the machine context except (E)IP. NOP is an alias mnemonic for the XCHG (E)AX, (E)AX instruction. A1 @@ @@ : MOV AX, [@@@@]h A2 ????? : MOV moffs8, AL 1 Move AL to (seg:offset) A3 @@ @@ : MOV [@@@@h], AX A3 @@ @@ @@ @@ : MOV [@@@@@@@@h], EAX B0 ?? : MOV AL, [xx] B1 ?? : MOV CL, [xx] B2 ?? : MOV DL, [xx] B4 ?? : MOV AH, [xx] B7 ?? : MOV BH, [xx] B8 ?? ?? : MOV AX, [xx xx] // MOV ?? ?? ?? ?? : MOV AX, ????????h B9 ?? ?? : MOV CX, [xx xx] BA ?? ?? : MOV DX, offset VAR : [@@@@] BB ?? ?? : MOV BX, [xx xx] BC ?? ?? : MOV SP, [xx xx] BD ?? ?? : MOV BP, [xx xx] BE ?? ?? : MOV SI, [xx xx] (32 bits = BE ?? ?? ?? ?? : MOV ESI, [xx xx xx xx]) BF ?? ?? : MOV DI, [xx xx] C1 E8 ?? : SHR AX, ??h C2 ?? ?? : RET ????h C3 : RET C6 01 cc : MOV BYTE PTR [ECX], cc C6 87 mm mm cc : MOV BYTE PTR [BX+mmmm], "cc" C7 06 mm mm cc cc : MOV WORD PTR [mmmm], "cccc" C9 : LEAVE CD ?? : INT [xx] : [xx] D1 E0 : SHL EAX, 1 D1 E1 : SHL ECX, 1 D1 EB : __ __ E2 cb : LOOP rel8 (Loop short) EB cb : JMP rel8 3 Jump short // cb, F1 = -15, donc sauter à 15 instructions en arrière de cb. (compter cb) 0A = 10, donc sauteur à 15 instruction après cb. E8 @@ @@ @@ @@ : CALL @@@@@@@@ @@ fin de l'instruction + @@@@@@@@ [E8 18 FA FF FF = call @ILT+775(_CreateHookableEvent) (0040130c) //00401906 [E8 0D FA FF FF = call @ILT+805(_HookEvent) (0040132a) //0040191D [E8 B0 F9 FF FF = call @ILT+730(_CreateServiceFunction) (004012df) //0040192A (call une fonction en reculant!) [E8 D0 F9 FF FF = call @ILT+775(_CreateHookableEvent) (0040130c) //0040193C E9 ?? ?? ?? ?? : SAUTE à [?? ?? ?? ??] octets de plus... ou de moins EC : IN AL, DX EE : OUT DX,AL F2 AE : REPNE SCAS BYTE PTR [EDI] F3 : REP F3 A5 : REP MOVSW F3 AB : REP STOSW F3 66 A5 : REP MOVSD F3 66 AB : REP STOSD F7 C6 ?? ?? : TEST SI, ????h F7 D9 : NEG ECX F7 E2 : MUL DX FC : CLD FD : STD FE C1 : INC CL FF 15 @@ @@ @@ @@ : CALL DWORD PTR [ @@ @@ @@ @@ ] Tout programme commence par: 4D = DEC BP 5A = POP DX