Garik66 Опубликовано 10 марта, 2019 Поделиться Опубликовано 10 марта, 2019 4 минуты назад, Antonshka сказал: Запишешь может видео Прошу прощения - с видео не получиться - болею (в понедельник уже 3 недели ровно будет) голоса практически не осталось, да и головные боли задолбали. Сейчас попробую прокомментировать скрипт. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 марта, 2019 Поделиться Опубликовано 10 марта, 2019 13 минут назад, Antonshka сказал: вот немного модифицированный твой скрипт Так подожди у тебя не модифицированный скрипт, а другой подход - ты ищешь непосредственно адрес. я ищу старшую часть делимого 8 часов назад, Antonshka сказал: 822AC75A_433C7EDD Твой скрипт лучше. Работает быстрее. Гораздо быстрее. так что два подхода. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 10 марта, 2019 Автор Поделиться Опубликовано 10 марта, 2019 4 минуты назад, Garik66 сказал: Так подожди у тебя не модифицированный скрипт, а другой подход - ты ищешь непосредственно адрес. я ищу старшую часть делимого Немного короче и работает с быстрыми регистрами. А так он вытек полностью из твоего скрипта. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 марта, 2019 Поделиться Опубликовано 10 марта, 2019 4 минуты назад, Antonshka сказал: Немного короче и работает с быстрыми регистрами. А так он вытек полностью из твоего скрипта. Ну это нормально - когда кто-то улучшает что-то ? Иначе бы до сих пор так ездили: Спойлер Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 10 марта, 2019 Автор Поделиться Опубликовано 10 марта, 2019 Благодарность @partoftheworlD, за его идею метода перебора. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 марта, 2019 Поделиться Опубликовано 10 марта, 2019 2 часа назад, Antonshka сказал: Немного короче Не ну если ещё короче , то ecx не нужен: Спойлер push eax push ebx Podbor: inc ebx imul eax,ebx,B05C6C43 cmp eax,[Value] je @f jmp Podbor @@: mov [adres],ebx mov [Value_EAX],eax pop ebx pop eax Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 9 часов назад, Garik66 сказал: Не ну если ещё короче , то ecx не нужен: Работать будет медленнее, так как доступ к регистрам всегда быстрее доступа к памяти. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 11 марта, 2019 Автор Поделиться Опубликовано 11 марта, 2019 Как я понял, 0.8 секунды слишком много, нужно максимум 0.1 секунды, для комфорта. Может пусть один регистр увеличивает на 1 с нуля, другой уменьшает на 1 с FFFFFFFF, то есть идут навстречу друг другу. Ещё например третий идет с 7FFFFFFFF до 0, четвертый с 7FFFFFFFF до FFFFFFFF. Итого четыре поисковика в одном потоке. Надо придумать как это реализовать в скрипте AA, максимально коротко и эффективно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 1 час назад, Antonshka сказал: Может пусть Разделил на 4, но скорость даже уменьшилась. Я сделал функциями и передаю через один регистр (может тут замедление). Короче нужно поиграться, но скорее всего лучше не за компактностью скрипта гнаться, а сделать нормально - несколько потоков. (Ну и само собой не на Туториале ) Скрипт: Спойлер { Game : Tutorial-i386.exe Version: Date : 2019-03-09 Author : Garik66 This script does blah blah blah } [ENABLE] aobscanmodule(INJECT,Tutorial-i386.exe,81 BB 80 04 00 00 E8 03 00 00) // should be unique alloc(newmem,$1000) label(code) label(return) label(adres) registersymbol(adres) label(Value_EAX) registersymbol(Value_EAX) label(Value) registersymbol(Value) label(Start) label(Podbor) label(Podbor1) label(Exit) registersymbol(INJECT) newmem: cmp [Value_EAX],0 jne code pushad mov ecx,[Value] mov edx,0 mov esi,7fffffff mov edi,7FFFFFFE mov ebp,FFFFFFFF Start: mov ebx,edx call Podbor mov edx,ebx mov ebx,esi call Podbor mov esi,ebx mov ebx,edi call Podbor1 mov edi,ebx mov ebx,ebp call Podbor1 mov ebp,ebx jmp Start Podbor: imul eax,ebx,B05C6C43 cmp eax,ecx je Exit inc ebx ret Podbor1: imul eax,ebx,B05C6C43 cmp eax,ecx je Exit dec ebx ret Exit: mov [adres],ebx mov [Value_EAX],eax popad code: cmp [ebx+00000480],000003E8 jmp return adres: dd 0 Value_EAX: dd 0 Value: dd 0 INJECT: jmp newmem db 90 90 90 90 90 return: [DISABLE] INJECT: db 81 BB 80 04 00 00 E8 03 00 00 unregistersymbol(Value) unregistersymbol(Value_EAX) unregistersymbol(adres) unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Tutorial-i386.exe"+24073 "Tutorial-i386.exe"+24061: C9 - leave "Tutorial-i386.exe"+24062: C3 - ret "Tutorial-i386.exe"+24063: 00 00 - add [eax],al "Tutorial-i386.exe"+24065: 00 00 - add [eax],al "Tutorial-i386.exe"+24067: 00 00 - add [eax],al "Tutorial-i386.exe"+24069: 00 00 - add [eax],al "Tutorial-i386.exe"+2406B: 00 00 - add [eax],al "Tutorial-i386.exe"+2406D: 00 00 - add [eax],al "Tutorial-i386.exe"+2406F: 00 53 89 - add [ebx-77],dl "Tutorial-i386.exe"+24072: C3 - ret // ---------- INJECTING HERE ---------- "Tutorial-i386.exe"+24073: 81 BB 80 04 00 00 E8 03 00 00 - cmp [ebx+00000480],000003E8 // ---------- DONE INJECTING ---------- "Tutorial-i386.exe"+2407D: 75 2C - jne Tutorial-i386.exe+240AB "Tutorial-i386.exe"+2407F: 8B 83 68 04 00 00 - mov eax,[ebx+00000468] "Tutorial-i386.exe"+24085: B2 01 - mov dl,01 "Tutorial-i386.exe"+24087: 8B 8B 68 04 00 00 - mov ecx,[ebx+00000468] "Tutorial-i386.exe"+2408D: 8B 09 - mov ecx,[ecx] "Tutorial-i386.exe"+2408F: FF 91 20 02 00 00 - call dword ptr [ecx+00000220] "Tutorial-i386.exe"+24095: 8B 83 78 04 00 00 - mov eax,[ebx+00000478] "Tutorial-i386.exe"+2409B: B2 00 - mov dl,00 "Tutorial-i386.exe"+2409D: 8B 8B 78 04 00 00 - mov ecx,[ebx+00000478] "Tutorial-i386.exe"+240A3: 8B 09 - mov ecx,[ecx] } Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 Лучше один раз на плюсах собрать, залепить многопоточность и думаю, можно уменьшить скорость выполнения до 0.03. Вот одним потоком, не помню, что за значение считал.(тест выполнялся на виртуалке) Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 11 марта, 2019 Автор Поделиться Опубликовано 11 марта, 2019 (изменено) У меня получился такой скрипт, с одним потоком. Спойлер [ENABLE] alloc(PLACEImul_Crypt_scr_1,2048) label(BACKImul_Crypt_scr_1) label(Imul_Crypt_scr_1_Act) label(Imul_Crypt_scr_1_Act_Cycle) label(Imul_Crypt_scr_1_Crypt_Found) alloc(Imul_Crypt_Checker,100) registersymbol(Imul_Crypt_Checker) alloc(Original_Value,100) registersymbol(Original_Value) alloc(Original_Value_Crypted,100) registersymbol(Original_Value_Crypted) PLACEImul_Crypt_scr_1: cmp [Imul_Crypt_Checker],#1 je Imul_Crypt_scr_1_Act cmp [ebx+00000480],000003E8 jmp BACKImul_Crypt_scr_1 Imul_Crypt_scr_1_Act://Imul_Crypt_scr_1_Act push eax push ebx push edx push ecx mov ecx,[Original_Value] push FFFFFFFF push 7FFFFFFF push 7FFFFFFF push 0 Imul_Crypt_scr_1_Act_Cycle://Imul_Crypt_scr_1_Act_Cycle add [esp],1 imul eax,[esp],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp] jmp Imul_Crypt_scr_1_Crypt_Found @@: sub [esp+4],1 imul eax,[esp+4],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+4] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+8],1 imul eax,[esp+8],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+8] jmp Imul_Crypt_scr_1_Crypt_Found @@: sub [esp+c],1 imul eax,[esp+c],B05C6C43 cmp eax,ecx jne Imul_Crypt_scr_1_Act_Cycle mov ebx,[esp+c] jmp Imul_Crypt_scr_1_Crypt_Found Imul_Crypt_scr_1_Crypt_Found://Imul_Crypt_scr_1_Crypt_Found mov [Original_Value_Crypted],ebx pop [esp] pop [esp+4] pop [esp+8] pop [esp+c] pop ecx pop edx pop ebx pop eax mov [Imul_Crypt_Checker],#0 cmp [ebx+00000480],000003E8 jmp BACKImul_Crypt_scr_1 ///////////////////////// "Tutorial-i386.exe"+24073: jmp PLACEImul_Crypt_scr_1 nop nop nop nop nop BACKImul_Crypt_scr_1: [DISABLE] dealloc(PLACEImul_Crypt_scr_1) "Tutorial-i386.exe"+24073: cmp [ebx+00000480],000003E8 Но и он ищет (float)555 более чем за 0,8 секунд. Не помогло даже это Спойлер [ENABLE] alloc(PLACEImul_Crypt_scr_1,10048) label(BACKImul_Crypt_scr_1) label(Imul_Crypt_scr_1_Act) label(Imul_Crypt_scr_1_Act_Cycle) label(Imul_Crypt_scr_1_Crypt_Found) alloc(Imul_Crypt_Checker,100) registersymbol(Imul_Crypt_Checker) alloc(Original_Value,100) registersymbol(Original_Value) alloc(Original_Value_Crypted,100) registersymbol(Original_Value_Crypted) PLACEImul_Crypt_scr_1: cmp [Imul_Crypt_Checker],#1 je Imul_Crypt_scr_1_Act cmp [ebx+00000480],000003E8 jmp BACKImul_Crypt_scr_1 Imul_Crypt_scr_1_Act://Imul_Crypt_scr_1_Act push eax push ebx push edx push ecx mov ecx,[Original_Value] push 8FFFFFEE push 87FFFFEF push 7FFFFFF0 push 77FFFFF1 push 6FFFFFF2 push 67FFFFF3 push 5FFFFFF4 push 57FFFFF5 push 4FFFFFF6 push 47FFFFF7 push 3FFFFFF8 push 37FFFFF9 push 2FFFFFFA push 27FFFFFB push 1FFFFFFC push 17FFFFFD push FFFFFFE push 7FFFFFF push 0 Imul_Crypt_scr_1_Act_Cycle://Imul_Crypt_scr_1_Act_Cycle add [esp],1 imul eax,[esp],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+4],1 imul eax,[esp+4],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+4] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+8],1 imul eax,[esp+8],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+8] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+C],1 imul eax,[esp+C],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+C] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+10],1 imul eax,[esp+10],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+10] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+14],1 imul eax,[esp+14],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+14] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+18],1 imul eax,[esp+18],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+18] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+1C],1 imul eax,[esp+1C],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+1C] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+20],1 imul eax,[esp+20],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+20] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+24],1 imul eax,[esp+24],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+24] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+28],1 imul eax,[esp+28],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+28] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+2C],1 imul eax,[esp+2C],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+2C] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+30],1 imul eax,[esp+30],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+30] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+34],1 imul eax,[esp+34],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+34] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+38],1 imul eax,[esp+38],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+38] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+3C],1 imul eax,[esp+3C],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+3C] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+40],1 imul eax,[esp+40],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+40] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+44],1 imul eax,[esp+44],B05C6C43 cmp eax,ecx jne @f mov ebx,[esp+44] jmp Imul_Crypt_scr_1_Crypt_Found @@: add [esp+48],1 imul eax,[esp+48],B05C6C43 cmp eax,ecx jne Imul_Crypt_scr_1_Act_Cycle mov ebx,[esp+c] jmp Imul_Crypt_scr_1_Crypt_Found Imul_Crypt_scr_1_Crypt_Found://Imul_Crypt_scr_1_Crypt_Found mov [Original_Value_Crypted],ebx pop [esp] pop [esp+4] pop [esp+8] pop [esp+C] pop [esp+10] pop [esp+14] pop [esp+18] pop [esp+1C] pop [esp+20] pop [esp+24] pop [esp+28] pop [esp+2C] pop [esp+30] pop [esp+34] pop [esp+38] pop [esp+3C] pop [esp+40] pop [esp+44] pop [esp+48] pop ecx pop edx pop ebx pop eax mov [Imul_Crypt_Checker],#0 cmp [ebx+00000480],000003E8 jmp BACKImul_Crypt_scr_1 ///////////////////////// "Tutorial-i386.exe"+24073: jmp PLACEImul_Crypt_scr_1 nop nop nop nop nop BACKImul_Crypt_scr_1: [DISABLE] dealloc(PLACEImul_Crypt_scr_1) "Tutorial-i386.exe"+24073: cmp [ebx+00000480],000003E8 Изменено 11 марта, 2019 пользователем Antonshka Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 7 минут назад, Antonshka сказал: У меня @Antonshka, ты и в первом своем скрипте и в этих выкидываешь значения. Я имею ввиду, что inc ebx ( в других скриптах add..................) стоят не там: Podbor: // inc ebx // его нужно ставить не здесь imul eax,ebx,B05C6C43 cmp eax,ecx je @f inc ebx // а вот здесь jmp Podbor Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 Можно сделать 2 скрипта, для быстрого и для точного сканирования. В первом пожертвовав точностью увеличиться скорость, достаточно сделать итератор i+=4/i+=8, скорость увеличиться в 2-4 раза. Ну, а второй точный, это то, что сейчас у тебя есть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 Только что, partoftheworlD сказал: Можно сделать 2 скрипта А лучше найти игровое шифрование, не думаю что разрабы так же методом перебора делают. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 Только что, Garik66 сказал: А лучше найти игровое шифрование, не думаю что разрабы так же методом перебора делают. У них может быть свой инструмент с определенной формулой, который при сброке самостоятельно константы шифрует. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 11 марта, 2019 Автор Поделиться Опубликовано 11 марта, 2019 2 минуты назад, Garik66 сказал: @Antonshka, ты и в первом своем скрипте и в этих выкидываешь значения. Имеешь в виду то, что пропускается поиск для изначальных значений? Например для 0 когда оно сразу увеличивается на 1, или для 7FFFFFFF когда оно сразу уменьшается на 1 и проверяется уже уменьшенное число? Если ты об этом, то верно подмечено! Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 16 минут назад, Antonshka сказал: Не помогло даже это ЗЫ: я думаю из-за того что юзаешь стек, т.е. несмотря что разделил поиск теряешь на обращении к нему. Только что, Antonshka сказал: Если ты об этом да 4 минуты назад, partoftheworlD сказал: У них может быть свой инструмент с определенной формулой, который при сброке самостоятельно константы шифрует. Эт понятно, но для конкретного случая (для игры) самый быстрый по скорости конечно будет найти способ шифрования. И на самом деле очень интересно как они это сделали. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 11 марта, 2019 Автор Поделиться Опубликовано 11 марта, 2019 (изменено) 15 минут назад, Garik66 сказал: ЗЫ: я думаю из-за того что юзаешь стек, т.е. несмотря что разделил поиск теряешь на обращении к нему. да После многих опытов у меня сложилось впечатление - множество операций всему виной. Переместить, сложить, увеличить, сравнить - вот на что уходит время. Но так ли это на самом деле, об этом точно скажут специалисты. Изменено 11 марта, 2019 пользователем Antonshka Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 11 марта, 2019 Автор Поделиться Опубликовано 11 марта, 2019 (изменено) Проверил, скрипт 1 быстрее скрипта 2, в 4-5 раза. Скрипт 1 Спойлер push eax push ebx push ecx push edx mov ecx,[Value] Podbor: inc ebx imul eax,ebx,B05C6C43 cmp eax,ecx je @f jmp Podbor @@: mov [adres],ebx mov [Value_EAX],eax pop edx pop ecx pop ebx pop eax Скрипт 2 Спойлер push eax push ebx push ecx push edx mov ecx,[Value] push 0 Podbor: inc [esp] imul eax,[esp],B05C6C43 cmp eax,ecx je @f jmp Podbor @@: mov ebx,[esp] mov [adres],ebx mov [Value_EAX],eax pop [esp] pop edx pop ecx pop ebx pop eax Изменено 11 марта, 2019 пользователем Antonshka Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 14 минут назад, Antonshka сказал: inc ebx 14 минут назад, Antonshka сказал: inc [esp] так и не переместил @Antonshka, на LUA напиши (благо ты его хорошо знаешь) и интервал таймера самый быстрый сделай. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 11 марта, 2019 Автор Поделиться Опубликовано 11 марта, 2019 12 минут назад, Garik66 сказал: так и не переместил @Antonshka, на LUA напиши (благо ты его хорошо знаешь) и интервал таймера самый быстрый сделай. Забыл переместить. То зацикливание которое мы делали в АА скрипте - работает на частоте процессора, с такой же частотой будет работать "while do" в луа скрипте. Такое предположение. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 2 минуты назад, Antonshka сказал: работает на частоте процессора Точно(я сначала подумал что с частотой инструкции, на которой мы делали инъекцию) - не подумал. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 Предложу вот такой вариант, если кто-то сможет попробовать, то отпишитесь, что там по скорости. Tutorial-i386.CT Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 11 марта, 2019 Автор Поделиться Опубликовано 11 марта, 2019 8 минут назад, partoftheworlD сказал: Предложу вот такой вариант, если кто-то сможет попробовать, то отпишитесь, что там по скорости. Tutorial-i386.CT (Float)555 - около секунды. В скрипте необычный порядок высвобождения стека, опечатка? Спойлер push esi push edi push ebx push ecx push edx mov esi, [tmp] mov edi, [constant] mov ebx, [value] mov ecx, esi imul ecx, edi lea eax, [edi+ecx] cmp ecx, ebx je Done lea edx, [esi+1] Loop: mov ecx, eax mov esi, edx lea edx, [edx+1] add eax, edi cmp ebx, ecx jne Loop mov [tmp], ecx Done: mov [result],esi pop esi pop edi pop ebx pop ecx pop edx Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 11 марта, 2019 Поделиться Опубликовано 11 марта, 2019 6 минут назад, Antonshka сказал: В скрипте необычный порядок высвобождения стека, опечатка? Не, просто копипаста? tmp == 0x10000000, потому что значения никогда не бывают меньше, так что смысла от 0 до 0x10000000 перебирать нет. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения