-
Posts
630 -
Joined
-
Last visited
-
Days Won
13
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by nok1a
-
Thanks. Try now @alien420, @Khadimulislam: On 2/14/2024 at 12:44 AM, nok1a said: If your using 64 Bit download this script, should work: function class_Pointer() local range = gg.getRangesList("global-metadata.dat") -- get dll pointer UserProfile gg.setRanges(gg.REGION_OTHER) gg.searchNumber("h00 55 73 65 72 50 72 6F 66 69 6C 65 2E 49 6E 66 72 61 73 74 72 75 63 74 75 72 65 2E 64 6C 6C 00", gg.TYPE_BYTE, nil, nil, range[1].start, range[1]["end"]) -- UserProfile.Infrastructure.dll local char_UserProfile = gg.getResults(2) gg.setRanges(gg.REGION_ANONYMOUS) gg.clearResults() gg.searchNumber(char_UserProfile[2].address, gg.TYPE_QWORD) local pointerCheck = gg.getResults(1) gg.clearResults() -- get class pointer JourneyProgress gg.setRanges(gg.REGION_OTHER) gg.searchNumber("h00 4A 6F 75 72 6E 65 79 50 72 6F 67 72 65 73 73 00", gg.TYPE_BYTE, nil, nil, range[1].start, range[1]["end"]) -- JourneyProgress local char_Journey = gg.getResults(2) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber(char_Journey[2].address, gg.TYPE_QWORD) local t = gg.getResults(gg.getResultsCount()) for i, v in ipairs(t) do v.address = v.address - 0x10 end t = gg.getValues(t) local class_Pointer_JourneyProcess = {} for i, v in ipairs(t) do if v.value == pointerCheck[1].address then class_Pointer_JourneyProcess[i] = v.address end end gg.clearResults() return class_Pointer_JourneyProcess end local class_Pointer_JourneyProcess = class_Pointer() function field_numberOfCompletedJourney(input) local Level = input gg.searchNumber(class_Pointer_JourneyProcess[1], gg.TYPE_QWORD) local t = gg.getResults(gg.getResultsCount()) for i, v in ipairs(t) do v.address = v.address + 0x190 v.flags = gg.TYPE_DWORD end t = gg.getValues(t) local numberOfCompletedJourney = {} for i, v in ipairs(t) do if v.value == (tonumber(Level[1]) - 1) then numberOfCompletedJourney[#numberOfCompletedJourney + 1] = t[i] end end if #numberOfCompletedJourney == 0 then gg.toast("Level not found, did you input correct level?") gg.sleep(100) else local LevelSet = gg.prompt( {'Input desired Level to edit to'}, {[1]=''}, {[1]='number'} ) for i, v in ipairs(numberOfCompletedJourney) do v.value = tonumber(LevelSet[1]) - 1 end gg.setValues(numberOfCompletedJourney) gg.toast("Level set, go in game and back to lobby for apply the change visually") end gg.clearResults() end function start() local Level = gg.prompt( {'Input your current Level'}, {[1]=''}, {[1]='number'} ) if Level == nil then gg.toast("No input") else local nonNumb = 0 for i in string.gmatch(Level[1], "%U") do local char = string.byte(i) if char < 0x30 or char > 0x39 then nonNumb = nonNumb + 1 end if nonNumb ~= 0 then gg.toast("This is not a number") else field_numberOfCompletedJourney(Level) break end end end end while (true) do if gg.isVisible() then gg.setVisible(false) start() end gg.sleep(100) end
-
Ok, sorry for late reply. Yes they made some changes in the structure of the game. Will probably need to dump it again and see what they did. Although kind of questionable these request of levels hacks. It's like the devs are having their game cheated on purpose to then improve their security. But probably i am paranoid and the devs aren't watching here at all.
-
Personally i don't use it. I responded because i did not knew that GG had that specific menu. I would assume that pressing that question mark would give some explanation about how execution of script in GG works so i never pressed that button. Just like any other question mark symbol would give more info about the info that is present on the tab your on.
-
Did not knew that, thanks!
-
Does it also find libil2cpp registration offset?
-
So your not just performing pointer search on the class and then search the offset of the field?
-
I don't see any protection though. But thanks for posting the class. It avoided me dumping the game and made it no struggle for find. I dunno why field offset finder doesn't work, perhaps a script needs to be made. Offset 0x20
-
I'm not sure if that mobile dumper is designed to find registration offsets or if just there for the show (i'm saying because i never managed to dump a protected game with mobile dumpes before, and i also never saw the option to use registration offsets). You have to perform pointer search on the start address of the global-metadata.dat. You should get 2 pointers that are located pointer size under each other. one pointer size above it you find the Code andMeta registrations. Then just copy the values at those addresses and place them in the fields.
-
Why you leave the registration offsets empty?
-
I doubt anyone is here to look for a legitimate way.
-
I'm not sure, but probably they did local LO_O = gg LO_O.toast("test") I have no idea why the creator did that because you can still use "gg".
-
-
View File Gemdoku: Wood Block Puzzle Level hack. Make sure to go in match and finish a game, then level will be set. This is the game: https://play.google.com/store/apps/details?id=com.unicostudio.gemdoku Submitter nok1a Submitted 03/23/2024 Category LUA scripts
-
Provide more info. A video perhaps.
-
I mean, you didn't let NoFear help and just said you tried everything. Can't ask for help and say you tried everything. They don't work together. Just say what you tried. Then others can figure out what you haven't tried.
-
-
Word city Please help with cheating levels, I cannot change them
nok1a replied to gggdtfdyhn's topic in Requests
mobizen_20240301_034738.mp4 -
Script working great, but personal opinion but when using emulator the gg.getTargetInfo doesn't work so i did remove it otherwise i get error. But it's only for emulators i believe:
-
ah d***, forgot the post. Regardless, if you ever plan to change mind here is the solution: Word city Please help with cheating levels, I cannot change them (#2239t6n2)
-
I just find with GG and make some sense of it. Then find patterns that work again after restarting the game. I can't explain you how to find patterns. Just comes after repeating stuff again and again. At the end of the day for shooter games in which i seek in game hacks i still use basic search techniques: The only difference now is that i usually make a script for it instead of doing it all manually.
-
It was a mistake in the script, try this function class_Pointer() local range = gg.getRangesList("global-metadata.dat") -- get dll pointer UserProfile gg.setRanges(gg.REGION_OTHER) gg.searchNumber("h00 55 73 65 72 50 72 6F 66 69 6C 65 2E 49 6E 66 72 61 73 74 72 75 63 74 75 72 65 2E 64 6C 6C 00", gg.TYPE_BYTE, nil, nil, range[1].start, range[1]["end"]) -- UserProfile.Infrastructure.dll local char_UserProfile = gg.getResults(2) gg.setRanges(gg.REGION_ANONYMOUS) gg.clearResults() gg.searchNumber(char_UserProfile[2].address, gg.TYPE_QWORD) local pointerCheck = gg.getResults(1) gg.clearResults() -- get class pointer JourneyProgress gg.setRanges(gg.REGION_OTHER) gg.searchNumber("h00 4A 6F 75 72 6E 65 79 50 72 6F 67 72 65 73 73 00", gg.TYPE_BYTE, nil, nil, range[1].start, range[1]["end"]) -- JourneyProgress local char_Journey = gg.getResults(2) gg.clearResults() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber(char_Journey[2].address, gg.TYPE_QWORD) local t = gg.getResults(gg.getResultsCount()) for i, v in ipairs(t) do v.address = v.address - 0x10 end t = gg.getValues(t) local class_Pointer_JourneyProcess = {} for i, v in ipairs(t) do if v.value == pointerCheck[1].address then class_Pointer_JourneyProcess[#class_Pointer_JourneyProcess + 1] = v.address end end gg.clearResults() return class_Pointer_JourneyProcess end local class_Pointer_JourneyProcess = class_Pointer() function field_numberOfCompletedJourney(input) local Level = input gg.searchNumber(class_Pointer_JourneyProcess[1], gg.TYPE_QWORD) local t = gg.getResults(gg.getResultsCount()) for i, v in ipairs(t) do v.address = v.address + 0x18 v.flags = gg.TYPE_DWORD end t = gg.getValues(t) local numberOfCompletedJourney = {} for i, v in ipairs(t) do if v.value == (tonumber(Level[1]) - 1) then numberOfCompletedJourney[#numberOfCompletedJourney + 1] = t[i] end end if #numberOfCompletedJourney == 0 then gg.toast("Level not found, did you input correct level?") gg.sleep(100) else local LevelSet = gg.prompt( {'Input desired Level to edit to'}, {[1]=''}, {[1]='number'} ) for i, v in ipairs(numberOfCompletedJourney) do v.value = tonumber(LevelSet[1]) - 1 end gg.setValues(numberOfCompletedJourney) gg.toast("Level set, go in game and back to lobby for apply the change visually") end gg.clearResults() end function start() local Level = gg.prompt( {'Input your current Level'}, {[1]=''}, {[1]='number'} ) if Level == nil then gg.toast("No input") else local nonNumb = 0 for i in string.gmatch(Level[1], "%U") do local char = string.byte(i) if char < 0x30 or char > 0x39 then nonNumb = nonNumb + 1 end if nonNumb ~= 0 then gg.toast("This is not a number") else field_numberOfCompletedJourney(Level) break end end end end while (true) do if gg.isVisible() then gg.setVisible(false) start() end gg.sleep(100) end
-
Copy the code and place it in a file, the file should have the extension .lua, then execute with GG