Differentes techniques de compression:

PKLITE 1.20 (COM File)

0100 B8BDE2     MOV AX,E2BD
0103 BA2284     MOV DX,8422
0106 3BC4       CMP AX,SP
0108 7367       JNB 0171
010A 8BC4       MOV AX,SP
010C 2D4403     SUB AX,0344
010F 25F0FF     AND AX,FFF0
0112 8BF8       MOV DI,AX
0114 B9A200     MOV CX,00A2
0117 BE7C01     MOV SI,017C
011A FC         CLD 
011B F3         REPZ 
011C A5         MOVSW 
011D 8BD8       MOV BX,AX
011F B104       MOV CL,04
0121 D3EB       SHR BX,CL
0123 8CD9       MOV CX,DS
0125 03D9       ADD BX,CX
0127 53         PUSH BX 
0128 33DB       XOR BX,BX
012A 53         PUSH BX 
012B CB         RETF              > Instruction RETF
012C 0C01       OR AL,01
012E 50         PUSH AX 
012F 4B         DEC BX 
0130 4C         DEC SP 
0134 20436F     AND [BP+DI+6F],AL
0137 7072       JO 01AB
0139 2E CS:

LZEXE 0.91 (EXE File)

000F 0E         PUSH CS 
0010 1F         POP DS 
0011 8B0E0C00   MOV CX,[000C]
0015 8BF1       MOV SI,CX
0017 4E         DEC SI 
0018 89F7       MOV DI,SI
001A 8CDB       MOV BX,DS
001C 031E0A00   ADD BX,[000A]
0020 8EC3       MOV ES,BX
0022 FD         STD 
0023 F3         REPZ 
0024 A4         MOVSB 
0025 53         PUSH BX 
0026 B82B00     MOV AX,002B
0029 50         PUSH AX 
002A CB         RETF              > Instruction RETF
002B 2E         CS: 
002C 8B2E0800   MOV BP,[0008]

EXEPACK (EXE File)

0010 8BE8       MOV BP,AX
0012 8CC0       MOV AX,ES
0014 051000     ADD AX,0010
0017 0E         PUSH CS
0018 1F         POP  DS
0019 A30400     MOV [0004],AX
001C 03060C00   ADD AX,[000C]
0020 8EC0       MOV ES,AX
0022 8B0E0600   MOV CX,[0006]
0026 8BF9 MOV   DI,CX
0028 4F         DEC  DI
0029 8BF7       MOV SI,DI
002B FD         STD
002C F3         REPZ
002D A4         MOVSB
002E 50         PUSH AX
002F B83400     MOV AX,0034
0032 50         PUSH AX
0033 CB         RETF            >  Instruction RETF
0034 8CC3       MOV BX,ES
0036 8CD8       MOV AX,DS
0038 48         DEC AX
0039 8ED8       MOV DS,AX

* Notez l'instruction RETF. Cette instruction est rencontrée au début de codess comme ceux ci, et indiquent presque toujours que le fichier est compressé.

DIET 1.10a (COM File)

0100 BE5409    MOV SI,0954
0103 BFDC13    MOV DI,13DC
0106 B91404    MOV CX,0414
0109 3BFC      CMP DI,SP
010B 7204      JB 0111
010D B44C      MOV AH,4C
010F CD21      INT 21                         > ici
0111 FD        STD
0112 F3        REPZ
0113 A5        MOVSW
0114 FC        CLD
0115 8BF7      MOV SI,DI
0117 BF0001    MOV DI,0100
011A AD        LODSW
011B AD        LODSW
011C 8BE8      MOV BP,AX
011E B210      MOV DL,10
0120 E96D12    JMP 1390

D'autres méthodes de compression (EXE File)

000C 8CD3        MOV BX,SS
000E 8EC3        MOV ES,BX
0010 8CCA        MOV DX,CS
0012 8EDA        MOV DS,DX
0014 8B0E0800    MOV CX,[0008]
0018 8BF1        MOV SI,CX
001A 83EE02      SUB SI,+02
001D 8BFE        MOV DI,SI
001F D1E9        SHR CX,1
0021 FD          STD
0022 F3          REPZ
0023 A5          MOVSW
0024 53          PUSH BX
0025 B82E00      MOV AX,002E
0028 50 PUSH     AX
0029 8B2E0A00    MOV BP,[000A]
002D CB          RETF            > Instruction RETF
002E B80010      MOV AX,1000
0031 3BC5        CMP AX,BP
0033 7602        JBE 0037
0035 8BC5        MOV AX,BP
0037 2BE8        SUB BP,AX
0039 2BD0        SUB DX,AX
003B 2BD8        SUB BX,AX
003D 8EDA        MOV DS,DX
003F 8EC3        MOV ES,BX
0041 B103        MOV CL,03
0043 D3E0        SHL AX,CL
0045 8BC8        MOV CX,AX
0047 D1E0        SHL AX,1
0049 48          DEC AX
004A 48          DEC AX
004B 8BF0        MOV SI,AX
004D 8BF8        MOV DI,AX
004F F3          REPZ
0050 A5          MOVSW
0051 0BED        OR BP,BP
0053 75D9        JNZ 002E
0055 FC          CLD
0056 8EC2        MOV ES,DX
0058 8EDB        MOV DS,BX

Voici qui devrait vous donner une idée de la manière dont les compresseurs fonctionnent.
La première chose à faire, quand on rencontre une instruction RETF, et de tracer autour. Egalement significatifs, vous avez les PUSHAD (sauvegarde de l'état des registres), les POPAD (restauration des registres, que l'on trouve en général avant que le compresseur passe le relais), et les REPZ MOVSB qui "traitent" la zone à décompresser. Vous ne trouverez souvent qu'un seul RETF dans le programme, par contre, dans la partie compressée, l'algorithme utilisé peut avoir généré des codes qui seront assimilé à des opcodes, et une recherche dans le Dead Listing doit être fait avec prudence, sans sauter aux conclusions hâtives. L'étape suivante est simple, Une fois le RETF trouvé, partez à la rechercher de l'instruction qui va brancher sur l'Entry point du programme d'origine, du genre:

JMP FAR [BX]
Call EAX
Push EAX/RET etc...

Rappelez vous qu'un fichier peut avoir été compressé plusieurs fois, et par des compresseurs différents. Vous trouverez alors plusieurs signatures significatives d'une compression.