basicly, cracking is just modifying a PE file until the restrcition doesnt function anymore.
IE. reversing jumps, NOP'ing calls (to a minor extent normaly).

Cracking involves a fairly deep knowledge of assembly (if your good). Althoggh alot of programs are full of shite protection and rely on some lame packer to do the work for them (namely asprotect, aspack etc).

keygenning in some respect is almost as easy, sometimes you can literly cut and paste the algo and paste it into your keygen template.