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

partoftheworlD

Пользователи+
  • Постов

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

  • Посещение

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

    172

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

  1. По докам вообще не понятно, какие исключения будет отлавливать except, если все, то может вызывать проблемы, а если можно задавать, то как.

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

     

  2. Как вариант, могу предложить парсить карту, если такая имеется.

    В играх на соурс движке карта имеет формат bsp в которой прописаны все меши.

    Второй вариант, использовать лучи трассировки, для измерения самых дальних участков карты.

  3. 3 часа назад, Antonshka сказал:

    Если calculate  вернет 0, то условие "if (calculate(method, a, b, c, d))" - будет ложно, и сработает brear для цикла while (stop != 'n'), - этот момент понятен.

    Не понятно почему while (stop != 'n') зависит от этого возвращаемого нуля - "default: cout << "wrong answer" << endl; return 0;". Ведь в условии выполнения while только значение переменной stop. Или этот 0 возвращается для int main()?

     

    calculate возвращает состояние 1 если посчиталось, 0 при wrong method и выходит из calculate, ведь какой смысл если вычисления не удались выдавать 
     

    cout << "calculate again? (y\\n): "; 

     

     

    3 часа назад, Antonshka сказал:

    default: cout << "wrong answer" << endl; return 0; //как влияет return 0 на программу?

     

    выход не из цикла, а сразу из main для завершения программы. Не лучший способ, но за ошибки надо платить, хотя бы выходом из программы.?

     

    3 часа назад, Antonshka сказал:

    Но что если нужно снова спросить о желании расчёта?

    Ну что ж, придется быть внимательным и вводить всегда "y". 

     

    3 часа назад, Antonshka сказал:

    Если 0 для while , то верно ли то, что любой цикл, будь то for, while, do, можно завершить не только изменив условие цикла или выполнив break, но и вернув ему (циклу) 0? А значит можно записать код так?

    Не, break выходит из цикла/свича, return выходит из метода.

     

    т.е break используется, когда не надо завершать программу и продолжать выполнение/повторение. return используется, когда надо завершить выполнение метода.

     

    3 часа назад, Antonshka сказал:

    Если при выполнении функции случится выполниться методу "return чего либо", например в середине функции, то значит ли это то, что функция на этом самом месте немедленно прекратит свою работу, вернув результат, несмотря на то, что другая часть/части этой функции также желали быть исполненными?

    Именно так.

     


     

  4. Немного лучше так.

     

    Спойлер
    
    #include <iostream> 
    
    using namespace std;
    
    void header(char dummy, int &a, int &b, int &c, int &d)
    {
    	cout << "enter first fraction (a / b): ";
    	cin >> a >> dummy >> b;
    	cout << "enter second fraction (c / d): ";
    	cin >> c >> dummy >> d;
    	cout << "method: ";
    }
    
    bool calculate(char m, int &a, int &b, int &c, int &d)
    {
    	switch (m)
    		{
    			case '+':cout << a * d + b * c  << " / "          << b * d << endl; break;
    			case '-':cout << a * d - b * c  << " / "          << b * d << endl; break;
    			case '*':cout << a * c          << " / "          << b * d << endl; break;
    			case '/':cout << a * d          << " / "          << b * c << endl; break;
    			default : cout << "wrong method" << endl; return 0;
    		}
    	return 1;
    }
    
    int main()
    {
    	int a, b, c, d;
    	char dummy  = 'a';
    	char method = 'a';
    	char stop   = 'y';
    	while (stop != 'n')
    	{
    		header(dummy, a, b, c, d);
    		cin >> method;
    		if(calculate(method, a, b, c, d))
    		{
    			cout << "calculate again? (y\\n): "; 
    			cin >> stop;
    			
    			switch(stop)
    			{
    				case 'y': continue;
    				case 'n': break;
    				default : cout << "wrong answer" << endl; return 0;
    			}
    
    		}
    		else
    		{
    			break;
    		}
    
    	}
    	return 0;
    }

     


    Немного офтопа о cpp. Т.к. это лучшее объяснение как работать с языком.


    Цитата

    И тут мы поняли, что многие не знают как правильно пользоваться этой функцией. Так вот, правильное использование — не пользоваться.

     


     

     

  5. 1 час назад, Antonshka сказал:

    Порой он полезен.

    Как говорилось в одной книге, кажется Страуструпа. "Если есть смысл в использовании goto, то стоит задуматься о том, чтобы переписать код"
    Проблемы с использованием goto еще обсуждались в 1968 году, т.е да он как бы не плох, но вреда от него больше, чем пользы, особенно если это крупный проект.

     

    your slow connection sucks, get a faster one to see this image

     

    1 час назад, Antonshka сказал:

    У тебя правда она получилась немного кривоватая

    Ну я "программист", а не художник, пусть красивостями другие занимаются.?

  6. 1 час назад, rugraver сказал:

    или (большая хотелка) вес инвентаря, хоть изначальный 80кг хоть примороженый как-то

    Надеюсь хватит грузоподъемности.

     

    image.thumb.png.3d193c4f5d723ee5286eb3d2b594119e.png

    image.thumb.png.a406037b0d1596dafaebd3a536fd6ca3.png

     

    Спойлер
    
    
    [ENABLE]
    
    aobscan(MaxWeight, F3 0F 10 8E 00 01 00 00 F3 0F 5A C9 F2 0F 5E C1 F2 0F 5A E8 F3 0F 11 6C 24 10 F3 0F 10 44 24 10) // should be unique
    aobscan(StartEquipment,48 63 8F F0 00 00 00 3B) // should be unique
    
    alloc(StartEquipment_newmem,$1000)
    alloc(MaxWeight_newmem,$1000)
    
    label(MaxWeight_code)
    label(MaxWeight_return)
    label(StartEquipment_code)
    label(StartEquipment_return)
    
    MaxWeight_newmem:
    
    MaxWeight_code:
      mov [rsi+00000100],(float)999999
      movss xmm1,[rsi+00000100]
      jmp MaxWeight_return
    
    MaxWeight:
      jmp MaxWeight_newmem
      nop
      nop
      nop
    MaxWeight_return:
    registersymbol(MaxWeight)
    
    StartEquipment_newmem:
    
    StartEquipment_code:
      mov [rdi+000000F0],#20
      movsxd  rcx,dword ptr [rdi+000000F0]
      jmp StartEquipment_return
    
    StartEquipment:
      jmp StartEquipment_newmem
      nop
      nop
    StartEquipment_return:
    registersymbol(StartEquipment)
    
    [DISABLE]
    
    MaxWeight:
      db F3 0F 10 8E 00 01 00 00
    StartEquipment:
      db 48 63 8F F0 00 00 00
    
    unregistersymbol(StartEquipment)
    unregistersymbol(MaxWeight)
    dealloc(StartEquipment_newmem)
    dealloc(MaxWeight_newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: StartEquipment
    
    1AB0BCDB4B8: 00 00                    -  add [rax],al
    1AB0BCDB4BA: 00 00                    -  add [rax],al
    1AB0BCDB4BC: 00 00                    -  add [rax],al
    1AB0BCDB4BE: 00 00                    -  add [rax],al
    1AB0BCDB4C0: 48 83 EC 18              -  sub rsp,18
    1AB0BCDB4C4: 48 89 34 24              -  mov [rsp],rsi
    1AB0BCDB4C8: 48 89 7C 24 08           -  mov [rsp+08],rdi
    1AB0BCDB4CD: 48 8B F1                 -  mov rsi,rcx
    1AB0BCDB4D0: F3 0F 10 86 04 01 00 00  -  movss xmm0,[rsi+00000104]
    1AB0BCDB4D8: F3 0F 5A C0              -  cvtss2sd xmm0,xmm0
    // ---------- INJECTING HERE ----------
    1AB0BCDB4DC: F3 0F 10 8E 00 01 00 00  -  movss xmm1,[rsi+00000100]
    // ---------- DONE INJECTING  ----------
    1AB0BCDB4E4: F3 0F 5A C9              -  cvtss2sd xmm1,xmm1
    1AB0BCDB4E8: F2 0F 5E C1              -  divsd xmm0,xmm1
    1AB0BCDB4EC: F2 0F 5A E8              -  cvtsd2ss xmm5,xmm0
    1AB0BCDB4F0: F3 0F 11 6C 24 10        -  movss [rsp+10],xmm5
    1AB0BCDB4F6: F3 0F 10 44 24 10        -  movss xmm0,[rsp+10]
    1AB0BCDB4FC: F3 0F 5A C0              -  cvtss2sd xmm0,xmm0
    1AB0BCDB500: F3 0F 10 0D 88 00 00 00  -  movss xmm1,[1AB0BCDB590]
    1AB0BCDB508: F3 0F 5A C9              -  cvtss2sd xmm1,xmm1
    1AB0BCDB50C: 66 0F 2F C8              -  comisd xmm1,xmm0
    1AB0BCDB510: 0F 8A 4F 00 00 00        -  jp 1AB0BCDB565
    }
    
    {
    // ORIGINAL CODE - INJECTION POINT: MaxWeight
    
    1AB0BC553AF: 48 8B 45 A8                    -  mov rax,[rbp-58]
    1AB0BC553B3: 48 8B C8                       -  mov rcx,rax
    1AB0BC553B6: 48 83 EC 20                    -  sub rsp,20
    1AB0BC553BA: 48 8B 00                       -  mov rax,[rax]
    1AB0BC553BD: 90                             -  nop
    1AB0BC553BE: 90                             -  nop
    1AB0BC553BF: 90                             -  nop
    1AB0BC553C0: FF 90 D0 02 00 00              -  call qword ptr [rax+000002D0]
    1AB0BC553C6: 48 83 C4 20                    -  add rsp,20
    1AB0BC553CA: 48 63 87 EC 00 00 00           -  movsxd  rax,dword ptr [rdi+000000EC]
    // ---------- INJECTING HERE ----------
    1AB0BC553D1: 48 63 8F F0 00 00 00           -  movsxd  rcx,dword ptr [rdi+000000F0]
    // ---------- DONE INJECTING  ----------
    1AB0BC553D8: 3B C1                          -  cmp eax,ecx
    1AB0BC553DA: 0F 8C E7 00 00 00              -  jl 1AB0BC554C7
    1AB0BC553E0: 45 33 E4                       -  xor r12d,r12d
    1AB0BC553E3: E9 C9 00 00 00                 -  jmp 1AB0BC554B1
    1AB0BC553E8: 48 8B 47 38                    -  mov rax,[rdi+38]
    1AB0BC553EC: 49 63 CC                       -  movsxd  rcx,r12d
    1AB0BC553EF: 39 48 18                       -  cmp [rax+18],ecx
    1AB0BC553F2: 0F 86 66 03 00 00              -  jbe 1AB0BC5575E
    1AB0BC553F8: 48 8D 44 C8 20                 -  lea rax,[rax+rcx*8+20]
    1AB0BC553FD: 48 8B 00                       -  mov rax,[rax]
    }

     

    • Понравилось 1
  7. 24 минуты назад, rugraver сказал:

    что там в скрипте не так?

     

    проблема была в ret, который просто затирался вместо прыжка в оригинальный код, просто выходим из функции и возвращаем управление вызвавшей её.

    Играю несколько часов, вроде проблем нет.

     

    9 часов назад, partoftheworlD сказал:

     

      Скрыть контент Скрыть контент
    
    
    { Game   : OsirisNewDawn.exe
      Version:
      Date   : 2019-04-05
      Author : Alexander
    
      This script does blah blah blah
    }
    
    [ENABLE]
    
    aobscan(sad,48 63 40 60 48 83 C4 08) // should be unique
    alloc(newmem,$1000,1EA944F4E4B)
    
    label(code)
    label(return)
    
    newmem:
    
    code:
      mov [rax+60],#99
      movsxd  rax,dword ptr [rax+60]
      add rsp,08
      ret
    
    sad:
      jmp newmem
      nop
      nop
      nop
    return:
    registersymbol(sad)
    
    [DISABLE]
    
    sad:
      db 48 63 40 60 48 83 C4 08 c3
    
    unregistersymbol(sad)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: 1EA944F4E4B
    
    1EA944F4E34: 01 50 00                       -  add [rax+00],edx
    1EA944F4E37: 00 00                          -  add [rax],al
    1EA944F4E39: 00 00                          -  add [rax],al
    1EA944F4E3B: 00 00                          -  add [rax],al
    1EA944F4E3D: 00 00                          -  add [rax],al
    1EA944F4E3F: 00 48 83                       -  add [rax-7D],cl
    1EA944F4E42: EC                             -  in al,dx
    1EA944F4E43: 08 48 89                       -  or [rax-77],cl
    1EA944F4E46: 0C 24                          -  or al,24
    1EA944F4E48: 48 8B C1                       -  mov rax,rcx
    // ---------- INJECTING HERE ----------
    1EA944F4E4B: 48 63 40 60                    -  movsxd  rax,dword ptr [rax+60]
    1EA944F4E4F: 48 83 C4 08                    -  add rsp,08
    // ---------- DONE INJECTING  ----------
    1EA944F4E53: C3                             -  ret
    1EA944F4E54: 00 00                          -  add [rax],al
    1EA944F4E56: 00 00                          -  add [rax],al
    1EA944F4E58: 00 00                          -  add [rax],al
    1EA944F4E5A: 00 00                          -  add [rax],al
    1EA944F4E5C: 14 00                          -  adc al,00
    1EA944F4E5E: 00 00                          -  add [rax],al
    1EA944F4E60: 24 00                          -  and al,00
    1EA944F4E62: 00 00                          -  add [rax],al
    1EA944F4E64: 01 04 01                       -  add [rcx+rax],eax
    }

     

     

  8. 10 минут назад, rugraver сказал:

    Стала крашиться и от скрипта оружия (и от Вашего, и от своего)

    Я свой поправил уже, теперь нет вылетов)

     

    15 минут назад, rugraver сказал:

    ВСЕ итемы стали 5/5 (по игре там стек из 5 аптечек), и при сборе ресурса игра крашится

    Решается простым фильтром по ItemInfo.type или как-то так. Ведь когда предмет добавляется, так же передается его id.

  9. 1 час назад, energypower сказал:

    этот указатель ppReturnedDeviceInterface

    Указатель на устройство.

     

    1 час назад, energypower сказал:

    Поможете мне с конкретной игрой, а то так и не понял.

    Нет, нахождение устройства везде одинаковое. Это только в раздел запросов.

  10. 50 минут назад, imaginary сказал:

    И он идёт пишет разработчикам

     

    Ну да, на пиратке, сброки хххх, беты у происходит ...

    На самом деле, даже без взлома у меня патроны обнулялись после перезахода в игру, ладно бы там была механика, типа, безопасности на корабле и оружие должно быть разряжено, давали бы доп.обойму.

    Так что либо, это дурацкая механика, либо баг.("не баг, а фитча").

  11. Можно одним только CE обойтись, но он ужасен, так что следует использовать разные инструменты, например dnSpy.

     

    image.thumb.png.6b58113121e4de784a28cfbc5e946b69.png

     

    В CE во вкладке с моно ищешь "LoadAmmo" и переходишь по LoadAmmo в дизассемблер. Находишь пишущую инструкцию.Стреляешь.

     

    image.thumb.png.8b3926f882a16874d584e9d80c2e4442.png

     

    Спойлер
    
    { Game   : OsirisNewDawn.exe
      Version:
      Date   : 2019-04-05
      Author : Alexander
    
      This script does blah blah blah
    }
    
    [ENABLE]
    
    aobscan(sad,48 63 40 60 48 83 C4 08) // should be unique
    alloc(newmem,$1000,1EA944F4E4B)
    
    label(code)
    label(return)
    
    newmem:
    
    code:
      mov [rax+60],#99
      movsxd  rax,dword ptr [rax+60]
      add rsp,08
      ret
    
    sad:
      jmp newmem
      nop
      nop
      nop
    return:
    registersymbol(sad)
    
    [DISABLE]
    
    sad:
      db 48 63 40 60 48 83 C4 08 c3
    
    unregistersymbol(sad)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: 1EA944F4E4B
    
    1EA944F4E34: 01 50 00                       -  add [rax+00],edx
    1EA944F4E37: 00 00                          -  add [rax],al
    1EA944F4E39: 00 00                          -  add [rax],al
    1EA944F4E3B: 00 00                          -  add [rax],al
    1EA944F4E3D: 00 00                          -  add [rax],al
    1EA944F4E3F: 00 48 83                       -  add [rax-7D],cl
    1EA944F4E42: EC                             -  in al,dx
    1EA944F4E43: 08 48 89                       -  or [rax-77],cl
    1EA944F4E46: 0C 24                          -  or al,24
    1EA944F4E48: 48 8B C1                       -  mov rax,rcx
    // ---------- INJECTING HERE ----------
    1EA944F4E4B: 48 63 40 60                    -  movsxd  rax,dword ptr [rax+60]
    1EA944F4E4F: 48 83 C4 08                    -  add rsp,08
    // ---------- DONE INJECTING  ----------
    1EA944F4E53: C3                             -  ret
    1EA944F4E54: 00 00                          -  add [rax],al
    1EA944F4E56: 00 00                          -  add [rax],al
    1EA944F4E58: 00 00                          -  add [rax],al
    1EA944F4E5A: 00 00                          -  add [rax],al
    1EA944F4E5C: 14 00                          -  adc al,00
    1EA944F4E5E: 00 00                          -  add [rax],al
    1EA944F4E60: 24 00                          -  and al,00
    1EA944F4E62: 00 00                          -  add [rax],al
    1EA944F4E64: 01 04 01                       -  add [rcx+rax],eax
    }

     

     

    И все.

     

    image.thumb.png.54aeea74f88e855a722415b6816e1259.png

     

     

    Нужны указатели - восстанавливай руками начиная от патрон. Выйдет около 4-5 уровней.(6)

     

    image.thumb.png.966b96d6bdc385a6d9cdd0d4de752823.png

     

    4 часа назад, rugraver сказал:

    но при перезагрузке возрождаешься с 0 патронов

     

    А это уже баг/механика игры,  не зависящий от правки инструкций. Это к разработчикам.

  12. Почему бы не погуглить? Обработчик исключений был бы идеальным решением, проверки адресов. https://wiki.cheatengine.org/index.php?title=Auto_Assembler:TRY_EXCEPT

    Там даже пример есть. Ох уж любители костылей.

     

    Цитата

    In this example, if any error occurs - for example, ecx is zero or ecx+10 is unreadable -, eax will be set to zero:

    {$try}

    mov eax,[ecx+10]

    jmp short noerror

    {$except}

    xor eax,eax

    noerror:

     

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

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

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