Jump to content

kiynox

Contributor
  • Posts

    484
  • Joined

  • Last visited

  • Days Won

    15

Posts posted by kiynox

  1. [ @Olot ]
    ---
    it's really simple, just download: Termux. Then copy, paste and enter this command:

    su -c "settings put global settings_enable_monitor_phantom_procs false"

    To avoid any issues, before turning off your phone (Shutdown/Restart) re-enable phantom:

    su -c "settings put global settings_enable_monitor_phantom_procs true"

    Or you can disable it temporarily:

    su -c "setprop persist.sys.fflag.override.settings_enable_monitor_phantom_procs false"

    Or if you have Android 14+, just simply enable Developer Option and navigate: Android Settings -> System -> Developer Option -> Enable "Disable child process restrictions".
    ---
    *Still proceed with caution.

  2. [ @Olot ]
    ---

    Quote

    it starts to freeze on 45% something and after gg crashes. i use galaxy a22 5g android 13 rooted with magisk

    Newer Android version (Android 12-14) uses Phantom processes, it will abruptly stop any processes that exceeded the limit. Perhaps try to disable it: Phantom
    ---
    Try it on your own risk, I'm not responsible for anything you tried. Proceed with caution.

  3. [ @kalibro ]
    ---
    Send us some screenshot. There's 2 app protection, there's things like LiApp / AppGuard that responsible for detecting any kind of abnormalitis on the app level (External), then there's in-game Anti-Cheat that tracks any in-game values (Internal). When talking about Anti-Cheat, you need to address any aspects of the game/app, including External & Internal Anti-Cheat.

  4. [ @Saaammii ]
    ---

    Quote

    this app didnt get installed because it isnt compatible with your phone.

    That's why you need to install it through ADB. Just download the modded version of Game Guardian from the thread. This thread/topic have beed updated, go take a look.
    ---

    Quote

    First of all for what is the " cd/d "%~dp0" " ?

    It is a command to switch directory to current directory.
    ---

    Quote

    Second I ran the install command, but for me it says "[INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 22]" what can i do about it?

    Your forgot to add the parameter. The key is here:

    --bypass-low-target-sdk-block

    Android will whitelist the APK from SDK Version detection. So do:

    cd/d "%~dp0"
    adb.exe install --bypass-low-target-sdk-block gameguardian.apk

     

  5. [ @Mari01d ]
    ---

    Quote

    So, can GameGuardian support Shizuku on non-rooted devices?

    Game Guardian development is on hold now, it's been almost 3 years without any hearing from the developers. I don't think Game Guardian will support Shizuku.
    ---

    Quote

    Do you think it has any potential here?

    Just find out what Shizuku is from this thread. Looking at the Shizuku repo, it is really cool. But since it is a middle man for system-binder; is it have the ability to read app memory? while also writing on it? My judge is: it would be limited, just like Android did to ADB.
    ---
     

  6. [ @derbeyonder ]
    ---

    Quote

    Does the address I changed to #0 have an offset address in dump.cs? 

    It is function/method parameter, it's taking values from somewhere / field. It is likely that the value is from "public int price; // 0x24", so just change that instead.
    ---

    Quote

    If not, how can I find the first 8 bytes of hex, from the address I changed with gameguardian, in libil2cpp.so file with a hex editor and change it to 00 00 A0 E3 1E FF 2F E1?

    What you're trying to do here? "00 00 A0 E3 1E FF 2F E1" is equivalent to:

    mov r0, #0
    bx lr

    It is used for function/method that returns boolean/int/dword. It is not clear what "CreateOffer" method returns but I would say it is not returning anything, a void type method.
    ---

    Quote

    Or how can i make a simple gameguardian script?

    Calculate the address that you've changed with the method address. In this case: 08938738 - 08938724 = 20 (decimal) or 14 (hex), so you would need to find method address first and add the offset to it:

    base_address = 'do some logic here to find the method address from libil2cpp.so'
    target_address = base_address + tonumber(20, 16)

    ---

  7. [ @Fujimkad ]
    ---

    Quote

    in what ways can I find out the address of the value responsible for false and true

    True or false is simply presented as 1 and 0. It is dword/integer. You can either find with instruction or dword in general. There would be a lot of results, so I suggest to just disassemble on computers so you can get a grasp of what function that bool is exist. Usually it is formatted like this:

    mov [r0-r10] #[1-2]

    ---

  8. [ @Fujimkad ]
    ---

    Quote

    I have seen many videos where people break purchases in the game through GG, but as I understand it, to do this you need to find out the exact address of the instructions and replace it

    It is really depends on the game. But in general, you can still technically doing it on Game Guardian:

    • - Some games you can directly edit the in-game currency (Diamond, Coins, etc). Or usually it is just protected by XOR-ing the value, so by changing the XOR to 0, you can still directly edit the currency.
    • - Alot of in-game currency relies on server (server-sided) which you can't change it by only memory editing. You can use some workaround, for example by changing the price value to 0, so it can still be editable.
    • - If the game is server-sided, there's not much thing you can do. You may can still poke around the in-game function that handles in-game purchases. For example, you can try to dump/debug the game and find a function that verifies wether the purchases is succeeded or not. By changing it to 'succeed' flag, you might able to break the in-game purchases.
    • - Another tricky ways is to swap item id for an existing item. For example you've some free item to claim, you can change that 'free' item id with another one that is 'paid'. However this is not working if the game inventory is handled server-sidedly.

    ---
    There's alot of ways for doing it but these option is not the 'ultimate' ways of doing it, as it's just replacing the existing memory.

  9. [ @Unknownharry ]
    ---

    Quote

    Same as Lucky patcher api That could Change it For Sometimes Until User is in Application/game!

    Lucky Patcher only emulate in-app purchases that uses Google Play Services, not to mention that it is only working for older version. That's why Lucky Patcher mostly wont work with most apps in the current days.
    ---

    Quote

    Gonna Try use  Lucky Patcher API in Online GG Scripts

    This is very unlikely, as GG scripts only do read/write memory and cannot do beyond that.
    ---

  10. [ @_yourram ]
    ---

    Quote

    thanks, I understood these commands perfectly, but I don't know what mistakes I made, can you fix it too?

    If you understood it, you would not say "I don't know what mistakes I made". And no, I can't help you to fix it because I don't know what you're trying to search here:

    ---[Fix this search yourself]---
    gg.searchNumber(':nDstDist', 1)
    gg.refineNumber('110', 1)
    maintest = gg.getResults(6)
    gg.clearResults()
    maintest2 = maintest[1].address - 0x18
    gg.searchNumber(maintest2, 32)
    -------------------------------

    ---

    Quote

    can you fix it too?

    I can only help fixing the 'table':

    local results = gg.getResults(19)
    if results ~= nil then
    	local elements = {}
    	for k, v in ipairs(results) do
    		table.insert(elements, {address = v.address, flags = 16, value = "-999"})
    	end
    	gg.setValues(elements)
    end

    ---

  11. [ @_yourram ]
    ---

    Quote

    can you explain me in depth about this script function what is happening in this script ↓

    There's a lot of errors, but I will only explain:

    --Clearing results
    gg.clearResults()
    --Set memory region to Ca
    gg.setRanges(gg.REGION_C_ALLOC)
    --Search string: "nDstDist"
    gg.searchNumber(':nDstDist', 1)
    --Refining results that only contain '110' (I have no idea why)
    gg.refineNumber('110', 1)
    --Saving results as variable 'maintest'
    maintest = gg.getResults(6)
    --Clearing results
    gg.clearResults()
    --Taking address of the first result of 'maintest', then use offset -0x18 from the address.
    maintest2 = maintest[1].address - 0x18
    --Searching address of 'maintest2' (I have no idea why)
    gg.searchNumber(maintest2, 32)
    --Saving results as variable 'results'
    local results = gg.getResults(19)
    --(A table that only contain 1, why? (I have no idea why)
    local resultnumber = {1}
    --Temporary table to store items
    local elements = {}
    --Enumerating table 'resultnumber' that only contain 1, what? (I have no idea why)
    for i, v in ipairs(resultnumber) do
    --Check if 'v' is not empty
    if results[v] ~= nil then
    --Adding table: {address = results[v].address, flags = 16,value = "-9e9"}, to table 'elements'
    table.insert(elements, {address = results[v].address, flags = 16,value = "-9e9"})
    end
    end
    
    --Checking if table 'elements' has more than 0 item
    if #elements > 0 then
    --Applying changes in table 'elements' to memory
    gg.setValues(elements)
    end

    ---

  12. [ @_yourram ]
    ---

    if trex == nil then
    	alert('It has to be at least 1 millisecond')
    	return
    end

    You put 'return' here, it is wrong. 'return' statement is used to exit a function: LUA 4.4: break and return. If you want to trigger gg.prompt again, then use goto statement:

    ::redo::
    trex = gg.prompt({'For how many milliseconds do you want to spawn trex? (1000 = 1 sec)'}, {[1]='0'}, {[1]='number'})
    if trex == nil then
    	alert('It has to be at least 1 millisecond')
    	goto redo
    end

    ---

        r = {
            [1] = {
                address = v.address-offset[1],
                flags = 1,
                value = 0,
                name = 'Instant respawn'..i..',1'
            },
            [2] = {
                address = v.address+offset[2],
                flags = 16,
                value = 0,
                freeze = true,
                name = 'Trex spawn'..i..',2'
            },
    -- for how many milliseconds do you want to spawn trex? 
    		gg.sleep(trex[1])
            [3] = {
                address = v.address+offset[3],
                flags = 16,
                value = 190,
                freeze = true,
                name = 'Trex spawn'..i..',2'
         },

    You're executing a gg.sleep() function inside a table, this is wrong. You can't execute a function inside a table. What you need is to separate 'instant respawn' and 'trex spawn'.

    local gg = gg
    local s = 1136216893891
    local offset = { 0x1C, 0x1C, 0x1C}
    local r = {}
    gg.searchNumber(s,32)
    if gg.getResultCount() == 0 then
        print('No results found.')
        os.exit()
    end
    local t = gg.getResults(10)
    gg.clearResults()
    
    ::redo::
    trex = gg.prompt({'For how many milliseconds do you want to spawn trex? (1000 = 1 sec)'}, {[1]='0'}, {[1]='number'})
    if trex == nil then
    	alert('It has to be at least 1 millisecond')
    	goto redo
    end
    
    --Applying instant respawn
    for i, v in ipairs(t) do
        r = {{
    		address = v.address-offset[1],
    		flags = 1,
    		value = 0,
    		name = 'Instant respawn'..i..',1'
    	}}
        gg.setValues(r)
        gg.addListItems(r)
    end
    
    while true do
    	for i, v in ipairs(t) do
    		r = {{
    			address = v.address+offset[2],
    			flags = 16,
    			value = 0,
    			freeze = true,
    			name = 'Trex spawn'..i..',2'
    		},
    		{
    			address = v.address+offset[3],
    			flags = 16,
    			value = 190,
    			freeze = true,
    			name = 'Trex spawn'..i..',2'
    		}}
    		gg.setValues(r)
    	end
    	gg.sleep(trex[1])
    end

    ---
    *Do note that: the script above runs infinitely, you need to put some condition in order to exit it.

  13. [ @_yourram ]
    ---

    Quote

    so I am asking how can I save only 100(local address = v.address - 0x0)edited values while using this function.

    There's nothing wrong with this script. The 'setAddr' function is depends on gg.getResults, so if there's 100 result, the function will also add 100 result into the 'saved list'. If you're talking about editing 100 result simultaneously with 'setAddr' function, then:

    function setAddr(results, offset, value, flags)
    	for key, value in ipairs(results) do
    		results[key].address = results[key].address - offset
    		results[key].value = value
    		results[key].flags = flags
    	end
    	gg.setValues(results)
    	gg.addListItems(results)
    end
    
    gg.searchNumber("-7041975695332343808", gg.TYPE_QWORD, false, gg.SIGN_EQUAL, 0, -1, 0)
    gg.refineNumber("-7041975695332343808")
    local r = gg.getResults(100)
    setAddr(r, 0x0, 100, gg.TYPE_FLOAT)

    ---

  14. [ @_yourram ]
    ---

    Quote

    how can I save only 100 value in float type using this function↓

    What do you mean? Do you want to edit all the results to float '100' or getting '100' results? If you want to get 100 results, just change '10' to '100':

    gg.getResults(100)

    ---

  15. [ @_yourram ]
    ---
    You need to understand 2 things: global variable & function argument:

    • - Variable 'troll' from "BOSS1" can't be accessed in "BOSS2" because it is not a global variable, meaning it can only be accessed in the same function ONLY.
    • - In order this to work, you need to pass the variable 'troll' into 'BOSS2' function as an argument, or, you can create a global variable to store your values.

    ---
    [ Global variable ]

    global_variable = {"troll": {}}
    
    function BOSS1()
    	gg.searchNumber("8243116118139470283", 32)
    	gg.refineNumber("8243116118139470283", 32)
    	troll = gg.getResults(gg.getResultsCount())
    	for k, v in ipairs(troll) do
    		global_variable[#global_variable + 1] = v
    	end
    	gg.addListItems(troll)
    	gg.clearResults()
    
    	gg.searchNumber("8243116118139479840", 32)
    	gg.refineNumber("8243116118139479840", 32)
    	troll = gg.getResults(gg.getResultsCount())
    	for k, v in ipairs(troll) do
    		global_variable[#global_variable + 1] = v
    	end
    	gg.addListItems( troll)
    	gg.clearResults()
    
    	-- 3rd Search Results ↓
    	gg.searchNumber("8143116118139470289", 32)
    	gg.refineNumber("8143116118139470289", 32)  
    	troll = gg.getResults(gg.getResultsCount())
    	for k, v in ipairs(troll) do
    		global_variable[#global_variable + 1] = v
    	end
    	gg.addListItems(troll)
    	gg.clearResults()
    
    	-- 4th Search Results ↓
    	gg.serchNumber("9243116118139472811", 32)
    	gg.refineNumber("9243116118139472811", 32)  
    	troll = gg.getResults(gg.getResultsCount())
    	for k, v in ipairs(troll) do
    		global_variable[#global_variable + 1] = v
    	end
    	gg.addListItems(troll) 
    	gg.clearResults()
    end
    
    function BOSS2()
    	gg.loadResults(global_variable.troll)
    	os.exit()
    end 

    ---
    [ Passing variable ]

    function BOSS1()
    	gg.searchNumber("8243116118139470283", 32)
    	gg.refineNumber("8243116118139470283", 32)
    	troll = gg.getResults(gg.getResultsCount())
    	
    	--passing 'troll' to BOSS2
    	BOSS2(troll)
    
    	gg.addListItems(troll)
    	gg.clearResults()
    
    	--the rest of the code
    end
    
    function BOSS2(troll)
    	gg.loadResults(troll)
    	os.exit()
    end 

    ---

  16. [ @_yourram ]
    ---

    Quote

    is it useless to save values with different names? 

    No, you can still obtain all the value from the saved list and filter the items based on 'name'. In your script, you didn't even add 'name' key into 'control' table, you just straight add them all:

    control = gg.getResults(10)
    gg.addListItems(control)

    ---

    gg.loadResults(gg.getListItems(control))

    This is wrong, gg.getListItems(): will take all items from savedlist, you can't specified it. What you can is:

    gg.loadResults(control)

    ---

    while true do
     if gg.isVisible() then
      gg.setVisible(false)
      Main()
     end
    end
    end

    This part is wrong, you have multiple 'end' just for 'Main()' function. It will also contradict another 'while true do' you put earlier.
    ---
    Here I fixed it:

    function menus()
    	choices = gg.choice({'Prepare Values','Search','Undo','Exit'})
    	if choices == nil then
    		os.exit()
    	else
    		if choices == 4 then
    			os.exit()
    		else
    			prepares(choices)
    		end
    	end
    end
    	
    function prepares(choices)
    	if choices == 1 then
    		-------------control--------------------
    		gg.searchNumber('55;873', 16)
    		gg.refineNumber('55', 16)
    		control = gg.getResults(gg.getResultsCount())
    		gg.clearResults()
    
    		-------------health --------------------
    		gg.searchNumber('47;67', 16)
    		gg.refineNumber('47', 16)
    		health = gg.getResults(gg.getResultsCount())
    		gg.clearResults() 
    
    		-------------energy --------------------
    		gg.searchNumber('666;32;47', 16)
    		gg.refineNumber('47', 16)
    		energy = gg.getResults(gg.getResultsCount())
    		gg.clearResults()
    
    	elseif choices == 2 then
    		-------------control--------------------
    		gg.loadResults(control)
    		gg.editAll('-55', gg.TYPE_FLOAT)
    		gg.clearResults()
    		
    		-------------health --------------------
    		gg.loadResults(health)
    		gg.editAll('0', gg.TYPE_FLOAT)
    		gg.clearResults()
    		
    		-------------energy --------------------
    		gg.loadResults(energy)
    		gg.editAll('999', gg.TYPE_FLOAT)
    		gg.clearResults()
    	
    	elseif choices == 3 then
    		-------------control--------------------
    		gg.loadResults(control)
    		gg.editAll('55', gg.TYPE_FLOAT)
    		gg.clearResults()
    		
    		-------------health --------------------
    		gg.loadResults(health)
    		gg.editAll('47', gg.TYPE_FLOAT)
    		gg.clearResults()
    		
    		-------------energy --------------------
    		gg.loadResults(energy)
    		gg.editAll('47', gg.TYPE_FLOAT)
    		gg.clearResults()
    	end
    end
    
    
    knxs = false
    while true do
    	if gg.isVisible(true) then
    		knxs = true
    	else
    		knxs = false
    	end
    	if knxs == true then
    		menus()
    	else
    		gg.setVisible(false)
    	end
    end

    ---

  17. [ @_yourram ]
    ---

    Quote

    well bro where can I know more functions about the script?   

    Always read our documentation here: gg documentation. But yeah, I will explain the script:

    --Searching float: 140
    gg.searchNumber('140', gg.TYPE_FLOAT)
    --Get the results (gg.getResullts()) from how many results found (gg.getResultsCount())
    results = gg.getResults(gg.getResultsCount())
    --If the results is NOT empty then do these:
    if results ~= nil then
    	--Store modified values
    	edits = {}
    	--Enumerate the 'results': {{blah},{blah}}
    	--In lua, {{blah},{blah}} is equal to {[1]={blah},[2]={blah}} following on how 'array' works in other programming language
    	--'key' refers to: "[1]", "[2]" and so on. 'value' refers to: {blah} and so on.
    	--'value' tables contain: {address, value, flags}
    	--'ipairs' is function that enumerate 'key' and 'value' from a table, 'pairs' is function that enumerate ONLY 'key'.
    	for key, value in ipairs(results) do
    		--Store table into 'edits' table with position (edits[position]): total item in 'edits' table (#edits) + 1
    		edits[#edits + 1] = {
    			--Passing value of 'address' from 'value' table
    			address = value.address,
    			value = '17',
    			--gg.TYPE_FLOAT = 16
    			--Passing value of 'flags' from 'value' table
    			flags = value.flags
    		}
    	end
    	--Apply the value 'edits' table into memory
    	gg.setValues(edits)
    	--Save the 'edits' table into game guardian saved list.
    	gg.addListItems(edits)
    end

    ---

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.