| Сейчас на форуме: 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 —› Программирование —› Формирование команд | 
| Эта тема закрыта. Ответы больше не принимаются. | 










 
 А вообще могу успокоить: ассемблер писать просить никого не буду... в ближайщем будущем.
RS
 Для печати