7*******************************************/
* Project: UTDC
* Version: 1.5
* Protects against: Hooking of UT99 engine
* Made by: Troublesome
* Clan: VIP
* Cool qnet channel: #unreal.vip
*******************************************/

[Information]

UTDC is a protection against hooks. It is highly configurable and will detect all publicly known hook based cheats (as of this date 23/01/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 UTDCv15.u, UTDCv15dll.u and UTDC.ini in the zip file to your server's UnrealTournament\System directory.
2: Add the following lines under [Engine.GameEngine]:
ServerPackages=UTDCv15
ServerPackages=UTDCv15dll
ServerActors=UTDCv15.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)


[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:

*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.

*mutate utdc set utdc on
-This will turn utdc protection on.

*mutate utdc set utdc off
-This will turn utdc protection off.

*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-5).

*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 allowone
-This will allow the next player who join the server not to be checked by utdc.

*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 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.

*mutate utdc set kick off
-This will turn player kicking off.

*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 safekick on
-This will only kick/ban players who got caught with a cheat that can be identified

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

*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. Special treats for helios hook v. 4.2 and v. 3.1.

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

*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 memory
-This will trigger a full memory scan for all players.

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.


[Default Settings]

UTDCActive=True
ServerCheck=True
CheckFrequency=5
ClientCheck=True
ClientCheckFrequency=3
KickMsg=You have been kicked because a cheat have been detected
DownloadURL=None
BanPlayer=False
KickPlayer=True
MemScanKick=True
SafeKick=False
ExternalLog=False
LogPath=../Logs/
OSCare=True
ForceNativeSpawn=False
ShowLogo=True
FUCheat=True
LogoXpos=1
LogoYpos=10
MemoryScan=True
Allow440=True
Allow451a=True
Allow451b=True

[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.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 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! ;)