Сейчас на форуме: asfa, Rio, _MBK_, Adler (+9 невидимых)

 eXeL@B —› Вопросы новичков —› hiew редактирование байтов в режиме asm
Посл.ответ Сообщение

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 января 2013 17:09 · Поправил: Glycerin
· Личное сообщение · #1

доброго времени суток, разбираюсь со своей первой прогой, почти все места проверки реги открутил, но код у меня там использовался вид xor eax eax или jle изменял на jmp и.т.д, а теперь возникла небольшая загвоздка, есть простой код

листинг 1:

00404DFD: 8B4C2410 mov ecx,[esp][010]; здесь в регистр мне требуется записать timestamp 2050 года
00404E01: 894C2474 mov [esp][074],ecx
00404E05: 8B54241C mov edx,[esp][01C]
00404E09: 89542470 mov [esp][070],edx
00404E0D: C644244203 mov b,[esp][042],3
00404E12: C644244307 mov b,[esp][043],7
00404E17: C644244400 mov b,[esp][044],0
00404E1C: C644244509 mov b,[esp][045],9


произвожу такие действия в hiew, Edit -> ASM -> mov ecx, 9692E0054h, далее hiew
почему то переводит листинг приведенный выше к виду, где добавляются две дополнительные строки (1) и (2)

листинг 2 (код с изменениями):

000041FD: B954E09296 mov ecx,09692E054 ;'ЦТрT'
00004202: 4C dec esp ; (1) сдвигаем указатель стека на 1
00004203: 2474 and al,074 ;'t' ; (2) в регистре EAX изменяем самый старший байт на 74h
00004205: 8B54241C mov edx,[esp][01C]
00004209: 89542470 mov [esp][070],edx
0000420D: C644244203 mov b,[esp][042],3
00004212: C644244307 mov b,[esp][043],7
00004217: C644244400 mov b,[esp][044],0
0000421C: C644244509 mov b,[esp][045],9

листинг 3:

00004170: 8B15DC074700 mov edx,[0004707DC]
00004176: 8B442410 mov eax,[esp][010] ; этот множитель мне требуется изменить
0000417A: 0FAFD0 imul edx,eax ; здесь умножаются два значения
0000417D: A1D0674700 mov eax,[0004767D0]
00004182: 89542410 mov [esp][010],edx
00004186: F7D8 neg eax
00004188: 1BC0 sbb eax,eax
0000418A: 83E0B2 and eax,0B2 ;'▓'
0000418D: 83C04E add eax,04E ;'N'
00004190: 0144244C add [esp][04C],eax
00004194: 8B0F mov ecx,[edi]
00004196: 8B5704 mov edx,[edi][4]
00004199: 8B4708 mov eax,[edi][8]
0000419C: 894C245C mov [esp][05C],ecx
000041A0: 8B4F10 mov ecx,[edi][010]
000041A3: 89542460 mov [esp][060],edx
000041A7: 89442464 mov [esp][064],eax
000041AB: 894C2474 mov [esp][074],ecx
000041AF: 8B15E0074700 mov edx,[0004707E0]
000041B5: 03542410 add edx,[esp][010]
000041B9: 8B4714 mov eax,[edi][014]

произвожу теже самые действия на выходе листинг c двумя добавленным строками (1) и (2) причем команда по адресу 0000417D в листинге 3 удаляется вовсе из листинга 4

листинг 4:

00004170: 8B15DC074700 mov edx,[0004707DC]
00004176: B8990C0000 mov eax,000000C99 ;' ♀Щ'
0000417B: AF scasd ; (1) здесь зачем-то производится поиск байта
0000417C: D0A1D0674700 shl b,[ecx][0004767D0],1 ; (2) здесь свдиг на еденицу
00004182: 89542410 mov [esp][010],edx
00004186: F7D8 neg eax
00004188: 1BC0 sbb eax,eax
0000418A: 83E0B2 and eax,0B2 ;'▓'
0000418D: 83C04E add eax,04E ;'N'
00004190: 0144244C add [esp][04C],eax
00004194: 8B0F mov ecx,[edi]
00004196: 8B5704 mov edx,[edi][4]
00004199: 8B4708 mov eax,[edi][8]
0000419C: 894C245C mov [esp][05C],ecx
000041A0: 8B4F10 mov ecx,[edi][010]
000041A3: 89542460 mov [esp][060],edx
000041A7: 89442464 mov [esp][064],eax
000041AB: 894C2474 mov [esp][074],ecx
000041AF: 8B15E0074700 mov edx,[0004707E0]
000041B5: 03542410 add edx,[esp][010]
000041B9: 8B4714 mov eax,[edi][014]

ребят объясните пожалуйста мне такое поведение инструкций после редактирования, потому что это ломает логику программы
P.S. предполагаю, что такая фигня происходит из за сдвига адресов при редактировании и эти прорехи надо просто nop'ить




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 19 января 2013 17:10
· Личное сообщение · #2

вы размерность вообще новых инструкций видите? откройте глаза




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 19 января 2013 17:10 · Поправил: ajax
· Личное сообщение · #3

Glycerin
размер инструкций разный. вот хиев и меняет следующую, беря от ее начала байты. кодите в асме, а спрашиваете такую элементарность

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 января 2013 17:21
· Личное сообщение · #4

вопрос исчерпан, спасибо



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 января 2013 17:25 · Поправил: Glycerin
· Личное сообщение · #5

только теперь вопрос другой возникает, как мне выполнить задуманное, как все таки поместить в регистр требуемое значение, я прощу прощение за идиотизм, я к асме привыкаю, два дня на нем, мне просто очень потребовался ioncube последний для php 5.3



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 19 января 2013 17:29
· Личное сообщение · #6

Glycerin
Делай jmp в свободное место(конец секции, хидер, новая секция), выполняй там свое грязное дело и делай jmp взад ( не забудь продублировать затертую первым jmp инструкцию)




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 19 января 2013 17:30 · Поправил: ajax
· Личное сообщение · #7

Glycerin пишет:
листинг 1:
00404DFD: 8B4C2410 mov ecx,[esp][010]; здесь в регистр мне требуется записать timestamp
00404E01: 894C2474 mov [esp][074],ecx

если ECX дальше не важен, то
C744247478563412 mov d,[esp][074],012345678 ; timestamp

и так далее, оптимизировать код. или, как Vovan сказал

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 января 2013 17:33
· Личное сообщение · #8

ajax,Vovan666 огромное спасибо мужики, с jmp на пустое место - гениально!, пошел выполнять свой долг


 eXeL@B —› Вопросы новичков —› hiew редактирование байтов в режиме asm
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати