 |
Cheat Engine The Official Site of Cheat Engine
|
| View previous topic :: View next topic |
| Author |
Message |
Game Hacking Dojo Master Cheater
Reputation: 1
Joined: 17 Sep 2023 Posts: 250
|
Posted: Thu Sep 26, 2024 8:16 am Post subject: Fixing an AA Temp Gen |
|
|
I found this template here on the forum and I've been using it for quite some time. I made a few modifications to it to suit my needs. It's so good, cheers.
However, there is something buggy about it. Whenever Cheat Engine generates symbols the script can't seem to be able to generate a template because of address parsing confusion.
| Code: | Sifu-Win64-Shipping.exe+17BD7EE - CC - int 3 //injecting here is fine
// ---------- INJECTING HERE ----------
Sifu-Win64-Shipping.FDualCameraNode::GetFollowYawDampingFactor - 40 53 - push rbx //Injecting here would not make it generate any thing
// ---------- DONE INJECTING ----------
Sifu-Win64-Shipping.FDualCameraNode::GetFollowYawDampingFactor+2 - 48 83 EC 50 - sub rsp,50 |
The suspected bug is around:
| Quote: | | --try to find module name+offset |
The original script:
| Code: | myAOBInjectionTemplates = {}
myAOBInjectionTemplates.Templates = {
{
displayName="Alternative AOB",
submenu='custom AOB Injection Templates',
templateSections=
[==[
<<INFO>>
// Game Executable : %processName%
// Author : %authorName%
// Executable Version: %exeVersion%
// Module Version : %moduleVersion%
// Script Date : %scriptDate%
// Created with : customAOBInjectionTemplates version: %extensionVersion%
<<INFO_END>>
<<ENABLE>>
aobscan%isModuleScan%(aob_%cheatName%,%moduleNameC%%searchPattern%)
registersymbol(aob_%cheatName%)
alloc(newmem_%cheatName%,1024%CmoduleName%)
label(return_%cheatName%)
newmem_%cheatName%:
%_originalCodeLines%
jmp return_%cheatName%
aob_%cheatName%%aobAdjust%:
jmp newmem_%cheatName%
%_nopLines%
return_%cheatName%:
<<ENABLE_END>>
<<DISABLE>>
aob_%cheatName%%aobAdjust%:
db %originalBytes%
unregistersymbol(aob_%cheatName%)
dealloc(newmem_%cheatName%)
%additionalInfo%
<<DISABLE_END>>
]==]
},
{
displayName="Alternative AOB with bracketsRegsOffset",
submenu='custom AOB Injection Templates',
templateSections=
[==[
<<INFO>>
// Game Executable : %processName%
// Author : %authorName%
// Executable Version: %exeVersion%
// Module Version : %moduleVersion%
// Script Date : %scriptDate%
// Created with : customAOBInjectionTemplates version: %extensionVersion%
<<INFO_END>>
<<ENABLE>>
aobscan%isModuleScan%(aob_%cheatName%,%moduleNameC%%searchPattern%)
registersymbol(aob_%cheatName%)
alloc(newmem_%cheatName%,1024%CmoduleName%)
label(return_%cheatName%)
label(set_%cheatName%)
label(quit_%cheatName%)
newmem_%cheatName%:
jmp quit_%cheatName%
set_%cheatName%:
mov %bracketsRegsOffset%,0
//jmp quit_%cheatName%
quit_%cheatName%:
%_originalCodeLines%
jmp return_%cheatName%
aob_%cheatName%%aobAdjust%:
jmp newmem_%cheatName%
%_nopLines%
return_%cheatName%:
<<ENABLE_END>>
<<DISABLE>>
aob_%cheatName%%aobAdjust%:
db %originalBytes%
unregistersymbol(aob_%cheatName%)
dealloc(newmem_%cheatName%)
%additionalInfo%
<<DISABLE_END>>
]==]
},
{
displayName="Alternative AOB with Stealth",
submenu='custom AOB Injection Templates',
templateSections=
[==[
<<INFO>>
// Game Executable : %processName%
// Author : %authorName%
// Executable Version: %exeVersion%
// Module Version : %moduleVersion%
// Script Date : %scriptDate%
// Created with : customAOBInjectionTemplates version: %extensionVersion%
<<INFO_END>>
<<ENABLE>>
aobscan%isModuleScan%(aob_%cheatName%,%moduleNameC%%searchPattern%)
stealtheditex(See_%cheatName%,aob_%cheatName%%aobAdjust%,3)
label(SeeReg_%cheatName%)
registersymbol(SeeReg_%cheatName%)
alloc(newmem_%cheatName%,1024%CmoduleName%)
label(return_%cheatName%)
newmem_%cheatName%:
%_originalCodeLines%
jmp return_%cheatName%
See_%cheatName%:
SeeReg_%cheatName%:
jmp newmem_%cheatName%
%_nopLines%
return_%cheatName%:
<<ENABLE_END>>
<<DISABLE>>
SeeReg_%cheatName%:
db %originalBytes%
unregistersymbol(SeeReg_%cheatName%)
dealloc(newmem_%cheatName%)
%additionalInfo%
<<DISABLE_END>>
]==]
},
{
displayName="predprey's Mono Inject",
submenu="predprey's AOB Injection Templates",
templateSections=
[==[
<<INFO>>
// Game Executable : %processName%
// Author : %authorName%
// Executable Version: %exeVersion%
// Module Version : %moduleVersion%
// Script Date : %scriptDate%
// Created with : customAOBInjectionTemplates version: %extensionVersion%
<<INFO_END>>
<<ENABLE>>
alloc(newmem_%cheatName%,1024%CmoduleName%)
label(%cheatName%)
registersymbol(%cheatName%)
label(return_%cheatName%)
newmem_%cheatName%:
%_originalCodeLines%
jmp return_%cheatName%
%monoAddress%:
%cheatName%:
jmp newmem_%cheatName%
%_nopLines%
return_%cheatName%:
<<ENABLE_END>>
<<DISABLE>>
%cheatName%:
db %originalBytes%
unregistersymbol(%cheatName%)
dealloc(newmem_%cheatName%)
%additionalInfo%
<<DISABLE_END>>
]==]
},
{
displayName="Csimbi's AOB; targets process",
submenu="Csimbi's AOB Injection Templates",
group='normal',
templateSections=
[==[
<<INFO>>
// Game Executable : %processName%
// Author : %authorName%
// Executable Version: %exeVersion%
// Module Version : %moduleVersion%
// Script Date : %scriptDate%
// Created with : customAOBInjectionTemplates version: %extensionVersion%
<<INFO_END>>
<<ENABLE>>
{$lua}
return string.format([[
aobscanmodule(aob%cheatName%,%s,%searchPattern%)
]],process)
{$asm}
alloc(newmem%cheatName%,4096,aob%cheatName%)
label(aob%cheatName%_r)
label(aob%cheatName%_i)
registersymbol(aob%cheatName%_r)
registersymbol(aob%cheatName%_i)
label(lbl%cheatName%)
label(lbl%cheatName%Skip)
label(lbl%cheatName%Ret)
label(bEnable%cheatName%)
registersymbol(bEnable%cheatName%)
newmem%cheatName%:
bEnable%cheatName%:
dd 1
lbl%cheatName%:
%CoriginalCodeLines%
//db %originalBytes%
readmem(aob%cheatName%%aobAdjust%,%replacedInstructionsSize%)
cmp dword ptr [bEnable%cheatName%],1
jne short lbl%cheatName%Skip
// Place your code here
lbl%cheatName%Skip:
jmp lbl%cheatName%Ret
aob%cheatName%_i:
readmem(aob%cheatName%%aobAdjust%,%replacedInstructionsSize%)
//%injectAddress%:
aob%cheatName%%aobAdjust%:
aob%cheatName%_r:
jmp lbl%cheatName%
%nopLines%
lbl%cheatName%Ret:
<<ENABLE_END>>
<<DISABLE>>
//%injectAddress%:
%CoriginalCodeLines%
//db %originalBytes%
aob%cheatName%_r:
readmem(aob%cheatName%_i,%replacedInstructionsSize%)
unregistersymbol(aob%cheatName%_r)
unregistersymbol(aob%cheatName%_i)
unregistersymbol(bEnable%cheatName%)
dealloc(newmem%cheatName%)
%additionalInfo%
<<DISABLE_END>>
]==]
},
{
displayName="Csimbi's AOB; targets module",
submenu="Csimbi's AOB Injection Templates",
group='normal',
templateSections=
[==[
<<INFO>>
// Game Executable : %processName%
// Author : %authorName%
// Executable Version: %exeVersion%
// Module Version : %moduleVersion%
// Script Date : %scriptDate%
// Created with : customAOBInjectionTemplates version: %extensionVersion%
<<INFO_END>>
<<ENABLE>>
aobscan%isModuleScan%(aob%cheatName%,%moduleNameC%%searchPattern%)
alloc(newmem%cheatName%,4096,aob%cheatName%)
label(aob%cheatName%_r)
label(aob%cheatName%_i)
registersymbol(aob%cheatName%_r)
registersymbol(aob%cheatName%_i)
label(lbl%cheatName%)
label(lbl%cheatName%Skip)
label(lbl%cheatName%Ret)
label(bEnable%cheatName%)
registersymbol(bEnable%cheatName%)
newmem%cheatName%:
bEnable%cheatName%:
dd 1
lbl%cheatName%:
%CoriginalCodeLines%
//db %originalBytes%
readmem(aob%cheatName%%aobAdjust%,%replacedInstructionsSize%)
cmp dword ptr [bEnable%cheatName%],1
jne short lbl%cheatName%Skip
// Place your code here
lbl%cheatName%Skip:
jmp lbl%cheatName%Ret
aob%cheatName%_i:
readmem(aob%cheatName%%aobAdjust%,%replacedInstructionsSize%)
//%injectAddress%:
aob%cheatName%%aobAdjust%:
aob%cheatName%_r:
jmp lbl%cheatName%
%nopLines%
lbl%cheatName%Ret:
<<ENABLE_END>>
<<DISABLE>>
//%injectAddress%:
%CoriginalCodeLines%
//db %originalBytes%
aob%cheatName%_r:
readmem(aob%cheatName%_i,%replacedInstructionsSize%)
unregistersymbol(aob%cheatName%_r)
unregistersymbol(aob%cheatName%_i)
unregistersymbol(bEnable%cheatName%)
dealloc(newmem%cheatName%)
%additionalInfo%
<<DISABLE_END>>
]==]
},
{
displayName="Csimbi's AOB offset grab; targets process",
submenu="Csimbi's AOB Injection Templates",
group='offset grab',
templateSections=
[==[
<<INFO>>
// Game Executable : %processName%
// Author : %authorName%
// Executable Version: %exeVersion%
// Module Version : %moduleVersion%
// Script Date : %scriptDate%
// Created with : customAOBInjectionTemplates version: %extensionVersion%
<<INFO_END>>
<<ENABLE>>
{$lua}
return string.format([[
aobscanmodule(aob%cheatName%,%s,%searchPattern%)
]],process)
{$asm}
// %searchPattern%
// 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
alloc(newmem%cheatName%,4096,aob%cheatName%)
label(i%cheatName%)
registersymbol(i%cheatName%)
newmem%cheatName%:
i%cheatName%:
readmem(aob%cheatName%+XX,YY)
<<ENABLE_END>>
<<DISABLE>>
unregistersymbol(i%cheatName%)
dealloc(newmem%cheatName%)
%additionalInfo%
<<DISABLE_END>>
]==]
},
{
displayName="Csimbi's AOB offset grab; targets module",
submenu="Csimbi's AOB Injection Templates",
group='offset grab',
templateSections=
[==[
<<INFO>>
// Game Executable : %processName%
// Author : %authorName%
// Executable Version: %exeVersion%
// Module Version : %moduleVersion%
// Script Date : %scriptDate%
// Created with : customAOBInjectionTemplates version: %extensionVersion%
<<INFO_END>>
<<ENABLE>>
aobscan%isModuleScan%(aob%cheatName%,%moduleNameC%%searchPattern%)
// %searchPattern%
// 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
alloc(newmem%cheatName%,4096,aob%cheatName%)
label(i%cheatName%)
registersymbol(i%cheatName%)
newmem%cheatName%:
i%cheatName%:
readmem(aob%cheatName%+XX,YY)
<<ENABLE_END>>
<<DISABLE>>
unregistersymbol(i%cheatName%)
dealloc(newmem%cheatName%)
%additionalInfo%
<<DISABLE_END>>
]==]
},
}
local extensionVersion = '1.3.6'
function myAOBInjectionTemplates.formCreateNotify(form)
if form.ClassName~="TfrmAutoInject" then return end
local timer=createTimer()
timer.Interval=100
timer.OnTimer = function (t)
if (form.Menu==nil) then return end
t.destroy()
myAOBInjectionTemplates.addMenuEntries(form)
end
end
function myAOBInjectionTemplates.addMenuEntries(form)
local m,mi,sm=form.emplate1,nil,nil
local createdSubmenus={}
local lastMenuItemFromGroup={}
local smIndex = 1
mi = createMenuItem(m); m.add(mi); mi.Caption = '-' -- separator
for i=1,#myAOBInjectionTemplates.Templates do
local submenu = myAOBInjectionTemplates.Templates[i].submenu
local group = myAOBInjectionTemplates.Templates[i].group
local groupname=(submenu or '')..(group or '')
if submenu~=nil then
if createdSubmenus[submenu] then
sm=createdSubmenus[submenu]
else
sm = createMenuItem(m); m.add(sm)
sm.Caption = submenu
sm.Name = 'miAlternativeAOBtemplateSubmenu'..smIndex; smIndex=smIndex+1
createdSubmenus[submenu]=sm
end
else
sm=m
end
if lastMenuItemFromGroup[groupname]==nil then
if sm.Count>0 then
mi = createMenuItem(m); sm.add(mi); mi.Caption = '-' -- separator
end
mi = createMenuItem(m); sm.add(mi)
lastMenuItemFromGroup[groupname]=mi
else
mi = createMenuItem(m); sm.insert(lastMenuItemFromGroup[groupname].MenuIndex+1, mi)
lastMenuItemFromGroup[groupname]=mi
end
mi.OnClick = function (sender)
myAOBInjectionTemplates.generate(sender,myAOBInjectionTemplates.Templates[i])
end
mi.Caption = myAOBInjectionTemplates.Templates[i].displayName
mi.Name = 'miAlternativeAOBtemplate'..i
end
end
registerFormAddNotification(myAOBInjectionTemplates.formCreateNotify)
function myAOBInjectionTemplates.generate(sender,chosenTemplate)
local displayName = chosenTemplate.displayName
local cheatName = chosenTemplate.defaultSymbolName or 'example'
local template = chosenTemplate.templateSections
local form=sender.Owner.Owner
local origScript = form.Assemblescreen.Lines.Text
--gather existing names from origScript from registersymbol
local existingNames = {}
for existingName in origScript:gmatch('registersymbol%(%s*(.-)%s*%)') do
existingNames[1+#existingNames] = existingName
end
-- also from define
for existingName in origScript:gmatch('define%(%s*(.-)%s*,') do
existingNames[1+#existingNames] = existingName
end
local function checkForCollides(str)
for i,v in ipairs(existingNames) do
if v:find(str, 1, true)~=nil then return 'Name "'..str..'" collides with existing "'..v..'"' end
if str:find(v, 1, true)~=nil then return 'Existing "'..v..'" collides with name "'..str..'"' end
end
return nil
end
local address = 0
if form.owner.DisassemblerView then
address = form.owner.DisassemblerView.SelectedAddress
else
address = getMemoryViewForm().DisassemblerView.SelectedAddress
end
--try to find module name+offset
local selectedAddress = getNameFromAddress(address)
local modulesTable,size = enumModules(),0
local exeVersionStr = ''
local moduleVersionStr=''
for i,v in pairs(modulesTable) do
size = getModuleSize(v.Name)
if size~=nil and (address>=v.Address and address<=v.Address+size)
then
if i~=1 then
local _,moduleVersionTbl = getFileVersion(v.PathToFile)
moduleVersionStr = moduleVersionTbl==nil and '' or (moduleVersionTbl.major..'.'..moduleVersionTbl.minor..'.'..
moduleVersionTbl.release..'.'..moduleVersionTbl.build)
end
selectedAddress = '"'..v.Name..'"+'..string.format('%X',address-v.Address)
break
end
end
local _,exeVersionTbl = getFileVersion(modulesTable[1].PathToFile)
local exeVersionStr = exeVersionTbl==nil and '' or (exeVersionTbl.major..'.'..exeVersionTbl.minor..'.'..
exeVersionTbl.release..'.'..exeVersionTbl.build)
selectedAddress=inputQuery(displayName,'On what address do you want the jump?', selectedAddress)
if selectedAddress==nil then return end
cheatName=inputQuery(displayName,'What do you want to name the symbol for the injection point?', cheatName)
if cheatName==nil then return end
::setValidname:: --do not allow default name or those already existing/colliding or empty
while cheatName:lower()=='inject' or
cheatName=='' do
cheatName=inputQuery('Caution!', 'Ugly name. Change it.', cheatName) or ''
cheatName=cheatName:gsub('%s','') -- remove spaces
end
-- check if already exist or collides with each other
local collides = checkForCollides(cheatName)
if collides~=nil then
cheatName=inputQuery('Caution!', collides..'. Change it.', cheatName) or ''
cheatName=cheatName:gsub('%s','') -- remove spaces
goto setValidname
end
local newScript_stringlist = createStringlist()
local gaobisResult = generateAOBInjectionScript(newScript_stringlist, cheatName, selectedAddress)
local newScript = newScript_stringlist.Text
newScript_stringlist.destroy()
-- is process opened?
if newScript:match('No Process Selected') then showMessage("No process selected!") return end
-- is aob unique?
if newScript:match('Could not find unique AOB') then
showMessage("Warning. Could not find unique AOB.")
newScript = newScript:gsub('ERROR: Could not find unique AOB,','ERROR: Could not find unique AOB;')
end
if not gaobisResult
then showMessage("generateAOBInjectionScript raised exception!") return end
-- note: 'origScript' and 'newScript' will have "carriage return & line feed" at the end of each line
-- because it is taken from TStrings object.
-- 'template' has only "line feed"
local authorName = newScript:match('Author : (.-)\r\n')
local processName = newScript:match('Game : (.-)\r\n')
local scriptDate = newScript:match('Date : (.-)\r\n')
local isModuleScan = newScript:match('aobscan(module)') or ''
local searchPattern = newScript:match('aobscan.-%(.*,(.-)%) // should be unique')
local moduleName, moduleName_comma, comma_moduleName
if isModuleScan=='module' then
moduleName = newScript:match('aobscan.-%(.-,(.-),.-%)')
moduleName_comma = moduleName..','
comma_moduleName = ','..moduleName
else
moduleName = ''
moduleName_comma = ''
comma_moduleName = ''
end
local _originalCodeLines = newScript:match('code:\r\n(.-)\r\n jmp return')
local aobAdjust = newScript:match('code:.-jmp return\r\n\r\n'..cheatName..'(.-):')
local _nopLines = newScript:match(' jmp code\r\n(.-)\r\nreturn:') or ''
if _nopLines=='' then -- other case
_nopLines = newScript:match(' jmp newmem\r\n(.-)\r\nreturn:') or ''
end
local originalBytes = newScript:match(' db (.-)\r\n')
local additionalInfo = newScript:match('{\r\n// ORIGINAL CODE %- INJECTION POINT.*')
local origfirstLine = (_originalCodeLines..'\r\n'):match( "(.-)\r\n" )
local bracketsRegsOffset = origfirstLine:match('[dq]?word ptr %[.-%]')
or origfirstLine:match('byte ptr %[.-%]')
or origfirstLine:match('%[.-%]')
or ''
local regsOffset = origfirstLine:match('%[(.-)%]') or ''
local originalCodeLines = _originalCodeLines:sub(3):gsub('\r\n ','\r\n') -- indent less version
local nopLines = _nopLines=='' and '' or _nopLines:sub(3):gsub('\r\n ','\r\n') -- indent less version
local CoriginalCodeLines = '//Alt: '.._originalCodeLines:sub(3):gsub('\r\n ','\r\n//Alt: ')-- commented version
local db90s=''
if _nopLines~='' then
if _nopLines:match(' nop (%x+)') then --CE7.0 and above has ' nop '+inttohex(NopCount)
local nopNumber = tonumber(_nopLines:match(' nop (%x+)'),16)
db90s = 'db'..string.rep(" 90", nopNumber)
else --up to CE6.8.3
db90s = 'db'..(nopLines..'\r\n'):gsub('nop\r\n',' 90')
end
end
local _,replacedInstructionsSize = originalBytes:gsub('%x%x','')
local replacedInstructionsSizeHex = string.format('%X',replacedInstructionsSize)
--Mono & Hook Address
local injectAddress = newScript:match('INJECTING HERE %-%-%-%-%-%-%-%-%-%-\r\n(.-):')
local injectAddressNum = getAddress(injectAddress)
local monoAddress = ''
if template:find('%%monoAddress%%') then -- remove lag for templates without mono
if LaunchMonoDataCollector~=nil and LaunchMonoDataCollector()~=0 then
monoAddress = mono_addressLookupCallback(injectAddressNum) or ''
end
end
--reassembleReplacedInstructions
local tmp = getInstructionSize(injectAddressNum)
local reassembleReplacedInstructions = 'reassemble(~)'
while tmp < replacedInstructionsSize do
reassembleReplacedInstructions = reassembleReplacedInstructions .. '\nreassemble(~+'..string.format('%X',tmp)..')'
tmp = tmp + getInstructionSize(injectAddressNum+tmp)
end
-- use the template
template = template:gsub('%%cheatName%%', cheatName)
template = template:gsub('%%authorName%%', authorName)
template = template:gsub('%%processName%%', processName)
template = template:gsub('%%isModuleScan%%', isModuleScan)
template = template:gsub('%%searchPattern%%', searchPattern)
template = template:gsub('%%CmoduleName%%', comma_moduleName)
template = template:gsub('%%moduleNameC%%', moduleName_comma)
template = template:gsub('%%moduleName%%', moduleName)
template = template:gsub('%%replacedInstructionsSize%%', replacedInstructionsSize)
template = template:gsub('%%replacedInstructionsSizeHex%%', replacedInstructionsSizeHex)
template = template:gsub('%%_originalCodeLines%%', _originalCodeLines)
template = template:gsub('%%originalCodeLines%%', originalCodeLines)
template = template:gsub('%%CoriginalCodeLines%%', CoriginalCodeLines)
template = template:gsub('%%originalBytes%%', originalBytes)
template = template:gsub('%%aobAdjust%%', aobAdjust)
template = template:gsub('%%additionalInfo%%', additionalInfo)
template = template:gsub('%%bracketsRegsOffset%%', bracketsRegsOffset)
template = template:gsub('%%regsOffset%%', regsOffset)
template = template:gsub('%%injectAddress%%', injectAddress)
template = template:gsub('%%monoAddress%%', monoAddress)
template = template:gsub('%%reassembleReplacedInstructions%((.-)%)%%', function (a)
return reassembleReplacedInstructions:gsub('~',a)
end)
template = template:gsub('%%scriptDate%%', scriptDate)
template = template:gsub('%%exeVersion%%', exeVersionStr)
template = template:gsub('%%moduleVersion%%', moduleVersionStr)
if db90s~='' then
template = template:gsub('%%nopLines%%', nopLines)
template = template:gsub('%%_nopLines%%', _nopLines)
template = template:gsub('%%db90s%%', db90s)
else
-- remove whole line when NOP'ing is not needed
template = template:gsub('%%nopLines%%.-\n', '')
template = template:gsub('%%_nopLines%%.-\n', '')
template = template:gsub('%%db90s%%.-\n', '')
end
template = template:gsub('%%extensionVersion%%', extensionVersion)
local enablePart = template:match('<<ENABLE>>.(.*).<<ENABLE_END>>')
local disablePart = template:match('<<DISABLE>>.(.*).<<DISABLE_END>>')
local infoPart = template:match('<<INFO>>.(.*).<<INFO_END>>')
if origScript=='\r\n' then origScript='' end --after manually deleting all lines, there's always one empty line
local pos=origScript:find('%[DISABLE]')
if pos then newScript=origScript:sub(1,pos-1)..'\r\n'..enablePart..'\r\n'..origScript:sub(pos)..'\r\n'..disablePart
else newScript=origScript..'[ENABLE]\r\n'..enablePart..'\r\n[DISABLE]\r\n'..disablePart
end
if pos==nil and infoPart~=nil then newScript=infoPart..'\r\n'..newScript end
form.Assemblescreen.Lines.Text = newScript -- update
end |
|
|
| Back to top |
|
 |
Game Hacking Dojo Master Cheater
Reputation: 1
Joined: 17 Sep 2023 Posts: 250
|
Posted: Thu Sep 26, 2024 6:50 pm Post subject: |
|
|
I found where the problem was but I still couldn't find the solution.
| Quote: | | Code: | --Mono & Hook Address
local injectAddress = newScript:match('INJECTING HERE %-%-%-%-%-%-%-%-%-%-\r\n(.-):')
local injectAddressNum = getAddress(injectAddress)
local monoAddress = ''
if template:find('%%monoAddress%%') then -- remove lag for templates without mono
if LaunchMonoDataCollector ~= nil and LaunchMonoDataCollector() ~= 0 then
monoAddress = mono_addressLookupCallback(injectAddressNum) or ''
end
end |
|
Here, there is something wrong happening that only seems to happen when the symbol name contains colon colon "::"
I am still trying so if you have an idea help me, please
Solved:
Okay, lately I have been posting some questions and answering them myself )
Well, it is not a complaint it is just an indication of improvements
How can I rep+ myself
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|