Jump to content

nok1a

Contributor
  • Posts

    660
  • Joined

  • Last visited

  • Days Won

    15

Everything posted by nok1a

  1. I don't know, I would pick a game and do something simple like look for ammo value and change it with GG manually. Then try to make a Lua script for it. Download a simple Lua script from the forum and try to understand how it is making changes to the game. There is some nice documentation we use: https://gameguardian.net/help/classgg.html
  2. Oke, i think there is a lot to fix. I can test it if needed before you update. This code is for sure ruining the result it self: code=code[1].value-xAPEXx[*****] code=string.format("%X",tostring(code)) if not v.x64 then code=string.sub(code,-8,-1) find0=nil find0=string.find(code,"0") if find0~=nil and find0==1 then code=string.sub(code,-7,-1) end find0=nil find0=string.find(code,"0") if find0~=nil and find0==1 then code=string.sub(code,-6,-1) end end print("Code = 0x"..code) meta=meta[1].value-xAPEXx[*****] meta=string.format("%X",tostring(meta)) if not v.x64 then meta=string.sub(meta,-8,-1) find0=nil find0=string.find(meta,"0") if find0~=nil and find0==1 then meta=string.sub(meta,-7,-1) end find0=nil find0=string.find(meta,"0") if find0~=nil and find0==1 then meta=string.sub(meta,-6,-1) end end print("Meta = 0x"..meta) Also why checking if the libil2cpp.so library exists. It's irrelevant i think because your only using the global-metadata.dat.
  3. Yes, and it doesn't match.
  4. Not sure but is this supposed to be the metadata/lib registration of when you extract the files from the apk instead of dumping with GG at runtime? If it's supposed to be at runtime these offsets are not correct. It's a 64 bit game
  5. Can you 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 + 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
  6. 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
  7. 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.
  8. 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.
  9. Did not knew that, thanks!
  10. Does it also find libil2cpp registration offset?
  11. So your not just performing pointer search on the class and then search the offset of the field?
  12. 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
  13. 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.
  14. Why you leave the registration offsets empty?
  15. You get error?
  16. I doubt anyone is here to look for a legitimate way.
  17. 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".
  18. Version 1.0.0

    196 downloads

    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
  19. 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  
  20. nok1a

    Device ban

    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.
  21. Would be good to have it work for emulators. The dumping of libil2cpp.so. Otherwise i need to do it manually or install the game on the phone and use script and transfer the files to the pc. libil2cpp.so global-metadata.dat
  22. nok1a

    Coromon

    https://studio.zerobrane.com/doc-installation Pointer search and offset calculation. Check the script(if it still works). It's open source.
  23. 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:
  24. 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)
  25. 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.
×
×
  • 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.