ไอคอนเคลื่อนไหวในหัวเรื่องอีเมล


103

ฉันรู้เกี่ยวกับURIของข้อมูลซึ่งbase64สามารถใช้ข้อมูลที่เข้ารหัสแบบอินไลน์เช่นรูปภาพ วันนี้ฉันได้รับอีเมลฉบับหนึ่งที่เป็นสแปมซึ่งมีไอคอนเคลื่อนไหว (gif) อยู่ในหัวเรื่อง:

ป้อนคำอธิบายภาพที่นี่

นี่คือไอคอนเพียงอย่างเดียว:

ป้อนคำอธิบายภาพที่นี่

ดังนั้นสิ่งเดียวที่ฉันคิดได้คือทั้งหมดเกี่ยวกับ URI ของข้อมูลและหาก Gmail อนุญาตให้แทรกอีโมติคอนบางประเภทในหัวเรื่อง ฉันเห็นอีเมลฉบับเต็มโดยละเอียดและชี้ไปที่หัวเรื่องที่รูปภาพด้านล่าง:

ป้อนคำอธิบายภาพที่นี่

ดังนั้น GIF มาจาก=?UTF-8?B?876Urg==?=สตริงที่เข้ารหัสซึ่งคล้ายกับโครงร่าง Data URI แต่ฉันไม่สามารถดึงไอคอนออกมาได้ นี่คือแหล่งที่มา HTML ขององค์ประกอบ:

ป้อนคำอธิบายภาพที่นี่

เรื่องสั้นขนาดยาวมีอีโมติคอนมากมายจากhttps://mail.google.com/mail/e/XXXที่ที่XXXเป็นเลขฐานสิบหก เอกสารเหล่านี้ไม่มีที่ไหนเลยหรือฉันหาไม่พบ หากเป็นข้อมูลเกี่ยวกับ URI ดังนั้นจะรวมไว้ในหัวเรื่องอีเมลของ Gmail ได้อย่างไร (ฉันส่งต่ออีเมลนั้นไปยังบัญชีอีเมล yahoo โดยเห็น[?]ไอคอนแทน) และถ้าไม่ใช่แล้วสตริงที่เข้ารหัสนั้นจะแยกวิเคราะห์อย่างไร


25
คำถามที่แท้จริงคือคุณบล็อกได้อย่างไร?!
bambams

@bambams คุณหมายถึงอะไร?
revo

13
พวกมันน่ารำคาญอย่างไม่น่าเชื่อและอย่างที่คุณบอกว่าพวกมันถูกใช้โดยนักส่งสแปมเท่านั้น ฉันอยากให้ Gmail ไม่แสดงให้เห็น (ดูเหมือนว่าจะตรวจพบ 99% ว่าเป็นสแปมแล้ว)
bambams

1
นี่คือวิธีการบล็อก
jamesmstone

ลิงค์ของ jamesmstone แสดงวิธีการบล็อกข้อความ ถ้าคุณต้องการที่จะปิดกั้นอีโมจิตัวเองและฝากข้อความให้ใช้Gmail บรรทัดเรื่อง Emoji แมลงสาบ Motel UserScript
Louis Semprini

คำตอบ:


175

คำอธิบายสั้น:

ซึ่งเรียกกันภายในว่าgoomojiและดูเหมือนว่าจะเป็นส่วนขยาย UTF-8 ที่ไม่ได้มาตรฐาน เมื่อ Gmail พบอักขระเหล่านี้จะถูกแทนที่ด้วยไอคอนที่เกี่ยวข้อง ฉันไม่พบเอกสารใด ๆ เกี่ยวกับพวกเขา แต่ฉันสามารถทำวิศวกรรมย้อนกลับรูปแบบได้


ไอคอนเหล่านี้คืออะไร?

ไอคอนเหล่านี้เป็นไอคอนที่ปรากฏใต้แผง "แทรกอิโมติคอน"

Gmail แทรกอิโมติคอน

แม้ว่าฉันจะไม่เห็น52Eไอคอนในรายการ แต่ก็ยังมีอีกหลายรายการที่เป็นไปตามหลักการเดียวกัน

โปรดทราบว่ายังมีไอคอนบางอย่างที่มีชื่อนำหน้าเช่น. ฉันไม่สามารถระบุได้ว่าไอคอนเหล่านี้สามารถใช้ในลักษณะนี้ได้หรือไม่gtalk.03C gtalk.03C


URI ของข้อมูลนี้คืออะไร?

ไม่ใช่URI ของข้อมูลจริง ๆแม้ว่าจะมีความคล้ายคลึงกันบ้างก็ตาม ก็จริงไวยากรณ์พิเศษสำหรับการเข้ารหัสอักขระที่ไม่ใช่ ASCII ในวิชาอีเมลที่กำหนดไว้ในRFC 2047 โดยทั่วไปจะทำงานเช่นนี้

=?charset?encoding?data?=

ดังนั้นในสตริงตัวอย่างของเราเรามีข้อมูลต่อไปนี้

=?UTF-8?B?876Urg==?=
  • charset = UTF-8
  • encoding= B(หมายถึง base64)
  • data = 876Urg==


แล้วมันทำงานอย่างไร?

เรารู้ว่าอย่างใด876Urg==หมายถึงไอคอน52Eแต่อย่างไร

ถ้าเรา base64 ถอดรหัสที่เราได้รับ876Urg== 0xf3be94aeสิ่งนี้มีลักษณะดังต่อไปนี้ในไบนารี:

11110011 10111110 10010100 10101110

บิตเหล่านี้สอดคล้องกับอักขระเข้ารหัส UTF-8 ขนาด 4 ไบต์

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

ดังนั้นบิตที่เกี่ยวข้องมีดังต่อไปนี้:

     011   111110   010100   101110

หรือเมื่อจัดชิด:

00001111 11100101 00101110

ในเลขฐานสิบหกไบต์เหล่านี้มีดังต่อไปนี้:

FE52E

อย่างที่คุณเห็นยกเว้นFEคำนำหน้าซึ่งน่าจะทำให้goomojiไอคอนแตกต่างจากอักขระ UTF-8 อื่น ๆ จะตรงกับ52EURL ของไอคอน การทดสอบบางอย่างพิสูจน์ได้ว่าสิ่งนี้ถือเป็นจริงสำหรับไอคอนอื่น ๆ


ฟังดูเหมือนงานเยอะมีตัวแปลงหรือเปล่า:

สิ่งนี้สามารถเขียนสคริปต์ได้แน่นอน ฉันสร้างรหัส Python ต่อไปนี้สำหรับการทดสอบของฉัน ฟังก์ชันเหล่านี้สามารถแปลงสตริงที่เข้ารหัส base64 เป็นและจากสตริงเลขฐานสิบหกแบบสั้นที่พบใน URL หมายเหตุโค้ดนี้เขียนขึ้นสำหรับ Python 3 และเข้ากันไม่ได้กับ Python 2

ฟังก์ชันการแปลง:

import base64

def goomoji_decode(code):
    #Base64 decode.
    binary = base64.b64decode(code)
    #UTF-8 decode.
    decoded = binary.decode('utf8')
    #Get the UTF-8 value.
    value = ord(decoded)
    #Hex encode, trim the 'FE' prefix, and uppercase.
    return format(value, 'x')[2:].upper()

def goomoji_encode(code):
    #Add the 'FE' prefix and decode.
    value = int('FE' + code, 16)
    #Convert to UTF-8 character.
    encoded = chr(value)
    #Encode UTF-8 to binary.
    binary = bytearray(encoded, 'utf8')
    #Base64 encode return end return a UTF-8 string. 
    return base64.b64encode(binary).decode('utf-8')

ตัวอย่าง:

print(goomoji_decode('876Urg=='))
print(goomoji_encode('52E'))

เอาท์พุต:

52E
876Urg==

และแน่นอนว่าการค้นหา URL ของไอคอนนั้นเพียงแค่ต้องสร้างแบบร่างใหม่ใน Gmail โดยใส่ไอคอนที่คุณต้องการและใช้ตัวตรวจสอบ DOM ของเบราว์เซอร์

ตัวตรวจสอบ DOM


14
นั่นเป็นคำตอบที่สมบูรณ์ที่น่าทึ่ง ฉันไม่มีอะไรจะพูด แต่ฉันแค่สงสัยว่าคุณทำวิศวกรรมย้อนกลับได้อย่างไร !! ขอบคุณอเล็กซานเดอร์
revo

2
การยืนยันว่าBในไวยากรณ์พิเศษแสดงถึง Base64 อาจเป็นการคาดเดา (สตริงที่เรียงลำดับท้ายดูเหมือนสตริงที่เข้ารหัส Base64 หากคุณเคยเห็นมาก่อน) หลังจากนั้นก็ไม่ยากที่จะสังเกตว่าสี่ไบต์เป็นไปตามหนึ่งในรูปแบบ UTF-8 สำหรับตัวอักษร Unicode เนื่องจากเขากำลังมองหา Unicode มันเป็นงานนักสืบที่ยอดเยี่ยมเหมือนกันทั้งหมด :)
เดียวกัน

3
@sameers ไม่ต้องเดาB- มันกำหนดไว้ใน # 4

จะเป็นการดีที่จะกล่าวถึง RFC ในคำตอบด้านบนเพื่อเป็นข้อมูลอ้างอิง
เดียวกัน

@JeremyMiller ขอบคุณสำหรับการติดตาม RFC ที่เกี่ยวข้อง! ฉันไม่สามารถค้นหาได้ในขณะที่เขียนคำตอบนี้
Alexander O'Mara

19

หากคุณใช้จุดรหัสฐานสิบหกที่ถูกต้อง (เช่นfe4f4 สำหรับ 'กองปู' ) และหากมีการเข้ารหัสอย่างถูกต้องภายในส่วนหัวของบรรทัดหัวเรื่องให้กำหนดให้เป็น base64 (ดู @AlexanderOMara) หรือพิมพ์คำพูดได้ (=?utf-8?Q?=F3=BE=93=B4?= ) จากนั้น Gmail จะทำงานโดยอัตโนมัติ แยกวิเคราะห์และแทนที่ด้วยอีโมจิที่เกี่ยวข้อง

นี่คือรายการอีโมจิของ Gmail สำหรับการคัดลอกและวางในหัวเรื่องหรือเนื้อหาอีเมล อิโมจิแบบเคลื่อนไหวซึ่งจะดึงดูดความสนใจมากยิ่งขึ้นในกล่องจดหมายถูกวางไว้บนพื้นหลังสีเหลือง:

Gmail emojis บน emailmarketingtipps.de


0

ขอบคุณมากสำหรับAlexander O'Maraสำหรับคำตอบที่ได้รับการวิจัยมาเป็นอย่างดีเกี่ยวกับภาพ HTML ที่ติดแท็ก goomoji!

ฉันแค่อยากจะเพิ่มสามสิ่ง:

  • ยังมีอีโมจิจำนวนมาก (และลำดับ Unicode อื่น ๆ ที่สร้างรูปภาพ) ที่นักส่งสแปมและนักการตลาดรายอื่น ๆ เริ่มใช้ในหัวเรื่องอีเมลและ Gmail นั้นไม่ได้แปลงเป็นรูปภาพ HTML ในบางเบราว์เซอร์สิ่งเหล่านี้จะแสดงเป็นตัวหนาและมีสีซึ่งเกือบจะแย่พอ ๆ กับภาพเคลื่อนไหว เบราว์เซอร์สามารถเลือกที่จะทำให้สิ่งเหล่านี้เคลื่อนไหวได้ แต่ฉันไม่รู้ว่าจะมีไหม ลำดับ Unicode เหล่านี้จะแสดงโดยเบราว์เซอร์เป็นข้อความ Unicode ดังนั้นลักษณะที่แน่นอน (สีหรือไม่เคลื่อนไหวหรือไม่ ... ) ขึ้นอยู่กับระบบการแสดงผลข้อความที่เบราว์เซอร์ใช้ การปรากฏตัวของอีโมจิ Unicode นั้นขึ้นอยู่กับสิ่งใด ๆตัวเลือกรูปแบบ Unicode และตัวปรับแต่งอิโมจิที่ปรากฏใกล้ ๆ ในลำดับจุดรหัส Unicode ซึ่งแตกต่างจากสแปมอีโมจิที่ใช้รูปภาพลำดับเหล่านี้สามารถคัดลอกและวางจากเบราว์เซอร์และไปยังแอปอื่น ๆ ในรูปแบบข้อความ Unicode ได้

  • ฉันหวังว่านักการตลาดหลายคนที่อ่านคำถาม StackOverflow นี้จะตอบว่าไม่ เป็นความคิดที่น่ากลัวที่จะรวมลำดับเหล่านี้ไว้ในหัวเรื่องอีเมลของคุณและมันจะทำให้คุณและแบรนด์ของคุณมัวหมองในทันทีที่เป็นนักส่งสแปม มันไม่คุ้มค่าที่ "ความสนใจ" อีเมลของคุณจะได้รับ

  • แน่นอนว่าคำถามแรกในใจของทุกคนคือ "ฉันจะกำจัดสิ่งเหล่านี้ได้อย่างไร" โชคดีที่มีผู้ใช้ Greasemonkey / Tampermonkey / Violentmonkey แบบโอเพนซอร์สนี้:

Gmail Subject Line Emoji Roach Motel

Usercript นี้กำจัดทั้ง HTML-image (ด้วยผลงานที่ยอดเยี่ยมของAlexander O'Mara ) และประเภท Pure-Unicode

สำหรับประเภทหลัง userscript จะมีนิพจน์ทั่วไปที่ออกแบบมาเพื่อจับภาพลำดับ Unicode ที่นักการตลาดอาจใช้ในทางที่ผิด regex มีลักษณะเช่นนี้ใน ES6 Javascript (userscript แปลสิ่งนี้เป็น regex pre-ES6 ที่รองรับอย่างกว้างขวางโดยใช้ES6 Regex Transpiler ที่น่าทึ่ง):

var re = /(\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F|[\u{2100}-\u{2BFF}\u{E000}-\u{F8FF}\u{1D000}-\u{1F5FF}\u{1F650}-\u{1FA6F}\u{F0000}-\u{FFFFF}\u{100000}-\u{10FFFF}])\s*/gu

// which includes the Unicode Emoji pattern from
//   https://github.com/tc39/proposal-regexp-unicode-property-escapes
// plus also these blocks frequently used for spammy emojis
// (see https://en.wikipedia.org/wiki/Unicode_block ):
//   U+2100..U+2BFF     Arrows, Dingbats, Box Drawing, ...
//   U+E000..U+F8FF     Private Use Area (gmail generates them for some emoji)
//   U+1D000..U+1F5FF   Musical Symbols, Playing Cards (sigh), Pictographs, ...
//   U+1F650..U+1FA6F   Ornamental Dingbats, Transport and Map symbols, ...
//   U+F0000..U+FFFFF   Supplementary Private Use Area-A
//   U+100000..U+10FFFF Supplementary Private Use Area-B
// plus any space AFTER the discovered emoji spam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.