Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
18.08 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

Maximum upload rate: 20KB/s (DSL/cable 256k up)

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

Example.e

zip

 

.

 

w

 

 

 

 

 

 

 

o

 

 

 

 

p

df

 

 

 

g

.c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

Search for torrents

Example. zip

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Maximum upload rate: 20KB/s (DSL/cab

>> codingto

BUY

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

+

+

+

+

 

 

 

 

 

 

 

 

+

 

 

 

 

Done, Share ratio: 0%,

will seed for 4:59 hours

 

 

i

Done, Share ratio: 0%,

 

SystemTimeToFileTime(SystemTime, FileTime);

 

begin

 

 

 

 

 

 

 

 

If (SaveDialog1.Execute) Then

 

 

 

 

 

 

 

 

I := Integer(FileTime.dwHighDateTime) shl 32

 

begin

 

 

 

 

 

 

 

blue

+ FileTime.dwLowDateTime;

 

 

 

_NewFile := TFileStream.Create

 

 

 

 

 

-a-short-film

 

 

 

(SaveDialog1.FileName+blue- -short'.torrent',-film

 

 

 

 

 

 

Result := (I — 116444736000000000) div

 

 

 

 

 

 

 

 

 

Int64(10000000);

 

 

 

fmCreate);

 

 

 

info

 

 

 

 

end;

 

 

 

 

 

 

 

 

Любой хакер должен

 

 

 

 

 

 

if (ListView1.Items.Count = 1) Then

 

представлять себе

 

 

Кодфункции,выполняющейобратнуютрансформацию

 

 

 

CreateTorrent(_NewFile, false)

 

кодерские принципы

 

 

времени,смотривисходнике,которыйдожидаетсятебяна

 

 

 

else

 

 

 

функционирования

 

ubuntu-5.10-install-i386.iso

 

 

 

ubuntu-5.10-install-i386.iso

p2p. Но лишь самые

 

 

нашемDVD.Послезаписивфайлосновныхдирективначи-

 

 

 

 

 

 

 

 

CreateTorrent(_NewFile, true);

 

 

 

наетсяпроцессописанияфайлов(записьдирективыinfo).

3.7%

 

end;

 

 

 

злобные из них впос-

 

 

Тутмывстаемпередвыбором:еслисоздаемторрентстипом

 

 

 

 

 

i

+

 

 

3.7%

 

 

 

 

end

 

 

ледствии пишут p2p

 

«смешанный»(multiFile),тонамнеобходимозапустить

 

 

 

 

 

 

 

 

worm’ов :)

 

 

 

Вэтомкодеяинициализируюпеременнуютипафайловый

 

 

 

циклипробежатьсяповсемуспискувыбранныхфайловиза-

 

 

 

 

 

xlivecd-20041201.iso

 

 

поток.Вызываяметод«Create»,япередаюдвапараметра:

 

 

 

 

 

 

писатьвtorrentразмеры/путидлякаждогофайла.Вкачестве

 

 

 

 

 

 

 

 

 

 

xlivecd-20041201.iso

 

 

 

 

 

 

путей(директиваpath)указываетсянетотпуть,покоторому

 

 

1—имяфайла(файлстакимименеммыбудемсоздавать);

i

+

 

 

 

 

хранитсяфайлнадиске,атот,которыйопределяетместопо- ?

2—режимдоступакфайлу.Посколькунамнужносоздать

Help

?

 

ложениефайлаотносительноторрента.Например,формат

 

 

новыйфайл,тоуказываемfmCreate.

 

File

V

 

 

 

 

 

 

 

 

 

 

 

 

файламетаданных(торрент)позволяетдобавлятькакфайлы,

 

 

 

 

 

 

 

 

 

 

 

такидиректории.Предположим,чтопользовательвыбрал

 

 

 

Тестирование

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

одинфайлиоднудиректориюснесколькимифайлами.Сразу

На сегодня скучный урок программирования можно считать

 

Maximum upload r

 

возникаетвопрос:акакзаписатьфайлы,которыенаходятсяв

оконченным, а значит, нужно протестировать наше творе-

 

 

 

 

 

 

директории?Втакихслучаяхиприходитсяиспользоватьди-

 

 

ние. Скомпилируй и запусти наш пример. Попробуй запол-

dvd

 

 

 

 

рективуpath.Всвоемпримереянереализовалвозможность

 

 

 

 

Example. zip

 

 

 

 

нить все TEdit, добавить файлы в ListView и сохранить

 

Весь необходимый

 

 

добавкиотдельнойдиректории,новреальномприложении

 

 

собранный проект в виде торрента. Если у тебя все прошло

стафф для статьи ты

 

 

тыобязательнодолженучестьэтотнюанс.Еслимысоздаем

 

 

без ошибок, то не спеши радоваться, так как основное тес-

сможешь найти на

D

 

торрент,вкоторомбудетопределенлишьодинфайл(такие

 

 

тирование только начинается. Скачай какой-нибудь torrent

нашем диске

 

 

торрент-файлыещеназываютклассическими),товсе,чтоот

 

 

клиент (например, uTorrent) и попробуй открыть им получив-

 

 

 

 

 

настребуется—записатьразмерфайла(указываетсяспомо-

шийся у тебя файл. Если все тип-топ, то uTorrent пропарсит

 

 

 

 

 

щьюдирективыlength)исамоимяфайла.Записаввtorrent

 

 

 

 

 

 

blue-a-short-film

 

 

 

 

 

 

подсунутый ему файлик и предложит начать закачку. Но если

 

 

 

 

 

необходимуюинформациюофайлах,которыемысобираемся

uTorrent ругнется и сообщит ошибку, то значит, ты где-то

 

 

 

 

 

 

раздавать,обязательнонужноразбитьвсефайлынасегменты

накосячил и придется провести немало времени в играх с

 

 

 

 

 

 

определенногоразмераипосчитатьиххэш-суммы.Всвоем

 

 

отладчиком. Код чтения торрент-файла я приводить не стал

 

 

 

 

 

примереразмерсегментаязадалжестко—вкоде.Онуменя

 

 

— статья не резиновая. Зато на диске, ты найдешь полный

 

 

 

 

 

 

равен65536байтамили64килобайтам.Еслитыбудешьписать

работоспособный исходник. В чтении файла нет ничего

 

 

 

 

 

 

полноценнуюпрограммудлясозданияторрент-файлов,то

 

 

 

 

 

 

ubuntu-5.10-install-i386.iso

 

 

 

 

сложного. Раз уж ты смог разобраться с созданием торрент-

 

 

 

 

 

долженпредоставлятьпользователюсамостоятельноеправо

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

 

 

 

 

 

 

выбораразмерасегмента,таккакэтотразмерзадаетсянеот

 

 

 

 

 

 

 

 

 

 

 

 

 

балды(какуменявпримере),аотносительнообщегоразмера

 

Заключение

 

 

 

 

 

 

 

 

файлов,длякоторыхмысоздаемторрент.Дляразбиения

 

 

Уже не первый раз убеждаешься в том, что все нервные

 

 

 

 

 

 

файлапосегментамиполученияхэшейясоздалещеодну

 

 

крики в сторону Delphi — это просто бред и комплексыxlivecd-20041201.iso

 

 

процедуру—GetPieces().Еесодержимоетыможешьувидеть

 

 

фанатов С++ (данная фраза проверена этическим

 

 

 

 

 

 

надиске.Послевыполненияданнойпроцедурымассивpieces

комитетом; выдана справка о том, что провокаци-

 

 

 

 

 

заполнитсяэлементамитипаTPieces,содержащимипосчи-

 

 

онной она не является, будучи написанной автором

 

 

 

 

 

танныехэш-суммысегментовфайлов.

 

 

в состоянии аффекта — Прим. ред). На Delphi можно на-

 

 

 

 

 

ПроцедураGetPieces()принимаетвсегоодинпараметр

 

 

писать практически любую программу, будь то компактная

 

 

 

 

 

—размерсегментафайла.Послеполученияинформации

 

 

хакерская тулза или продвинутая программа для работы с

 

 

 

 

 

оразмересегментавпроцедурезапускаетсяцикл,входе

 

 

БД. Мне остается только попрощаться с тобой и пожелать

 

 

 

 

 

которогоперебираютсявсефайлыизTListViewидля

 

 

удачи в кодинге. Все свои вопросы ты можешь задать мне

 

 

 

 

 

каждогоизнихвычисляетсяSHA1-хэш.Полученныеданные

 

 

по мылу — буду рад пообщаться. До встречи! z

 

 

 

 

 

 

записываютсявдинамическиймассив_piecesтипаTPieces

 

 

 

 

 

 

 

 

 

 

 

(структура,которуюмыопределиливсамомначале).Для

 

 

 

 

 

 

 

 

 

 

 

 

 

вычисленияхэш-суммыявоспользовалсяобъектомTSha1из

 

 

 

 

 

 

 

 

 

 

 

модуляMessageDigestотDaveShapiro.Работатьсалгорит-

 

 

 

 

 

 

 

 

 

 

 

 

 

мамиSHA1,Md5(идругими)спомощьюэтогомодуляодно

 

 

 

 

 

 

 

 

 

 

 

 

 

удовольствие.Все,чтотребуетсядляполученияхеша—вос-

 

 

 

 

 

 

 

 

 

 

 

 

 

пользоватьсяметодомTransform(),послечеговсвойствах

 

 

 

 

 

 

 

 

 

 

 

hashValueиhashValueBytesпоявитсярассчитанная

 

 

 

 

 

 

 

 

 

 

 

 

 

хэш-сумма.Большевпроцедуреничегоинтересногонет,

 

 

 

 

 

 

 

 

 

 

 

 

 

поэтомуперейдемсразукзавершающемушагу—наполним

 

 

 

 

 

 

 

 

 

 

 

 

 

кнопкуSaveTorrentBtnжизнью.Создайдлянееобработчик

 

 

 

 

 

 

 

 

 

 

 

событияOnClickинапишивнем:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

var

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

_NewFile:TFileStream;

 

 

Формабудущейпрограммы.Закладка2

 

Формабудущейпрограммы.Закладка1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xàêåð 06 /114/ 08

099

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

to BUY

 

 

w Click

 

 

 

>> coding

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Крис Касперски

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

трюки открыса

Очередная порция трюков — загрузка dll с турбонаддувом — прямого отношения к С не имеет. Однако работает (не без изменений, конечно) как под windows, так и Linux/BSD, ускоряя загрузку динамических библиотек в десятки и даже тысячи раз. Дополнительный бонус — затрудняет дизассемблирование программы и препятствует снятию дампа!

 

01

Генерациятаблицывызововнастадиикомпиляции

 

лизации: init_name_dll(HANDLE h) {Fn = ($Fn) ((DWORD)Fn +

 

Загрузкадинамическихбиблиотекзанимаетзначительноевремя,

(DWORD)h );}.Конечно,безхакатутнеобошлосьинаглоепреобразование

 

 

 

особенноприбольшомколичествеимпортируемыхфункций.ИхотяMicrosoft

указателейвDWORDприпереносенадругиеплатформыникчемухорошемуне

 

предлагаеткучупродвинутыхтиповимпорта(boundimport,delayimport),

приведет.Поэтомувкоммерческихпродуктахпридетсячуть-чутьусовершен­

 

положениеонинеисправляют,апридинамическомимпорте,когдаопре-

ствоватьнашгенератор,подставляявместоDWORDцелочисленныйтипс

 

делениеадресовфункцийопределяетсяпосредствомGetProcAddress

размером,равнымразмерууказателянафункцию.Этоделаетсялибовручную

 

(одинвызовнакаждуюфункцию),производительностьвообщепадаетниже

сучетомразрядностиконкретнойплатформы(например,x86-64),либоцепоч-

 

плинтуса.ВLinux/BSDситуацияобстоитнестольплачевно,новсеравно

кой#if/#elseвпрепроцессоре,ноэтоужедетали;

 

издержкиназагрузкудинамическихбиблиотеквесьмазначительны.Поэтому

•подключаемсгенерированныйзаголовочныйфайлкбазовойпрограмме,

 

оптимизациейприходитсязаниматьсясамостоятельно.

загружаемдинамическуюбиблиотекучерезh = LoadLibrary("dll_

 

ИдеясостоитвпереносевызововGetProcAddressизреал-тайманастадию

name.dll") ипередаемполученныйбазовыйадреспроцедуреинициации

 

компиляциипрограммы,прикоторойвремяихвыполненияуженетаксущес-

init_dll_name(h);

 

твенно(всамомделе,какаяразницасколькособираетсяпрограмма—60или

•экспортируемыефункциивызываемкакобычно,например,a=Fn(b);(за-

 

90минут,главное,чтобыонаработала,какфотонныйзвездолет).

конченныйпримерреализацииможнонайтинадискевфайлахtrick-01-*,

 

Последовательностьдействийприэтомтакова(разумеется,приводитсялишь

собранныхвархивtricks-19h.7z).

 

общаясхемабезуглублениявдетали):

Засчетчегодостигаетсяпреимуществовскорости?Напервыйвзгляд,проце-

 

•компилируемDLLкакобычно;

дураинициациидолжна«съесть»весьвыигрыш.НофункцияGetProcAddress

 

•пишемвспомогательнуюутилиту,загружающуюDLLвызовомh =

выполняетсянамногомедленнее,чемсложениедвухпеременных

 

LoadLibrary("dll_name.dll")дляопределенияеебазовогоадреса,

((DWORD)Fn + (DWORD)h)впроцедуреинициализациизагружаемойдина-

 

знаякоторыйнетрудновычислитьRVA-адресавсехэкспортируемыхфункций:

мическойбиблиотеки.Тожесамоеотноситсяикстатическойкомпоновке,при

 

RVA_Fn = (DWORD)GetProcAddress("Fn") - (DWORD)h.Остаетсятоль-

которойдлякаждойимпортируемойфункцииосуществляется«полнотексто-

 

косгенерироватьзаголовочный.hфайл,поместивтудапрототипыфункций:

вой»поисквтаблицеэкспорта.

 

typedef int (*$Fn)(int); $Fn Fn;вместеcпроцедуройихинициа-

Накладныхрасходовнавызовфункцииунаснет,ионивызываютсятакже,

 

 

 

 

 

100

xàêåð 06 /114/ 08

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

>> coding to BUY

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

какифункции,импортируемыеобычнымобразом(CALL DS:[func_name]). Еслисобычнымимпортомлюбойдизассемблерсправляетсянаура,тов нашемслучаеfunc_nameпредставляетRVAадрес,совершенноничегоне говорящийнидизассемблеру,нихакеру.Чтобыопределить,чтоименноза функциявызывается,необходимопрогнатьпрограммуподотладчикомили снятьснеедамп(апомешатьотладчикунамногопроще,чемдизассемблеру!).

IDAProнесмоглараспознать«хитрый» импортAPI-функцииMessageBoxA

0401034

push

0

 

0401036

push

offset aHello_1

 

040103B

push

offset aHello_0

 

0401040

push

0

 

0401042

call

off_405030

; вызов

MessageBoxA

 

 

 

 

 

 

0405030

off_405030 dd 3D81h

 

; <- ничего не говорящий RVA-адрес

Единственныйнедостатокпредложенногометодавтом,чтоприизменении динамическойбиблиотекицелевоеприложениепридетсяперекомпилироватьзаново,чтонеестьгуд.Ачтомы,собственно,можемсделать?

02Универсальныйзагрузчикдинамическихбиблиотек

Длячужихбиблиотекмы,действительно,ничегонеможемсделать (поэтомудальшебудемговоритьтолькоосвоихсобственных).СовсемнесложнорасположитьвDLLспециальныймассив,хранящийуказателинавсе«внешние»функциивстрогообозначенномпорядке.Азатемэкспортироватьего, попутносокративразмертаблицыэкспорта,посколькууказательнамассив окажетсяединственнымэкспортируемымэлементом.Приизмененииверсии DLLадресафункциймогутменяться,какиадресмассивауказателейнаних. Впрочем,нашупрограммуэтонеразвалит,таккакадресмассивапрописанв таблицеэкспорта,ауказателинафункции—внемсамом:

«Рукотворная»таблицаэкспорта.Лучше,чемуMicrosoft?

int done;

__declspec(dllexport) DWORD f_table[2];

BOOL WINAPI DllMain(HINSTANCE hs, DWORD reason, LPVOID lpvRes)

{

if (done) return 1; done = 1; f_table[0] = (DWORD)foo — (DWORD) hs; f_table[1] = (DWORD)bar — (DWORD) hs; return 1;

}

Постой,новедь…приэтоммыфактическисоздадимсвойсобственныйварианттаблицыэкспорта.Чемонбудетлучшеужесуществующеговреализации отMicrosoft?Атем,чтовнашеммассивепоискэкспортируемыхфункцийне осуществляется.Вместоэтоговыполняетсяобращениепопредопределенныминдексам.Оверхиднавызовфункцийничутьнеувеличивается.Защищенностьпрограммытакжеостаетсянавысоте(дизассемблерпоказывает

ничегонезначащиеRVA-адреса).Аединственнымпобочнымэффектом становитсяневозможностьудаленияизмассиваужесуществующихиндексов (иначенарушитсяихпоследовательность!).Добавлятьновыефункции(к концумассива)—можно,авотудалятьстарые—нет.Тоесть,функцииизDLL удалить,конечно,получится,ноуказателиизмассивавсе-такипридется оставить,прописавтам0(типа«неттакойфункции»)иливоткнувуказатель нафункцию-пустышку(ничегонеделающую,атольковозвращающуюкод ошибки).

Готовыйпримерсодержитсянадискевфайлахtrick-03-*,собранныхв архив tricks-19h.7z.

03Реальныйхардкодфизическихадресов

Предыдущийвариантможнозначительноулучшить,отказавшись отпроцедурыинициализациифактическихадресовфункций,складываю- щейRVA-адрескаждойфункциисбазовымадресомзагрузкидинамической библиотеки:foo = ($foo) ((DWORD)foo + (DWORD)h).Иведьвсеэтов ран-тайме!Естественно,чембольшемыимпортируемфункций,темдольше длитсязагрузка.

Ксчастью,заделдляоптимизацииесть—иещекакойзадел!Во-первых, динамическаябиблиотекаинициализируетмассивфункций,вычитая(в ран-тайме)базовыйадресзагрузкимодуляизадресакаждойфункции,что- быполучитьRVA-адрес.Затемегоприходитсяпреобразовыватьвфакти- ческийадресфункции,складывая(опять-такивран-тайме)RVAсбазовым адресомзагрузкимодуля.Зачемнамделатьдвойнуюработу?Причинав том,чтобазовыйадрес,прописанныйвзаголовкеDLL,являетсянеболее чемрекомендацией,исистемныйзагрузчикможетрасположитьбиблио- текугде-нибудьвдругомместе,особенно,есливыяснится,чтодиапазон адресов,накоторыхонапретендует,ужекем-тозанят.

Учитывая,чтовсенормальныединамическиебиблиотекиимеюттаблицу перемещаемыхэлементов(фиксапы)—благодарячемумогутбытьпереме- щеныполюбомусвободномуадресу—длясамихсебямыможемсделать исключение.Убивтаблицуперемещаемыхэлементовуисполняемого файлаиDLL(ключ /FIXED линкераMSLink),заставимсистемугрузитьих потребуемомуадресу,ане«кудахвостнадушуположит».

Главное,выбратьадресазагрузкитак,чтобынезацепитьбиблиотеки NTDLL.DLLиKERNEL32.DLL,посколькуонипроецируютсянаадресное пространствопроцессаещедоегосозданияистановятсянеперемещаемыми.Вовсехсистемах,вплотьдоВисты,этапарочкаприжатакверхней границепользовательскогоадресногопространства(2Гбпоумолчанию), такчтоволноватьсянеприходится.НоВистасеерандомизациейадресногопространствавыбираетслучайныеадресазагрузкидлявсехсистемных библиотек,включаяNTDLL.DLL/KEREL32.DLL.Какбыть?Поковырявшись вядре,мыщъхвыяснил,чтоониниприкакихобстоятельствахнемогут опускатьсянижеотметкив32Мб.Следовательно,оперативныйпростордля загрузкисвоихDLLунасесть,аостальные—пускайподвинутся.

Приэтомскоростьзагрузкивозрастаетвомногораз,апрограммныйкод существенноупрощается(см.файлы trick-03-*)…ноэтоерунда.Авот еслирасположитьдинамическуюбиблиотекупередисполняемымфайлом (вмладшихадресах)—этосерьезноозадачитдамперыпроцессов,ивсе полученныедампыдлянепосредственногодизассемблированияокажутся непригодными.Кстати,оптимизациянаэтомнезаканчивается,атолько начинается!z

xàêåð 06 /114/ 08

101

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

to BUY

 

 

w Click

 

 

>> phreaking

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Сергей Долин

/ dlinyj@real.xakep.ru /

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Клавиатурноезападло

Тебябеситтвойначальникилиучилкаинформатики?Полагаю,тымногократ- нодумалнадтем,какбыпохитрееприкольнутьсянадкем-нибудьизсвоих знакомых,работающихзакомпьютером.Боянистаятемасрабочимстолом уженеинтересна.Ноестьвариантболеедейственныйиболезненный—при которомдолгоможносозерцать«жертву»,пытающуюсяхотькак-тоисправить ситуацию.

Концепция

Итак,чтожезахитроумноеустройствомыбудемваять?Посути,эмулятор клавиатуры.Помнишь,всвоевремяяписалоснифереклавы—таквот, этобудетобратныйдевайс.Всеосложняетсятем,чтовразрывклавиатуры устройствопоставитьдостаточносложно,поэтомумыбудемиспользо- ватьсамыйраспространенныйнасегодняшнийденьинтерфейс—USB. Благо,производителиданногостандартапредусмотрелиподключениек немуHID-устройств(HID—HumanInterfaceDevices—дословноможно перевести,как«устройствасопряжениясчеловеком»).Какизвестно,ккомпьютеруможноподключитьгромадноеколичествомышекиклавиатур,и конечныйпользовательэтогонезаметит.Посколькувселучшеепридумано занас,яначалрыскатьнапросторахинетавпоискахинфыинаткнулсяна весьмалюбопытныйресурс:http://macetech.com/blog/node/46,гдекак разисобранотакоеустройство.Забегаявперед,скажу,чтоавтордевайса

милоумолчалпронекоторыемоментыиповторитьдействияпоанглийской версииутебяневыйдет.Новстатьеяприподнимузавесутайныирасскажу всетонкостисозданияэтогоустройства.Онополучитсяминиатюрным—в видемаленькойфлешки—состоятьбудетизодногоконтроллераимини- мумаобвеса.Иглавнойегозадачейбудетпериодически,развнесколько минут,активироватьклавишу<CapsLoсk>.«Почемуименнокапслука?»

—спросишьты.Отвечу:тывполнеможешьдописатьвпрошивку,напи- саннуюнаязыкеСи,необходимыесканкодынекоторыхклавишилидаже целыекомбинации—например<Alt-F4>.Самисканкодыможнопочерп- нутьизмоейстатьипрологгерклавиатуры.

Исходники

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

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Z

Я

End

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

>> phreaking to BUY

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Схеманашегоустройства

УстановленныеFuse-биты

Прикол срезистором2,2кОм

Когдаясобиралитестировалустройство,обнаружил однуинтереснуюособенностьорганизмакомпьюте- ра.ЕслимеждупервымивторымконтактомUSB-разъ- емапоставитьрезисторв2,2кОм,тоWindowsбудет тщетнопытатьсяопознатьустройство,нервируя сообщениямиобошибке.Этогораздоболеебезобидный,новтожевремяиболеепростойприкол.Есть несколькоспособовегореализации.Можнонапаятьрезисторнаразъемизстарогопровода.Либо, еслиимеетсядоступккомпьютеру,впаятьпрямона контактыпортаизнутри.Сообщениеобошибкебудет жуткобесить,нопрограммнымисредствамиегоисправитьбудетнельзя.

Прошивкапрошлауспешно

логией,окотороймытоженеоднократнописали,ипрекраснопаяешь,тоя тебепорекомендуюсделатьплату,какнатомсайте,дабыполучитьмаксимальнуюминиатюрность.Однакониктонегарантируетработоспособности (посколькувсесделанонесовсемпостандарту),инанекоторыхкомпьютерахустройствоможетинеработать.Ярешилидтипопутинаименьшего сопротивленияинаиболеебыстройсборки.Схемуянесколькомодифицировал,ознакомившисьскомментариямикстатьеипосмотреваналогичные схемы,которыеработаютболеенадежно.Вобщем,чтобыповторитьмою реализациютебепонадобятся:

1.Микроконтроллер Attiny 45 в DIP корпусе

2.Панелька к нему (на 8 ножек)

3.Керамический чип конденсатор емкостью 0,1 мкФ и размером 0805

КомпиляторСи

Хочуобратитьтвоевнимание,чтовданномпроекте программанаписананаязыкевысокогоуровняgcc-c. ЭтобесплатныйкомпиляторсидляAVR-микроконтрол- леровимножествоэнтузиастовиспользуютеговсвоих поделках.Мыпостояннописалиранеепрограммы тольконаассемблере,нозачастуюновичкамбывает оченьсложноегоосвоить.Могутебяобрадовать:для нашихконтроллеровсуществуетгромадноемножес- твокомпиляторов.Толькооднихси-компиляторов, известныхмне,существуеттриштуки.Правда,есть одинсущественныйнедостаток—унихразличается синтаксиссоставленияпрограмм.Поэтомупридется остановитьсянакаком-тоодномииспользоватьего. Преимуществоданногокомпилятора—егобесплат- ность.ТакжесуществуюткомпиляторыПаскаляидаже BAISIC,нопоследнийятебекрайненерекомендую.Он генерируетжуткийкод,которыйпортитвсе.Ктомуже, последниекомпиляторыплатные(хотяипозволяют писатьвтестовомрежимепрограммудодвухкилобайт, которой,какправило,бываетдостаточно).

xàêåð 06 /114/ 08

103

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

w Click

to BUY

 

>> phreaking

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Собранноеустройство,видсдвухсторон

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7.

Желательно стабилитрон на 3,6 вольта (я брал в

 

 

 

 

 

 

 

SMD-корпусе, для миниатюрности)

 

 

 

 

 

 

8.

USB-разъем на плату или старая сгоревшая флешка,

 

 

 

 

 

 

 

откуда его можно выпаять

 

 

 

 

 

 

9.

Нормальный программатор, но вполне можно обойтись

 

 

 

 

 

 

 

пятью проводками на LPT-порт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Еслитынеуверенвсвоихсилахилитвоирукидрожатотспиртноговкрови,

 

 

 

 

 

можноиспользоватьивыводныерезисторымощностью0,125ват,нотогда

 

 

 

 

 

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

 

 

 

 

 

япорекомендовалбыпотренироватьсявпайкеSMD-компонентов.Стаби-

 

 

 

 

 

литроныжелательны—безних,конечно,будетработать,ноработабудет

 

 

 

 

 

зависетьотфазылуны,пятеннасолнцеистанетвесьманестабильной.

 

 

 

 

 

Еслитыоченькрутой,томожешьотказатьсяиотрезисторовв68Ом,а

 

 

 

 

 

вместорезисторана2,2кОмпоставитьнаполтора.Однакотутвеликриск,

 

 

 

 

 

чтоработатьничегонебудет.Наделе,извсегоперечисленноготебенужно

 

 

 

 

 

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

 

 

 

 

 

встаройUSB-клавиатуре,ипустьтебянесмущаеттотфакт,чтономиналы

 

 

 

 

 

ихмогутотличатьсяотзаявленныхмноювдвараза.Например,мнепопа-

 

 

 

 

 

лисьрезисторывместо68Ом—32Омаивместо2,2—1,5кОм.Производи-

 

 

 

 

 

теликлавиатуртоженевсегдаблюдутстандарты.Длямонтированиявсей

 

 

 

 

 

схемытебепонадобитсяпровод.Кстати,идеальноподходитмоялюбимая

 

 

 

 

 

витаяпара.

 

 

 

 

 

Изинструментатебе,естественно,потребуетсяпаяльник,пинцетыдля

 

 

 

 

 

резисторов,флюс-гель,ножницыпометаллуиобычнаязажигалка.

 

 

 

 

 

 

Реализация

 

 

 

 

 

 

 

 

 

 

Ну-с,перейдемотсловкделу.ДляначаламыотпаяемразъемUSBот

Подпаянныйпроводдляпрограммирования

 

 

 

 

 

 

старойфлешки.Этоможносделатьспомощьюпромышленногофенаили

 

 

 

 

 

газовогопаяльника,нозанеимениемоныхподойдетиобычнаязажи-

4.

0805 чип резистор сопротивлением 2,2 кОм

 

галка.Аккуратнодержимфлешкуплоскогубцамиигреемеепламенем

5.

Два резистора по 68 Ом такого же размера

 

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

6.Двухсторонняя монтажная плата с отверстиями шагом внимательным,чтобывсамомразъемефлешкинепотеклапластмасса.

2,4 мм

Кактолькоприпойрасплавится,легкимвстряхиваниемотделяемплату

104

xàêåð 06 /114/ 08

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

>> phreakingto BUY

 

 

 

 

 

 

m

w Click

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Окончательноеоформлениеустройстватермоусадкой

 

Запаянныйразъемипанелька

 

флешкиотразъема.Послеприкидываемрасположениедеталейнанашей

 

перейдемксамойинтереснойпроцедуре,которая,каквыяснилось,таила

макетнойплате.Беремножницыпометаллуилегко,прямоподырочкам,

 

многоподвохов—прошивкемикроконтроллера.

вырезаемнужныйкусок.Уменяонполучилсяразмеромпримерно18х35

 

 

 

 

мм.Подлине—оказалосьсизбытком.Номельчитьятоженерекомендую,

 

 

Наладка и прошивка

 

 

 

 

особенноеслипаяльникберешьвпервыйраз.Теперьразгибаемширокие

Теперьтывладелецсобранногоустройства,котороеужевыглядитнор-

краяразъема,чтобыонинемешалилечьемупрямонаплату,изапаиваем

мальнымдевайсом,но,поправде,являетсявсеголишьбесполезнойбол-

всечетыреконтактанакаждуюдырочкумакетки.Возможно,придется

ванкой,посколькуничегопоканеделает.Аработатьонобудетлишьпосле

снизунапильникомподпилитьпластмассовыевыступающиечасти.Думаю,

 

того,какмызальемвнегосвоюпрошивку.Естьнесколькоспособов.Мы

тысамдогадаешься,какие.Затемзаливаемширокиеконтактыприпоем

 

уженеоднократнописалипроLPT-портивозвращатьсякэтомуварианту

иполучаемплату,ужеоченьпохожуюнаразобраннуюфлешку.Послеэтой

 

небудем.Этобудеттвоимдомашнимзаданием—разобратьсяипрошить

процедурывпаиваемпанелькуподнашмикроконтроллер.Впринципе,

 

данныйконтроллер.Подсказка:надопрочитатьхелпнапрограмматор,

можнопожмотитьсяивпаятьсразуконтроллер.Новслучаенеудачной

 

которыйявыложунадиск,идокументациюнаконтроллер,которуюты

прошивкиегопридетсявыпаиватьзаново.Даикакоказалось,гораздо

 

найдешьтамже.

прощесобратьотдельныйпрограмматор,чемкаждыйразприпаиваться

 

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

кмикросхеме.Обративнимание,какрасположитсяконтроллер.Егоключ

 

иглупый—найти,гдемогутпрошитьконтроллеры,например,врадиома-

(обычнообозначенточкойиливыемкой),которыйпоказываетнахожде-

газине.Преимущество—тебенепридетсяприлагатьникакихусилийпо

ниепервойножки,направленвпротивоположнуюсторонуотносительно

 

пайкепрограмматора,покупкеитомуподобное.Ноестьисущественный

разъемаUSB.Нумерациявыводовмикросхемы,еслисмотретьсверху,

 

недостаток.Еслитебетамчто-топрошьютнетак,придетсясновапереться

начинаетсяотключаиидетпротивчасовойстрелки.Вообще,такиевещи

 

вэтуконторуипрошиватьзаново.Какправило,вэлектроникекосякне

лучшевсегдауточнятьвмануалахнамикросхему.

 

ясенсразу,может,тыошибсявсхемотехнике,что-тонепропаял,аможет,

Резисторна2,2кОмвпаиваетсямеждупервойивторойножкойразъема.

 

прошивканеверноработает.Поэтомувполневозможно,чтотыдоско-

Ужепослевпайкиэтогорезистора,есливоткнутьплаткувкомп,Винда

нальновыучишьдорогувэтуфирмочку,нотакинеполучишьготового

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

 

устройства,аденегнапрошивкупотратишьбольше,чемнанормальный

Дальшеидемпосхеме,впаиваемрезисторы68Омизаводимихна5и7

 

программатор.Второйвариант—этопозаимствоватьпрограмматору

ножкиконтроллераи,соответственно,на2и3пиныразъема.Конденсатор

 

товарища.Всвоевремяябралпогонятьпараллельныйпрограмматорна

будетунасфильтроватьвысокочастотныепомехипопитанию,—яего

 

старойработе.Новсе,чтовзятовдолг,надовозвращать,поэтомувариант

поставилспротивоположнойстороныплатымежду4и8ногойконтролле-

 

хотьикрасивый,но,опятьже,неоченьудачный.Самыйпростойиверный

ра.ЭтиконтактызаводимнапиныразъемаЮСБ1(+5вольт)и4(общий).

 

способ—иметьсвойпрограмматорнаUSB.Такойможнокупитьспециаль-

Теперьстабилитроны.Какяговорилвыше,ихналичиенеобязательно,

нодляAVR-микроконтроллеровуразныхконтор,которыемогутеговыслать

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

 

дажевглубинкуРоссии,вместесконтроллером.Надоотметить,чтовнут-

Документациюнаконкретныйтипстабилитрона,тынайдешьвинтернете.

рисхемныепрограмматорыдляAVRстояточеньдешево,около$30-40,что

Ещеразпробегисьвнимательнопоплате,непожалейвремени,рекомен-

 

покарманудажешкольнику.

дуюдажепрозвонитьмультиметром.Нужноубратьвсе«сопли»исделать

 

Ну,будемсчитать,чтопрограмматорутебянаруках;самодельныйна

платуконфеткой.Еслитына100%уверен,чтосхемасобранаправильно,то

 

LPT-портилижепрофессиональныйпараллельныйпрограмматордля

xàêåð 06 /114/ 08

105

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to BUY

 

>> phreaking

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

links

Исходный проект, на основе которого написана эта статья, находится тут: http:// macetech.com/blog/ node/46

Ресурс, посвященный программированию микроконтроллеров и программированию их через LPT-порт: http://avr.nikolaew.org

Исходники

ПлатаUSB-клавиатуры—кладезьнеобходимыхдеталей

dvd

На диске ты найдешь документацию к контроллеру, програм- му-программатор, исходный и скомпилированный код, компиляторы ассемблера и си.

уймымикросхем—неважно.Теперьприступимкглавному

однувещь.Практическиувсехмикроконтроллеров,сущест­

—прошивкемикроконтроллера.Какяужеговорилвыше,

вующихсегоднянарынке,независимоккакомусемейству

автороригинальногопроектаупустилизвниманияде-

онипринадлежат,имеютсятакназываемыеустановочные

тальноерассмотрениеданногопроцесса,иеслипочитать

биты—fuse-bits.Этосвятаясвятыхконтроллера.Уменяуже

комментарии,многиетаквнеминеразобрались.Итак,я

лежитпригоршняконтроллеров,которуюязагубилзверскими

будурассматриватьвариант,чтопрограмматортызаполучил

экспериментамисfuse-битами.Настроечныебитыотвечают

—последовательныйвнутрисхемныйилинаLPT-порт.Хочу

зарядосновныхпараметровконтроллера.Однимиможно

отметить,припрограммированиисамодельнымпрограмма-

указать,накакойчастотебудетработатьнашеустройство,

торомнапараллельныйпорттебепридетсяподатьпитаниена

вывестиегонамаксимальнуючастотуилидажезаставить

нашконтроллер,чтобыегопрошить.Самыйпростойспособ

работатьначастотенесколькихкилогерц.Надопонимать,что

—взятьегоизэтогожекомпьютера,напримерспроводабло-

всхемотехникебыстреенезначитлучше.Какправило,опре-

капитанияфлоповода.Красныйпроводунасбудет+5вольт,

деленнаячастотаработынужнаприсопряженииснекоторы-

ачерныйиликорпускомпьютера—«земля».Поначалуя простоподпаяллиниипрограммированияконтроллерапрямо

всхему.Нопослепрошивкияотпаялвсепровода,адевайс незафурычил.Несколькоразповторятьпроцедурузапайкираспайки,рискуяошибиться,мнебылолень.Поэтомуябыс- тренькосоорудилнебольшуюплатусDIP-панелькой.Затем вставилтудаAttiny45иразъемпрограмматораипрошивал егоужетам,перетыкаяконтроллеризнашейплатывплату программатора.

Процедурывыполнены?Тогдазапускаемпрограмму программатораичитаемсигнатуруконтроллера.Если контроллернормальноопределился,товсеОК.Еслинет, значит,тыгде-тонакосячил.Естьшанс,чтоконтроллер попалсябитый,носетоватьнаэтоследуетвпоследнююочередь.Послеопределенияконтроллеравыбираем,чтохотим прошитьFlash-памятьконтроллера—ивыбираемнашфайл прошивкиcapslocker.hex.Передпрошивкой,дажееслинаша тинькановенькая,еенадостереть.Дляэтоговсофтеобычно естьспециальнаякнопка—«стеретьконтроллер».Сверяем прошитыйконтроллерсисходником:есливсехорошо,то прошивкапрошлауспешно.Нонеторописьвставлятьдевайс

вкомпьютер.Работатьоннебудет,таккакнадосделатьеще

миинтерфейсамидлявыдерживаниядлительностисигналов. Такиминтерфейсомможетявлятьсямногократноописанный интерфейсUART,болееизвестныйкакRS-232.Неправильная установкапараметровfuse-битовможетпривестиктому,что большенельзябудетработатьсданнымконтроллеромвэтой схемеи,возможно,придетсяделатьотдельнуюсхемудляперепрошивкиустановоклибоискатьпараллельныйпрограм- матор.Естьещеfuse-биты,которыезашиваютназаводе,если устройствопускаютвсериюинехотятчтобыоттудамогли выдратьпрошивку.Ониназываютсябитызащитыиоднократнопрограммируются.Физическионипредставляютсобой перемычкивнутрикристалла,которыепережигаются,иуже нетникакойвозможностиштатнодостатьпрошивкуконтроллера.Этифьюзылучшенетрогать,еслинехочешьполучить неработающийконтроллербезвозможностивосстановления. Нашеустройствонеобходимовывестинамаксимальную частотуработы(ксловусказать,назападномресурсеэтот моментбылсовершенноупущенизвиду).Леземвнастройки fuse-битовпроектаивыставляемфьюзывнужнойкомби- нации.Нетрогайлишнего!Никогданедоверяйматериалам поустановкефьюзов,всегдалезьвмануалипроверяйсам, вернолиониустановлены(можешьтакжепроверитьменя).

106

xàêåð 06 /114/ 08

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

phreaking

 

BUY

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

ОтпаиваемзажигалкойUSB-разъем

 

Отрезаеммонтажнуюплату

 

 

 

 

 

 

 

 

 

 

 

 

Итак,намнужнопрограммироватьбиты,отвечающиеза

разогревеговмаленькойформеизфольгиилижести.Я

 

 

 

частотупроцессора.Аименно:установитьCKSEL0вединицу,

поступилпроще:взялтермоусадку,вкоторуювходиломое

 

 

 

аостальныеCKSEL1-CKSEL3вноль.Помимоэтого,надо

устройство,иусадилеепрямосверхунаплатуобычнойзажи-

 

 

 

установитьбитыSUT0вединицу,аSUT1вноль.Проверьуста-

галкой.Вышлокрутоибыстро.Цветтермоусадкияподобрал

 

 

 

новкубитаCKDIV8,чтобыонтожебылустановленвединицу.

темный,чтобынафонесовременныхкорпусовонокакможно

warning

 

 

Вышеперечисленныебитыустанавливаютрежимработы

меньшебросалосьвглаза.Наэтомэтапеможнопоставить

Учти, что если твои

 

 

процессора:выставляютработунамаксимальновозможной

жирнуюточку—нашфрикерскийдевайссобраниработает.

действия с этим

 

 

частоте16МГц,безвнешнегорезонатора.Последнийбит

 

 

устройством повлекут

 

 

показывает,делитьлиданнуючастотуна8.Еслионбудет

Итог

тяжелые последствия,

 

 

установленвноль,топроцессорбудетработатьначастоте

Посленебольшогогеморроясустройствомярешилего

то тебя вполне могут

 

 

16/8=2МГц(неестьгуд).Почемуятакоепристальноевнима-

протестироватьнасвоемколлеге.Надосказать,чтоподолгу

осудить по 274 статье

 

 

ниеуделилпоследнемубиту?Устройствоуменянеработало

службыонпостояннонабираетбольшиеобъемытекста.Пока

уголовного кодекса.

 

 

несколькодней,иянемогпонять,вчемжедело.Оказалось,

коллегаходилнаобед,япоставилдевайсемувUSB-порт.

 

 

 

чтопоумолчаниюданныйбитустановлен,итолькопослеего

Первые полчаса товарищ думал, что случайно задевает

 

 

 

снятиявсезавелось.

кнопку <Caps Loсk>. Затем понял: что-то тут не чисто.

 

 

 

 

 

 

Потребовал от админа заменить ему клавиатуру. Админ счел

 

 

 

 

Тестирование и использование

девайс обыкновенной флешкой и сердобольно заменил

 

 

 

 

 

 

 

 

 

 

 

Янадеюсь,тыосилилрассмотренныеэтапы,собралипрошил

клаву. Но проблемы не прекратились. В конце концов, това-

 

 

 

нашезамечательноефрикерскоеустройство.Теперьпротес-

рищ начал требовать переставить операционную систему

 

 

 

тируемегоработоспособность.

или даже сменить компьютер. Под конец рабочего дня я от

 

 

 

ПихаемнашдевайсвUSB-порткомпьютера.Устройствооп-

смеха-таки прокололся, в чем дело. Шутка удалась, хожу

 

 

 

ределяетсякакHID,иоперационканормальноустанавливает

в синяках. Проще говоря, потратив один день на детали и

 

 

 

штатныедрайвера.Можнодляпущейуверенностипосмот-

сборку, ты можешь получить весьма веселенькое устройс-

 

 

 

ретьеговдиспетчереустройств.Отлично,кработеготовы!Во

тво, которым можно неплохо позабавиться. А если ты еще

 

 

 

времятестированияменянесколькоразобозвалиблондин-

и разберешься с кодом, который, напоминаю, написан на

 

 

 

кой,таккакяпериодическиначиналпечататьсвключенным

языке Си и компилятор к которому я любезно выложил на

 

 

 

<CapsLoсk>.

диск, ты можешь дописать дополнительные кнопки и комби-

 

 

 

Далеетыможешьоформитьустройство,чтобыоноприняло

нации. Отмечу, что сначала инсталлируй AVR Studio, а потом

 

 

 

нормальныйчеловеческийвид(анеобразинубрутальной

компилятор Win AVR, и он прекрасно сроднится со студией.

 

 

 

платы).Ориентируйсянасобственныйвкус.Каквариант,

В результате ты сможешь в одной программе писать как

 

 

 

можнозалитьплатувкакой-нибудьформеэпоксиднойсмо-

на си, так и на ассемблере. В общем, удачи! И пиши мне о

 

 

 

лой,получиввесьмагламурную«флешку».Либотермоклеем,

результатах сборки.z

 

xàêåð 06 /114/ 08

 

 

107

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to BUY

 

>> phreaking

 

 

 

 

 

 

 

m

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

g

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Роман Ефименко

/ ragerus@gamil.com /

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Айболит в стиле киберпанк

Ремонт железа

Руководств по ремонту компа существует огромное количество. Большинство заканчиваются так: «Выкинь нерабочее и иди купи новое, производителям железа тоже надо кушать». Это не наш путь. Итак, читаем о том, что делать после обнаружения неисправной железки, будь то материнская плата, видеокарта или вообще что-то неизвестное, воткнутое по ошибке сборщиком в PCI-слот.

Мелочи, несовместимые с жизнью

Наиболеечастымипроявлениямиизлишнейретивостиновоиспеченного сборщикакомпьютеровявляютсяснесенныенапрочьразнообразныемелкиеэлементы.Иногдаскладываетсявпечатление,чтосборщикстрадает синдромомПаркинсонаипрактическинеконтролируетдвиженийотвертки.Ното,чтоодинчеловексломал,другойпочтивсегдаможетпочинить. Первоеиосновноеправилоприремонтелюбогокомпонента—вниматель- ностьиострыйглаз.Никуданеспеши,осматривайпациентатщательнои методично.Особоевниманиеуделяймелочам,наиболееподверженным «криворукойугрозе».Например,местамкрепежазащелоккрепления радиаторапроцессора,участкамвозлекрепежныхотверстийдлявинтов, группамконтактовдляприсоединениякнопокисветодиодовпередней панеликорпуса.Нелишнимбудетпроверитьсостояниеразъемовдля модулейпамятииокружающихихкомпонентов.Увидеокартчащевсего страдаютмелкиеSMD-конденсаторыирезисторы,расположенныенеда- лекоотразъемаPCIexpress.

Чтомыищем?Любыеотклоненияотнормы,будьтосколы,почернение, вздутиеконденсаторов,следыперегреваилицарапины.Если«кримина-

ла»налицевойстороненеобнаружено,этонезначит,чтоегонетнатыль- ной.Ещеодноместо,любимое«ломастерами»,—резисторныесборки, терминирующиесигнальныелиниипамяти.

Походуобследованияпациентанезабывайприсматриватьсяктокопроводящимдорожкампечатногомонтажа,онистрадаютничутьнережечем SMD-шки. Если«раны»обнаружены,приступаемкремонтномуэтапу.Если нет—читаемдальше.

Конденсаторы «в положении»

Прочитавназваниезаметки,половиначитателейвыкрикнут«Бояааан!» ибудутправы.ИсториясконденсатораминачаласьвэпохуSlot1иSocket 370попричинеизлишнейлюбвифирмыAbitэкономить.Упоминанияо вздувшихсяконденсаторахвстречалисьираньше,новотмассовость напастьприобрелатолькосподачиупомянутойконторы.

В чем причина «вздуваемости» конденсаторов? Кроме емкости и рабочего напряжения у них есть еще один важный (хоть и сложнопроизносимый) параметр — «эквивалентное последовательное сопротивление»

(equivalent series resistance — ESR). Зависит оно от сопротивления

Соседние файлы в папке журнал хакер