Jump to content

CmP

Contributor
  • Posts

    640
  • Joined

  • Last visited

  • Days Won

    43

Posts posted by CmP

  1. 33 minutes ago, TsunamiGame said:

    so exacly how do i make an logcat??

    On 5/14/2018 at 6:14 AM, Enyby said:

    Start GG, Press "fix it" button, select "record logcat", wait for restart gg, reproduce issue, close gg, sent logcat file to me.

    _______________________________________________
    added 0 minutes later

    Or record logcat via adb.

    How to collect logcat (#c1aa00vp)

    And send it to me.

     

  2. 50 minutes ago, Shuaiouke said:

    that's not efficient

    Have you tried it at least? I highly doubt that searching for 500 consecutive addresses and editing all of them to one value can noticeably slow down your script. So are you sure that it does not suffice because of performance reasons?

    1 hour ago, Shuaiouke said:

    anyone knows how to use a loop to edit addresses progressively

    As pointed out above, editing values one-by-one in a loop is very inefficient. This approach should be used instead, if simple one with fuzzy search does not suffice:

    On 2/3/2019 at 4:33 AM, Enyby said:

    2. Or. Build table with need values in loop and use setValues.

    Example of implementing it:

    local startAddress = 0x12340000
    local count = 500
    local editValue = '555444'
    local values = {}
    for i = 1, count do
      values[i] = {address = startAddress; flags = gg.TYPE_DWORD; value = editValue}
      startAddress = startAddress + 4
    end
    gg.setValues(values)
      

     

  3. @DESYROLLERSE, you can't blame someone for not being able/not wanting to learn by "trial and error" approach, when you are not able/don't want to do this yourself. Just remember how many times you asked me to "give you an example" (more like write the code for you)? It looked like you were not able to progress in developing your script without getting more and more "examples".

    2 hours ago, DESYROLLERSE said:

    If you want to learn use the help of 'gg' or ask in the forum.

    When I told similar thing to you last time, you were very angry, you were definitely thinking that I had to provide you everything you need when you ask for it. So since when you've started to agree with this statement?

    Looks like a clear example of hipocrisy and double standards.

  4. 2 minutes ago, BadCase said:

    yes if they have a password and it passes that first check with the SQL server they can then log the values retrieved from the database as the script runs, without a correct password the server would not return any of the variables, 

    That's what I was writing about, making it possible to "leech". But you probably don't need to worry about it, until there will be high demand on the code stored at the server.

  5. 1 minute ago, Krojzanovic said:

    then if makerequest uses the .x.jpg.png extension can it still be loaded? by compiler.

    Yep, file extension does not matter.

    2 minutes ago, Krojzanovic said:

    I use the .x.jpg.php extension if I upload the script to call it from makerequest.

    I tried it if I opened the script file I uploaded hosted.

    blank screen

    Show the code and contents of the file. Without this info noone will be able to help in this case.

  6. 29 minutes ago, NoFear said:

    Their isn't a "perfect" protection.

    Of course not, but in this case it does not even require medium level of "skill" or something.

    52 minutes ago, BadCase said:

    used in combination with things like logging the IP or other values which would be handled server side im fairly confident that they would not be able to bypass it

    I agree, the protection will be stronger, but.. you forgot to consider one thing. Potential "leecher" will be able to get the code received from the server by either modifying "makeRequest" function to print/save to a file returned value or by modifying "load" function to print/save to a file it's first argument. That's all, requesting info from the server is no more required, since the "leecher" got it. After this, it can be shared with anyone.

  7. 11 minutes ago, NoFear said:

    Yea, script could definitely check device id, and you can log device id with password that was attempted. Once it's been done once (the first time) you could probably consider that a "pair" and cannot be used by another id unless user contacts you.

    This approach looks good, but it won't guarantee protection against leechers. With some knowledge a potential leecher can easily get "ID" that is generated for his device, then just share this ID and the password to someone else. After this, "someone else" will be able to use the script by modifying "makeRequest" function to perform a "valid" (with correct ID and password) request to the server. The "leecher" even won't need to be bothered by how the ID and the request is generated, because simple modification of "makeRequest" function to print received arguments will do everything for him.

  8. 13 hours ago, noblack said:

    I've block offical hook as well,shhh...

    Log of using the script produced by slightly modified Script compiler:

    Spoiler
    
    gg.searchFuzzy()
    gg.searchFuzzy()
    gg.setVisible(false)
    gg.clearResults()
    gg.choice({ -- table(c8a8528)
    	[1] = '✨Anti-Ban(INSTA BAN IF USE)✨✨',
    	[2] = '✨cham✨✨',
    	[3] = '✨color✨✨',
    	[4] = '✨some function✨✨',
    	[5] = '✨insta hit✨✨',
    	[6] = '✨gun skin✨✨',
    	[7] = '✨exit✨✨',
    }) --[[ 3 ]]
    gg.multiChoice({ -- table(829833d)
    	[ 1] = 'Pink',
    	[ 2] = 'green',
    	[ 3] = '625 green',
    	[ 4] = 'rainbow',
    	[ 5] = 'while',
    	[ 6] = 'red',
    	[ 7] = 'green',
    	[ 8] = 'ca while(for 711)',
    	[ 9] = '845 red',
    	[10] = 'blue',
    	[11] = 'dark red',
    	[12] = 'back',
    }) --[[ { -- table(919534f)
    	[1] = true,
    	[2] = true,
    	[3] = true,
    } ]]
    gg.clearResults()
    gg.setRanges(gg.REGION_ANONYMOUS)
    gg.searchNumber("8E;2.5;6.0255834e-44::150", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
    gg.searchNumber("2.5", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
    gg.getResults(100)
    gg.editAll("-999", gg.TYPE_FLOAT)
    gg.toast("内部防封代码已注入")
    gg.clearResults()
    gg.setRanges(gg.REGION_BAD)
    gg.searchNumber("1.1490647e-41;1.0863203e-19::", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
    gg.searchNumber("1.0863203e-19", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
    gg.getResults(30)
    gg.editAll("1.0863203e-25", gg.TYPE_FLOAT)
    gg.toast("全网首发人物雷霆激光色")
    gg.clearResults()
    gg.setVisible(false)
    gg.searchNumber("69,778D;1,669,332,992D;11D", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
    gg.setVisible(false)
    gg.searchNumber("11", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
    gg.getResults(100)
    gg.editAll("32777", gg.TYPE_DWORD)
    gg.toast("全新绿人开启成功")
    gg.clearResults()
    gg.setRanges(gg.REGION_BAD)
    gg.searchNumber("3.50048899651;2.814536e-40", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
    gg.searchNumber("3.50048899651", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
    gg.getResults(10)
    gg.editAll("3", gg.TYPE_FLOAT)
    gg.setRanges(gg.REGION_ANONYMOUS)
    gg.toast("625绿色开启成功")

     

     

    13 hours ago, noblack said:

    I've add gg api checking in the script,

    and i'm gonna add full api checking in the future.

    Those checks are pretty useless, because all of them can be bypassed. Script that is executing another script can override any function used for limitations (such as "blocking hooks", "setting expiration time") there. For example, a script relies on "os.date" function to check expiration time, but the function surprisingly returns not the expected result, but "0" or something else that will make that check useless.

  9. 6 hours ago, Cornysz said:

    what do u mean block decrypt "LOAD" ?

    Calling "load" function with some meaningless arguments in a loop, so that logging arguments of the function call to a separate file will produce many files with junk contents.

    In fact, this does not "block" anything. Actual code (in compiled or non-compiled form) will still be logged to a file, if script contains it.

  10. @noblack, you forgot to delete the line

    3 minutes ago, noblack said:

    UI =-1

    in function "main".

    Also isVisible function does not accept arguments, so that "true" in this line

    6 minutes ago, noblack said:

    if gg.isVisible(true) then gg.setVisible(false) main() else gg.sleep(100) end

    is redundant. Moreover, this only works because of how Lua deals with extra arguments.

    From the Lua 5.3 reference manual (https://www.lua.org/manual/5.3/manual.html#3.4.11) :

    Spoiler

    Parameters act as local variables that are initialized with the argument values:

    
    	parlist ::= namelist [‘,’ ‘...’] | ‘...

    When a function is called, the list of arguments is adjusted to the length of the list of parameters, unless the function is a vararg function, which is indicated by three dots ('...') at the end of its parameter list. A vararg function does not adjust its argument list; instead, it collects all extra arguments and supplies them to the function through a vararg expression, which is also written as three dots. The value of this expression is a list of all actual extra arguments, similar to a function with multiple results. If a vararg expression is used inside another expression or in the middle of a list of expressions, then its return list is adjusted to one element. If the expression is used as the last element of a list of expressions, then no adjustment is made (unless that last expression is enclosed in parentheses).

    As an example, consider the following definitions:

    
         function f(a, b) end
         function g(a, b, ...) end
         function r() return 1,2,3 end
    

    Then, we have the following mapping from arguments to parameters and to the vararg expression:

    
         CALL            PARAMETERS
         
         f(3)             a=3, b=nil
         f(3, 4)          a=3, b=4
         f(3, 4, 5)       a=3, b=4
         f(r(), 10)       a=1, b=10
         f(r())           a=1, b=2
         
         g(3)             a=3, b=nil, ... -->  (nothing)
         g(3, 4)          a=3, b=4,   ... -->  (nothing)
         g(3, 4, 5, 8)    a=3, b=4,   ... -->  5  8
         g(5, r())        a=5, b=1,   ... -->  2  3

    Another thing is that value returned by "prompt" function needs to be checked (because the dialog may be cancelled, in some cases accidentally) as well as value that is stored in "Result[4]", but I suggest you to leave these improvements to be done by the author of the topic (if he needs them at all).

  11. 15 hours ago, AjYouTube said:

    It's not freezing 

    I can't understand what's wrong

    You need to learn Lua and GG API, because the result can not be achieved without knowledge.

    There are at least 2 mistakes in your script because of which "it's not freezing":

    1. Wrong usage of getListItems function.

    Incorrect usage:

    15 hours ago, AjYouTube said:

    gg.getListItems(t)

    Correct usage:

    local list = gg.getListItems()

    2. Using setValues function and expecting it to do the job of addListItems function.

    Incorrect (and even absurd) way to add items to the saved list:

    15 hours ago, AjYouTube said:

    t[1].value = '10000'

    t[1].freeze = true

    gg.setValues(t)

    Correct way:

    list[1].value = '10000'
    list[1].freeze = true
    gg.addListItems(list)

     

  12. Also that "UI" variable is redundant in your case. Don't use something just because others do it.

    Your main loop can be rewritten this way:

    while true do
      if gg.isVisible() then
        gg.setVisible(false)
        main()
      end
      gg.sleep(100)
    end

     

  13. 1 minute ago, YeetMeister said:

    I hope you get my Idea xD

    You need to explain that "idea" using words and not just drop some block of code. Noone here can read your thoughts. Moreover, quality of question/problem explanation affects receiving (or not receiving) answers more than anything else.

  14. 6 minutes ago, Enyby said:

    Ranges list update on every new search from scratch.

    Got it, thanks for the answer.

    I assume that this information will be helpful for other forum members as well, since the question is not so trivial.

  15. 53 minutes ago, Enyby said:

    Well, this function is indeed very useful, but the question is: does it return updated information about process memory regions (because this is what author of the topic has written about, I suppose). I tried to find an answer to this question and got the following results.

    Script that was used for testing:

    local function calcTotalSize(ranges)
      local total = 0
      for _, v in ipairs(ranges) do
        if v.state == 'Jh' or v.state == 'Ch' or v.state == 'Ca' or v.state == 'Cd' or v.state == 'Cb' or v.state == 'A' then
          total = total + (v['end'] - v.start)
          --print('start: ' .. v.start, 'end: ' .. v['end'])
        end
      end
      return total
    end
    
    local t1 = gg.getRangesList()
    print('Start')
    print('Count:', #t1)
    print('Size:', calcTotalSize(t1))
    
    gg.setVisible(false)
    while not gg.isVisible() do
      gg.sleep(100)
    end
    
    local t2 = gg.getRangesList()
    print('\nFinish')
    print('Count:', #t2)
    print('Size:', calcTotalSize(t2))

    Testing strategy:

    1. Select targeted process (to get updated info about it's memory regions).

    2. Launch the script.

    3. Perform something in targeted process to "trigger" memory allocation/deallocation.

    4. Click on GG floating icon.

    5. Analyze info from the script output.

    Script execution result:

    Spoiler

    Script ended:
    Start
    Count: 2328
    Size: 99520512

    Finish
    Count: 2328
    Size: 99520512

    Conclusion:

    Apparently, if I am not missing something, "getRangesList" function does not update info about process memory regions.

  16. 8 hours ago, Enyby said:

    1. Run search again if you need update found data.

    He probably meant info that GG receives when it is attached to the process.
    For example, list of memory regions, total "size" of process in memory, etc.

  17. Error handling for GG API functions template


    Note:
      This file is intended to be used by script developers.
      If you don't develop scripts or don't know what it is, ignore this file.

    Description:
      
    The file consists of three functions:
        - "attachHandler" function modifies a function in a way that when it returns a string, specified error handling function is called with that string as argument. It returns modified version of the function. This function should only be used on functions that return a string with error description when an error occurs. There is a list of such functions from GG API in the file.
        - "defaultHandler" function is an example of error handling function.
        - "testError" function (commented by default) "simulates" a function that has returned a string with error description, used for testing.

    How to use:
      1. Include contents of the file at the beginning of your code.
      2. Optionally create custom error handling functions. Error handling function has to accept 1 argument - a string with error description.
      3. Use "attachHandler" function to get modified version of the function and either redefine original function with it or store it in a new variable.
      4. Repeat step 3 for all desired functions.

    Examples: 

    -- Custom error handling function
    local function myHandler(errorText)
      gg.toast('Whoops, looks like something went wrong', true)
      gg.toast('Mysterious error: ' .. errorText)
      print('Description of the error that has occurred during script execution:\n' .. errorText)
    end
    
    -- Using default error handling function and redefining the original function
    gg.searchNumber = attachHandler(gg.searchNumber, defaultHandler)
    
    -- Using custom error handling function and storing modified function in a new variable
    local getResultsModified = attachHandler(gg.getResults, myHandler)
    
    -- If an error occurs, "defaultHandler" function will be called
    gg.searchNumber('123', gg.TYPE_DWORD)
    
    -- If an error occurs, no error handling function will be called
    local results1 = gg.getResults(100)
    
    -- If an error occurs, "myHandler" function will be called
    local results2 = getResultsModified(100)

     

  18. 11 hours ago, CyrA said:
    • 2nd issue, major bug:

    If "gg.clearResults()" is uncommented, the following "gg.searchNumber()" will do nothing exactly half of the time. Always calling gg.clearResult() before gg.searchNumber() is an undocumented workaround to avoid this bug which could be easily fixed by including gg.clearResults() in the beginning of gg.searchNumber().

    This is not a bug, it is supposed to work like that. 
    Refer to description of "searchNumber" function in GG help: https://gameguardian.net/help/classgg.html#a7efd4ac7766e72688cb4a84a3915721e

    Quote

    If no results in results list then perform new search else refine search.

    So if you need new search, make sure to clear results list first.

  19. 38 minutes ago, nalcwap said:

    what app to logcat without root

    This question is quite common on the forum. Here are possible options:

    On 5/14/2018 at 6:14 AM, Enyby said:

    Start GG, Press "fix it" button, select "record logcat", wait for restart gg, reproduce issue, close gg, sent logcat file to me.

    _______________________________________________
    added 0 minutes later

    Or record logcat via adb.

    How to collect logcat (#c1aa00vp)

    And send it to me.

     

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