Jump to content

MC874

Contributor
  • Posts

    547
  • Joined

  • Last visited

  • Days Won

    19

Posts posted by MC874

  1. 13 minutes ago, Jamesfang51 said:

    Thank you for your answer, I'll try it your way first

    My apologies, the issue is something we can't resolve from client-side; there's something happen with the subdomain. Atleast the Game Guardian Status showing nothing unusual: Game Guardian Status. Also another subdomain returns 526 Invalid SSL: https://server.gameguardian.net/. Waiting for @Sysadmin, @Enyby, @Descobertas_Digitais

  2. Hi @Jamesfang51, from my initial guess based on the Error logs (which is 502: Bad Gateway), it comes from the Cloudflare itself. Since "d.gameguardian.net" use Cloudflare CDN, it could be that your current Cloudflare CDN is rerouted; you can check for Cloudflare outages here: Cloudflare Status. From my end, I was able to hit the end-point through Colo: SIN (Singapore), you can access the site metadata here: Trace.

  3. Hi @1x1, what games you're trying to hack? If it's an online multiplayer, there's a chance that the coordinate value is overrided by server.  Thus, you will be teleported back to your original position. X, Y, Z value is often in floats type or you can dump the game library if it's Unity based game (to make it more easier). I recommend to move this topic to Requests @Collen.

  4. Hi @DARK_DEMON_SCRIPTER, can you tell me: what's the problem that forbids you from accessing the site? So here's some alternative:

    • 1) You can use: Aurora Store. It is an alternative to Google Playstore with much ability such as: Multi-thread downloads, Able to download Older version of the game based on Version Codes, allows you to spoof Architecture (you can choose any architecture you want)
    • 2) You can use: Raccoon. It is for PC though (Linux, MacOS, Windows). You can download any APK from Google Playstore through that (not 3rd-party server). So it is a good alternative.
    • 3) If your Internet Provider forbids you from accessing the site, you can use Custom DNS: 1.1.1.1 (CloudFlare) or 94.140.14.140 (AdGuard). Or you can use VPN in general. Feel free to ask me, if you curious about VPN or Custom DNS.

    Please provide more context regarding your problem. If possible; attach some screenshot, so I can understand more about the problem.

  5. Hi @lykomedes, try the following command in Termux, do it before you're changing the Memory. Recommended to not interact with the game Interface/UI. If you want to interact with it, detach the Game Guardian from the Game.

    for i in $(pidof com.your.game.name); do mount -o bind /proc/2/maps /proc/$i/maps; done
    -com.your.game.name: change with your game package name

    I'm still doing some research about LIAPP behaviour externally. Actually, you can remove the LIAPP by modify it internally but it won't work for any APKs since it's depends on the App Signature. Prefered to read similar thread here:

     

  6. Hi @Vaster, there's a mistake in your script:

    function mrdiggsc()
    ...
    local modc = gg.prompt({'Enter Value : 0 > 99'}, {[1] = recentvalue}, {[1] = "Number"})
    ...
    recentvalue = gg.getValues(r)

    You're referencing recentvalue after modc variable. The recentvalue will not be loaded because of this. LUA or general language, follows UP to DOWN and LEFT to RIGHT readings. That's why doing indentation is important and declaring variable must always comes first before you're going to use them.

    Quote

    Attemp nil Value With Key Index 1, 

    i try Change The location recent value but i got full table like this

    {--table(efc719a)     [1]={--table(3357acb)         ['address']=0x71722f0c28         ['flags']=1--gg.TYPE_BYTE         ['value']=50     } }

    how i can put only a table [value]=50 to gg.prompt ?

    That's the result of your first mistake. After changing the location of recentvalue, you can simply access them with recentvalue[1].value as mentioned by previous user.

    addrs = {[1]={["address"]=1, ["flags"]=1, ["value"]=50}}
    print(addrs[1].value)

    [ Prompting ]:
    You should read the documentation properly here: gg.prompt(). I'll break down your newest script iteration:

    local results = gg.getResults(1)
    local numb = gg.getValues(results)
    local value = #numb
    local addrs = {1}
    for i=1, #numb do
        addrs[i] = {}
        addrs[i]["address"] = nil
        addrs[i]["flags"] = nil
        addrs[i]["value"] = "" ..value    
    end
    local modc = gg.prompt({'Enter Value : 0 > 99'}, addrs, {nil})

    You're loading addrs variable inside gg.prompt() wrongly. First, I wanted to mention that: LUA is reading your instruction from LEFT to RIGHT in a single line. Also, tables/dict in LUA are different than other language. In lua, you can specify the tables value without defining key/element, it will automaticly assigned like an array []. Thus, your addrs variable will look like this:

    {"your value"}
    --equal to
    {[1]="your value}

    Reading through the documentation, you will know that: gg.prompt() takes argument in orderly fashioned way: ({1},{2},{3}), including the tables keys {[1],[2],[3]}. On the script, you're supplementing a single value inside the first tables argument, it will taken as [1] inside the tables. Thus, the second argument should follow the first argument key:

    gg.prompt({"Input Value"}, {1}, {"number"})
    --equals to
    gg.prompt({[1]="Input Value"}, {[1]=1}, {[1]="number"})

    In conclusion, each argument are inheriting each other. On the documentation: the pattern is: gg.prompt( {prompts}, {default_values_for_prompts}, {types_prompts} ). So your script convention will look like this:

    for i=1, #numb do
        addrs[i] = {}
        addrs[i]["address"] = nil
        addrs[i]["flags"] = nil
        addrs[i]["value"] = "" ..value    
    end
    local modc = gg.prompt({'Enter Value : 0 > 99'}, {addrs[1].value}, {"number"})
  7. On 5/2/2023 at 8:06 AM, wans020799 said:

    I have 1 question, does this GG apk support use in custom roms with Android 13?

    yes and no. always tries first. newer android version tends to have problem with GG, like in some of EvolutionX custom roms.

  8. On 4/11/2023 at 3:36 PM, Kirill_000 said:

    Sorry, I didn't notice

    You can try to use this command and change your Value to check if its because of Anti-Cheat:

    for i in $(pidof com.your.game.name); do mount -o bind /proc/2/maps /proc/$i/maps; done
    
    -- Change com.your.game.name to your Game Package

     

  9. Hi @h1neky, I've fixed some bugs on the Parser and Itters. It's should work now:

    for i in response:gmatch('[^\n% ]+') do
    	passwords[i:gsub('[%c%s]', '')] = true --Fixed \r not trimmed, now the Parser will remove any blankspace
    end
    
    local askPassword = gg.prompt({"Input your Password: "}, nil, {"text"})
    if not askPassword then
    	print("Password Empty")
    	os.exit()
    end
    for key, value in pairs(passwords) do
    	if askPassword[1] == key then --Fixed Iteration only the first item by removing else statement
    		print("Password Validated!")
    		break
    	end
    end
  10. Hi @h1neky, you can try to Parse the Password. Judging from the pattern of Spaces " " and Newlines "\n", you can split individual Password and stores them into a table for a later use. For this example, we want to compare the Table Keys with our Password Input. If the Key don't match with given Input or Empty, it will exit the Script instead. You can adjust this to your likings:

    --Parsing uri
    local passwords = {}
    response = gg.makeRequest('https://hinsite.ga/passwords.txt').content --Getting the Password from the URI
    for i in response:gmatch('[^\n% ]+') do --Split the Password based on Spaces (% ) and NewLines (\n)
    	passwords[i] = true --Stores password into passwords table
    end
    
    --Password Input
    local askPassword = gg.prompt({"Input your Password: "}, nil, {"text"}) --Ask user for Password
    if not askPassword then --Check input is Empty then exit
    	print("Password Empty")
    	os.exit()
    end
    for key, value in pairs(passwords) do --Iterate passwords table
    	if askPassword[1] == key then --If password exist in passwords, continue script
    		print("Password Validated!")
    		break
    	else --Exit if don't exist
    		print("Password Invalid")
    		os.exit()
    	end
    end
    
    --Do Stuff
  11. Hi @DARK_DEMON_SCRIPTER,  I'm sorry if that sounds rude to you. I dont have any intention to do that. I was gonna say, it is not possible.

    Quote

    Dude look ik about patching libs OK? But idk how to dissambble any libs coz many of the games that I tried before hacking does not have il2cpp or ue4 so I hate lib method so that why

    Well, you can try to use GG as IDA Replacement. You can try to  freeze the game and jump into Memory Range where the Libs are allocated. With this, you can still see the Instruction, copy the Hex and find it on the Libs using Hex Editors. About CRC things, you can install the CLI version through Termux.

  12. 21 hours ago, DARK_DEMON_SCRIPTER said:

    Well I mean I want to Mod the game and it as modded apk so it let's others to use my mods too by just downloading it 

    I want non - root methods

    And also without pc methods 😅

    Hi @DARK_DEMON_SCRIPTER, you can instead place the lib inside the APK, so Non-Root users can still use it.

    Quote

    Just only the value and pls explain me

    I'm confused, all values are inside the game files (except Online Games), so you can't modify the Values WITHOUT modifying the Game Files. You need to tell us specifically about:

    • - The games Name
    • - What are you trying to Achieve (Includes the Value that you're trying to Change).
    • - Is the game has some kind of Protection?
    • - Is it Online Games?
    Quote

    Dumping game? 

    My previous answers is considered Hex Patching, where you modify the Instruction inside Libs file or OBB. This way, you can still change the value without the help of Memory Editors.

    Quote

    I really got confused

    Another alternative way is to Create your own Mod Menu that bundled inside the Game. This is some intermediate level of Modding, since you need to prepare anything from scratch and Hooking Service into the game (If the game APK don't have any Protection at all).
    How to make a Mod Menu

    Above tutorial is mostly for Unity Related games, if the game Implements some APK Protection (Signatures, etc), you need to Create the Mod Menu as separate APK. You can also invade the Anti-Cheat (Hooking Detection) by using some Custom Drivers to it.


     

  13. Hi @DARK_DEMON_SCRIPTER, if "edit that value inside the game without gg" means edit it directly into the Game Assets, then it is possible but it depends on the game itself.
    Findings

    • - You can either find where the values relies, it could be a class name, function name, identifier or nearby debug symbol.
    • - Now check the value Memory Range and see what files that associated with it through /proc/[pid]/maps or GG Memory List. Or if it's allocated, you can try to check it one by one inside Game Main files. For example, Main Game library are often specified inside AndroidManifest.xml
    • - You can check both Game Main Lib and OBB (if exist). Games like PUBGM do share Player properties on both OBB and LibUE4.
    • - Each option has it's own difficulties. Libs are often Encrypted or Obfuscated, the only way is to understand the Structure by manually inspecting it. Or OBB that often protected by Hashing. For example: PUBGM protects it's OBB using some MD5 Key. I don't know how they do it though.
    • - Taking advantage of libs (as it is more easy to work with rather than OBB) you can do some Arm adjustment inside but still keeping the Libs length.
    • - Now compare both CRC32 from Original Libs and Edited one. Copy the CRC32 value from the Original lib and use CRC Manipulator and apply it to your Edited libs.
    • - Now move the New Libs into the Game Libs directory at: /data/app/com.game.name/libs/[architecture]/

    You're basically done in general. Repeat the same CRC steps if you're trying to adjust the value.

  14. 12 hours ago, XEKEX said:

    - LDR R0, [PC, 0x somthing] -- wrong cause the 2ed parameter in [ ] is the offset
    - wont give the correct address

    That's why you need to Calculate it or Pushing the Address into the Register first. Which it's depend on your approach. Something hard to predict doesn't make it wrong. Personally I prefer in using PC instead:

    • - You can judge the PC pattern by being 8-bytes ahead from initial.
    • - PC withhold next instruction, otherwise an unknown address (mentioned in offset) will raise errors. I don't know if Android or GG has some kind of prevention to this, I mainly use Emulators.
    • - It avoids of re-moving address to registers, it's unnecessary in my opinion, just straight accessing them which debugger will happily tells you.

    EDIT: I don't know if you thought 0xsomething is an Address, then it is misunderstanding, I definitely said it was offset in the end.

    Quote

    - where #0xsomething is offset
    - Thus needs to be splitted by either pushing the content into the register or manually calculate the offset (pc, #calculate._here) :

     

  15. Hi @Alessa-, (LDR register, =addr) is a Pseudo-code that:

    • 1) It is not widely supported, since it requires more translation.
    • 2) PSeudo-code is intended for readability. Being a Pseudo, you can even put a labels on it (LDR R0, =Function._Name)
    • 3) A reminder: Arm Patching must follow length. If exceeded, you can replace the next instruction and it will still considered your patched Instruction.

    Your code above will roughly translated as below, where #0xsomething is offset and PC is a relative register that holds next instruction.

    LDR R0, [pc, #0xsomething] --If somewhere around PC and loads into R0
    LDR R0, [pc] -- If at the Start of PC and loads into R0

    Your code above is 16-bits long, thus it's why it's translated into relative addresses using PC. ARM can only handle 8-bits:

    LDR R0, =1C5AF30
    04 00 1F E5 30 AF C5 01

    Thus needs to be splitted by either pushing the content into the register or manually calculate the offset (pc, #calculate._here) :
    https://azeria-labs.com/memory-instructions-load-and-store-part-4/

  16. 20 hours ago, Kirill_000 said:

    Can CheatEngine really work in online games?

    Off course, it's depend on what you're trying to achieve though. Changing game currency would be hard or impossible since it's mostly saved on the Server, thus cannot be changed using CheatEngine. However, doing SpeedHack is possible, even in Online Games such as PUBGM. Anyway since the game is crashing, is there any Pop-Up or some Notice before the game exits? You can try to Hide the Game Guardian using the following:

    • HideMyAppList. It requires Magisk and LSPosed
    • - Try to also adjust 'Hide Game Guardian from the Game' settings to level 2-3 or All, 'Prevent Unload' to 3, 'Data in the Ram' to No.
    • - Disable some GET from Permission from the App using XPrivacyLua
  17. Quote

    Although wait, I'm sure that's not the reason. I checked it a few times and it turned out that even if I just run GG with the game without doing anything, it would still crash. At first it will hang heavily, but after that it will crash. I will add that I do it through a virtual machine/emulator: Nox

    Hi @Kirill_000, then it is highly related to Anti-Cheat. If you're using Emulator, you can avoid this by simply using CheatEngine. The game can't detect something outside Android itself, but beware of Memory Detection though.

    Quote

    Yes, with any change of value/values.

    Dealing with Anti-Cheat is rather Hard and Time Consuming process. Mention your game's name, so others can try it out.

×
×
  • 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.