+*****************************************************************************+
* Project          : Unreal Tournament Damage Control (UTDC)                  *
* Version          : 1.6b beta                                                 *
* Protects against : Hooking of UT99 engine (external cheats)                 *
* Made by          : Troublesome                                              *
* Clan             : VIP                                                      *
* Cool Qnet channel: #unreal.vip                                              *
* UT admin sites   : http://www.unrealadmin.org & http://www.anticheat.co.uk  *
*                                                                             *
+*****************************************************************************+

[Information]

UTDC is a protection against hooks. It is highly configurable and will detect all publicly known hook based cheats (as of this date 20/03/05). However it's still early in development and may contain bugs!


[Notice]

Clients will be limited to running windows(if they are checked), because they will have to run native code contained in utdcv**.dll.


[Installation]

1: Extract UTDCv16b.u, UTDCv16bdll.u and UTDC.ini in the zip file to your server's UnrealTournament\System directory.
2: Add the following lines under [Engine.GameEngine]:
ServerPackages=UTDCv16b
ServerPackages=UTDCv16bdll
ServerActors=UTDCv16b.SMain
3: Modify settings in UTDC.ini
4: Start server

Clients will then be asked to confirm the automatic installation of the utdc dll when they join the server. Automatic installation may fail for some clients so you may provide a download link for manual installation (see settings)

[UTDC Forum]

Find answers and post bugs on the UTDC forum:
http://www.unrealadmin.org/forums/forumdisplay.php?f=183

[Commands]

You can use these console commands to get information or trigger a check during game:

*mutate utdc commands
-This will show you which UTDC console commands. Work without being admin.

*mutate utdc settings
-This will show all current settings. Work without being admin.

*mutate utdc check
-This will show you who is checked by UTDC and who is not checked. Work without being admin.

----------- Admin commands -----------
*mutate utdc memory
-This will trigger a full memory scan for all players.

*mutate utdc processcheck
-This will trigger a check of running processes for all players.

*mutate utdc allowone
-This will allow the next player who join the server not to be checked by utdc.


[Settings]

You can modify these settings to decide your security/load balance. If you log in as admin you can use these console commands to modify settings contained in UTDC.ini:

----------- Enable / Disable Detection Commands -----------
*mutate utdc set utdc on
-This will enable the UTDC protection.

*mutate utdc set utdc off
-This will disable the UTDC protection.

*mutate utdc set servercheck on
-This will make the server query the clients for a check every x seconds. That will make sure that the clients run the check.

*mutate utdc set servercheck off
-This will turn off the server query.

*mutate utdc set sfrequency <value>
-This will set the time between the server queries where value is the time in seconds (3-30).

*mutate utdc set clientcheck on
-This will make the client check it self every x seconds.

*mutate utdc set clientcheck off
-This will turn off the client selfchecking.  

*mutate utdc set cfrequency <value>
-This will set the time between the client selfchecking where value is the time in seconds (1-10).

*mutate utdc set memoryscan on
-This will do a full memory scan when players join the game.

*mutate utdc set memoryscan off
-This will turn off the full memory scan.

*mutate utdc set processcheck on
-This will do a check of running processes when players join the game. Required if detection of timer programs is wanted.

*mutate utdc set processcheck off
-This will turn off the check of running processes.

*mutate utdc set packagecheck on
-This will do a MD5 check of specified packages when players join the game.

*mutate utdc set packagecheck off
-This will turn off the MD5 check of packages.

----------- Enable / Disable Ban Or Kick Commands -----------
*mutate utdc set ban on
-This will ban players who got caught.

*mutate utdc set ban off
-This will turn player banning off.

*mutate utdc set kick on
-This will kick players who fail the regular checks for a hook based cheats.

*mutate utdc set kick off
-This will not kick players who fail the regular checks.

*mutate utdc set memoryscan kick on
-This will kick players who fail the full memory check.

*mutate utdc set memoryscan kick off
-This will not kick players who fail the full memory check.

*mutate utdc set packagecheck kick on
-This will kick players who fail the MD5 package check.

*mutate utdc set packagecheck kick off
-This will not kick players who fail the MD5 package check.

*mutate utdc set timer kick on
-This will kick players who is detected with a timer program.

*mutate utdc set timer kick off
-This will not kick players who is detected with a timer program.

*mutate utdc set speedhack kick on
-This will kick players who is detected using a speed hack.

*mutate utdc set speedhack kick off
-This will not kick players who is detected using a speed hack.

*mutate utdc set safekick on
-This will only kick/ban players who got caught with a hook based cheat that can be identified

*mutate utdc set safekick off
-This will disable safekick.

------------------- Misc Commands -------------------
*mutate utdc set allow all os on
-This will turn utdc protection off for clients running linux or mac os allowing them to play on the server. This will however make the server less secure.

*mutate utdc set allow all os off
-This will turn utdc protection on for all clients and reject linux and mac os clients.

*mutate utdc set allow440 on
-This will allow clients running UT version 4.40 to play on the server.

*mutate utdc set allow440 off
-This will disconnect clients running UT version 4.40 from the server.

*mutate utdc set allow451a on
-This will allow clients running UT version 4.51a to play on the server.

*mutate utdc set allow451a off
-This will disconnect clients running UT version 4.51a from the server.

*mutate utdc set allow451b on
-This will allow clients running UT version 4.51b to play on the server

*mutate utdc set allow451b off
-This will disconnect clients running UT version 4.51b from the server.

*mutate utdc set forcenativespawn on
-This will force the client to spawn the check that uses native code - it can result in a crash for linux and mac clients.

*mutate utdc set forcenativespawn off
-This will make UTDC check the client OS and only spawn the check that uses native code on windows clients.

*mutate utdc set showlogo off
-This will not show the UTDC logo.

*mutate utdc set showlogo on
-This will show the UTDC logo when you join the server.

*mutate utdc set logoxpos <value>
-This will set the horizontal position of the logo where value is a number from 0 to 90 (0 being left and 90 being the right side of the screen).

*mutate utdc set logoypos <value>
-This will set the vertical position of the logo where value is a number from 0 to 90 (0 being top and 90 being the bottom of the screen).

*mutate utdc set fucheat on
-This will show anticheat messages for a cheater.

*mutate utdc set fucheat off
-This will not show  a anticheat message for a cheater.

------------------------ Take Time To Read This! ------------------------
If both server check and client check is turned off the clients will only be checked when they join the server.

*Set ExternalLog=True in utdc.ini to log cheaters in one map to a external logfile in the ut/logs folder. NOTICE: The external log file will only contain detection of hacks and will not be created if none are detected!

*Change KickMsg in utdc.ini if you have some wise words for a kicked cheater.

*Change DownloadURL in utdc.ini if you want to provide a link for manual installation of the dll.

*You can do a file integrity check on important packages you use on the server (like UTPure) by setting PackageCheck=True in utdc.ini. Add the file name of the package at the Package setting (with file extention) and write the MD5 hash of the file at the MD5 setting by the corresponding index. You can specify more MD5 hashes for one file name by seperating the hashes with a comma. Use the included application "digestfile" to calculate the MD5 hash.

[v1.3b+ Mod support]

If you want to find out if UTDC(version 1.3b or later) is running on the server from your mod, you can write this code:
function bool UtdcRunning()
{
	local private Actor UTDC;
	foreach AllActors(Class'Actor', UTDC, 'UTDC')
	{
		Return True;
	}
	Return False;
}
Which will return true if UTDC is running.
If you want to catch a UTDC sponsored kick you must tag your mutator as 'UTDCEvent' and write your code in:
event Touch(Actor Player)
{
	log(PlayerPawn(Player).PlayerReplicationInfo.PlayerName@"kicked!");
}


[Changes]
1.6b:	[ADDED] Compatibility for Tactical Ops
	[Changed] Check of running processes
	[FIXED] Logo destroying the HUD mutator chain

1.6:	[ADDED] New hook checks
	[ADDED] Check of running processes
	[ADDED] Detection of master timer and speed hacks
	[FIXED] False positives with the memory scan
	[Changed] You must be 2 or more on the server for UTDC to be active

1.5:	[ADDED] Full memory scan of important modules
	[ADDED] Option to allow multiple MD5 hashes for 1 file name
	[FIXED] False positives for hacked packages with the log message "FILE NOT FOUND"
	[FIXED] Linux and Mac clients getting kicked when option was set to allow them
	[Changed] Installation window is centered so people with weak vision can find the window

1.4:	[ADDED] MD5 File checking
	[ADDED] UTDC Logo
	[ADDED] Anticheat messages for cheaters ;)
	[FIXED] Players can't connect because of cache expirary

1.3b:	[ADDED] Kick event for other mods to pickup
	[ADDED] Force native spawn option

1.3:	[ADDED] Compatibility for UT version 4.51a
	[ADDED] Option to select which UTPG UT versions that are allowed on server
	[ADDED] Hook match for easy hook identification
	[FIXED] Various bugs

1.2b:	[Fixed] No players could join when the game was paused
	[Fixed] Creative patch users was detected of having a hooked ut
	[Fixed] OS compatibility option (hopefully - can't test it..)

1.2:	[ADDED]	Option to let UTDC turn off protection for linux and mac clients allowing them to play on the server.
	[ADDED]	Command to see if anyone is excluded from check.
	[CHANGED] UTDC will not create empty logfiles when logging to external log files.
	[CHANGED] Safekick option will only kick/ban catches that look like helios hook 1.0 to 3.1

1.1:	[ADDED]	Option to only log catches
	[ADDED]	Option to log to external log files
	[ADDED]	Option to only kick/ban catches that look like helios hook 1.0 to 2.9b
	[ADDED]	Option to change kick message
	[ADDED]	Option to specify a link to a website with the dll for manual installation

1.0b:	[Fixed]	Most if not all false detections
	[ADDED]	Player banning
	[ADDED]	Command to easy allow a player to not be checked

1.0 :	Initial Release

[Thanks]

To http://www.unrealadmin.org for hosting the UTDC forum
To all who have helped.

[Credits]
Shambler for his MD5 calculation code.
http://wiki.beyondunreal.com/wiki/ for lots of usefull information
Professorq, cus i found out about the dll loading method by looking at his work.

*******************************************/
HAPPY FRAGGING..........HEADSHOT BY TROUBLESOME! ;)