Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Как перевести двоичные данные в hex? Добавлено: 20.05.08 00:52  

Автор вопроса:  JacK | Web-сайт: idiot.ru | ICQ: 9580088 
Хочу сделать программу, которая будет пережёвывать бинарники в hex-строку.
Реально ли это?
Нифига не получается))
Моя ахинея:
f = FreeFile

Open "c:\msg.exe" For Binary As f
Data = Input(LOF(f), f)
Close f

Dim HexDat() As Byte

    ReDim HexDat(LenB(Data))
    For I = 0 To LenB(Data)
    
        HexDat(I) = Hex((MidB(Data, I, 4)))
        
    Next

Оно и не удивительно, что не получается!
1. Походу надо читать не по-байтам а по-битам)) И как получить двухсимвольные коды байтов?
2. Даже если получится считывать по 4-е бита как их конвертировать в hex? Функция hex - работет с десятиричными, следовательно нужно переводить в десятичную а только потом в хекс, или можно миновать эту процедуру?

Ежели выкините кусок кода буду очень благодарен!

Ответить

  Ответы Всего ответов: 30  

Номер ответа: 1
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 20.05.08 03:22
откуда 4? :\

типа пытаешься пол байта прочитать бугога..! :)

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 20.05.08 03:23
HexDat(I) = Hex((MidB(Data, I, 4)))

И функция Hex возвращает не Byte...

Ответить

Номер ответа: 3
Автор ответа:
 JacK



ICQ: 9580088 

Вопросов: 13
Ответов: 1078
 Web-сайт: idiot.ru
 Профиль | | #3
Добавлено: 20.05.08 03:30
Да я пониаю, просто не знаю как реализовать.

Ответить

Номер ответа: 4
Автор ответа:
 JacK



ICQ: 9580088 

Вопросов: 13
Ответов: 1078
 Web-сайт: idiot.ru
 Профиль | | #4
Добавлено: 20.05.08 03:41
Если бы я с битами работал то Data/4 и всё ок, кроме перевода в хекс)

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 20.05.08 11:00
res = ""
for i=1 to lenb(data)
  s = mid(data, i, 1)
  s = hex(asc(s))
  if len(s) < 2 then s = "0" & s
  res = res & s
next

Ответить

Номер ответа: 6
Автор ответа:
 JacK



ICQ: 9580088 

Вопросов: 13
Ответов: 1078
 Web-сайт: idiot.ru
 Профиль | | #6
Добавлено: 21.05.08 12:03
Зчот!))))) Как же я сам не догнал!
Извини, хочу тебя поправить чуть-чуть:
For i = 1 To LenB(Data)
  s = Mid(Data, i, 1)
  
  If Len(s) < 2 Then s = "0" & s
  res = res & s
  s = Hex(Asc(s))
Next

Ответить

Номер ответа: 7
Автор ответа:
 JacK



ICQ: 9580088 

Вопросов: 13
Ответов: 1078
 Web-сайт: idiot.ru
 Профиль | | #7
Добавлено: 21.05.08 12:16
ой прогнал))
For i = 1 To LenB(Data)
  s = Mid(Data, i, 1)
  s = Asc(s)
  On Error Resume Next
  s = Hex(s)
  If Len(s) < 2 Then s = "0" & s
  res = res & s
 Next i

Ответить

Номер ответа: 8
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #8
Добавлено: 21.05.08 13:16
У Шарпа как раз все правильно было =) И нафиг тут контроль ошибок? И еще. Не рекомендую использовать переменные типа Variant. Тем более, писать в них то строки, то целые числа =)

Ответить

Номер ответа: 9
Автор ответа:
 JacK



ICQ: 9580088 

Вопросов: 13
Ответов: 1078
 Web-сайт: idiot.ru
 Профиль | | #9
Добавлено: 21.05.08 16:31
И нафиг тут контроль ошибок?

Вот для чего:
Invalid procedure call or argument

И ещё...
Чё это за бочина такая?
В конец файла добавляется фигова туча нулей, кратных размеру программе, которых там быть не должно!
Например: прога весит 2,5 кб - в хекс должно получится 5 кб а получается 7,5 кб
Причём 2,5 последних кб составляют "00"
Ещё - прога весит 11кб - в хекс должно получится 22кб а получается 33кб - аналогично))

Конвертирует правильно, собирал файл - работает, в самом коде всё впорядке, но дабавляются лишнее нулевые блоки)

Ответить

Номер ответа: 10
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #10
Добавлено: 21.05.08 17:22
Invalid procedure call or argument

Это твоя ошибка. Ее может и не быть вообще, просто надо писать правильный код =)
По второму вопросу - код в студию.

Ответить

Номер ответа: 11
Автор ответа:
 JacK



ICQ: 9580088 

Вопросов: 13
Ответов: 1078
 Web-сайт: idiot.ru
 Профиль | | #11
Добавлено: 21.05.08 17:29
От чего ж моя? Если обработчик, ярко кислотно -жёлтым шрифтом выделяет именно
s = Asc(s)
?

Вот код:
f = FreeFile
res = ""

Open "c:\msg12.exe" For Binary As f
 ;Data = Input(LOF(f), f)
Close f
    
For i = 1 To LenB(Data)
  s = Mid(Data, i, 1)
  s = Asc(s)
  On Error Resume Next
  s = Hex(s)
  If Len(s) < 2 Then s = "0" & s
  res = res & s
Next i
  
Open "C:\msg12.txt" For Append As #f
   Print #f, res
Close #f

Ответить

Номер ответа: 12
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #12 Добавлено: 21.05.08 18:00
Для начала объяви переменные, че как нуп)

Потом, что ты вообще хочешь? Ты читаешь 1 символ, получаешь его ASC-код, берешь эту цифру (цифру ASC_кода) в 16ричной системе и пишешь куда то еще. Это вообще зачем делать-то надо, бред такой? Если ты не знал, то на жестком диске буква "A" занимает 1 байт, ее ASC-код (97 помоему), занимает 1 байт, его 16ричное представление, "61", занимает уже 2 байта, как строка, и ты ее пиешь в файл. Это просто тупо бессмысленно, сначала пойми, что ты вообще хочешь, а так же почитай профайловые системы ><

Ответить

Номер ответа: 13
Автор ответа:
 JacK



ICQ: 9580088 

Вопросов: 13
Ответов: 1078
 Web-сайт: idiot.ru
 Профиль | | #13
Добавлено: 21.05.08 19:47
Га га га))
За лоха меня держишь? Я чё, тупил где-то, или мой вопрос кажется тупым?
Поясняю:
1. Мне часто приходится делать асм-вставки, или просто обьеденять программы.
Hex-код можно сразу в память загнать.
Конечно я пользуюсь хекс-редактором, но в целях самообразования и (в некоторых случаях) упрощения процесса выдирание кода, пишу эту фигню.
2. Делаю примитивный джойнер на VB, который использует эту функцию)
3. Это можно использовать как примитивный вид шифрования. Например, разбить hex на слова, делить каждое слово на F, вычесть что нибудь, умножить и т.д.
4. Это можно использовать в деструктивных целях.
На хекс не кричит антивирус, его легко передать, это ведь не исполняемый файла, его можно запустить.

Спектр применения широк, и ограничивается твоей фантазией.

Ответить

Номер ответа: 14
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #14
Добавлено: 21.05.08 21:04
что-то неясное насчет пункта 4.
Да и еще, код вполне хороший, только надо добавить строчку "Option Explicit" в начале)

Ответить

Номер ответа: 15
Автор ответа:
 JacK



ICQ: 9580088 

Вопросов: 13
Ответов: 1078
 Web-сайт: idiot.ru
 Профиль | | #15
Добавлено: 21.05.08 21:29
Option Explicit

Dim f As Long
Dim res As String
Dim s As String
Dim d As Long
Dim data As String
Dim i As Long

Private Sub Command1_Click()
f = FreeFile
res = ""

Open "c:\msg12.exe" For Binary As f
 data = Input(LOF(f), f)
Close f
     
For i = 1 To LenB(data)
  s = Mid(data, i, 1)
  d = Asc(s)
  On Error Resume Next
  d = Hex(s)
  If Len(s) < 2 Then s = "0" & d
  res = res & d
Next i
   
Open "C:\msg12.txt" For Append As #f
   Print #f, res
Close #f
End Sub

И чё вы так приколебалиськ переменным?

Да гавно этот код, я же говорю, лишние зеро- блоки впаривает) При сборке программы это сказывается, прога в 1,5 раза тяжелее становится.

Пункт 4 - Имею ввиду передачу данных через интрернет.
Суть: правлю скрипт страницы так, что она сохраняет(с моего сайта) хекс-код вируса. А загрузчик его либо запускает либо ковертит в бинарник и снова таки запускает.
Смысл в том, что закачка текстового файла, через интернет, не является блэкдуром.

Также можно написать скрипт, который будет получать с моего сайта хекс, конвертит в бинарник и запускать.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам