MasterGH Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Всем привет! Самый идиотский вопрос от меня и да, я на него не знаю ответ Если я в CE пишу cmp rdx, 1455d741f То на деле получаю обрезанное число 03C70018 - 48 81 FA 1F745D45 - cmp rdx,455D741FТ.е. улетела единица не понятно куда и сравнивается совсем другое число. Помогите нубу, если не в лом. От этого зависит обход защиты игры ACU. ----------Если писатьcmp rdx, QWORD 1455d741fТо CE не понимает чего я хочу и выдает ошибку Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Может так:push rcxmov rcx,ACU.exeadd rcx,55d741fcmp rdx,rcxpop rcx Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Попробуй такcmp rdx,ACU.exe+55D741FВпринципи так не должен ругаться СЕ Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 30 апреля, 2015 Автор Поделиться Опубликовано 30 апреля, 2015 Спасибо. Я короче написал программулину, а там вот так int count = 1000; string nameA = "1000"; void OnGUI() { if(GUILayout.Button(nameA)) { count++; nameA = count.ToString(); ulong a = 0x1455d741f; if(a == 0x2455d741f) { print("CatchCatch"); } } } 037EAFE8 - 48 B8 1F745D4501000000 - mov rax,00000001455D741F037EAFF2 - 48 B9 1F745D4502000000 - mov rcx,00000002455D741F037EAFFC - 48 3B C1 - cmp rax,rcx037EAFFF - 75 1A - jne 037EB01B037EB001 - B9 50274E05 - mov ecx,054E2750 : [00408A28]037EB006 - 48 83 EC 20 - sub rsp,20037EB00A - 49 BB 3FB07E0300000000 - mov r11,00000000037EB03F : [B94FBCE8]037EB014 - 41 FF D3 - call r11d037EB017 - 48 83 C4 20 - add rsp,20037EB01B - 48 8B 75 F8 - mov rsi,[rbp-08]037EB01F - C9 - leave 037EB020 - C3 - ret Т.е. в регистр можно записать большое число и потом сравнивать. Мне нужен самый короткий вариант. Попробую все варианты.Может так:push rcxmov rcx,ACU.exeadd rcx,55d741fcmp rdx,rcxpop rcx Слишком емко, но вариант рабочий. Попробуй такcmp rdx,ACU.exe+55D741FВпринципи так не должен ругаться СЕ Не ругается, но та же фигня. Режет... В общем надо переделать мне этот скрипт. Вы можете это не делать, я просто показываю мои самые тупые ошибки за этот год. [ENABLE]alloc(checkCRC, 2048)label(checkCRCCode)registersymbol(checkCRCCode)label(x1)label(x2)label(x3)label(x4)label(x5)label(x6)label(x7)label(x8)label(x9)label(x10)label(x11)label(x12)label(x13)label(x14)label(x15)label(x16)label(x17)label(x18)label(x19)label(x20)label(x21)label(x22)label(x23)label(x24)checkCRC:db 32 02 F9 E9 9C 06 00 00db 32 02 F6 C3 9Bdb 32 02 F5 A8 3Fdb 8B 53 28 03 43 38checkCRCCode://cmp rdx, QWORD PTR 1455d741fcmp rdx,ACU.exe+55D741Fcmp rdx, 1455d741fje x1cmp rdx,1455d7420je x2cmp rdx,1455d7421je x3cmp rdx,1455d7422je x4cmp rdx,1455d7423je x5cmp rdx,1455d7424je x6cmp rdx,1455d7425je x7cmp rdx,1455d7426je x8cmp rdx,1455d658fje x9cmp rdx,1455d6590je x10cmp rdx,1455d6591je x11cmp rdx,1455d6592je x12cmp rdx,1455d6593je x13cmp rdx,140007f48je x14cmp rdx,140007f49je x15cmp rdx,140007f4aje x16cmp rdx,140007f4bje x17cmp rdx,140007f4cje x18cmp rdx,140fab5beje x19cmp rdx,140fab5bfje x20cmp rdx,140fab5c0je x21cmp rdx,140fab5c1je x22cmp rdx,140fab5c2je x23cmp rdx,140fab5c3je x24retx1:xor al,[checkCRC+0]retx2:xor al,[checkCRC+1]retx3:xor al,[checkCRC+2]retx4:xor al,[checkCRC+3]retx5:xor al,[checkCRC+4]retx6:xor al,[checkCRC+5]retx7:xor al,[checkCRC+6]retx8:xor al,[checkCRC+7]retx9:xor al,[checkCRC+8]retx10:xor al,[checkCRC+9]retx11:xor al,[checkCRC+10]retx12:xor al,[checkCRC+11]retx13:xor al,[checkCRC+12]retx14:xor al,[checkCRC+13]retx15:xor al,[checkCRC+14]retx16:xor al,[checkCRC+15]retx17:xor al,[checkCRC+16]retx18:xor al,[checkCRC+17]retx19:xor al,[checkCRC+18]retx20:xor al,[checkCRC+19]retx21:xor al,[checkCRC+20]retx22:xor al,[checkCRC+21]retx23:xor al,[checkCRC+22]retx24:xor al,[checkCRC+23]ret[DISABLE]dealloc(checkCRC) Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Есть такое предложение, а что если выделить участок памяти и уже туда принудительно перенаправлять инъекцию скрипта.Тоесть копируем код и заставляем его работать на выделенном участке памяти.Такой вариант может сработать без вылетов... Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Есть такое предложениеDison, ты как будто велосипед изобрёл - мы в каждом скрипте, который пишем, именно это и делаем. Решение в обходе защиты: либо 1-ый вариант - увести от проверки, т.е. найти все прыжки на проверки и изменить прыг, чтобы не попадать на проверку; либо 2-ой вариант - подсовывать проверяющим инструкциям всегда байты оригинальных инструкций. Вот MasterGH и пытается решить эти варианты. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Dison, ты как будто велосипед изобрёл Гарик для себя лично изобрел Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 30 апреля, 2015 Автор Поделиться Опубликовано 30 апреля, 2015 Есть такое предложение, а что если выделить участок памяти и уже туда принудительно перенаправлять инъекцию скрипта. Тоесть копируем код и заставляем его работать на выделенном участке памяти. Такой вариант может сработать без вылетов... Тут тема плагина, а не ACU. Пишите в тему ACU Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 1 мая, 2015 Поделиться Опубликовано 1 мая, 2015 Может, добить нулями впереди, чтобы СЕ понял, что это 64-битное число? Или сзади, если СЕ режет число. В общем, нули - наше все ) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 Может, добить нулями впередиMasterGH, Xipho прав - нули работают:mov RDX,000000014771634A Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 3 мая, 2015 Автор Поделиться Опубликовано 3 мая, 2015 MasterGH, Xipho прав - нули работают:mov RDX,000000014771634A Для "mov RDX, адрес" нули дописывать не обязательно, а с "CMP RDX, адрес" хоть обнулись - не прокатит. Да и MOV меня здесь не интересовал, а только CMP. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 а с "CMP RDX, адрес" хоть обнулись - не прокатитПонято, тогда остаётся наверное только та длинная запись с push/pop из 2-го поста.Вот кое-что нашёл по 64-битным числам, может это подойдёт:[spoiler=Взято отсюда: http://www.cyberforum.ru/post5356780.html]Команда CMPXCHG8B (Сравнение и обмен 8 байтов = ”COMPARE and EXCHANGE 8 Bytes”)Синтаксис команды: CMPXCHG8B m8byteСемантика команды: выполнение в одной операции сравнения и обмен 8-байтовых операндов. Команда требует один операнд m8byte и неявным образом использует еще два операнда – пары регистров EDX:EAX и ECX:EBX. В качестве явного операнда команды m8byte может выступать только 64-битная (8-байтовая) ячейка памяти. Команда выполняет сравнение операнда m8byte в памяти с содержимым EDX:EAX. Если сравниваемые значения совпадают, то операнд DEST в памяти замещается 64-битным значением ECX:EBX. Если сравниваемые значения не совпадают, содержимое памяти поступает в пару регистров EDX:EAX, замещая сравниваемый операнд DEST. Пример 1Код ASM1 mem dq 1122334455667788h2 mov ECX, 93 mov EBX, 54 mov EDX, 11223344h5 mov EAX, 55667788h6 cmpxchg8b mem ;[mem]=EDX:EAX ECX:EBX->[mem]7 ;mem=0000000900000005h Пример 2Код ASM1 mem dq 1122334455667788h2 mov EAX, 93 mov EDX, 54 cmpxchg8b mem ;[mem]<>EDX:EAX [mem]->EDX:EAX5 ;mem=1122334455667788h6 ;EDX=11223344h EAX=55667788h При работе с многобайтовыми данными не следует забывать о том, что в памяти байты всегда выстраиваются в порядке их номеров, то есть от младших к старшим, в то время как при изображении чисел применяется обратный порядок. В то же время символьные строки изображаются так же, как они располагаются в памяти. Пример 3Код ASM1 mem1 db ‘12345678’;строка операнд2 mem2 db ‘12345678’;сравниваемая строка3 mov ECX, 68676665h ;’efgh’4 mov EBX, 64636261h ;’abcd’5 mov EDX,dword ptr mem2+4;забираем старшую часть строки6 mov EAX,dword ptr mem2;забираем младшую часть строки7 cmpxchg8b qword ptr mem1;операнды совпадают8 ;mem1=’abcdefgh’ ZF=1 ECX:EBX и EDX:EAX без изменений Пример 4Код ASM1 mem1 db ‘12345678’;строка операнд2 mem2 db ‘abcdefgh’;сравниваемая строка3 mov ecx, 68676665h ;’efgh’4 mov ebx, 64636261h ;’abcd’5 mov edx,dword ptr mem2+4;забираем старшую часть строки6 mov eax, dword ptr mem2;забираем младшую часть строки7 cmpxchg8b qword ptr mem1 ;операнды не совпадают8 ;ZF=0 edx=38373635=’5678’eax=34333231=’1234’9 ;mem1 без изменений, при неравенстве10 ; ecx:ebx не принимают участие в операции Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 Для "mov RDX, адрес" нули дописывать не обязательно, а с "CMP RDX, адрес" хоть обнулись - не прокатит. Да и MOV меня здесь не интересовал, а только CMP.Стоп, а если cmp qword ptr?А еще вот тут - я нашел интересную инструкцию cmpeqТут описание, например. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Ни одна инструкция не компилируется cmp rdx, qword ptr 1455d741fcmp rdx, qword 1455d741fcmp rdx, qword ptr [1455d741f]cmp rdx, [1455d741f]Зато компилируется 4-х байтовое числоcmp rdx,[455D741F]cmp rdx, qword ptr [455d741f]; будет например 01150026 - 48 3B 14 25 1F745D45 - cmp rdx,[455D741F]Можно например через стек push 4 байтаpush 4 байта; или push qword[метка]; или mov rax, большое число и push raxcmp rdx, [esp]sub rsp,8 ; правим указатель на стекА "cmpeq" это не инструкция, а обозначение группы инструкций сравнения со схожем корнем "cmpeq" из набора SIMD. Из документа 64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf, который можно найти официальном сайте ИнтелPCMPEQB/PCMPEQW/PCMPEQD— Compare Packed Data for Equal PCMPEQQ — Compare Packed Qword Data for EqualPCMPESTRI — Packed Compare Explicit Length Strings, Return IndexPCMPESTRM — Packed Compare Explicit Length Strings, Return MaskPCMPGTB/PCMPGTW/PCMPGTD—Compare Packed Signed Integers for Greater ThanPCMPGTQ — Compare Packed Data for Greater ThanPCMPISTRI — Packed Compare Implicit Length Strings, Return IndexPCMPISTRM — Packed Compare Implicit Length Strings, Return Mask Я не нашел ни одного способа сравнить большой число с "cmpeq". Да и работает уже со 128 разрядными и меньше регистрами и на мой взгляд только усложняет. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 Так, погодите-ка. В х64 блокноте затестил вот такой скрипт:{ Game : notepad.exe Version: Date : 2015-05-04 Author : Xipho This script does blah blah blah}[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(INJECT,notepad.exe,48 83 EC 28 E8 F7 FD FF FF) // should be uniquealloc(newmem,$1000,"notepad.exe"+2BF0)label(code)label(return)label(val)newmem:code: cmp qword ptr [val],rdx sub rsp,28 call notepad.exe+29F0 jmp returnval:dq 455d741fINJECT: jmp code nop nop nop nopreturn:registersymbol(INJECT)[DISABLE]//code from here till the end of the code will be used to disable the cheatINJECT: db 48 83 EC 28 E8 F7 FD FF FFunregistersymbol(INJECT)dealloc(newmem)Но поскольку в памяти число лежит задом наперед, проверить, точно ли там 8-байтное число не представляется возможным. Проверяйте.Добавлено:Кстати, еще один момент вспомнил - если не получается сравнить с 8-байтами, то вполне возможно взять младшую часть rdx, в которой будет четырехбайтное число 455d741f. То есть, попросту сравниватьcmp edx,455d741fПопробуйте и этот момент, у кого время есть. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Понятно, короче можно юзать по шаблону//...cmp qword ptr [label1],rdxje x1cmp qword ptr [label2],rdxje x2cmp qword ptr [labelN],rdxje xN//...x1://...x2//...xN://...//...label1:dq 1455d741flabel2:dq 00000000labelN:dq 00000000//... Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 А вариант с младшей частью регистра не подошел? Мне кажется, он изящнее, что ли... Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Не знаю подходит или нет, надо проверять. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения