You are asking a pretty complex modeling question now. The answer really depends on how detailed and accurate you wish to be. The simplest thing you can do, and which will be the easiest thing to do, is to assume that all your cracks are slightly open. This means you assume that they can not close and impact during the vibrational analysis and that there will be no sliding friction.
If you are willing to make these assumptions, then you can make a mesh where the faces of some elements are not tied together. This is quite a meshing challenge but can be done.
If I were to do it, I would think about two approaches: (1) use an external piece of software that is adept at generating such meshes (I'm guessing someone expert in geotechnical engineering has created one), or (2) first create a mesh of blocks where no elements are tied together (so they do not share any common node numbers, such a mesh will have many nodes with the same coordinates), then I would write a mesh manipulation command UMANipulation that ties some of the blocks together based perhaps on a map of the geometry that gets set/read in with the UMANipulation command. As a guide for this second option, you can look at the code that is currently used to tie meshes together based on coordinate values.
Perhaps an easier option from writing an UMANipulation command is to generate your untied mesh and then create at the same time a list of nodes to tie together. You can then place TIE NODE n1 n2
commands in your input file (after the END of the mesh) and FEAP will handle the tie operation for you.
If you want to go the UMANipulation route, see program/pcontr.f and search for "tie" and follow the sub-option for "node" which will show you how one calls the routine program/tienod.f to tie nodes in the mesh together.
This is a challenging analysis question!