Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Формирование команд
Посл.ответ Сообщение

Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 17 августа 2006 20:04
· Личное сообщение · #1

Вобщем такой сабж: не знаю как програмно сформировать адрес перехода куда-нибудь, к примеру к экзешнику я добавляю секцию, а потом формирую там команды в самом начале секции:

[60h] - pushad
[61h] - popad
[E9 XXXXXXXX] - JMP XXXXXXXX

Это я туда записываю опкоды команд (опкоду 60h соответствует команда pushad,61h - popad) и вот собственно проблема: как сформировать этот самый адрес - XXXXXXXX ? Допустим XXXXXXXX - это некое ОЕР, равное 401000 (физ адрес - 1000, 400000 - Image Base)

И вот ещё:
00405000 > 60 PUSHAD
00405001 61 POPAD
00405002 - E9 F9BFFFFF JMP CRACKME1.00401000
00405007 - E9 F5BFFFFF JMP CRACKME1.00401001
0040500C - E9 F1BFFFFF JMP CRACKME1.00401002
00405011 - E9 EDBFFFFF JMP CRACKME1.00401003
00405016 - E9 E9BFFFFF JMP CRACKME1.00401004

Почему тут разница между опкодами команд равна аж 4000000h(я имею в виду такие числа: F9BFFFFF, F5BFFFFF и т.п.) а не 400000h(Image Base) или 1, как это было бы удобно для соответствия переходам ? Может кто-нибудь поможет с обьяснениями ?

-----
все багрепорты - в личные сообщения





Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 17 августа 2006 20:30
· Личное сообщение · #2

можно PUSH XXXXXXXX и RET.



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 17 августа 2006 20:39
· Личное сообщение · #3

00405002 - E9 F9BFFFFF
значит jmp (405007 + FFFFBFF9), т.е. jmp 401000

Допустим надо по адресу 401000 записать jmp на адрес 402000:

mov eax, 401000
mov byte ptr [eax], 0e9h
mov dword ptr [eax+1], 402000h - 401005h




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 17 августа 2006 20:53
· Личное сообщение · #4

NIKOLA пишет:
можно PUSH XXXXXXXX и RET

Нет, так не пойдёт, так как это - начало программы(адрес 00405000 есть ЕР) Если кто может, подкиньте реализацию на МАSМ32 вроде функции: OffsetToJmpOpcode OffsetJumpTo: DWORD, а в "еах" возвращать готовый шифр, к которому придётся только приписать опкод "E9" в начало.

-----
все багрепорты - в личные сообщения





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 18 августа 2006 07:21
· Личное сообщение · #5

HandMill пишет:
шифр

Забавно =)

Тебе уже написали, алго такой:
адрес_куда - (минус) адрес_откуда - 5 = байты прыжка
далее
E9 байты_прыжка

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 18 августа 2006 07:35
· Личное сообщение · #6

HandMill
С ассемблируюй с дельта смещение и посмотри весь этот трюк получения дельты до полного понимания!

-----
My love is very cool girl.





Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 18 августа 2006 09:48
· Личное сообщение · #7

00405002 - E9 F9BFFFFF JMP CRACKME1.00401000
00405007 - ...
1) В опкоде jmp'a байты адреса записаны зажом наперед, в стиле Little-Indian(так их воспринимает проц).
2) Операнд (в данном случае это F9BFFFFF задлм наперед - FFFFBFF9) прибавляется к адрессу СЛЕДУЮЩЕЙ команды - 405007
Вывод -

00405007
+
FFFFBFF9
------------
00401000 (- через переполнение)

И для МАСМа оперенд формируется так(как у Rascal) - <Адресс куда> - <Адресс откуда> - 5 (длина команды jmp), только он записывает данные тоже задом наперед(младший байт по младшему адресу).




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 18 августа 2006 23:21 · Поправил: Rascal
· Личное сообщение · #8

HoBleen пишет:
прибавляется к адрессу СЛЕДУЮЩЕЙ команды - 405007

Ппц. Компьтер не знает адрес следующей команды. Он его высчитывает, так же нужно и человеку: EIP (адрес байта E9) + 5 (длина команды E9 XXXXXXXX) - это откуда. Не путай. Компьютер как никак машина.

HoBleen пишет:
только он записывает данные тоже задом наперед(младший байт по младшему адресу).

По-моему так и получится. Хотя если не так было я memcpy юзал и всё становилось ок

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 19 августа 2006 00:11
· Личное сообщение · #9

Всё вроде понятно, но ещё есть пара вопросов:

00401000 - E9 FB0F0000 JMP 402000

00401005 - E9 F60F0000 JMP 402000

00405002 - E9 F9CFFFFF JMP 402000

В чём же тут разница, и где об этом можно почитать ? А если делать такой патч динамическим как считать данные из регистра EIP ?

-----
все багрепорты - в личные сообщения





Ранг: 260.3 (наставник), 2thx
Активность: 0.120
Статус: Участник
PPC-PROTECT author

Создано: 19 августа 2006 00:17
· Личное сообщение · #10

0x00401000 + 5 + 0x00000FFB = 0x00402000
0x00401005 + 5 + 0x00000FF6 = 0x00402000
0x00405002 + 5 + 0xFFFFCFF9 = 0x00402000

-----
Пиво, сиськи, транс




Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 19 августа 2006 02:35
· Личное сообщение · #11

HandMill пишет:
как считать данные из регистра EIP ?

HandMill пишет:
подкиньте реализацию на МАSМ32

call @F ;00401000
@@: pop eax ;eax = 00401005h =)
nop
nop
nop
nop
; в секцию кода надо разрешить запись.
rmn пишет:
mov byte ptr [eax], 0e9h
mov dword ptr [eax+1], 402000h - 401005h

jmp @B

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 19 августа 2006 11:25
· Личное сообщение · #12

Ага, так... с этим разобрался, команда CALL вроде так же формируется, а вот как быть с формированием такой команды:

[0040103C] || C605 ХХХХХХХХ 00 || MOV BYTE PTR DS:[ХХХХХХХХ],0

тоже сформировать опкод для адреса "404014"? Это делается аналогично?

-----
все багрепорты - в личные сообщения




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 19 августа 2006 11:29
· Личное сообщение · #13

HandMill пишет:
тоже сформировать опкод для адреса "404014"? Это делается аналогично?

А ты не желаешь в документацию заглянуть? Или может быть книги почитать?

-----
Всем привет, я вернулся





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 19 августа 2006 14:30 · Поправил: Rascal
· Личное сообщение · #14

HandMill
К стати в туторе о распаковке четвёртого SecuRom писаля о прыжках и колах относительных и абсолютных

http://www.exelab.ru/art/?action=view&id=309

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 19 августа 2006 18:40
· Личное сообщение · #15

Bitfry пишет:
книги почитать

Какие и где их можно качнуть ?

-----
все багрепорты - в личные сообщения




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 21 августа 2006 11:53
· Личное сообщение · #16

Вот тут сформировал немного функций... О, великие ГУРУ, если что не так поправте простого смертного

dfe1_21.08.2006_CRACKLAB.rU.tgz - CMD.rar

-----
все багрепорты - в личные сообщения





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 21 августа 2006 13:02
· Личное сообщение · #17

HandMill пишет:
Какие и где их можно качнуть ?

Начинаешь с заклинания кода на васме, а потом интеловские мануалы. А так ИМХО ты скоро ассемблер попросишь написать...

-----
Yann Tiersen best and do not fuck




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 21 августа 2006 16:06
· Личное сообщение · #18

Спасибо за совет Я бы не против качнуть "интеловские мануалы", только дай линк. Просто мне сам по себе траффик дороговато обходится - GPRS А вообще могу успокоить: ассемблер писать просить никого не буду... в ближайщем будущем.

-----
все багрепорты - в личные сообщения




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 21 августа 2006 18:56
· Личное сообщение · #19

Не могу уважать людей, которые, не заходя в раздел для новичков, создают такие топики.
Цитата из Дневников чайника:
Более подробную информацию об устройстве машинных команд смотри в документации на IA-32 от www.intel.com/, том второй. Номера для поиска:
253665?? - том 1-й,
253666?? и 253667?? - том 2-й, глава "Instruction Format"
253668?? - том 3-й.

-----
Всем привет, я вернулся




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 22 августа 2006 11:06 · Поправил: tundra37
· Личное сообщение · #20

Bitfry пишет:
Не могу уважать людей

Тов. объяснил - во всем виноват GPRS - RS



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 23 августа 2006 23:08
· Личное сообщение · #21

Всем огромное спасибо за оказанную помощь и навеянные мысли, топик можно считать закрытым.

-----
все багрепорты - в личные сообщения



 eXeL@B —› Программирование —› Формирование команд
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати