using DBA_ROLE_PRIVS and DBA_USERS, how can i determine users with DBA role (also hidden role)
I'm not sure what you mean by "hidden role".
If you're looking for roles granted DBA, and users with these roles, you can find them by querying dba_role_privs. And walking the grant tree to find users that have these higher roles:
create role r;
grant dba to r;
grant r to u identified by u;
where exists (
select * from dba_users u
where grantee = u.username
start with granted_role = 'DBA'
connect by prior grantee = granted_role;