Задача такая нужно автоматизированное средство получения кода из вида: mov eax,1 в вид: \xB8\x01\x00\x00\x00 ну кто в теме знает в чем суть Можно делать в Ольке и другими способами Нужен простейший и быстрый способ получить результат
да вроде были утилиты под это дело типа bintodb Можно и самим bintodb а потом в far найти и заменить запятые на \x и грохнуть все db Тупо и просто ... А так смотри в metasploit есть утилиты заточенные под это ...
фасм + своя утиль для перевода в текстовый хекс. или форматер до/переписать или васм + влинк. в влинке есть режим линковки в бин или хекс дамп (лучшн посмотреть что и как самому, поскольку особенно не проверял) с фасмом меньше инструментов и не надо разбирать много опций, с влинком можно переводить не только асм, но и вообще любую сборку из форматов что он понимает
С фасмом вообще никаких других утилит и инструментов не надо. Код (Text): use32 mov eax,1 repeat $-$$ load buf byte from $$+(%-1) display '\x' repeat 2 dig = buf shr ((2-%)*4) and 0Fh+'0' if dig > '9' dig = dig-'0'+('A'-10) end if display dig end repeat end repeat На выходе имеем \xB8\x01\x00\x00\x00. Я обычно нечто подобное использую, если мне надо кусок кода в OllyDbg вставить, чтобы заставить процесс его выполнить вне очереди. Например, если надо запустить cmd из произвольного участка кода: Код (Text): use32 include 'general.inc' include 'win32a.inc' org 0x401160 label CreateProcessA at 0x76951C28 label CloseHandle at 0x7699AE8D pushad sizeof.cmdpath pushstr "C:\Windows\system32\cmd.exe",0 mov esi,esp sub esp,sizeof.STARTUPINFO mov edi,esp xor eax,eax mov ecx,sizeof.STARTUPINFO rep stosb mov dword[esp+STARTUPINFO.cb],sizeof.STARTUPINFO mov dword[esp+STARTUPINFO.dwFlags],STARTF_USESHOWWINDOW mov dword[esp+STARTUPINFO.wShowWindow],SW_SHOW mov edi,esp sub esp,sizeof.PROCESS_INFORMATION mov ebx,esp stdcall CreateProcessA,esi,NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,edi,ebx stdcall CloseHandle,[ebx+PROCESS_INFORMATION.hThread] stdcall CloseHandle,[ebx+PROCESS_INFORMATION.hProcess] add esp,sizeof.cmdpath+sizeof.STARTUPINFO+sizeof.PROCESS_INFORMATION popad repeat $-$$ load buf byte from $$+(%-1) dispHex buf,2 end repeat На выходе имеем: Код (Text): 60686578650068636D642E686D33325C68797374656877735C7368696E646F68433A5C5789E683EC4489E731C0B944000000F3AAC7042444000000C744242C01000000C74424300500000089E783EC1089E353576A006A006A106A006A006A006A0056E8600A5576FF7304E8BD9C5976FF33E8B69C597683C47061 , что можно просто вставить в Olly.
l_inc хм, да, интересно и просто. жалко только, что затеряется в форуме. было бы хорошо подобные мелкие трюки выносить в отдельную дополняемую статью на основном сайте (администрацией, видимо. о вике ж можно только мечтать)
qqwe Это не трюк. Это тривиальный пример использования стандартных возможностей fasm. Кстати, если вывод через display заменить на вывод через db (macro display [args] { common db args }), то такой же текстовый шестнадцатиричный вывод можно получать в скомпилированном текстовом файле (format binary as 'txt'). Правда, придётся чуть-чуть помучаться, чтобы избавиться от скомпилированного кода в txt-файле, но по большому счёту это не обязательно.
все трюки это тривиальные возможности если вкапываться. но на вкапывание то нет времени. потому, пусть тривиальные, но полезные обороты надо бы выносить с оглавлением. для быстрого нахождения когда надо. видели кукбуки по разным тулзам? вот типа этого. тоже все в рамках инструкций, но просто часто нужные мелочи и полезности.
qqwe Можно таки довести приведеный способ до уровня не самой тривиальной полезности (и под тривиальной здесь понимается такая, за которой лень будет в "кукбук" лезть вместо того, чтобы самостятельно аж сорок секунд "вкапываться"). Например, следующим образом. Такой код: Код (Text): format binary as 'txt' use32 include 'hexencode.inc' hexencodestart mov eax,1 hexencodeend скомпилируется в строку "B801000000" . hexencodestart принимает два необязательных параметра: строка ведущих и строка завершающих символов. Т.о. аналогично можно написать: Код (Text): format binary as 'txt' use32 include 'hexencode.inc' hexencodestart '0x',',' mov eax,1 hexencodeend , что скомпилируется в строку "0xB8,0x01,0x00,0x00,0x00," . Ну и наконец можно даже делать вложенные блоки: Код (Text): format binary as 'txt' use32 include 'hexencode.inc' hexencodestart '\x' mov eax,1 hexencodestart mov eax,1 hexencodeend mov eax,1 hexencodeend Сначала будет перекодирован вложенный блок. А внешний блок перекодирует то, что получилось от вложенного блока: "\xB8\x01\x00\x00\x00\x42\x38\x30\x31\x30\x30\x30\x30\x30\x30\xB8\x01\x00\x00\x00" . Необходимый для вышеописанных извращений hexencode.inc приложен.
Во накидали Ну спасибо, поделюсь как это делает чукча типа меня Компилю асм в натив функции в Вижуал Студии, затем дизассеблю в Ида далее скриптом все байтики вытаскиваю Так у нас делают в Анадыре к Фасму нужно будет внимательней приглядеться