Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых) |
eXeL@B —› Программирование —› Формирование команд |
Посл.ответ | Сообщение |
|
Создано: 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, как это было бы удобно для соответствия переходам ? Может кто-нибудь поможет с обьяснениями ? ----- все багрепорты - в личные сообщения |
|
Создано: 17 августа 2006 20:30 · Личное сообщение · #2 |
|
Создано: 17 августа 2006 20:39 · Личное сообщение · #3 |
|
Создано: 17 августа 2006 20:53 · Личное сообщение · #4 NIKOLA пишет: можно PUSH XXXXXXXX и RET Нет, так не пойдёт, так как это - начало программы(адрес 00405000 есть ЕР) Если кто может, подкиньте реализацию на МАSМ32 вроде функции: OffsetToJmpOpcode OffsetJumpTo: DWORD, а в "еах" возвращать готовый шифр, к которому придётся только приписать опкод "E9" в начало. ----- все багрепорты - в личные сообщения |
|
Создано: 18 августа 2006 07:21 · Личное сообщение · #5 |
|
Создано: 18 августа 2006 07:35 · Личное сообщение · #6 |
|
Создано: 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), только он записывает данные тоже задом наперед(младший байт по младшему адресу). |
|
Создано: 18 августа 2006 23:21 · Поправил: Rascal · Личное сообщение · #8 HoBleen пишет: прибавляется к адрессу СЛЕДУЮЩЕЙ команды - 405007 Ппц. Компьтер не знает адрес следующей команды. Он его высчитывает, так же нужно и человеку: EIP (адрес байта E9) + 5 (длина команды E9 XXXXXXXX) - это откуда. Не путай. Компьютер как никак машина. HoBleen пишет: только он записывает данные тоже задом наперед(младший байт по младшему адресу). По-моему так и получится. Хотя если не так было я memcpy юзал и всё становилось ок ----- Недостаточно только получить знания:надо найти им приложение |
|
Создано: 19 августа 2006 00:11 · Личное сообщение · #9 Всё вроде понятно, но ещё есть пара вопросов: 00401000 - E9 FB0F0000 JMP 402000 00401005 - E9 F60F0000 JMP 402000 00405002 - E9 F9CFFFFF JMP 402000 В чём же тут разница, и где об этом можно почитать ? А если делать такой патч динамическим как считать данные из регистра EIP ? ----- все багрепорты - в личные сообщения |
|
Создано: 19 августа 2006 00:17 · Личное сообщение · #10 |
|
Создано: 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 |
|
Создано: 19 августа 2006 11:25 · Личное сообщение · #12 |
|
Создано: 19 августа 2006 11:29 · Личное сообщение · #13 |
|
Создано: 19 августа 2006 14:30 · Поправил: Rascal · Личное сообщение · #14 HandMill К стати в туторе о распаковке четвёртого SecuRom писаля о прыжках и колах относительных и абсолютных http://www.exelab.ru/art/?action=view&id=309 ----- Недостаточно только получить знания:надо найти им приложение |
|
Создано: 19 августа 2006 18:40 · Личное сообщение · #15 |
|
Создано: 21 августа 2006 11:53 · Личное сообщение · #16 Вот тут сформировал немного функций... О, великие ГУРУ, если что не так поправте простого смертного dfe1_21.08.2006_CRACKLAB.rU.tgz - CMD.rar ----- все багрепорты - в личные сообщения |
|
Создано: 21 августа 2006 13:02 · Личное сообщение · #17 |
|
Создано: 21 августа 2006 16:06 · Личное сообщение · #18 |
|
Создано: 21 августа 2006 18:56 · Личное сообщение · #19 Не могу уважать людей, которые, не заходя в раздел для новичков, создают такие топики. Цитата из Дневников чайника: Более подробную информацию об устройстве машинных команд смотри в документации на IA-32 от www.intel.com/, том второй. Номера для поиска: 253665?? - том 1-й, 253666?? и 253667?? - том 2-й, глава "Instruction Format" 253668?? - том 3-й. ----- Всем привет, я вернулся |
|
Создано: 22 августа 2006 11:06 · Поправил: tundra37 · Личное сообщение · #20 |
|
Создано: 23 августа 2006 23:08 · Личное сообщение · #21 |
eXeL@B —› Программирование —› Формирование команд |
Эта тема закрыта. Ответы больше не принимаются. |