E-posta konusunda animasyonlu simge


103

Bilmem Veri URI hangi ın base64şifreli veri görüntüler olarak inline böyle kullanılabilir. Bugün, konusunda animasyonlu (gif) bir simge bulunan bir spam e-posta aldım:

görüntü açıklamasını buraya girin

İşte tek başına simge:

görüntü açıklamasını buraya girin

Yani aklıma gelen tek şey Veri URI'ları ve Gmail'in konuya bir tür ifade eklenmesine izin verip vermediğiydi. E-postanın tam detaylı sürümünü gördüm ve aşağıdaki resimde konu satırına işaret ettim:

görüntü açıklamasını buraya girin

Dolayısıyla GIF =?UTF-8?B?876Urg==?=, Veri URI şemasına benzer kodlanmış dizeden geliyor ancak simgeyi ondan çıkaramadım. İşte öğe HTML kaynağı:

görüntü açıklamasını buraya girin

Uzun lafın kısası, onaltılık sayıların https://mail.google.com/mail/e/XXXolduğu birçok ifade XXXvardır. Hiçbir yerde belgelenmiyorlar ya da bulamadım. Bu Veri URI ile ilgiliyse, bunları Gmail'in e-posta konusuna dahil etmek nasıl mümkün olabilir? (Bu e-postayı [?]simge yerine görerek bir yahoo e-posta hesabına ilettim ) ve değilse, o zaman bu kodlanmış dizge nasıl ayrıştırılır?


25
Asıl soru, onları nasıl engellersiniz ?!
bambams

@bambams Ne demek istiyorsun?
revo

13
İnanılmaz derecede can sıkıcıdırlar ve sizin de söylediğiniz gibi sadece spam gönderenler tarafından kullanılırlar. Gmail tarafından gösterilmemelerini tercih ederim (zaten% 99'u spam olarak algılıyor gibi görünüyor).
bambams

1
işte onları nasıl engelleyeceğiniz
jamesmstone

jamesmstone'un bağlantısı mesajların nasıl engelleneceğini gösterir; Emojiyi kendileri engellemek ve mesajları bırakmak istiyorsanız, Gmail Konu Satırı Emoji Roach Motel kullanıcı komutunu kullanın.
Louis Semprini

Yanıtlar:


175

Kısa Açıklama:

Dahili olarak olarak adlandırılırlar goomojive standart olmayan bir UTF-8 uzantısı gibi görünürler. Gmail bu karakterlerden biriyle karşılaştığında, karşılık gelen simge ile değiştirilir. Onlarla ilgili herhangi bir belge bulamadım, ancak formatı tersine çevirebildim.


Bu simgeler nelerdir?

Bu simgeler aslında "İfade ekle" panelinin altında görünen simgelerdir.

Gmail Ekleme İfadeleri

Ben görmüyorum iken 52Elistede simgesini aynı öngörüye orada birkaç diğerleri.

Gibi isimleri ön ekli bazı simgeler de olduğunu unutmayın . Bu simgelerin bu şekilde kullanılıp kullanılamayacağını veya nasıl kullanılacağını belirleyemedim.gtalk.03C gtalk.03C


Bu Veri URI'si nedir?

Aslında bir Veri URI'si değil , ancak bazı benzerlikleri paylaşıyor. Aslında, RFC 2047'de tanımlanan e-posta konularındaki ASCII olmayan karakterleri kodlamak için özel bir sözdizimi . Temelde şu şekilde çalışır.

=?charset?encoding?data?=

Öyleyse, örnek dizimizde aşağıdaki verilere sahibiz.

=?UTF-8?B?876Urg==?=
  • charset = UTF-8
  • encoding= B(base64 anlamına gelir)
  • data = 876Urg==


Peki nasıl çalışıyor?

Bunun bir şekilde 876Urg==simge anlamına geldiğini biliyoruz 52E, ama nasıl?

Base64 kodunu çözersek 876Urg==, elde ederiz 0xf3be94ae. Bu, ikili olarak aşağıdaki gibi görünür:

11110011 10111110 10010100 10101110

Bu bitler, 4 baytlık UTF-8 kodlanmış bir karakterle tutarlıdır.

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Dolayısıyla ilgili bitler şu şekildedir:

     011   111110   010100   101110

Veya hizalandığında:

00001111 11100101 00101110

Onaltılık olarak, bu baytlar aşağıdaki gibidir:

FE52E

Gördüğünüz gibi FE, muhtemelen goomojisimgeleri diğer UTF-8 karakterlerinden ayıran önek dışında 52E, simge URL'sindeki ile eşleşiyor . Bazı testler bunun diğer simgeler için geçerli olduğunu kanıtlıyor.


Çok iş gibi geliyor, dönüştürücü var mı ?:

Bu elbette senaryo ile yazılabilir. Testim için aşağıdaki Python kodunu oluşturdum. Bu işlevler, base64 kodlu dizeyi URL'de bulunan kısa onaltılık dizeye dönüştürebilir. Unutmayın, bu kod Python 3 için yazılmıştır ve Python 2 uyumlu değildir.

Dönüştürme fonksiyonları:

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')

Örnekler:

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

Çıktı:

52E
876Urg==

Ve elbette, bir simgenin URL'sini bulmak, Gmail'de yeni bir taslak oluşturmanızı, istediğiniz simgeyi eklemenizi ve tarayıcınızın DOM denetçisini kullanmanızı gerektirir.

DOM Denetçisi


14
Bu inanılmaz bir tam cevap. Söyleyecek hiçbir şeyim yok ama bunun üzerine nasıl tersine mühendislik yaptın merak ediyorum !! Teşekkürler Alexander.
revo

2
BÖzel sözdiziminde Base64'ün bir tahmin olabileceğini ima ettiği iddiası (daha önce görmüşseniz, sondaki dizge Base64 kodlu dizgeye benziyor); Bundan sonra, dört baytın Unicode karakterleri için UTF-8 modellerinden birini takip ettiğini, özellikle de Unicode'u aradığı için fark etmek o kadar da zor değil. Oldukça havalı bir dedektif çalışması, hepsi aynı :)
zamanda

3
@sameers Tahmin etmeye gerek yok B- # 4'te tanımlandı

Referans olarak yukarıdaki cevapta RFC'den bahsetmek iyi olacaktır.
sameers

@JeremyMiller İlgili RFC'yi takip ettiğiniz için teşekkürler! Bu cevabı yazarken bulamadım.
Alexander O'Mara

19

Doğru onaltılık kod noktasını kullanırsanız (ör . 'Poo yığını' için fe4f4 ) ve konu satırı başlığında doğru şekilde kodlanmışsa, bunun base64 (bkz. @AlexanderOMara) veya tırnaklı yazdırılabilir ( =?utf-8?Q?=F3=BE=93=B4?=) olmasına izin verin , Gmail otomatik olarak ayrıştırın ve karşılık gelen emoji ile değiştirin.

İşte konu satırlarına veya e-posta gövdelerine kopyalayıp yapıştırmak için bir Gmail emoji listesi . Gelen kutusunda daha fazla dikkat çekecek animasyonlu emojiler sarı bir arka plan üzerine yerleştirilmiştir:

Emailmarketingtipps.de adresinde Gmail emojileri


0

Goomoji etiketli HTML görüntüleri hakkında böylesine iyi araştırılmış bir yanıt için Alexander O'Mara'ya çok teşekkürler !

Sadece üç şey eklemek istedim:

  • Spam gönderenlerin ve diğer eski pazarlamacıların e-posta konu satırlarında kullanmaya başladığı ve Gmail'in HTML görüntülerine dönüştürmediği birçok emoji (ve resim üreten diğer Unicode dizileri) hala var. Bazı tarayıcılarda bunlar kalın ve renkli görünür, bu da neredeyse animasyon kadar kötüdür. Tarayıcılar olabilir ayrıca hareketlendirmek için seçer, ancak herhangi yaparsanız bilmiyorum. Bu Unicode dizileri tarayıcı tarafından Unicode metin olarak görüntülenir, bu nedenle tam görünüm (renkli veya değil, animasyonlu veya değil, ...) tarayıcının hangi metin işleme sistemini kullandığına bağlıdır. Belirli bir Unicode emojisinin görünümü ayrıca herhangi bir Unicode varyasyon seçicisine ve emoji değiştiricisine bağlıdır.Unicode kod noktası dizisinde yanında görünen. Görsel tabanlı emoji spam'in aksine, bu diziler tarayıcıdan kopyalanabilir ve Unicode metin olarak diğer uygulamalara yapıştırılabilir.

  • Umarım bu StackOverflow sorusunu okuyan birçok pazarlamacı hayır diyecektir. Bu dizileri e-posta konu satırlarınıza dahil etmek korkunç bir fikirdir ve sizi ve markanızı hemen düşük ömürlü spam göndericiler olarak lekeleyecektir. E-postanızın alacağı "ilgiye" değmez.

  • Elbette herkesin aklına gelen ilk soru şu: "Bunlardan nasıl kurtulabilirim?" Neyse ki şu açık kaynaklı Greasemonkey / Tampermonkey / Violentmonkey kullanıcı komut dosyası var:

Gmail Konu Satırı Emoji Roach Motel

Bu kullanıcı komut dosyası hem HTML imajını ( Alexander O'Mara'nın harika çalışması sayesinde ) hem de saf Unicode türlerini ortadan kaldırır .

İkinci tür için, kullanıcılar komut dosyası, pazarlamacılar tarafından kötüye kullanılması muhtemel Unicode dizilerini yakalamak için tasarlanmış bir düzenli ifade içerir. Normal ifade, ES6 Javascript'te şöyle görünür (kullanıcı yazısı bunu harika ES6 Regex Transpiler kullanarak yaygın olarak desteklenen ES6 öncesi normal ifadeye çevirir ):

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.