Given a hash value
hit should be difficult to find any message
h = hash(m).
Second pre-image resistance
Given an input
m1it should be difficult to find different input
hash(m1) = hash(m2).
These properties form a hierarchy, in that collision resistance implies second pre-image resistance, which in turns implies pre-image resistance, while the converse is not true in general.
Assuming pre-image resistance is broken, we have a function
pre(h) which can easily find
m such that
h = hash(m). How is it helpful in finding a different
m2 such that
hash(m1) = hash(m2)? What if
pre(m1) always returns
Edit. The definition on Wikipedia is not quite formal. A better explanation is here.