Изменить DLL

Discussion in 'WASM.BEGINNERS' started by parawall, Nov 25, 2008.

  1. parawall

    parawall New Member

    Blog Posts:
    0
    Приветствую.
    У меня очень-очень поверхностные знания о структуре исполняемых файлов или DLL. У меня есть DLL, которая используется каким-то сторонним приложением, в этой DLL я заменил один байт (занопил что-то).

    А теперь хочу сделать так что бы при побайтовом анализе двух файлов (оригинального и моего) не возможно было при беглом анализе определить что в файле только одна модификация. Т.е. что бы с начала заголовка DLL вcё содержимое файла съехало например на +1. Так же хочу искусственно увеличить размер DLL.

    Что подскажете, куда копать?
     
  2. MSoft

    MSoft New Member

    Blog Posts:
    0
    1) понять вкраце структуру файла (заголовки, потом секции)
    2) обязательно разобраться с релоками
    3) если просто надо сместить на 1 байт, то можно увеличить дос-стаб (между смещением 40h и заголовком РЕ) - но это подействует только на сравнение РЕ. На сравнении секций это не отразится. Поэтому см. пп. 1-2
     
  3. MSoft

    MSoft New Member

    Blog Posts:
    0
    а вот тут тебе надо почитать про секции и их заголовки. тебе надо будет или добавить новую секцию, или физически и виртуально увеличить последнюю.
    Первое проще, т.к. делается любым РЕ-редактором
     
  4. l_inc

    l_inc New Member

    Blog Posts:
    0
    MSoft
    Да ладно... сложности какие. Испохабить dll можно подходящим упаковщиком.
    А увеличить размер... да просто записать в конец файла ерунды всякой, не вдаваясь в подробности формата. И будет оверлей, который в большинстве случаев ни на что не повлияет.
     
  5. q_q

    q_q New Member

    Blog Posts:
    0
    parawall
    Что такое "беглый анализ"?
    Например, выполнив "fc.exe /B dll1.dll dll2.dll", сразу увижу одно или более изменений.
     
  6. MSoft

    MSoft New Member

    Blog Posts:
    0
    l_inc
    ну и какой в этом дзен?
     
  7. l_inc

    l_inc New Member

    Blog Posts:
    0
    MSoft
    Маловато. Это правда. :) Но зато эффективно. :)
    Ну можно добавить немного дзена...
    1) Насчёт смещения заголовка - это верно. Сдвигаем заголовок, корректируем DWORD по адресу 3Ch и заголовок сместили (об этом Вы, собственно, написали).
    2) Насчёт смещения секций и увеличения размера файла... ну это как раз делается без добавления секций или расширения последней. Это можно сделать за счёт заголовка: корректируем SizeOfHeaders на значение, кратное FileAlignment, а потом в заголовке каждой секции на это же значение сдвигаем PointerToRawData. Одним выстрелом двух зайцев: и размер увеличили, и сместили всё. А в полученное пространство можно ещё и сместить заголовок, а лишнее место мусором позабивать.
    В этом больше дзена, чем в приписывании оверлея, хотя опять таки можно возразить, что в добавлении своей секции в конец файла дзена ещё больше. НО! Это менее эффективно, чем расширение заголовка (т.к. не даёт смещения секций), и уж тем более менее эффективно, чем использование упаковщика.