כאשר בוטים עושים ספינינג

כל בעל/ת בלוג "זוכה" לקבל הרבה תגובות ספאם, שרובן נשלחו ללא מגע יד אדם. היישומים נגד ספאם הם בדרך כלל יעילים למדי ושולחים את הזבל מיידית לתיקיית הזבל המתאימה. אני נוהג לעבור על ההודעות הללו בכל זאת, גם כדי לוודא ששום דבר לגיטימי לא נמחק בטעות, וגם מתוך סקרנות לגבי הטקטיקות שבהן הזבלנים משתמשים כדי לנסות לשכנע – את יישומי ההגנה ואותי – שמדובר בתגובות לגיטימיות. הודעת ספאם אחת שהופיעה אתמול הסגירה הרבה יותר ממה שהשולח התכוון…

לפני ההודעה עצמה, בואו נדבר על טקטיקה מתחום קידום האתרים שנקראת "שכתוב מאמרים" (Article Spinning). משכתבי המאמרים (אנושיים או תוכנות) לוקחים טקסט לגיטימי ומשכתבים אותו שוב ושוב על ידי החלפת מילים במילים נרדפות, שינויים קלים בתחביר וכדומה. המטרה של השכתוב היא לנסות לחמוק מהאלגוריתמים של מנועי החיפוש, שמזהים טקסטים מועתקים ומורידים את הדירוג של האתר שמציג אותם. כשהטריק הזה מצליח, בעל אתר יכול לקדם כך את האתר שלו במנועי החיפוש בהשקעה מינימלית, בלי ליצור גרם אחד של תוכן מקורי באמת. כמובן שזהו נוהג פסול, וחברות כמו גוגל עושות כל מאמץ כדי לתפוס את הנוכלים, אך זה לא מונע מהם לנסות.

אותו הדבר קורה עם ספאם. יישומי הגנה רבים עובדים מול מאגר מקוון של הודעות, וברגע שנכנסת למאגר הודעה מסוימת (נעזוב כרגע את הקריטריונים לכך), כל הודעה עתידית זהה תסומן מיד כספאם, גם אם הגיעה לאתר בקצה השני של העולם. לכן, בוטים משוכללים של ספאם מבצעים ספינינג בעצמם על ההודעות שהם שולחים, כדי שכל הודעה תהיה טיפה שונה.

וזה ההיגיון שעומד מאחורי ההודעה המוזרה שקיבלתי, שנראית כך (זהו רק חלק קטן מהטקסט המלא):

{Hello|Hi|Hello there|Hi there|Howdy|Good day}!
I could have sworn I've {been to|visited} {this blog|this web
site|this website|this site|your blog} beffore but after {browsing through|going through|looking at} {some of the|a feww of the|many of the} {posts|articles} I realpized it's new to me. {Anyways|Anyhow|Nonetheless|Regardless}, I'm {definitely|certainly} {happy|pleased|delighted} {I found|I discovered|I came across|I stumbled upon} it andd I'll be {bookmarking|book-marking} it and checking back {frequently|regularly|often}!

אפשר לראות שבין כל זוג סוגריים מסולסלים יש שתיים או יותר חלופות, מופרדות בקו אנכי, שיכולות פחות או יותר להתאים למבנה המשפט. אדם כלשהו, אולי הודי מסכן אחד, כתב את הטקסט הראשוני כולל כל החלופות הללו בשכר רעב, ופקיסטני אומלל אחר קיבל חצי סנט כדי להעתיק ולהדביק טקסטים כאלה לתוך תוכנת הבוט. התוכנה אמורה ליצור טקסטים עם בחירה אקראית של כל אחת מהחלופות ולשלוח אותם לכל בלוג בעולם תוך שניות ספורות. אבל בדרך משהו השתבש, והטקסט המקורי הועבר במלואו ללא כל עיבוד!

בשביל הקטע, וכדי לתרגל את כישורי ה-Python שלי, החלטתי לכתוב תוכנה קטנה שתבצע את הספינינג על הפורמט הזה. שמרתי את הטקסט לעיל בקובץ בשם SpamTemplate.txt, והנה התוכנית שכתבתי:

import random

fIn = open("SpamTemplate.txt")
origTxt = fIn.read()

while True:
    txt = origTxt
    while True:
        p1 = txt.find("{")
        if p1 < 0 : break
        p2 = txt.find("}", p1)
        options = txt[p1+1 : p2].split("|")
        txt = txt[:p1] + \
        random.choice(options) + txt[p2+1:]
    print txt
    cont = raw_input("Continue? Y/N ")
    if cont.upper() != "Y" : break

הקוד הזה לא מספק הגנה מושלמת מפני שגיאות בפורמט (כגון סימן "{" חסר), ומסתבר שאכן היו כאלה פה ושם במקור. כנראה שזו הסיבה לכך שנשלח מלכתחילה בצורתו הגולמית. גם נוכלי ספאם אינם יכולים לברוח מהעיקרון הפשוט: מי שמחפש רק את העבודה הזולה ביותר, מקבל בדיוק את זה…

להרשמה
הודע לי על
0 Comments
Inline Feedbacks
הראה את כל התגובות