cheat-engine/Cheat Engine/cheatengine.lpr
Dark Byte 51c4c1eed6 add a "revert to saved scan" option in the scanner.
added signed support for between scans
started with loading pdb structures
2017-08-05 00:28:31 +02:00

313 lines
12 KiB
ObjectPascal

program cheatengine;
{$mode objfpc}{$H+}
uses
first,
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, {CEInterfaces,} // this includes the LCL widgetset
controls, sysutils, Forms, LazUTF8, dialogs, MainUnit, CEDebugger,
NewKernelHandler, CEFuncProc, ProcessHandlerUnit, symbolhandler,
Assemblerunit, hypermode, byteinterpreter, addressparser, autoassembler,
ProcessWindowUnit, MainUnit2, Filehandler, dbvmPhysicalMemoryHandler,
frameHotkeyConfigUnit, formsettingsunit, HotkeyHandler, formhotkeyunit,
AdvancedOptionsUnit, inputboxtopunit, plugin, pluginexports, tlgUnit,
aboutunit, frmProcesswatcherExtraUnit, frmProcessWatcherUnit,
ModuleSafetyUnit, frmExcludeHideUnit, HotKeys, TypePopup, CommentsUnit,
FoundCodeUnit, foundlisthelper, unrandomizer, SaveFirstScan, savedscanhandler,
memscan, KernelDebugger, formDifferentBitSizeUnit, formAddressChangeUnit,
Changeoffsetunit, speedhack2, formPointerOrPointeeUnit, AccessCheck,
formmemoryregionsunit, OpenSave, formProcessInfo, frmautoinjectunit,
MenuItemExtra, MemoryBrowserFormUnit, disassemblerviewlinesunit,
disassemblerviewunit, PasteTableentryFRM, frmBreakpointlistunit,
DissectCodeThread, DissectCodeunit, Valuechange, FindWindowUnit, stacktrace2,
frmstacktraceunit, frmBreakThreadUnit, FormDebugStringsUnit,
frmDissectwindowUnit, frmCapturedTimersUnit, frmEnumerateDLLsUnit,
frmThreadlistunit, frmMemoryAllocHandlerUnit, circularBuffer, PEInfoFunctions,
PEInfounit, FileMapping, frmFindstaticsUnit, frmModifyRegistersUnit,
frmHeapsUnit, savedisassemblyfrm, frmSaveMemoryRegionUnit, frmLoadMemoryunit,
formAddToCodeList, frmFillMemoryUnit, frmCodecaveScannerUnit,
frmSelectionlistunit, symbolconfigunit, frmFloatingPointPanelUnit,
frmTracerUnit, DriverList, frmRegistersunit, formChangedAddresses, frmGDTunit,
frmIDTunit, frmDisassemblyscanunit, frmReferencedStringsUnit,
StructuresAddElementfrm, Structuresfrm, PointerscannerSettingsFrm,
simpleaobscanner, PointerscanresultReader, pointervaluelist, rescanhelper,
pointerscannerfrm, VirtualMemory, ValueFinder, frmRescanPointerUnit,
SyncObjs2, ManualModuleLoader, SynHighlighterAA, APIhooktemplatesettingsfrm,
frmAAEditPrefsUnit, disassembler, hexviewunit, guisafecriticalsection,
debugeventhandler, formFoundcodeListExtraUnit, debuggertypedefinitions,
addresslist, MemoryRecordUnit, ThreadlistExFRM, windows7taskbar, tablist,
frmStructuresConfigUnit, VEHDebugger, VEHDebugSharedMem, DebuggerInterface,
WindowsDebugger, DebuggerInterfaceAPIWrapper, frmDebugEventsUnit, changelist,
tableconverter, DBK32functions, debug, multicpuexecution, vmxfunctions,
frmPagingUnit, bigmemallochandler, KernelDebuggerInterface, CustomTypeHandler,
LuaHandler, frmLuaEngineUnit, frmMemviewPreferencesUnit,
frmBreakpointConditionUnit, frmTracerConfigUnit, frmStackViewUnit, luaJit,
ScrollBoxEx, fileaccess, ceguicomponents, formdesignerunit, LuaCaller,
LuaSyntax, cesupport, trainergenerator, genericHotkey,
frmExeTrainerGeneratorUnit, luafile, xmplayer_server, xmplayer_defines,
ExtraTrainerComponents, frmAdConfigUnit, IconStuff, cetranslator,
frmStringMapUnit, MemFuncs, frmStringPointerScanUnit,
frmStructPointerRescanUnit, sharedMemory, disassemblerComments,
frmFilePatcherUnit, LuaCanvas, LuaPen, LuaFont, LuaBrush, LuaPicture, LuaMenu,
LuaDebug, frmUltimapUnit, DBK64SecondaryLoader, frmHotkeyExUnit,
SymbolListHandler, networkInterface, networkInterfaceApi, networkConfig,
LuaThread, LuaGraphic, LuaProgressBar, d3dhookUnit, LuaOldD3DHook,
LuaWinControl, frmSetCrosshairUnit, StructuresFrm2, scrollTreeView,
frmStructures2ElementInfoUnit, frmStructureLinkerUnit, LuaMemoryRecord,
LuaStructure, LuaForm, regionex, LuaRegion, frmgroupscanalgoritmgeneratorunit,
vartypestrings, LuaXMPlayer, groupscancommandparser, LuaMemscan, LuaFoundlist,
LuaRadioGroup, RemoteMemoryManager, LuaRasterImage, multilineinputqueryunit,
LuaCheatComponent, LuaAddresslist, frmDriverLoadedUnit, memdisplay,
frmSortPointerlistUnit, LuaClassArray, LuaObject, LuaComponent, LuaControl,
LuaStrings, LuaStringlist, LuaCustomControl, LuaGraphicControl, LuaPanel,
LuaImage, LuaButton, LuaCheckbox, LuaClass, LuaGroupbox, LuaListbox,
LuaCombobox, LuaTrackbar, LuaCollectionItem, LuaListcolumn, LuaEdit, LuaMemo,
LuaCollection, LuaListColumns, LuaListItem, LuaListItems, LuaListview,
LuaTimer, LuaGenericHotkey, LuaFileDialog, LuaStream, LuaTableFile,
LuaMemoryRecordHotkey, LuaMemoryView, LuaD3DHook, CustomBase85,
frmMemoryViewExUnit, LuaDisassembler, LuaDissectCode, LuaByteTable, LuaBinary,
frmD3DHookSnapshotConfigUnit, frmsnapshothandlerUnit, frmSaveSnapshotsUnit,
frmD3DTrainerGeneratorOptionsUnit, lua_server, frmAssemblyScanUnit,
frmManualStacktraceConfigUnit, cvconst, NetworkDebuggerInterface,
DisassemblerArm, LastDisassembleData, elfsymbols, assemblerArm,
frmPointerscanConnectDialogUnit, PageMap, CELazySocket,
PointerscanNetworkCommands, frmpointerrescanconnectdialogunit,
frmMergePointerscanResultSettingsUnit, AddresslistEditor,
FrmMemoryRecordDropdownSettingsUnit, frmMemrecComboboxUnit, tracerIgnore,
DotNetPipe, DotNetTypes, LuaPipeServer, LuaPipe, LuaPipeClient,
CEListviewItemEditor, LuaTreeview, LuaTreeNodes, LuaTreeNode, LuaCalendar,
LuaSymbolListHandler, LuaFindDialog, LuaCommonDialog, LuaSettings,
frmReferencedFunctionsUnit, LuaPageControl, DebugHelper,
frmNetworkDataCompressionUnit, lazcontrols, LuaApplication, ProcessList,
pointeraddresslist, frmResumePointerscanUnit, frmSetupPSNNodeUnit,
PointerscanWorker, PointerscanStructures, PointerscanController, zstreamext,
PointerscanConnector, PointerscanNetworkStructures, AsyncTimer,
PointerscanSettingsIPConnectionList, MemoryStreamReader, commonTypeDefs,
Parsers, Globals, NullStream, RipRelativeScanner, LuaRipRelativeScanner,
VirtualQueryExCache, disassemblerthumb, AccessedMemory, LuaStructureFrm,
MemoryQuery, pointerparser, GnuAssembler, binutils, dbvmLoadManual, mikmod,
frmEditHistoryUnit, LuaInternet, xinput, frmUltimap2Unit, cpuidunit, libipt,
DPIHelper, Graphics, fontSaveLoadRegistry, registry, frmWatchlistUnit,
frmWatchListAddEntryUnit, frmBusyUnit, FindDialogFix, LuaCustomType, LuaSQL,
bCrypt, feces, askToRunLuaScript;
{$R cheatengine.res}
//{$R manifest.res} //lazarus now has this build in
//{$R Sounds.rc}
//{$R images.rc}
{$R images.res}
{$R Sounds.res}
{$ifdef cpu32}
{$SetPEFlags $20}
{$endif}
procedure HandleParameters;
{Keep in mind: Responsible for not making the mainform visible}
var i: integer;
mainformvisible: boolean;
p: string;
tabletoload: string;
origin: string;
begin
tabletoload:='';
origin:='';
mainformvisible:=true;
try
for i:=1 to Paramcount do
begin
p:=paramstr(i);
//ShowMessage('Param '+inttostr(i)+' = '+p);
if p<>'' then
begin
if p[1]='-' then
begin
//could be -ORIGIN
if uppercase(copy(p,1,8))='-ORIGIN:' then
origin:=AnsiDequotedStr(copy(p,9, length(p)-8),'"');
end
else
if (pos('.CETRAINER', uppercase(p))>0) or (pos('.CT', uppercase(p))>0) then
begin
//add the path of this CT to the lua lookup
LUA_DoScript('package.path = package.path .. [[;'+ExtractFilePath(p)+'?.lua]];');
mainformvisible:=uppercase(ExtractFileExt(p))<>'.CETRAINER';
tabletoload:=p; //mark this trainer to be loaded
end;
end;
end;
if tabletoload<>'' then
begin
//it needs to load a table
if fileexists(tabletoload)=false then //try to fix this
begin
if fileexists(WinCPToUTF8(tabletoload)) then
tabletoload:=WinCPToUTF8(tabletoload)
else
if fileexists(UTF8ToWinCP(tabletoload)) then
tabletoload:=UTF8ToWinCP(tabletoload);
end;
if origin='' then
origin:=ExtractFilePath(tabletoload);
if origin<>'' then
LUA_DoScript('TrainerOrigin=[['+origin+']]');
try
try
if mainformvisible then LoadSettingsFromRegistry;
LoadTable(tabletoload,false);
MainForm.Savedialog1.FileName:=tabletoload;
finally
if ExtractFileName(tabletoload)='CET_TRAINER.CETRAINER' then //Let's just hope no-one names their trainer exactly this...
DeleteFile(tabletoload);
end;
except
on e: exception do
begin
MessageDlg('Failure loading the trainer. Reason :'+e.message, mterror, [mbok], 0);
application.Terminate;
end;
end;
end
else
LoadSettingsFromRegistry;
except
end;
for i:=0 to mainform.LuaForms.count-1 do
if tceform(mainform.luaforms[i]).visible then
begin
//first visible window in the formlist becomes the new taskbar window
try
tceform(mainform.luaforms[i]).ShowInTaskBar:=stAlways;
tceform(mainform.luaforms[i]).formstyle:=fsStayOnTop;
tceform(mainform.luaforms[i]).formstyle:=fsNormal;
application.title:=tceform(mainform.luaforms[i]).Caption;
application.icon:=tceform(mainform.luaforms[i]).Icon;
except
end;
break;
end;
mainform.visible:=mainformvisible;
end;
type TFormFucker=class
private
procedure addFormEvent(Sender: TObject; Form: TCustomForm);
end;
var overridefont: TFont;
procedure TFormFucker.addFormEvent(Sender: TObject; Form: TCustomForm);
begin
//fuuuuucking time
if (form<>nil) and (overridefont<>nil) then
form.Font:=overridefont;
end;
var
i: integer;
ff: TFormFucker;
r: TRegistry;
begin
Application.Title:='Cheat Engine 6.7';
Application.Initialize;
overridefont:=nil;
//first check if this is a trainer.
istrainer:=false;
for i:=1 to Paramcount do
begin
if pos('.CETRAINER', uppercase(ParamStr(i)))>0 then
begin
istrainer:=true; //a trainer could give some extra parameters like dpiaware , but that is fine
break;
end;
end;
if not istrainer then
begin
//check the user preferences
r := TRegistry.Create;
r.RootKey := HKEY_CURRENT_USER;
if r.OpenKey('\Software\Cheat Engine',false) then
begin
if r.ValueExists('Override Default Font') then
begin
if r.ReadBool('Override Default Font') then
begin
if r.OpenKey('Font', false) then
begin
overridefont:=TFont.create;
LoadFontFromRegistry(overridefont,r);
ff:=TFormFucker.Create;
screen.AddHandlerFormAdded(@ff.addFormEvent);
end;
end;
end;
end;
end;
for i:=1 to Paramcount do
begin
if Copy(uppercase(ParamStr(i)),1,9)='FONTSIZE=' then
begin
try
if overridefont=nil then
overridefont:=TFont.create;
overridefont.size:=strtoint(copy(ParamStr(i), 10, length(ParamStr(i))));
ff:=TFormFucker.Create;
screen.AddHandlerFormAdded(@ff.addFormEvent);
except
end;
end;
end;
getcedir;
doTranslation;
symhandlerInitialize;
Application.ShowMainForm:=false;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TMemoryBrowser, MemoryBrowser);
Application.CreateForm(TformSettings, formSettings);
Application.CreateForm(TAdvancedOptions, AdvancedOptions);
Application.CreateForm(TComments, Comments);
Application.CreateForm(TTypeForm, TypeForm);
initcetitle;
InitializeLuaScripts;
handleparameters;
Application.Run;
end.