книги хакеры / журнал хакер / 113_Optimized
.pdf
|
|
|
|
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 |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|||||
|
|
|
|
|
|
||||
w Click |
to BUY |
|
>> coding |
||||||
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
Николай Байбородин
/ baiborodin@gmail.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 |
|
|
|
|
Осторожно, двери открываются
Собираем недешевый дорген на C#
Продолжаем серию статей о самостоятельном создании SEO-софта. Сегодня мы пересечем зыбкую грань, разделяющую белую и черную оптимизации. Оставив в стороне моральную сторону вопроса и возможные санкции со стороны поисковиков, сосредоточим внимание на технических вопросах создания главного инструмента черных оптимизаторов — генератора дорвеев или доргена.
Введение для чайников
Оченькраткоогенерациидорвеевдлятех,ктоещеневтеме.Итак,дорвей (doorway)илипростодор.Этовеб-страница,черезкоторуюможнопопасть надругиестраницытогожеилидругогосайта.Еслитызасталзарождение рунета,тонавернякапомнишь,чтобольшинствовеб-сайтовоткрывались состраницы,несодержащейничего,кромезаголовка,фуфлыжнойкартинкиииногдассылокнаразличныеверсиисайтаподразныекодировки. Втевременаподдержканесколькихкодировокврамкаходногобраузера былабольшойпроблемой,неговоряужеобавтоматическомопределении кодировки.Этастраницаиестьdoorway.КПДбылнижеуровняплинтуса. Длячегоонатогда?Анидлячего:).Просто,такбыломодно,тенденциивебдизайна,знаетели.
Какимбокомздесь участвуетпоисковаяоптимизация?Подогнатьподособенностиконкретногопоисковогодвижкатолькооднустраницуивывести еевтопгораздопроще,чемвыводитьвесьресурс.Азаполучивстраницув топахпоопределеннымзапросам,можнонаправлятьснеепользователей надругиестраницыресурса.Продолжимфантазировать.Выведявтоптакуюстраницупооченьпопулярномусредиюзверейзапросу,можнопоиметь неслабыйтрафик.Иопять-таки,переправитьпоссылкамнадругиестрани- цысвоегоресурса.Илинепереправить,азаработать,разместиввдорвее ссылкинапроплаченныересурсы.Такмыпостепеннопревращаемсяизвеб дизайнера-бессребреникавматерогопродавцапоисковоготрафика. Продаватьтрафикможнолибосамостоятельно,либочерезпосредников,
чтогораздовыгоднее.Новыбитьсявтопповысокочастотномузапросуи, темболее,удержатьсятам—задачанеизтривиальных.Кудапрощезанять верхниепозициипонизкочастотнымзапросам.Увы,потакомузапросуи посетителейкнампридетгораздоменьше.Следовательно,напродаже трафикамысрубимменьшекапусты.
Выход?Окучиватькакможнобольшенизкочастотныхзапросов,создавая подкаждыйизнихсвойдоривыводяеговтопSERPa.Чембольшедоров, тембольшелавэ—зависимостьпрямая,кактрамвайнаяшпала.Есть, правда,одинвопрос,которыйможетнедаватьспокойноспатьбудущему сетевомуолигарху.«Ачто,еслипользователь,зайдянаdoorway,сбежит оттуда,неперейдянипооднойссылке?».Правильныйвопрос,потомучто юзверьсейчаспошелтертый,пуганыйикудапопало,егонезаманишь.Да иненадо.Потомучтоунасестьтакоечудо,какавтоматическийредирект (исполненныйчащевсеговвидесценариянаязыкеJavaScript),перекидывающийпользователякклиенту,проплатившемутрафикещедотого,как браузеруспеетпоказатьсодержимоедора.
Воттакаянезамысловатаятехнология.Однакотут,какивлюбомдругом деле,необойтисьбезнюансов.Ихмыиобсудим.
Achtung! Грабли!
Первое,чтонеобходимознатьначинающемузаводчикудоров—этатехно- логиявсемипоисковымисистемамиотноситсяктакназываемой«черной оптимизации».Тоестькметодам,которыерасцениваютсякакнарушение
110 |
xàêåð 05 /113/ 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 |
|||
>> codingto BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
|
|
|
|
|
m |
|||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
правилигрыибезжалостнокараютсясистемоймодерациипоисковиков. Еслитвойдорспалили,тооннетольконавсегдавылетаетизтопа,ноизаноситсявчерныйсписокпоисковогоиндекса,зарабатываяпожизненный бан.Надосказать,поисковикивесьмапреуспеливборьбесдорвеямии валятихпачками.Отсюдабезрадостныйвывод—малотого,чтодляприем- лемогодоходанеобходимоиметьнеодиндорвей,ацелуюихсеть,такеще исозданиедорвеевпредставляетсобойнепрерывныйпроцесс.Короче, сизифовтруд.Взаменпопавшихвбанприходитсяпостоянносоздаватьи выводитьвтопновыедоры.
Втораяпроблемазаключаетсявтом,что,несмотряназаявлениянекоторыхбезответственныхтоварищей,редирект,дажевыполненныйввиде JavaScriptсценария,успешнопалитсяпрактическивсемипоисковиками,и страницасредиректомопять-такилетитвбан.Одноизрешенийпроблемы
—шифрованиередиректа.Алгоритмысоставленияпоисковогоиндекса постояннообновляются,втомчислеисовершенствуяметодыборьбысчернойоптимизацией.Следовательно,приемыредиректатакженуждаютсяв постоянномобновлении.
И тут появляюсь я — весь такой в красном
Конечноже,читательдогадался,ктоунассегоднявролисупермена.Это
—дорген,программа,основноеназначениекоторойзаключаетсявавто- матизациирутинногоиоднообразноготрудапобыстромуиэффективному созданиюдорвеевсучетомособенностейпоисковыхалгоритмов.Каким требованиямдолженудовлетворятьдорген?Чтоондолженуметьделать обязательно,ачтоявляетсявсеголишьданьюмоде?Ответынаэтивопросы должензнатьнетолькотот,ктособралсянаписатьсобственныйдорген,нои тот,кторешилсянаегопокупку.Нижеавторпостаралсяпривестинаиболее полныйсписоквозможностейдоргена.Темнеменее,нестоитдумать,что этоисчерпывающийсписок.Какинестоитпытатьсяреализоватьсразу всеопции.Наиболееэффективныйподход—выбратьважный(наданный моментданномупользователю)функционалиегореализовать.Впоследующихверсияхможнобудетнаращиватьвозможности.Итак,перечень функциональныхвозможностейпрофессиональногодоргенавключаетв себя:
• стилевоевыделениеключевыхслов; • использованиетегов<b>и<strong>;
• использованиезаголовковразногоуровня;
• использованиетегов<title>,<description>, <keywords>; • возможностьвыборашаблонаоформлениягенерируемыхстраниц;
• управлениеалгоритмамивнешнейивнутреннейперелинковкигенерируемыхстраниц; • управлениеколичествомстраниц,входящихводиндорвей;
• управлениеобъемомконтента; • возможностьвыбораисточникаконтентадлягенерируемыхстраниц;
• наличиегенераторацепейМаркова; • возможностьуправленияплотностьюключевыхслов;
• возможностьпоискаключевыхсловиподборапоисковых запросов; • управлениеиспользуемымиалгоритмамиредиректа;
• возможностьшифрованияиобфускациипрограммногокода; • управлениеспискомфидов; • возможностьавтоматическойзагрузкидоровнавебхостинг;
• правильноерасположениередиректа(вверхустраницы)независимоотиспользуемогошаблона;
• возможностьиспользоватьключевыесловавURLстраницы; • автоматическаяперелинковкадовеев,загружаемыхизпрограммынаразныехостинговыеплощадки; • возможностьимпортированияспискаключевыхсловиз файла;
• функциитранслитерации,переводаключевыхсловиуправленияопечатками; • возможностьсокрытияпоисковогоспама;
• управлениечастотойиспользованиятеговоформленияна странице.
Список,каквидишь,впечатляет.Дорген,обладающийподобной функциональностью,стоитнеодинкилограммзелени.Утебяже,
приусловиипрямыхрук,естьреальнаямазасделатьегосамостоятельно.А тамуже,какговорится:«Хочешь,ешьморковку,хочешьпо-другомуисполь- зуй»(©ФаинаРаневская).Хочешь—дорыклепай,хочешь—доргеномсво- имбарыжничай.Еслисмыслнекоторыхизперечисленныхфункцийтебене понятен—этолишнийшансуглубитьсвоипознаниявобластипоисковой оптимизации.Ссылкиинтересныхресурсовятебенакидал(смотриврезки).
С чего начать?
Именнотакойвопросзадаетбольшинствотех,кторешилнаписатьсвой собственныйприватныймегарулезныйдорген.Вопросчастоненаходит ответа,адоргентакиостаетсяненаписанным.Сейчасмывместепреодолеемэтотпсихологическийбарьер.
Преждевсего,определяйсястойминимальнойфункциональностью, котораятебенужна.Неувлекайсяивыберидействительнокритический минимум,которыйибудетотличатьбудущийсофтот,скажем,блокнотаили
CDEjector’a:).
Наворотыможнодобавлятьпостепенно,имеянарукахужефункционирующийдоргенииспользуяеговсвоихгрязныхинеоченьделишках.Короче, куриметодологииитерационнойразработкиПО.
Функциональностьдляпервогоразабудетминимальной—выборключе- выхфраз,шаблона,исходноготекста,частотыключевиковиколичество страниц,генерируемыхподкаждуюключевуюфразу.
Интерфейсможешьпостроить,какуменя—илипридуматьсвойвариант. Списокключевыхфразбудетхранитьсявобычномтекстовомфайле.В качестверазделителя—переводстроки(однастрока—однаключевая фраза).Еслиневдаватьсявдетали,алгоритмработынашегодоргена будутследующим.Пользовательпредварительноготовитфайлсключе- вымифразамиифайлсшаблономHTML-верстки.Затемвокнедоргена указываетвсенеобходимыепараметры(путькфайлусключевиками,путьк файлусшаблоном,количествостраницводномдоре,плотностьключевых слов,каталогдлясохранениярезультата).Начинаетсяглавноедейство. Прогаперебираетсписокключевиков,считаетобщееколичествословв заготовленномтекстовомматериале,рассчитываетколичествовхождений ключевикавтекстнаосновезаданногопоказателяплотностиивслучайномлибозаданномпорядкепомещаетключевыефразывисходныйтекст. ВставляемполучившийсятекствHTML-шаблонвсоответствиисзаранее подготовленнойразметкой.Добавляемтеги<title>,<head>исохраняем получившийсяфайл.Повторяемдлякаждойключевойфразызаданное количествораз.
Финт№1.Когдаделодойдетдосохранениянавинтеготовогодорвея, разумнымшагомбудетназначитьключевуюфразу,подкоторуюоптимизироваласьбыстраницавкачествеименифайла.Этоприбавитейвеспри оценкерелевантности.
Финт№2.Сохраняяфайлсдором,заточеннымподключевуюфразуиздвух
xàêåð 05 /113/ 08 |
111 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
E |
|
|
||||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
||||
w Click |
to BUY |
|
>> 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 |
|
|
|
|
Дорген:примеринтерфейса Дорвпоисковойвыдаче
иболееслов,вназваниифайлаэтисловалучшеразделятьспомощью дефиса,аненижнегоподчеркивания,какпривыклимногиекодеры. Причинапроста:поисковикирасцениваютдвелексемы,объединенныес помощьюнижнегоподчеркиваниякакоднослово(котороеможетоказаться поисковикунеизвестным),втовремякаксоставноесловосиспользованиемдефисапрекраснораспознаетсякакдваотдельныхслова.
Теперьошаблоне.ЭтообычныйшаблонHTML-документа,какихвсетидо фигаибольше.Можешьвыбратьтот,чтотебенравится.Авторуприходилось сталкиватьсясдвумяподходамикорганизацииHTML-шаблоноввдоргене. Первый—шаблоны,жесткопрописанныевдоргене.Выборфиксирован
иневелик.Второй—возможностьиспользоватьлюбыеHTML-файлыв качествешаблона(спредварительнымдобавлениемтудаспециальной разметки).Разметкапредставляетсобойнаборизвестныхдоргенуключей, покоторымонвпроцессеразборашаблонаузнает,какойэлементнужно вставитьвэтомместе.Например:
{TEXT} — основной текст {SCRIPT} — JS скрипт редиректа
{MAIN_KEYWORD} — кейворд страницы
{RAN_KEYWORD} — случайный кейворд
Итакдалее.Кстати,примерразметкивзятссайтаwww.klikforum.com,где тыможешьрасширитьсвоизнанияпотеориидороводства.
Недостатокподходавтом,чтомыпривязываемлогикуработыдоргенак конкретномушаблону,жесткопрописывая,гдеичтодолжнонаходиться.Я советуютебепоступитьиначе:обозначитьвшаблонеосновныеегосекции, ачтовкакойсекцииразмещать—пустьрешаетпрограммаспомощью заложенныхвнееалгоритмов.Впростейшемшаблонесекцийбудетне такмного—заголовок,текст,навигация,подвал.Вболеесложномможно расширитьсписок.
Нюансымыобсудили.Пораприниматьсязаработу.
Муки творчества
Начнемсзагрузкиспискаключевыхфраз.Дляэтогохорошоподойдет элементуправленияcheckedListBox.Отпростогоспискаонотличается возможностьювыбораэлементовспомощьючекбоксов.Заполнятьсясписокбудетпринажатиисоответствующейкнопки.Обработчик,ябысказал, непрост,атривиален:
DialogResult result = fileChooser.ShowDialog(); String fileName;
if (result == DialogResult.Cancel)return; fileName = fileChooser.FileName;
if (fileName == "" || fileName == null) MessageBox.Show("Ошибка выбора файла", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error); else {
input = new StreamReader(fileName); makeKeyList();
}
Смыслнаписанноговыше—вывестидиалоготкрытияфайла,коррект нообработатьвозможныеситуацииипередатьуправлениефункции makeKeyList().
private void makeKeyList() { String a = null;
while (!input.EndOfStream) { a = input.ReadLine();
if (a != null) checkedListBox1.Items.Add(a);
}
input.Close();
}
Другимисловами,читаемфайлдоодурения(доEndOfStream)иподсовываемстрочкикомпонентуcheckedListBox.
Аналогичнымобразомобрабатываемвводостальныхпараметров(подробностисмотривисходникахнадиске).Послетого,каквлистбоксзагружен списокключевыхфраз,нужнореализоватьмеханизмвыбораотдельных ключевиков,длякоторыхбудутсоздаватьсястраницы:
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e){
String item = checkedListBox1.SelectedItem.ToString();
if (e.NewValue == CheckState.Checked)addKey(item); else remKey(item);
}
private void addKey(String val) {
if (keyList == null) keyList = new ArrayList(1); keyList.Add(val);
}
private void remKey(String val) { keyList.Remove(val);}
Думаю,всепонятно—ключевики,выбранныедлядальнейшегоисполь- зования,хранимвспискеkeyList.Реагируемнадействияпользователя черезсобытиеNewValue.Посколькудикийюзверьнепредсказуемиможет жатьначекбокснетолькосцельювыбратьключевуюфразу,ноиотменить свойвыбор,предусмотренареакциянаобадействия—методыaddKey()и remKey().
Многовопросоввызываетперелинковкастраницдорвеяисоздание сетиизнесколькихдорвеев.Наэтотсчетнесуществуетоднозначного мнения.Используюткакпростенькиеэлементарныесхемы,таки сложные,основанныенаматематическомаппарате,использующие динамическуюиликольцевуюперелинковку.Первоевремяможно отталкиватьсяотидеиоформлениясвязейввиденавигационного блока.
112 |
xàêåð 05 /113/ 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 |
|||
>> codingto BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
|
|
|
|
|
m |
|||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
СтраницаВикипедии,посвященнаятехнологиидорвеев
Обработаввсеэлементыпользовательскогоинтерфейса,доргеннаходится,чтоназывается,навзводеиготоввыстрелить. Созданиедорвеевпредставляетсобойпоследовательный процесс.Нижеяперечислилегоосновныеэтапы:
1.ЧитаемвтекстовуюпеременнуюHTML-шаблон;
2.Читаемвтекстовуюпеременнуютекстдора;
3.Читаемвтекстовуюпеременнуютекстредиректа;
4.Перебираемвциклеключевики;
4.1.Длякаждойключевойфразырассчитываемколичество повторов;
4.2.Формируемзаголовки;
4.3.Разбавляемосновнойтекстключевымифразами;
4.4.Парсимшаблон,заменяяметкисоответствующими элементами;
4.5.ГенерируемимяисохраняемHTML-документ. Исходныйтекстэтогоалгоритмаслишкомобъемен,чтобыего
публиковатьвжурнале,поэтомуизучайисходник,выложенный надиске.Остановимсянареализацииосновныхмоментов. Дляформированиясодержимогодоранеобходимоисходный текстразделитьнаотдельныелексемы(слова)ипосчитать ихобщееколичество.Исходяиззаданнойпользователем плотности,рассчитываемколичествоповторовключевой фразыилислова.Теперь,знаяколичествоповторовфразыв тексте,нужноеетамразместить.Будетуместнымиспользоватьалгоритм,позволяющийполучитьтекст,наиболееточно соответствующийестественному.Небудемничегоусложнять
—нашацельосвоитьобщуюконцепциюсозданиядоргенов. Обойдемсяобычнымравномернымраспределениемпотексту.
String[] lex = content.Split(); int lexCount = lex.Length;
int keyTotalAmount = (int) (numericUpDown2.Value / 100 * lexCount);
if (keyTotalAmount != 0) {
int step = (int)(lexCount / keyTotalAmount); for (int k = 0; k <= keyTotalAmount; k++) {
if (step <= lex.Length) {
lex[step] = (String)keyList[i]; step += step;
}
}
}
Несколькокомментариев!Дляразделениястрокинаотдельныелексемыиспользуетсяметод Split(),возвращающий массивлексем.Вычисляяколичествовхожденийключевика втекст,незабудьпривестирезультаткцелочисленному значению.
Кактолькотекстбудущегодорвеясформирован(кстати,наэтом этапенеплоходополнительнопредусмотретьвставкутегов <h>,<i>, <b>),работаемсключевойфразойдляповышения значимостиключевика.Думаю,тысправишьсясамостоятельно.Чтобывставитьвсоответствующиепозициишаблона нужныеэлементы,можноприкрутитьстандартнуюфункцию Replace(),котораязаменяетодинфрагменттекстадругим:
template = templ.Replace ("#title", (String)keyList[i]);
template = template.Replace ("#header", header);
template = template.Replace ("#redirect", redir);
String newText = "";
for(int k = 0; k < lex.Length; k++) newText = newText + " " + lex[k];
template = template.Replace ("#text", newText);
Все,дорготов.Осталосьзаписатьеговотдельныйфайл, повторитьперечисленноевышен-ноеколичестворазвсоот- ветствиисколичествомстраницдорвея,указаннымпользователем,иперейтикследующейключевойфразе.
Незабудьприсвоитькаждомуфайлууникальноеимя,правильноесточкизренияпоисковойоптимизации(включающее всебяключевуюфразу).
Гонка вооружений
Рассмотренныйвстатьедорген—всеголишьдемонстрация концепции.Тыможешьсовершенствоватьегопрактически бесконечно,оттачиваянавыкисозданиясофтадляпоисковой оптимизации.Ещеразпосмотринасписоктого,чтодолжен уметьидеальныйдорген.Постарайсяоценитьегоспозиции разработчикаиначинайдействовать.
Советуюначатьсдобавлениямеханизманавигацииилинковкидоров.Затемможешьусовершенствоватьалгоритм распределенияключевыхфразпотексту.Реализуйконтроль объематекстовойинформации,использованиеразличных словарей(синонимов,опечатокит.д.)иобработкуисходного текстаспомощьюгенераторацепейМаркова.
И,самоеглавное,начнисампользоватьсясвоимдоргеном. Тогдатыточнобудешьзнать,какаяфункциональностьему действительнонеобходима.z
dvd
Тебе легче вкурить тему ковыряясь в исходниках, чем читая описание алгоритмов и принципов работы программы? Нет проб лем — на диске тебя ждет дорген из статьи в виде проекта для
Visual Studio 2008.
warning
Помни, что использование дорвеев всеми без исключения поисковиками относится к методам черной оптимизации и жестоко карается исключением из индекса с одновременным внесением в black list.
Привыбореплотностиключевыхсловнастраницеважнособлюдать |
|
Однаизсерьезныхпроблем—контентдлянаполнениядора.Самый |
|
||
золотуюсередину.Заниженнаяплотностьсделаетключевикневи- |
|
простойспособ:позаимствоватьсродственногоресурса.Онжеи |
димым—понизитрелевантностьстраницыпозапросам,вкоторые |
|
самыйнеэффективный.Деловтом,чтопоисковикидавнонаучились |
онвходит.Слишкомвысокаяплотность—прямойрискпопасть |
|
распознаватьифильтроватьдубли,склеиваярезультатывыдачи.Вы- |
подкатегорию«поисковыйспам»изаработатьбанотпоисковика. |
|
ход—использоватьсистемыавтоматическогоперевода(прогнать |
Устанавливайнаиболееэффективнуюплотностьопытнымпутем, |
|
текст«туда—обратно»).Илипридатьуникальностиспомощью |
ориентируясьнапоказатель6-8%. |
|
генераторатекстанаосновецепейМаркова. |
xàêåð 05 /113/ 08 |
113 |
|
|
|
|
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 |
|
|
|
|
Крис Касперски
трюки открыса
Долгое время мы витали вокруг чистого ANSI C, без реверансов в сторону нестандартных расширений от различных производителей, которых развелось столько, что игнорировать их невозможно. Сегодня мы поговорим об интимных взаимоотношениях Си с платформой .NET и управляемым (managed) кодом.
|
|
|
|
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 |
|
|
|
|
01управляемыйкоднаСи
Официальноплатформа.NET«крышует»C#,F#,VisualBasicинекоторыедругиеязыки,впереченькоторыхСи,увы,невходит.ОднакопоследниеверсиикомпилятораMicrosoftVisualC++поддерживаютвозможность трансляциипрограммвуправляемыйбайт-код(по«научному»называемый
MSCIL—MicrosoftCommonIntermediateLanguage—ОбщийПромежуточный ЯзыкотMicrosoft,ноэтослишкомдлинноизаумно,такчтомыограничимся термином«байт-код»).
Еслисделатьнебольшойпируэт,томожнописатьСипрограммынаплюсах, транслируяихвбайт-код.Конечно,«чистого»Симывсеравнонеполучим, но,покрайнеймере,обретемвозможностьвызыватьфункциистандартной библиотекиlibc,«химичить»суказателямиит.д.Естественно,всилустрогойтипизацииязыкаСи++придетсяругатьсяматом(нецензурнымкастингом),впрочем,обэтоммыужеговорилив#09hвыпуске«трюков».
Чтобызаставитьприплюснутыйкомпиляторгенерироватьбайт-код,достаточно воткнутьвначалопрограммы«using namespace System;»идобавитьккоманднойстрокеключ«/CLR»,примериспользованиякоторогоприведенниже:
hello.cpp—программанаСи++,подготовленнаяктрансляциив управляемыйкодивызывающаяфункциистандартнойбиблиотеки языкаСи
#include <stdio.h>
// используем пространство имен System (из .NET) using namespace System;
void main() {
printf("hello, nezumi!\n");
}
Трансляция указанногокодависполняемыйфайлизкоманднойстроки осуществляетсяследующимобразом:
$cl.exe /CLR hello.cpp
Если все сделано правильно, на диске образуется файл hello.exe, готовый к непосредственному исполнению и победоносно выводящий «hello, nezumi!» на экран.
02управляемыйкодипереполняющиесябуфера
Продвигаяуправляемыйкоднарынок,Microsoftнеустанноперечислялаегопреимущества:а)болеевысокуюпроизводительностьначисто вычислительныхзадачах;б)решениепроблемыпереполняющихсябуферов; в)наличиеавтоматическогосборщикамусора,предотвращающегоутечки памяти.
Чтокасаетсяпроизводительности,топервыеверсии.NET’адействительно обгонялиСи/Си++программывнекоторыхтестахзасчетболеекомпактной структурыбайт-кодаидинамическойоптимизациипритрансляциивпамять. Ноуженачинаяс.NET2,производительностьбайт-кодазаметноупалаи положениеспасаеттолькото,чтобайт-кодспособенбезперекомпиляции исполнятьсянапроцессорахразныхтипов(x86,x86-64,IA64),используяих преимущества,чегонеможетчистыймашинныйкод.
АвотконтрользабуферамиисборкамусорареальноработаюттольковC# программах(даитонебезоговорок).«Управляемый»код,полученныйпутем трансляцииСи++программы,наследуетвсехудшиечертыязыкаСи.Этомы сейчасипродемонстрируемнапримереумышленногопереполнениябуфера:
Программа,подготовленнаяктрансляциивуправляемыйкод идопускающаяпереполнениебуфера
#include <stdio.h> #include <string.h> using namespace System;
void main(){
char buf0[0x6]; char buf1[0x6]; char buf2[0x6]; printf("enter str0 :");gets(buf0); printf("enter str1 :");gets(buf1); printf("enter str2 :")123;gets(buf2); printf("your str is :%s,%s,%s\n",buf0,buf1,buf2);
}
Компилируемнаписаннуюпрограммувуправляемыйкодспомощьюключа /CLRисмотрим:сможетлионасправитьсясошибкойпереполненияилинет. Мыимеемтримассивапо06hбайткаждый,кудавводимстрокидлиннойв 09hбайт(этавеличинавыбранапроизвольно).
114 |
xàêåð 05 /113/ 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 |
|
|
|
|
Результатнезаставляетсебяждать:
$hello-over.exe enter str0 :111111111 enter str1 :222222222 enter str2 :333333333
your str is :1111111122222222333333333,222222223333333 33, 333333333
Каквидно,вbuf0«магическим»образомпопаливсетристроки.Вbuf1
—втораяитретьястрока;buf2выглядитнеповрежденным,нозатирает находящиесязанимданные(которыхвнашемслучаенет).Вобщем,все происходиттак,какиследовалоожидать.Буферапоследовательноразмещаютсявпамяти,апереполнениеодногоизнихвоздействуетнапоследующие.Взащитууправляемогокодаупомянемневозможностьподмены адресавозвратаизфункции,аточнеенетривиальнойэтойоперации,посколькуархитектуравиртуальноймашины(сучетомкомпиляциичастикода впамять)чрезвычайнозапутанаиреализоватьцеленаправленнуюатакус захватомуправлениянамногосложнее.Такчтокакой-тосмыслвуправляе- момкодевсежеесть,ноутечкипамяти—этокошмар!Управляемыйкод,не обремененныйискусственныминтеллектом,неможетотличитьситуацию «выделилпамятьизабылосвободить»от«выделилирешил(пока)не использовать».Сборщикмусорареально«отлавливает»лишьнебольшую частьошибок,когдауказательнадинамическуюпамятьприсваивается локальнойпеременнойфункциии«погибает»вместеснейпризакрытии стековогофрейма.Стоитфункциипередвыходомпередатьэтотуказатель кому-тоещеилисохранитьеговглобальнойпеременной—все!Сборщик мусораегонетронет.
03смесьуправляемогоинеуправляемогокодов
Приложения,критическиекпроизводительности,атакжепрограммы,взаимодействующиес«внешним»миром(например,оборудованием), пишутсянасмесиуправляемогоинеуправляемогокодов.Ксчастью,язык C#позволяетвызыватьуправляемыемодули,написанныенаСи++,из которыхвсвоюочередьможновызывать«нативные»(native)функции, компилируемыевмашинныйкод.
Формально,виртуальная.NET-машинаподдерживаетмеханизмP/Invoke, предназначенныйдляпрямыхвызововнативногокода,новязыках С#/Cи++онреализованнелучшимобразомидлярешенияпоставленной задачиприходитсясовершатьбольшоеколичествотелодвижений.Номы небоимсятрудностей!
ДляначаланапишемСи++программу,предназначеннуюдлякомпиляции вмашинныйкод.Внейнетничегосложногозатемисключением,чтовсе «экспортируемые»строкидолжныбытьпредставленывформатеUnicode:
nativecode.cpp—Си++программа,предназначеннаядлякомпиляции вмашинныйкод
#include "string.h" #include "nativecode.h"
void native_foo(wchar_t* c, int num)
{
wchar_t* s = L"hello, this is native code!"; wcsncpy_s(c, num, s, wcslen(s));
}
Тутжесоздадимзаголовочныйфайл(nativecode.h)спрототипомфункцииnative_foo(),включаемыйвостальныефайлыпроекта:
void native_foo(wchar_t* c, int num);
ТеперьпишемСи++программу,транслируемуювуправляемыйкодивызывающуюнашунативнуюфункциюnative_foo(),чтодостигаетсязасчет использованияконструкции«ref class CPPClass»:
|
|
|
|
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 |
|
|
|
|
clrcode.cpp — Си++ программа, подготовленная к трансляции в управляемый код и вызывающая нативную
функцию native_foo()
#include "nativecode.h" using namespace System;
namespace souriz { ref class CPPClass { public:
static String^ foo_wrapper()
{
wchar_t c[0x69];
native_foo(c, sizeof(c) / sizeof(c[0])); return gcnew String(c);
}
};
}
ОстаетсятолькозаточитьC#программу,вызывающуюметодfoo_ wrapper()изСи++программы.Всвоюочередьметодвызываетнативную функциюnative_foo() —чтоосуществляетсяпосредствомконструкции
«CPPClass.foo_wrapper()»:
program.cs—программанаC#,вызывающаяметодfoo_weapper()из управляемогоСи++кода,которыйзатемвызываетнативнуюфункцию native_foo()
using System; using souriz;
namespace nezumi
{
class Program
{
static void Main(string[] args)
{
String s = CPPClass.foo_wrapper(); Console.WriteLine(s);
}
}
}
Атеперьсобираемвсеэтовместеспомощьюследующегокомандного файла:
make.bat—командныйфайл,собирающийвсефайлыпроектавое- дино
$cl.exe /c /MD nativecode.cpp
$cl.exe /clr /LN /MD clrcode.cpp nativecode.obj $csc.exe /target:module /addmodule:clrcode.netmodule Program.cs
$link.exe /LTCG /CLRIMAGETYPE:IJW /ENTRY:nezumi. Program.Main /SUBSYSTEM:CONSOLE /ASSEMBLYMODULE: clrcode.netmodule /OUT:mix.exe clrcode.obj nativecode. obj program.netmodule
Еслисборкапрошлауспешно,надискеобразуетсяmix.exeфайл,заглянув вкоторыйдизассемблером,мыувидимсмесьуправляемогоинеуправляемогокодов.Проблемавтом,чтоIDAPro(самыйпопулярныйхакерский дизассемблер)неподдерживаетсмешанныйрежимипоказываетлибо машинный,либоуправляемыйкод,взависимостиотнастроек,выбранных ещенастадиизагрузкиисследуемогофайлавбазу.Апотомунаписание «смешанных»программ—хорошийзащитныйприем,существенноза- трудняющийанализ(большинствоначинающиххакероввообщенеувидят машинныйкодв.NETсборкеибудутдолгогадать,какжевсеэтоработает). Отладка«смешанных»программ,несодержащихотладочнойинформации (поумолчаниюонанегенерируется)—вообщекошмар,серьезнонапря- гающийдажегуру.z
xàêåð 05 /113/ 08 |
115 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
|
|
||
|
F |
|
|
|
|
|
t |
|
|
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|||
P |
|
|
|
|
NOW! |
o |
|
||||
|
|
|
|
BUY |
|
|
|
|
|||
|
|
|
|
|
|
>> phreaking |
|
||||
w Click |
to |
|
|
|
|
||||||
|
|
|
|
|
m |
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
|
|
. |
|
|
|
|
.c |
|
|
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
n |
e |
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Артемий (Di Halt) Исламов
/ di_halt@mail.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 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ПолторадесяткамобильныхаккаунтовнаоднойSIM’ке. |
Так уж случилось, чел я подвижный. Мотаюсь из города в город по делам или просто в гости, а поскольку роуминг у нас по-прежнему грабительский, то расходы на телефон выходят неслабые. Иной раз забредаешь в такую глушь, что ловят лишь счи-
танные операторы. Вот и приходится регистрироваться у кучи разных ОПСОСов и таскать с собой тьму SIMкарт. Сначала я ныкал их под крышкой аккумулятора, но потом надоело. Стал искать другие пути. Как оказалось, наработок немало.
Сокровища гопорынков
Пошаривпоместнымгоповникам,торгующимсотовымиивсякими прибамбасамикним,янаткнулсянанесколькорешений.Первое,одноиз самыхпримитивныхидревних,этовыносSIM-картпосредствомгибкого шлейфаизтелефонанаружу,внакладнойзадник.Сампонимаешь,выгля- дитэтооченькоряво—накладкапортитвесьдизайн.Естьивторойвари- ант—болеекомпактный,носутьтаже.БерутсядвестандартныеSIM-карты иизкаждойвырезаетсяострыминожницамипятачоксконтактами(под нимнаходитсяпроцессор,аостальнаячастькарты—безмозглыйпластик). Затемпятачкивставляютсявспециальныйпереходник,вкоторомтакже смонтированасхемамультиплексор,переключающаякарточкилибочерез меню,либопосредствомвключения-выключениятелефона(прикаждом on/offпроисходитвыборновойSIM-карты).Получившаясяконструкцияза- совываетсянаместоштатнойSIM-ки.Методхорош,нотребуетпрямыхрук, даиневкаждыйтелефонможнозапихатьподобнуюфиговину.Например, вмойSiemensSK65онабанальноневлезет—слишкомузкийиплоский картодержатель.Ктомуже,максимальноечислокарт,которыеможнотуда запихать,равняетсядвум.
Самыйпродвинутыйспособ—использованиеMultiSIM.Например,очень популярнаSilverCard.ПредставляетизсебяобычнуюSIM-ку(только серебристогоцветаибезопознавательныхзнаков).Привставкевтелефон появляетсядополнительноеменю,гдеможновыбратьнакакойномер переключиться.ВсеговSilverCardможнозабитьотдесятидошестнадцати аккаунтов,взависимостиотверсиипрошивки.ТакжесуществуетGreen Card,A-SIMипрочиеаналоги.Различиемеждунимилишьвколичестве ячеек,размерезаписнойкнижкииколичествезапоминаемыхSMS.
Как это работает
Чтобыпонять,чтопредставляетсобойSIM-карта,нужноразобратьпроцесс аутентификациивсети.Внутрикрошечнойсимкинаходитсядовольно мощныймикроконтроллер,какправило,PIC,сосвоеймикрооперационной системой,специфическиминтерфейсоминаборомфункций.Последних тамнемного—чтениеизаписьвпамять,выдачасообщенийнаэкранте- лефона,манипуляциисопределениемномераи,главное,генерациякодов длядекодированияголосовогопотокаиаутентификациивсети.SIM-карта имеетсвоеобразнуюфайловуюсистему,хранящуювсебекучуслужебной информации,атакжеSMSсообщенияикодыдоступавсеть—International MobileSubscriberIdentity(IMSI)иKeyforidentification(Ki)коды.
IMSIиKiхранятсявSIM-картеиуоператора(этокаклогинипароль). Упрощеннопроцедурарегистрациивсетивыглядитследующимобразом. МобильныйтелефонпередаетбазовойстанциисвойIMSI-код.Вответ станциягенерируетслучайноечислоиотсылаетеговтелефон.Телефон передаетэточисловSIM-карту,гдепроцессоркартыпропускаетегои Ki-кодчерезхэшалгоритм.ОдновременноэтослучайноечислоиKi, связанныйсданнымIMSI,проводитсячерезтакойжеалгоритмнабазовой станции. ЗатемSIM-картаотдаетхэштелефону,атототсылаетегонабазо- вуюстанцию,гдепроисходитсверкасхэшем,полученнымпривнутреннем прогоневыданногослучайногочислаиKi.Есличисласовпадают,значит
—абоненттотсамыйипроисходитрегистрациявсети.Хэшсохраняется
впамятителефонаибазовойстанциивкачествеключадлякодирова- нияидекодированияголосовогопотока.Каквидишь,Ki-кодникогдане покидаетнибазовуюстанцию,ниSIM-картуивыдратьегооттуданапрямую практическиневозможно.Точнее,способесть,носвязанонстакими дикимизатратамиденегивремени(осуществляетсяпосредствомспиливаниякристаллапроцессоранаспецоборудованииинепосредственного считыванияизпамятивобходCPUконтроллера),чтоврядлисэтимкто-то будетзаморачиваться.
ДляклонированияSIM-картынужнознатьиIMSI,иKiкоды.Чтожеделать
втакомслучае?Ответпрост—брутфорс.Хэшалгоритмнеидеаленив большинствеслучаевудаетсявычислитьKi-кодпоответамSIM-карты. Проблемавтом,чтоSIM-картаобладаетограниченнымчисломобращений калгоритмугенерациихэша.Послеихисчерпаниясимкаблокируетсянамертво,итыможешьсмелосмытьеевунитаз,алучшепойтиснейкоператоруи,прикинувшисьшлангом,сказать,чтовдругсломалась.Свероятно-
116 |
xàêåð 05 /113/ 08 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
- |
|
|
|
|
d |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
F |
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
P |
|
|
|
|
|
NOW! |
o |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
to |
BUY |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
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 to BUY |
|
|
||||||||||
|
|
|
|
|
|
||||||||
|
|
|
|
w Click |
|
|
|
|
|
m |
|||
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
|
|
|
|
. |
|
|
|
|
.c |
|
||
|
|
|
|
|
|
p |
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Списокрадиодеталей. Можешьснимидтинарадиорынок иливмагазинрадиодеталей.Там тебяпоймут:).
Резисторына0.125Вт(можноина0.5Вт, нонежелательно)номиналом:
2.2КилоОм—1шт.
10КилоОм—4шт.
15КилоОм—1шт.
22КилоОм—1шт.
1МегаОм—1шт.
Конденсаторыкерамические:
33ПикоФарады—2шт.
100НаноФарады—2шт.
Конденсаторыэлектролитические: 470МикроФарад25вольт—2шт.
Диоды:
1N4148илианалог—3шт.
Светодиод:
Любойизмаленьких.На3.5вольта.
ТранзисторыКТ3102Д—1шт. Кварцна3.579545МГц—1шт. Микросхема74HC04—1шт.
Такжеприкупистандартнуюрозетку COMразъема—DB-9илиоторвиееот древнеймыши.
ВидыMultiSIMкарт. стелефоначерезменюшку. |
спискахтелефонавнесенные |
||
|
|
Китайцыкаквсегдаподсуети- |
внееномераипозволяет |
|
Отличаютсяколичеством |
лисьивыпустилисвойаналог |
переключатьномерапо |
|
встроеннойпамяти.Вкласси- |
Silver/Greenкартподназвани- |
хоткеям(например,1111 |
|
ческомSilver’е—64килобай- |
емSIMMAX.Перешитьили |
ивызов—переключитьна |
|
тапамяти,уGreen—128,у |
изменитьвнихпрошивкууже |
первыйномер;2222ивызов |
SilverCard—наиболее |
Green2—аж256.Количество |
нельзя,нозатоиотпользо- |
—навторойномеритак |
распространеннаяплатфор- |
памятивлияетлишьначисло |
вателятребуетсяминимум |
далее).Количествофункций |
ма,приэтомсовершенно |
сохраняемыхномеровиSMS. |
телодвижений—вседелается |
постепенноувеличивают,так |
открытая.Онажеявляется |
КартыGreenвстречаются |
либостелефона,либочерез |
какразработчикинестоят |
самойдешевойипереклю- |
крайнередко,таккакпракти- |
специальныйreader,обычно |
наместе.Аещеисправлен |
чаетсябыстреевсех.Лишена |
ческиполностьювытеснены |
идущийвкомплекте. |
баг,из-закоторогоSilverCard |
некоторыхфишечек,впрочем, |
картамиGreen2. |
Нуи,конечно,нестоитзабы- |
иееаналогиотказывались |
думаю,ихможнореализовать |
Ещесуществуетт.н.Gold |
ватьпронашуроссийскую |
работатьвнекоторыхНокиях. |
программно,простоникто |
Card—новниманияонане |
разработку—штукупод |
Изнедостатков:переключе- |
толкомнезанялся.Построена |
достойна,таккак,во-первых, |
кодовымназваниемА-SIM. |
ниечерезменюсталонаодин |
наконтроллереPIC16ифлеш |
изначальноимеласлишком |
Отпривычныхсильверовот- |
пунктглубже.Некоторыете- |
памятисерии24Lxx.Прошив- |
малопамяти(16килобайт),а |
личаетсятем,чтодляработы |
лефоныперезагружаютсяпри |
куможнобеспрепятственно |
во-вторых,прошивкудлянее |
снейдостаточнообычной |
смененомера,причем,этоне |
слитьилизаменитьдругой. |
такинедовелидоума.Для |
читалки.Самакарточкачуть |
баг,афича(разработчикиА- |
Можномодифицироватькак |
прошивкиэтихкарточекнуж- |
тоньше,чемстандартная |
SIMсчитают,чтотаккоррект- |
душеугодно,конечно,если |
ноиспользоватьспециальный |
SilverCard,азначит,еепроще |
нее).Наотдельныхмобилах |
квалификациихватит.Обыч- |
программатор,чтоосложняет |
резатьдлявставкивпере- |
сменаномерапроисходит |
нонаSilverCardвкручивается |
ихиспользование.Впрочем, |
ходник2in1.Поддерживает |
вразыдольше,чемнаSilver |
что-либовродеSim-Emuv6.1 |
еслитебеудастсякупитькар- |
функцию«тайнойзаписной |
Card.Крометого,А-SIM—это |
илианалогов. |
точкуспрошивкойнениже |
книжки».«Тайнаякнижка» |
закрытаяплатформа,шалов- |
КартыGreenиGreen2 |
SimEmuv6.1,товседействия |
недаеттелефонусохранять |
ливыеручонкисдебаггеромв |
—модификацииSilverкарты. |
можнобудетпроводитьпрямо |
висходящих/входящих |
нееуженезапустишь. |
xàêåð 05 /113/ 08 |
117 |
|
|
|
|
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 |
|
|
|
|
SimReaderвсборе.Разъемдлякартывыдраниз
Нокии3110
|
|
|
|
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 |
|
|
|
|
haveдлялюбогогика.Такчтовопрособизготовленииподобнойштуковины долженбытьрешеноднозначно.
Что мне за это будет?
Надосказать,опсосынеособоприветствуюттакоеиспользованиекарт. Понятьихможно,онилишаютсяпотенциальнейприбыли,таккактыможешьпозвонитьсдругогооператора,когдатебеэтовыгодней.Ноонини- чегоинетеряют,таккаккаждыйаккаунтпо-прежнемуимеетсвойбаланс итывынужденкластьтудабабло,чтобыобщаться.Поэтомукатегорически противневыступают.Даивотличиеотбанковскихсмарт-карт,SIM-ка являетсясобственностьюабонента,азначит,тыможешьделатьснейчто угодно.ФормальноиспользованиеMultiSIM—тожесамое,чтотаскание кучиSIM-картвкармане,толькоболеетехнологичное.Единственное, чтовызоветзаконноевозмущение—этоодновременноеиспользование
Multisimmenu оригиналаидубликатакарты.Вэтомслучаесбольшойвероятностью заблокируютаккаунт,итебепридетсяидтивабонентскийотделиполучать новуюSIM-картусдругимнаборомIMSI-Ki.
стью,близкойк100%,тебевыдадутновую(нахалявуилизаминимальную плату),астаруюзаблокируют.Ноневсетакстрашно,картапозволяет65536 обращений,адляподбораKiэтого,какправило,болеечемдостаточно.
Правда,существуетоднатонкость,аименно—хэшалгоритмовнаданный моментиспользуетсядвавида:COMP128v1иCOMP128v2.Первыйлегко поддаетсявзлому,авотвторойпоказабрутфорситьнеудалось.Впрочем,еслисильнозахотелосьпоиметьвмультисимкекартунаалгоритме СОМР128v2,томожносделатьфинтушами—вырезатьизSilverCardпятак спроцессоромивставитьеевблокдваводном,напаруспроблемной.
Зачем?
Нуладно,япутешественник,иэтиштуковинымнереальнопригодятся.А ты,например,пользуешьсявсюжизньоднимитемжеоператором.Естьли тогданеобходимостьвухищрениях?
Сколькоразмультисимкавыручаламеня,когдавдругкончалосьбаблона основномномере;когданеловилоператор;когдавданнойзоненаотрез отказывалсяработатьGPRS,асрочнотребовалсядоступвИнет.Даи запуститьзалоченныйдевайс,привезенныйиз-забугра,невмешиваясь вегопрошивку,например,тотжеiPhoneиликакой-нибудьредкийили новомодныйтелефон,PCMCIAGSMModem,выданныйнахалявуваме- риканскомотделенииT-mobile…Короче,ясчитаю,чтоMultiSIMэтоmust
Как? Где? Чем?
Итак,тырешилсясделатьсебемультисим.Счегоначать?Надыбатьсаму MultiSimкарту.Можнопоискатьнарадиорынках,можно—вонлайнмага- зинах(набери,вЯндексе«SilverCard»или«Multisim»).Яжесвоюкупилв каком-тополуподвальномшопе,торгующемподержаннымимобилами.Я простоподошелиспросил,неделаютлионимультисимки.Оказалось,де- лают.Вотунихикупил—вышлодороже,чемуказановинете,нодешевле, учитываястоимостьпересылкидоЧелябинска.Главное,чтобымультисимкабыласпрошивкойSimEmuненижешестойверсии,таккакиначеможно нарватьсянапустуюболванкуидолгоискатьпрограмматор.Этотвопрос нужносразууточнитьупродавца.Всреднем,адекватнаяценазаMultisim Card—250-500рублей,взависимостиотмодели.
Допустим,карточкутыдостал.ОстаетсяраспотрошитьсвоиSIM’ки, выдратьизнихзаветныекодыизабитьихвMultiSIM.Можно,конечно, поручитьэтомутнымдядькамсрадиорынкаилииздругихподозрительных конторок.ЗаграблениеоднойSIM-картыониберутпорядкастарублей. Вроденедорого,однакоинформациядлядоступактвоемумобильному аккаунтупопадетвтретьируки—большоезападло!
Поэтомуломатьбудемсами.ТебепотребуетсячиталкаSIM-картисофтина брутфорсер.Вкачествесофтаяиспользуюпровереннуювременем SimScan,ноонадовольномедленная,поэтомулучшезаюзатьболее
118 |
xàêåð 05 /113/ 08 |