Existem várias maneiras de fazer isso, o mais simples seria XOR os dois arquivos e compactá-los (GZIP ou mais). A teoria por trás disso é que, esperançosamente, você pode obter uma grande sequência de zeros (longas seqüências dos mesmos valores são compactadas bem).
Você pode levar esse conceito adiante e tentar encontrar áreas dos dois arquivos em que os dados são idênticos e omitir completamente.
Por fim, você pode usar a estrutura de cada tipo de arquivo para sua vantagem. Por exemplo, em um EXE, você pode empacotar cada método individualmente (somente os que foram alterados) e reconstituir você mesmo o EXE durante o aplicativo de patch; lembre-se, no entanto, de que isso é muito provável no reino do exagero e pode não valer o esforço (o ganho em um bdiff simples pode não justificar a complexidade extra que pode ocorrer na natureza). Como outro exemplo, você pode usar arquivos diff para scripts.
No entanto, a maioria dos sistemas de patches na natureza segue o caminho mais simples: eles apenas empacotam arquivos que foram alterados - eles não tentam apenas empacotar as alterações nesses arquivos (provavelmente por um bom motivo, a maioria dos conteúdos do jogo já está compactada e criando patches contra altos entropia ou dados compactados não funcionarão ).