You can make some basic modifications to the Zombie AI through the UtilityAI file in the xml config folder.
For example.
<action name="MeleeAttackBlock" weight="3">
<task class="AttackTargetBlock" action_index="0"/>
<consideration class="PathBlocked"/>
<consideration class="TargetType" type="Block"/>
<consideration class="TargetDistance" flip_y="true" min="2" max="4"/>
</action>
That's the xml values for zombies attacking blocks. You can change things like the min and max numbers to increase how many blocks they will go through to get to you.
In addition, there are additional values in entityclasses you can adjust
From ZombieTemplateMale
<property name="AIFeralSense" value="1.5"/>
<property name="AINoiseSeekDist" value="8"/>
<property name="AIPathCostScale" value=".15, .4"/>
<!-- ApproachAndAttackTarget class=class,chaseTimeMax (go home) -->
<!-- SetNearestEntityAsTarget class=class, hear dist, see dist (checked left to right)(0 dist uses entity default, neg no sense scale) -->
<property name="AITask" value="
BreakBlock|
DestroyArea|
Territorial|
ApproachDistraction|
ApproachAndAttackTarget class=EntityPlayer,0,EntityBandit,0,EntityEnemyAnimal,0,EntityAnimal|
ApproachSpot|
Look|
Wander|
"/>
<property name="AITarget" value="
SetAsTargetIfHurt class=EntityPlayer,EntityBandit,EntityEnemyAnimal|
BlockingTargetTask|
SetNearestCorpseAsTarget flags=edible|
SetNearestEntityAsTarget class=EntityPlayer,0,0,EntityBandit,0,-10|
"/>
AIPathCostScale is how they determine if they should take a straight path to you or if they should just destroy blocks in a straight line to you. You can modify those values to change the zombie behavior.
More complex changes would require changes to the source code that
@The_Great_Sephiroth mentioned.