-
Posts
484 -
Joined
-
Last visited
-
Days Won
15
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by kiynox
-
[ @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.
-
[ @angel88888 ] --- Might be related to newer Android restriction, perhaps try to disable phantom processes: Phantom --- * Process with procaution, might have bad side effects.
-
[ @kalibro ] --- It is likely caused by app detection, similar to LiApp or AppGuard. In this case, you need to hide GG from the game using Magisk modules: Shamiko HideMyAppList SafetyNetFix [MOD] Bootloader Spoofer ---
-
[ @Saaammii ] --- 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. --- It is a command to switch directory to current directory. --- 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
-
[ @1x1 ] --- What do you mean by this? Game Guardian is accessing application memory space, it is reading /proc. So if the game recognized the path difference, Game Guardian can also read it from memory. ---
-
[ @missmcp ] --- As I said above, I recommend to just use: Zygisk-Il2CppDumper (Magisk module): RuPauls-Dumper.zip
-
[ @THETWINSOFFICIAL ] --- The video got privated before. It is now fixed.
- 4 replies
-
- Dump
- Dump il2cpp
-
(and 3 more)
Tagged with:
-
[ @THETWINSOFFICIAL ] --- WHAT ---
- 4 replies
-
- Dump
- Dump il2cpp
-
(and 3 more)
Tagged with:
-
[ @Mari01d ] --- 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. --- 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. ---
-
[ @Aker666 ] --- I recommend to stop using any virtual apps in general, virtual machine is much better in terms of overall compatibility. Just grab VPhoneGaGa or others: - VPhoneGaGa - VMOS PRO --- If you still facing 'daemon' error, use: termux and execute these command: su setenforce 0 Then go inside Game Guardian --> 'Fix It' button --> Switch to work with SELinux ---
- 3 replies
-
- GameGuardian
- Need For Speed No Limits
-
(and 2 more)
Tagged with:
-
[ @derbeyonder ] --- 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. --- 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. --- 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) ---
-
[ @Fujimkad ] --- 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] ---
-
[ @Fujimkad ] --- 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.
-
How To change Cost/price of items .which we buy with real money.
kiynox replied to Mikey-GG's topic in General Discussion
[ @Unknownharry ] --- 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. --- This is very unlikely, as GG scripts only do read/write memory and cannot do beyond that. --- -
[ @Modingph ] --- Have you tried: gg.getRangesList('libil2cpp.so')[1].start gg.getRangesList('libil2cpp.so')[2].start Or is it related to hotfix? Idk, I'll check the game later. ---
-
[ @_yourram ] --- 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) ------------------------------- --- 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 ---
-
[ @_yourram ] --- 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 ---
-
[ @_yourram ] --- Currently no, you can just contact me here. I'm always available. ---
-
[ @_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.
-
[ @_yourram ] --- 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) ---
-
[ @_yourram ] --- 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) ---
-
[ @_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 ---
-
[ @_yourram ] --- 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 ---
-
[ @_yourram ] --- 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 ---