Перейти к содержанию

MasterGH

Ветераны
  • Постов

    2 999
  • Зарегистрирован

  • Победитель дней

    129

Сообщения, опубликованные MasterGH

  1. Cheat Engine 6.2 Beta 6 (Fri Apr 20, 2012)

    Ultimap has a minor change

    auto assembler highlighting has been improved

    some minor improvements to the structure viewer

    the d3dhook interface has been redesigned (old lua scripts won't work)

    hidden feature: ctrl+alt+shift+l in the mainform now opens the lua engine window

    hidden feature: ctrl+d in the mainform opens the dissect data

    networked rpm now deals with disconnects due to errors better

    Added the option to add a stackview address to the structure viewer and lock the state to what it was when the stack snapshot was made

    and some other minor stuff here and there

    О себя добавлю, что это далеко не все изменения. Более подробно см. SVN от даты предыдущей CE Beta 5.

    Появились функции на Lua по работе со структурами, что позволит автоматизировать многие вещи по сравнению структур, делать сохранения промежуточных данных, анализирование и извлечение информации из структур до бряка, после бряка, с остановкой процесса или после неё... Всё что ваша "извращённая" :) фантазия пожелает.



    getStructureCount(): Returns the number of Global structures. (Global structures are the visible structures)
    getStructure(index): Returns the Structure object at the given index

    createStructure(name): Returns an empty structure object (Not yet added to the Global list. Call structure_addToGlobalStructureList manually)

    structure_getName(structure)
    structure_setName(structure,name)
    structure_getSize(structure): Calculates the size of the structure
    structure_getElementCount(structure): Returns the number of elements in this structure



    structure_getElement(structure, index): Returns a structureElement object (Changing offsets can change the index)
    structure_getElementByOffset(structure, offset): Returns a structureElement object where the specified offset is at least the requested offset


    structure_addElement(structure): Adds a new blank structureElement and returns it
    structure_autoGuess(structure, baseaddresstoguessfrom, offset, size)

    structure_beginUpdate(structure): Call this when you want to make multiple updates to a structure. It will speed up the update process
    structure_endUpdate(structure): Call this when done
    structure_addToGlobalStructureList(structure): Add this to the list of structures for the user to select from. (Global structures will get saved to the table)
    structure_removeFromGlobalStructureList(structure): Remove from the list of structures.

    StructureElement class: (Inheritance: Object)
    structureElement_getOwnerStructure(se): Returns the structure this element belongs to
    structureElement_getOffset(se): Returns the offset of this element
    structureElement_setOffset(se, offset): Sets the offset of this element
    structureElement_getName(se): Returns the name of this element
    structureElement_setName(se, name): Sets the name of this element (tip: Leave blank if you only want to set the name of the variable)
    structureElement_getVartype(se): Returns the variable type of this element (check Variable types in defines.lua)
    structureElement_setVartype(se, vartype)
    structureElement_getChildStruct(se)
    structureElement_setChildStruct(se, structure)
    structureElement_getChildStructStart(se)
    structureElement_setChildStructStart(se, offset)
    structureElement_getBytesize(se): Gets the bytesize of the element. Usually returns the size of the type, except for string and aob
    structureElement_setBytesize(se, size): sets the bytesize for types that are affected (string, aob)
    Structure class: (Inheritance: Object)

  2. Ну я не спросил вас писать все за меня.

    А просто написать как это сделать без какого либо кода.

    Это можно сделать написав программу. Это ответ на твой вопрос без "какого-либо кода". Ты же сам понимаешь, что это ответ ни о чём. И все кто читал твой первый пост восприняли его как помочь и рассказать словами, то что нужно писать на языке программирования. В твоём случае тебе нужно публиковать исходный код всей программы (которую ты пишешь) "от и до" и писать, что у тебя не получается.

  3. На форуме изменен список званий репутации. Теперь он выглядит так:

    4. Lamer

    8. Newbie

    16. Novice

    ...

    И да, кстати, отсутствие какой-либо активности на форуме в течение месяца автоматически будет понижать текущий уровень репутации на 32 пункта.

    Заход в регу и создание поста в течении месяца считается этой самой "какой-либо активностью"? Что минимально нужно для активности?

    Звание Lamer это как-то с "принижением"... я бы заменил на что-то более похоже как на не проявление активности на Английском сленге "инертный", "мало активный". Дело в том, что человек который набрал когда-то 20-32 пунктов, а потом месяц вообще на форум не заходил станет "ламером" ?! С чего же он ламер, если по каким-то обстоятельствам не посещал форум - может быть у него просто не было время.

    По поводу снятия пунктов каждый месяц. Не могу дать конкретную оценку, что это правильно или неправильно. Пока не понятно о какой "минимальной активности" идёт речь(первый вопрос). С одной стороны это даст возможность новым людям побыстрее догнать тех кто мало активен и попасть в ТОП10, в котором люди уже "расслабились". Но с другой стороны, те кто явно потом и кровью "копил эти баллы" и рассчитывал, что они за ним закреплены и не будут уменьшаться. Ну... не знаю это может расстроить некоторых пользователей.

  4. M4K, да какая разница :). Просто я ошибся. Очевидно, что от перемены мест "из чего" во "что" суть не поменяется, кроме алгоритма. Извини, я готовое решение давать не буду - ты же сам понимаешь, мне это ненужно. Кому надо те запустят CE для ce-файлов. Кому надо Artmoney те запустят Artmoney. А конвертеры писать это бесполезное дело. По конкретным вопросам я подскажу, по общим подсказал. Ну а дальше, "делайте самостоятельно"

  5. 1) Изучаешь формат данных .СЕ и .amt в текстовом редакторе (надеюсь там везде текст, а не бинарная кракозяба). Если кракозяба, то изучаешь в hex-редакторе;

    2) Строишь алгоритм перевода из одного формата в другой;

    3) Пишешь программу чтобы на входе был *.amt а на выходе *.CT;

    Программу можно написать на любом языке программирования, который позволит читать/записывать файл по указанной директории.

  6. >>Можно ли сейчас автоматически конвертить в CE таблицы Cheat Engine (.CT) в таблицы для ArtMoney (.amt)?

    Если в CE таблицах есть данные адресов и указателей, то можно. Если есть АА-код или есть Lua-код, то дело значительно усложняется вплоть до невозможности выполнить поставленную задачу, если только не делать модернизацию Artmoney в виде "отладочного" плагина.

    >>Наоборот вроде можно (.amt в .CT)?

    Тут особых проблем не будет... Просто надо уныло и и наверно долго писать программу перевода. Т.е. ничего сверхсложного.

  7. Мы откуда знаем почему вырубается?! :)

    В гадалки играть :) или за тебя делать?? :)

    Вот помощь, которой необходимо и достаточно по виду данного вопроса. Проверяй в отладке в Visual Studio :) Не знаешь как работать в отладке ищи информацию об этом в Интернете :)

    Если будут данные по отладке ты сможешь сам понять ошибку или эти данные предоставить сюда. И тогда не только у меня, но и у остальных будет больше представления о проблеме.

  8. Предложения по форуму с моей стороны:

    1) Добавить виджеты:

    Последние темы Форума "Трейнеры"

    Последние темы "Скрипты и Таблицы"

    2) Включить функцию запрета дабл-постинга. Два близких сообщения автоматически соединять.

  9. Ты единственный, кто круче варенного яйца)) У Руслана, как и у меня (что вполне заслужено для меня) по нулям))

    Ты Xipho-не обижай... и мне совсем не лестна эта оценка :) Ты сам понимаешь, что высокий рейтинг у Админстрации был только малой мерой принятой для того чтобы Администраторам ничего не ставили.

  10. ANT' date='14 Март 2012 - 20:25' timestamp='1331731504' post='7354']

    Только после (де)активации скрипта нужно нажимать кнопку 2 раза для вступления изменений в силу, что не очень красиво.

    Жду продолжений ваших трейнми (если есть такие планы), только что-нибудь сложней.

    Сложность тут всё-таки это не главная цель. :) Очевидно, что цель была показать наглядный пример как сделать бессмертие только для своего игрока и как это сделать скриптами на Cheat Engine. Хорошо, что этот пример и прост, и одновременно чем-то хорошо похож на то, что может встретиться в играх.

    Сделать другой такой трейнерми чтобы он был и сложнее и похож на существующие проблемы в многих играх будет сложно. Было дело я видел трейнми настолько закрученные, что это превращалось в экзотику, которую в играх я не видел даже. Это называется угробить своё время на создание трейнми решение которого используется очень редко. Могут быть, правда, маньяки, которые любят полазить в отладке и им все равно что им подсунут :lol:

  11. Могу добавить одно. Игра исполняется виртуальной машиной Явы. Отсюда танцы с бубном :grin: Поэтому я думаю, что даже найти адрес счётчика ресурсов проблематично. Я не нашёл не 4, 2, 1 байтами. Текст не искал.

    Помнится есть декомпиляторы jar файлов. Вот и поковырять им minecraft.jar с перекомпиляцией наверно будет проще чем искать адреса или пытаться изменить код.

  12. Это из-за Юникода. Дописывай префикс "L" или отключи Юникод в свойствах проекта

    L"3D Pinball for Windows - Space Cadet"

    Также предвижу ошибку об отсутствии предкомпилированного заголовка. Также отключается в свойствах проекта. Иначе придётся писать этот предкомпилированный заголовок вручную.

  13. А как именно не работает? Как ошибка вылазит, если вылазит?

    1) Если вылазит сообщение "Игра должна быть запущенна до трейнера", то может быть в названии окна есть какие-то проблемы с русскими символами, если они там есть.

    2) Сделай аналогичные сообщения для проверки ProcessId, Handlewindow.

    Проверь WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write) на исключение. Если исключение возникает выведи мессагу. Возможно у адреса защита от записи. Или блокировка Антивирусом.

    3) Потом мне не нравится GetMem c переменной buf, т.е. вот эти манипуляции.

    GetMem(buf,1);

    buf^ := Chr(PokeValue);

    //...

    FreeMem(buf);

    Проверь существует ли действительно адрес buf

    4) Я точно не помню, но кто знает, может WriteProcessMemory не успевает выполнится по каким-то причинам и тут же идёт сразу FreeMem(buf) и CloseHandle(HandleWindow);

    5) Может быть нужно какие-то параметры компиляции поставить. 6) Может быть требуется присутствие каких то dll-ок. См. пункт 5

    Короче поставь мессаги на каждой функцией. И обверни блок кода от begin до end в обработку исключения с выводом мессаги о об этом исключении. Можно также извлечь информацию об этом исключении используя WinAPI. К сожалению я не буду заниматься тестированиями. Подсказал чем смог. Ещё предлагаю поискать примеры на дельфи без  GetMem ->  FreeMem...

  14. Еще вопрос :) Почему на некоторых ОС не работает трейнер? Т.е. адреса все совпадают, но на нажатие кнопки никак не реагирует?

    Нужно больше конкретизировать. Мы же не телепаты.

    Какой трейнер и для какой игры? Есть ли исходный код? Какие операционные системы? Как было определено, что адреса совпадают, когда нажатия кнопок не срабатывают?

  15. Если я не ошибся, то этот вариант программы будет лучше построен:

    --------------------------------------------------
    --[[
    Фризер процесса.
    клавиши:
    HOME - включает (но не морозит), просто "взводит курок"
    END - отключает (размораживает процесс если был заморожен)
    F4 - морозит процесс
    SPACE - морозит с задержкой указанной в sleep(8000) = 8сек.
    Клавиши и задержки можно менять и дописывать при необходимости по аналогии.
    * Перед "употреблением" это примечание удалить (т.к CE не любит кирилицы)
    --]]
    ---------------------------------------------------
    function checkEnd(timer)
    if not enableHotkey and isKeyPressed(VK_HOME) then
    enableHotkey = true
    else
    if enableHotkey then
    if (isKeyPressed(VK_END)) then
    enableHotkey = false
    unpause()
    else
    if (isKeyPressed(VK_SPACE)) then
    sleep(8000)
    pause()
    else
    if (isKeyPressed(VK_F4)) then
    pause()
    end
    end
    end
    end
    end
    end

    enableHotkey = false
    tEnd=createTimer(nil)
    timer_setInterval(tEnd, 100)
    timer_onTimer(tEnd, checkEnd)
    timer_setEnabled(tEnd, true)

  16. VirtualAlloc / HeapAlloc / malloc / new

    Первый вариант объяснения:

    Each API is for different uses. Each one also requires that you use the correct deallocation/freeing function when you're done with the memory.

    VirtualAlloc

    A low-level, Windows API that provides lots of options, but is mainly useful for people in fairly specific situations. Can only allocate memory in (edit: not 4KB) larger chunks. There are situations where you need it, but you'll know when you're in one of these situations. One of the most common is if you have to share memory directly with another process. Don't use it for general-purpose memory allocation. Use VirtualFree to deallocate.

    HeapAlloc

    Allocates whatever size of memory you ask for, not in big chunks than VirtualAlloc. HeapAlloc knows when it needs to call VirtualAlloc and does so for you automatically. Like malloc, but is Windows-only, and provides a couple more options. Suitable for allocating general chunks of memory. Some Windows APIs may require that you use this to allocate memory that you pass to them, or use its companion HeapFree to free memory that they return to you.

    malloc

    The C way of allocating memory. Prefer this if you are writing in C rather than C++, and you want your code to work on e.g. Unix computers too, or someone specifically says that you need to use it. Doesn't initialise the memory. Suitable for allocating general chunks of memory, like HeapAlloc. A simple API. Use free to deallocate. Visual C++'s malloc calls HeapAlloc.

    new

    The C++ way of allocating memory. Prefer this if you are writing in C++. It puts an object or objects into the allocated memory, too. Use delete to deallocate. Visual studio's new calls HeapAlloc, and then maybe initialises the objects, depending on how you call it.

    There are also a couple of other similar functions like SysAllocString that you may be told you have to use in specific circumstances.

    Второй вариант:

    VirtualAlloc is a specialized allocation from the OS VM system. Allocation's must be made at on an allocation granularity which is architechture dependent. It is one of the most basic forms of memory allocation. VM allocations can take several forms, memory is not nessisarially dedicated or physically backed in RAM (though it can be). It is typically a special purpose type of allocation, either vary large, needs to be shared, must be aligned on a perticular value (performance reasons) or the caller need not use all of this memory at once... etc...

    HeapAlloc is essentially what malloc and new both eventually call. It is designed to be very fast and useable under many different types of scenerio's a general purpose allocation. It is the "Heap" in a classic sence. Heap's are actually setup by a VirtualAlloc, which is what is used to initially reserve space from the OS, after this the space is initialized, which is when various tables, lists's and other data structures are configured to maintain and control the operation of the HEAP. Some of that is in the form of dynamically sizing (growing and shrinking), adapting to perticular usages (frequent allocations of some size), etc..

    new and malloc are somewhat the same, malloc is essentially an exact call into HeapAlloc( heap-id-default ); new however, can configure object's for C++. C++ will store vtable's onto the heap for each caller. These vtable's are redirect's for execution and form part of what gives C++ it's oo charicteristics like inheratence, function overloading, etc...

    Some other common allocation methods; _alloca() and _malloca are stack based, FileMappings's are really VirtualAlloc'd and set with perticualr bit flags's which designate them FILE.

    Most of the time, you should allocate memory in a way which is consistant with the use of that memory ;). new in C++, malloc for C, VirtualAlloc for massive or IPC cases.

    *** Note, large memory allocation's by HeapAlloc are actually shipped off to Virtual Alloc after some size (couple hundred k or 16 MB or something I forget, but fairly big :)

    *** EDIT I brefly remarked about IPC and VirtualAlloc, there is also something very neat about a related VirtualAlloc which none of the responder's to this question have discussed.

    VirtualAlloc Ex is what one process can use to allocate memory in a different process's address space. Most typically, used in combination to get remote execution in the context of another process via CreateRemoteThread (simular to CreateThread, the thread is just run in the other process).

    Тот кто усвоил - молодец.

    • Плюс 1
  17. В первый пост я добавил исходник.

    Забыл указать как устанавливать. Самый простой вариант распаковать файлы из ce_luasocket.rar в папку c CE. Запустить cheatengine-i386.exe и для проверки выполнить например

    http = require("socket.http") 
    print(http.request("http://forum.gamehacklab.ru"))

    Если ошибок не будет, то увидим исходник html-я.

    К первому посту я прикрепил исходник. С его помощью можно скомпилировать под 64-рязрядную платформу.

    Использовать 32-х разрядные модули или 64-разрядные можно используя Lua команды:

    cheatEngineIs64Bit(): Returns true if CE is 64-bit, false if 32-bit
    targetIs64Bit(): Returns true if the target process is 64-bit, false if 32-bit

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.