Antonshka Опубликовано 20 февраля, 2020 Поделиться Опубликовано 20 февраля, 2020 Привет, уже несколько часов пытаюсь придумать способ сохранить все адреса с которыми работает одна инструкция. Сохранить куда-нибудь в память, в одно место, для удобства. Когда-то давно проделывал такое с легкостью, как помниться, но не сейчас. Ничего не получается. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 20 февраля, 2020 Поделиться Опубликовано 20 февраля, 2020 28 минут назад, Antonshka сказал: Когда-то давно проделывал такое с легкостью, как помниться, но не сейчас. Значит это дело было во сне. Ведь не даром говорится, мастерство не пропьёшь! Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 20 февраля, 2020 Поделиться Опубликовано 20 февраля, 2020 Если в CE, то выдели память, потом сделай проверку на соответствие со счётчиком и нулём, записывай новые адреса в выделенную память, пока они не иссякнут, вот пример, создаёшь поток на code, и в foadr по порядку записываются eax регистры создаваемых потоков, на инструкцию приспособить не сложно. Спойлер [ENABLE] //в eax новый адрес alloc(code,200) //исполняемый код registersymbol(code) alloc(foadr,2048) //код для сохранения адресов registersymbol(foadr) code: //mov [eax],ecx //оригинальная инструкция какая у тебя //код проверки push ebx push edx //счётчик xor edx,edx //обнуление счётчика mov ebx, foadr //адрес выделенной памяти teststart: cmp edx,#512 //проверка на переполнение места jge nows cmp [ebx],eax //проверка на уникальность je nows cmp [ebx], 0 //проверка на ноль je writed inc edx add ebx,4 jmp teststart nows: pop edx pop ebx ret writed: mov [ebx], eax //запись jmp nows [DISABLE] unregistersymbol(code) unregistersymbol(foadr) dealloc(foadr) dealloc(code) А ещё можно нажать на инструкцию, и там выбрать "Показать все адреса с которыми работает эта инструкция". Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 20 февраля, 2020 Поделиться Опубликовано 20 февраля, 2020 9 минут назад, imaginary сказал: в foadr по порядку записываются eax Ан нет, Проверь свой код. Если не найдешь ошибку, напиши, расскажу. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 20 февраля, 2020 Автор Поделиться Опубликовано 20 февраля, 2020 49 минут назад, LIRW сказал: Значит это дело было во сне. Ведь не даром говорится, мастерство не пропьёшь! Сам не понимаю происходящего ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 20 февраля, 2020 Автор Поделиться Опубликовано 20 февраля, 2020 35 минут назад, imaginary сказал: Если в CE, то выдели память, Нужно в СЕ, да. 36 минут назад, imaginary сказал: А ещё можно нажать на инструкцию, и там выбрать "Показать все адреса с которыми работает эта инструкция". Мне просто нужно в собранном трейнере/приложении получать эти адреса. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 20 февраля, 2020 Автор Поделиться Опубликовано 20 февраля, 2020 (изменено) Только что придумалось Спойлер [ENABLE] alloc(PLACEGet_Bones_Bases_scr_1,2048,"NeedForSpeedHeat.exe"+D5360C1) label(BACKGet_Bones_Bases_scr_1) label(Get_Bones_Bases_scr_1_Act) label(Get_Bones_Bases_scr_1_Search_Start) label(Get_Bones_Bases_scr_1_Search_Still) label(Get_Bones_Bases_scr_1_Search_End) alloc(Players_Bones_Filters_Values_Alloc_Checker,100) registersymbol(Players_Bones_Filters_Values_Alloc_Checker) alloc(Players_Bones_Filters_Values_Alloc,10000) registersymbol(Players_Bones_Filters_Values_Alloc) alloc(Players_Bones_Filters_Values_Alloc_Count,100) registersymbol(Players_Bones_Filters_Values_Alloc_Count) PLACEGet_Bones_Bases_scr_1: pushfq cmp [Players_Bones_Filters_Values_Alloc_Checker],#1 je Get_Bones_Bases_scr_1_Act popfq mov rbx,[rcx+50] test rbx,rbx jmp BACKGet_Bones_Bases_scr_1 Get_Bones_Bases_scr_1_Act://Get_Bones_Bases_scr_1_Act push r9 push r10 push r11 mov r9,0 mov r10,Players_Bones_Filters_Values_Alloc // Выделенная память под список адресов mov r11,Players_Bones_Filters_Values_Alloc_Count // Оффсет для вдресов выделенной памяти //---------------------------------------------- Get_Bones_Bases_scr_1_Search_Start://Get_Bones_Bases_scr_1_Search_Start cmp r9,[r11] jb Get_Bones_Bases_scr_1_Search_Still mov [r10+r9],rcx add [r11],10 jmp Get_Bones_Bases_scr_1_Search_End Get_Bones_Bases_scr_1_Search_Still://Get_Bones_Bases_scr_1_Search_Still cmp [r10+r9],rcx je Get_Bones_Bases_scr_1_Search_End add r9,10 jmp Get_Bones_Bases_scr_1_Search_Start //---------------------------------------------- Get_Bones_Bases_scr_1_Search_End://Get_Bones_Bases_scr_1_Search_End pop r11 pop r10 pop r9 popfq mov rbx,[rcx+50] test rbx,rbx jmp BACKGet_Bones_Bases_scr_1 ////////////////////////////// "NeedForSpeedHeat.exe"+D5360C1: jmp PLACEGet_Bones_Bases_scr_1 nop nop BACKGet_Bones_Bases_scr_1: [DISABLE] dealloc(PLACEGet_Bones_Bases_scr_1) "NeedForSpeedHeat.exe"+D5360C1: mov rbx,[rcx+50] test rbx,rbx { // ORIGINAL CODE - INJECTION POINT: "NeedForSpeedHeat.exe"+D5360C1 "NeedForSpeedHeat.exe"+D53609F: 48 8B 41 20 - mov rax,[rcx+20] "NeedForSpeedHeat.exe"+D5360A3: 48 89 42 08 - mov [rdx+08],rax "NeedForSpeedHeat.exe"+D5360A7: 48 8B 51 20 - mov rdx,[rcx+20] "NeedForSpeedHeat.exe"+D5360AB: 48 85 D2 - test rdx,rdx "NeedForSpeedHeat.exe"+D5360AE: 74 07 - je NeedForSpeedHeat.exe+D5360B7 "NeedForSpeedHeat.exe"+D5360B0: 48 8B 41 18 - mov rax,[rcx+18] "NeedForSpeedHeat.exe"+D5360B4: 48 89 02 - mov [rdx],rax "NeedForSpeedHeat.exe"+D5360B7: 31 C0 - xor eax,eax "NeedForSpeedHeat.exe"+D5360B9: 48 89 41 18 - mov [rcx+18],rax "NeedForSpeedHeat.exe"+D5360BD: 48 89 41 20 - mov [rcx+20],rax // ---------- INJECTING HERE ---------- "NeedForSpeedHeat.exe"+D5360C1: 48 8B 59 50 - mov rbx,[rcx+50] "NeedForSpeedHeat.exe"+D5360C5: 48 85 DB - test rbx,rbx // ---------- DONE INJECTING ---------- "NeedForSpeedHeat.exe"+D5360C8: 74 18 - je NeedForSpeedHeat.exe+D5360E2 "NeedForSpeedHeat.exe"+D5360CA: 66 0F 1F 44 00 00 - nop [rax+rax+00] "NeedForSpeedHeat.exe"+D5360D0: 48 8B 03 - mov rax,[rbx] "NeedForSpeedHeat.exe"+D5360D3: 48 89 D9 - mov rcx,rbx "NeedForSpeedHeat.exe"+D5360D6: FF 50 08 - call qword ptr [rax+08] "NeedForSpeedHeat.exe"+D5360D9: 48 8B 5B 10 - mov rbx,[rbx+10] "NeedForSpeedHeat.exe"+D5360DD: 48 85 DB - test rbx,rbx "NeedForSpeedHeat.exe"+D5360E0: 75 EE - jne NeedForSpeedHeat.exe+D5360D0 "NeedForSpeedHeat.exe"+D5360E2: 48 83 C4 20 - add rsp,20 "NeedForSpeedHeat.exe"+D5360E6: 5B - pop rbx } Наверно есть и попроще способы. но это все что смог. Сейчас пытаюсь понять способ предложенный @imaginary Если не жалко, выложите свои варианты. Изменено 20 февраля, 2020 пользователем Antonshka Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 20 февраля, 2020 Автор Поделиться Опубликовано 20 февраля, 2020 40 минут назад, Garik66 сказал: Ан нет, Проверь свой код. Если не найдешь ошибку, напиши, расскажу. Кажется запишется один и тот же адрес многое количество раз. Я не до конца понял схему работы скрипта. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 20 февраля, 2020 Автор Поделиться Опубликовано 20 февраля, 2020 57 минут назад, imaginary сказал: Показать контент [ENABLE] //в eax новый адрес alloc(code,200) //исполняемый код registersymbol(code) alloc(foadr,2048) //код для сохранения адресов registersymbol(foadr) code: //mov [eax],ecx //оригинальная инструкция какая у тебя //код проверки push ebx push edx //счётчик xor edx,edx //обнуление счётчика mov ebx, foadr //адрес выделенной памяти teststart: cmp edx,#512 //проверка на переполнение места jge nows cmp [ebx],eax //проверка на уникальность je nows cmp [ebx], 0 //проверка на ноль je writed inc edx add ebx,4 jmp teststart nows: pop edx pop ebx ret writed: mov [ebx], eax //запись jmp nows [DISABLE] unregistersymbol(code) unregistersymbol(foadr) dealloc(foadr) dealloc(code) edx и ebx трудно распознавать, путаются?. Используй пожалуйста визуально хорошо различимые регистры? Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 20 февраля, 2020 Поделиться Опубликовано 20 февраля, 2020 3 минуты назад, Garik66 сказал: Если не найдешь ошибку, напиши, расскажу. Да не буду я искать, я его запускала и он работал), укажи, даже интересно Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 21 февраля, 2020 Автор Поделиться Опубликовано 21 февраля, 2020 Тот же скрипт с функцией сохранения адресов по порядку, по возрастанию. Можно сделать и по убыванию, для этого в скрипте нужно поменять строку jb Get_Bones_Bases_scr_1_Sorting_Process_Replace_Skip на ja Get_Bones_Bases_scr_1_Sorting_Process_Replace_Skip Сам скрипт. В нем сохраняются адреса (без смещения 50), и их содержимое. Просто так нужно для приложения. Спойлер [ENABLE] alloc(PLACEGet_Bones_Bases_scr_1,2048,"NeedForSpeedHeat.exe"+D5360C1) label(BACKGet_Bones_Bases_scr_1) label(Get_Bones_Bases_scr_1_Act) label(Get_Bones_Bases_scr_1_Search_Start) label(Get_Bones_Bases_scr_1_Search_Still) label(Get_Bones_Bases_scr_1_Search_End) label(Get_Bones_Bases_scr_1_Sorting_Act) label(Get_Bones_Bases_scr_1_Sorting_Start) label(Get_Bones_Bases_scr_1_Sorting_End) label(Get_Bones_Bases_scr_1_Sorting_Process) label(Get_Bones_Bases_scr_1_Sorting_Process_Replace_Skip) label(Get_Bones_Bases_scr_1_Sorting_Process_Star) label(Get_Bones_Bases_scr_1_Sorting_Process_End) alloc(Players_Bones_Filters_Values_Alloc_Checker,100) registersymbol(Players_Bones_Filters_Values_Alloc_Checker) alloc(Players_Bones_Filters_Values_Alloc,10000) registersymbol(Players_Bones_Filters_Values_Alloc) alloc(Players_Bones_Filters_Values_Alloc_Count,100) registersymbol(Players_Bones_Filters_Values_Alloc_Count) PLACEGet_Bones_Bases_scr_1: pushfq cmp [Players_Bones_Filters_Values_Alloc_Checker],#1 je Get_Bones_Bases_scr_1_Act popfq mov rbx,[rcx+50] test rbx,rbx jmp BACKGet_Bones_Bases_scr_1 Get_Bones_Bases_scr_1_Act://Get_Bones_Bases_scr_1_Act push rax push r9 push r10 push r11 mov r9,0 mov r10,Players_Bones_Filters_Values_Alloc mov r11,Players_Bones_Filters_Values_Alloc_Count //---------------------------------------------- Get_Bones_Bases_scr_1_Search_Start://Get_Bones_Bases_scr_1_Search_Start cmp r9,[r11] jb Get_Bones_Bases_scr_1_Search_Still mov [r10+r9],rcx mov rax,[rcx+50] mov [r10+r9+8],rax call Get_Bones_Bases_scr_1_Sorting_Act add [r11],10 jmp Get_Bones_Bases_scr_1_Search_End Get_Bones_Bases_scr_1_Search_Still://Get_Bones_Bases_scr_1_Search_Still cmp [r10+r9],rcx je Get_Bones_Bases_scr_1_Search_End add r9,10 jmp Get_Bones_Bases_scr_1_Search_Start //---------------------------------------------- Get_Bones_Bases_scr_1_Search_End://Get_Bones_Bases_scr_1_Search_End pop r11 pop r10 pop r9 pop rax popfq mov rbx,[rcx+50] test rbx,rbx jmp BACKGet_Bones_Bases_scr_1 Get_Bones_Bases_scr_1_Sorting_Act://Get_Bones_Bases_scr_1_Sorting_Act push r12 push r13 push r14 push r15 mov r12,0 Get_Bones_Bases_scr_1_Sorting_Start://Get_Bones_Bases_scr_1_Sorting_Start cmp r12,[r11] jae Get_Bones_Bases_scr_1_Sorting_End call Get_Bones_Bases_scr_1_Sorting_Process add r12,10 jmp Get_Bones_Bases_scr_1_Sorting_Start Get_Bones_Bases_scr_1_Sorting_End://Get_Bones_Bases_scr_1_Sorting_End pop r15 pop r14 pop r13 pop r12 ret Get_Bones_Bases_scr_1_Sorting_Process://Get_Bones_Bases_scr_1_Sorting_Process mov r13,0 Get_Bones_Bases_scr_1_Sorting_Process_Star://Get_Bones_Bases_scr_1_Sorting_Process_Star cmp r13,[r11] jae Get_Bones_Bases_scr_1_Sorting_Process_End mov r14,[r10+r13] mov r15,[r10+r13+10] cmp r14,r15 jb Get_Bones_Bases_scr_1_Sorting_Process_Replace_Skip fild qword ptr [r10+r13] fild qword ptr [r10+r13+8] fild qword ptr [r10+r13+10] fild qword ptr [r10+r13+10+8] fistp qword ptr [r10+r13+8] fistp qword ptr [r10+r13] fistp qword ptr [r10+r13+10+8] fistp qword ptr [r10+r13+10] Get_Bones_Bases_scr_1_Sorting_Process_Replace_Skip://Get_Bones_Bases_scr_1_Sorting_Process_Replace_Skip add r13,10 jmp Get_Bones_Bases_scr_1_Sorting_Process_Star Get_Bones_Bases_scr_1_Sorting_Process_End://Get_Bones_Bases_scr_1_Sorting_Process_End ret ////////////////////////////// "NeedForSpeedHeat.exe"+D5360C1: jmp PLACEGet_Bones_Bases_scr_1 nop nop BACKGet_Bones_Bases_scr_1: [DISABLE] dealloc(PLACEGet_Bones_Bases_scr_1) "NeedForSpeedHeat.exe"+D5360C1: mov rbx,[rcx+50] test rbx,rbx { // ORIGINAL CODE - INJECTION POINT: "NeedForSpeedHeat.exe"+D5360C1 "NeedForSpeedHeat.exe"+D53609F: 48 8B 41 20 - mov rax,[rcx+20] "NeedForSpeedHeat.exe"+D5360A3: 48 89 42 08 - mov [rdx+08],rax "NeedForSpeedHeat.exe"+D5360A7: 48 8B 51 20 - mov rdx,[rcx+20] "NeedForSpeedHeat.exe"+D5360AB: 48 85 D2 - test rdx,rdx "NeedForSpeedHeat.exe"+D5360AE: 74 07 - je NeedForSpeedHeat.exe+D5360B7 "NeedForSpeedHeat.exe"+D5360B0: 48 8B 41 18 - mov rax,[rcx+18] "NeedForSpeedHeat.exe"+D5360B4: 48 89 02 - mov [rdx],rax "NeedForSpeedHeat.exe"+D5360B7: 31 C0 - xor eax,eax "NeedForSpeedHeat.exe"+D5360B9: 48 89 41 18 - mov [rcx+18],rax "NeedForSpeedHeat.exe"+D5360BD: 48 89 41 20 - mov [rcx+20],rax // ---------- INJECTING HERE ---------- "NeedForSpeedHeat.exe"+D5360C1: 48 8B 59 50 - mov rbx,[rcx+50] "NeedForSpeedHeat.exe"+D5360C5: 48 85 DB - test rbx,rbx // ---------- DONE INJECTING ---------- "NeedForSpeedHeat.exe"+D5360C8: 74 18 - je NeedForSpeedHeat.exe+D5360E2 "NeedForSpeedHeat.exe"+D5360CA: 66 0F 1F 44 00 00 - nop [rax+rax+00] "NeedForSpeedHeat.exe"+D5360D0: 48 8B 03 - mov rax,[rbx] "NeedForSpeedHeat.exe"+D5360D3: 48 89 D9 - mov rcx,rbx "NeedForSpeedHeat.exe"+D5360D6: FF 50 08 - call qword ptr [rax+08] "NeedForSpeedHeat.exe"+D5360D9: 48 8B 5B 10 - mov rbx,[rbx+10] "NeedForSpeedHeat.exe"+D5360DD: 48 85 DB - test rbx,rbx "NeedForSpeedHeat.exe"+D5360E0: 75 EE - jne NeedForSpeedHeat.exe+D5360D0 "NeedForSpeedHeat.exe"+D5360E2: 48 83 C4 20 - add rsp,20 "NeedForSpeedHeat.exe"+D5360E6: 5B - pop rbx } Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения