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

Сохранить адреса с которыми работает инструкция


Antonshka

Рекомендуемые сообщения

Привет, уже несколько часов пытаюсь придумать способ сохранить все адреса с которыми работает одна инструкция. Сохранить куда-нибудь в память, в одно место, для удобства.

 

Когда-то давно проделывал такое с легкостью, как помниться, но не сейчас. Ничего не получается.

Ссылка на комментарий
Поделиться на другие сайты

28 минут назад, Antonshka сказал:

Когда-то давно проделывал такое с легкостью, как помниться, но не сейчас.

Значит это дело было во сне. :)  Ведь не даром говорится, мастерство не пропьёшь! 

 

Ссылка на комментарий
Поделиться на другие сайты

Если в 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)

 


А ещё можно нажать на инструкцию, и там выбрать "Показать все адреса с которыми работает эта инструкция".

 


 

 

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, imaginary сказал:

в foadr по порядку записываются eax

Ан нет,
Проверь свой код.
Если не найдешь ошибку, напиши, расскажу. 

 

Ссылка на комментарий
Поделиться на другие сайты

49 минут назад, LIRW сказал:

Значит это дело было во сне. :)  Ведь не даром говорится, мастерство не пропьёшь! 

 

 

Сам не понимаю происходящего ?

 

Ссылка на комментарий
Поделиться на другие сайты

35 минут назад, imaginary сказал:

Если в CE, то выдели память,

Нужно в СЕ, да.

 

36 минут назад, imaginary сказал:

А ещё можно нажать на инструкцию, и там выбрать "Показать все адреса с которыми работает эта инструкция".

Мне просто нужно в собранном трейнере/приложении получать эти адреса.

Ссылка на комментарий
Поделиться на другие сайты

Только что придумалось

Спойлер

[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

 

Если не жалко, выложите свои варианты.

 

Изменено пользователем Antonshka
Ссылка на комментарий
Поделиться на другие сайты

40 минут назад, Garik66 сказал:

Ан нет,
Проверь свой код.
Если не найдешь ошибку, напиши, расскажу. 

 

Кажется запишется один и тот же адрес многое количество раз.

Я не до конца понял схему работы скрипта.

Ссылка на комментарий
Поделиться на другие сайты

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 трудно распознавать, путаются?. Используй пожалуйста визуально хорошо различимые регистры?

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, Garik66 сказал:

Если не найдешь ошибку, напиши, расскажу. 

Да не буду я искать, я его запускала и он работал), укажи, даже интересно

Ссылка на комментарий
Поделиться на другие сайты

Тот же скрипт с функцией сохранения адресов по порядку, по возрастанию. Можно сделать и по убыванию, для этого в скрипте нужно поменять строку

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
}

 

 

 

Ссылка на комментарий
Поделиться на другие сайты

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

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

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