Bugün, normal ifadeleri kullanmaya ince bir giriş olacak. Metin dosyalarıyla çalışırken yapmak isteyeceğiniz en önemli şeylerden biri, belirli bilgi parçalarını çıkarmak ve bunları daha sonra çalışabileceğiniz şekilde depolamaktır. Düzenli ifadeler, ihtiyacınız olan veri parçalarını seçmenize yardımcı olur ve python, bu bilgileri programlı bir şekilde kullanmak için size bir yapı sağlar.
Birçok kişi size normal ifadelerin ph33r olduğunu söyleyecektir. Düzenli ifadelerin, karakter başına ne kadar içlerine konulduğu açısından gerçekten yoğun olabileceği doğrudur. Bununla birlikte, temel durumlarla başlayarak ve yolumuza devam ederek hiç kimse normal ifadeden korkmamalı.
Birkaç uyarı: Bu, regex veya python için kapsamlı bir kılavuz değildir, ancak elinizdeki yapı ve araçlar hakkında size bir fikir verecektir.
Desen Eşleştirme
Yorumlayıcıda başlayacağız çünkü bize test durumlarını hızlıca çalıştırabileceğimiz ve kullanmak istediğimiz modüller ve işlevler için temel yardım alabileceğimiz bir arayüz sağlıyor.
İlk önce yorumlayıcıya bir göz atalım, yeniden içe aktaralım (regexe erişim sağlayan python modülüdür) ve temel yardım almaya bir göz atalım.
Normal ifadelerle ilk adımlarımızı atmanın zamanı geldi. İlk bakacağımız şeyler . (nokta) \ ve r. Hayatımızı kolaylaştırmak için yorumlayıcıda küçük bir işlevi doğrudan tanımlayacağız. Sonunda, içinde tüm test durumlarının bulunduğu bir python betiği sunacağım, böylece onları gözden geçirebilirsiniz.
Tanım:
. (nokta) Yeni satır dışında herhangi bir karakterle eşleşir.
\ (ters eğik çizgi) Belirli karakterlerin harfi harfine yorumlanmasına izin verir.
R Modelin başına r eklemek, kelimenin tam anlamıyla yorumlanmasını sağlar. Bunun hakkında çok fazla düşünmemize gerek yok, sadece tüm kalıplarımıza ekleyeceğiz.
Şimdiye kadar her şey yolunda, karışıma biraz daha normal ifade ekleme zamanı. Bir sonraki bakacağımız şey \ w, \ d, \ s ve + operatörüdür.
Tanım:
\ w Biraz yanıltıcı olan ancak alfasayısal ve alt çizgi içeren herhangi bir kelime karakteriyle eşleşir.
\ d Herhangi bir rakamla eşleşir.
\ s & \ S - \ s beyaz boşlukla ve \ S boşluk olmayan herhangi bir karakterle eşleşir.
+ Operatör Bir normal ifade operatörüne + eklemek, bu operatör türünden bir veya daha fazlasını gösterir (örneğin: \ w +, kelime olmayan bir karaktere ulaşana kadar kelime karakterleriyle eşleşir).
Tamam, şimdi basit kalıpları seçebiliriz, sonra [] ve () ye bakacağız.
Tanım:
[] [], sırayı bilmemize gerek kalmadan eşleştirebileceğimiz bir dizi karakter belirlememize izin verir.
() Kalıbımıza () eklemek, ilgilendiğimiz kalıbın bir parçasını veya parçalarını seçmemizi sağlar.
Şimdi iyi bir kalıp eşleştirme yapabiliriz. Sunmak istediğim son bir şey var, normal ifade iddiaları.
Tanım:
Pozitif ilerleme a (? = B) a işaretinin ardından b gelir.
Negatif ilerleme a (?! B) a işaretinin ardından b gelmiyor.
Geriye pozitif bak (? <= A) b b nin önünde a olup olmadığını kontrol edin.
Geriye negatif bak (? <! A) b b nin önünde a olup olmadığını kontrol edin.
İnceleme (? =. * A) Eşleşme içinde a olup olmadığını kontrol edin.
Normal ifade test durumlarının her birinin ayrı bir if ifadesi vardır, bu nedenle bunları yorumlayıcıda yapmak pratik olmaz.
?
Belirli kalıplara bağlı metin dosyalarınız veya dizeleriniz varsa, normal ifadeler bu verileri incelemek ve ihtiyacınız olan bitleri hızlıca çıkarmak için harika araçlardır. Arka uçtaki python ile, hedeflerinize ulaşmak için bu verileri programlı bir şekilde kolayca kullanabilirsiniz.
Jamie Zawinskinin şu sözünü aklınızda tutun:
Bazı insanlar bir sorunla karşılaştıklarında
Biliyorum, normal ifadeler kullanacağım diye düşünüyorlar . Şu an iki problemleri var.
Regex güçlüdür ancak kendinizi ayağınıza vurmayın, ihtiyaçlarınıza uygun olduğunda kullanın !!
Kullanım / Uygulama
Size daha az kullanışlı olmayan ve regex alıştırması yapmanıza izin verecek çok basit bir kullanım durumu sunarak bu öğreticiyi bitirmek istiyorum (daha ne isteyebilirsiniz).
Herhangi bir (ciddi) Geri Dönüş Odaklı Programlama (ROP) yaptıysanız, genellikle orada herhangi bir hazır çözüm olmadığını bileceksiniz. Büyük olasılıkla, aradığınızı bulmak için gadgetları gözden geçirmek için çok zaman harcayacaksınız.
Tecrübelerime göre, ROP araçlarının temel bir ham listesini elde etmek için en kullanışlı araç mona(Corelandan bir hata ayıklayıcı eklentisi). Öyle olsa bile, özel ROP zincirleri oluşturuyorsanız ve 20 binlik bir listede çok özel talimatlar bulmanız gerekiyorsa, kesinlikle dünyanın heheyi bitirdiğini düşündüğünüz anlar olacaktır. ROP aygıtları belirli kalıpları takip eder, ancak çoğu zaman basit aramalarla verimli bir şekilde eşleştirilemezler. Bu, tonlarca işe yaramaz sonuç ve migrenle sonuçlanır. Neyse ki bizim için regex çok daha iyi kalıp eşleştirme yapmamızı sağlıyor.
Aşağıdaki 17 satır python, size zaman ve aspirin tabletlerinden tasarruf etmenizi sağlar. Komut dosyası iki komut satırı bağımsız değişkeni, bir metin dosyası ve bir normal ifade kalıbı alır. Unutulmaması gereken birkaç şey (1) Bunu mona çıktı dosyalarıyla çalışmak için biçimlendirdim ve (2) araçlar genellikle daha az karmaşık olduğundan, eşleşmeleri uzunluklarına göre sıraladıkça daha kısa sürede harikalar yaratır.
Aşağıda test amaçlı örnek bir ROP listesi ve birkaç arama ekledim, böylece komut dosyasının nasıl çalıştığı hakkında bir fikir edinebilirsiniz. MSVCR71.dll
- Raw_rop.txt
Bunların sadece basit aramalar olduğunu unutmayın, ancak en nadir talimatları bulmak için tüm normal ifadeleri de kullanabilirsiniz. Ayrıca aşağıdaki çıktıyı sadece birkaç sonuçla sınırlandırdım, ancak çoğu arama tonlarca eşleşme döndürüyor.
Source: https://www.fuzzysecurity.com/tutorials/15.html
Translators: Qgenays
M3m0ry
Birçok kişi size normal ifadelerin ph33r olduğunu söyleyecektir. Düzenli ifadelerin, karakter başına ne kadar içlerine konulduğu açısından gerçekten yoğun olabileceği doğrudur. Bununla birlikte, temel durumlarla başlayarak ve yolumuza devam ederek hiç kimse normal ifadeden korkmamalı.
Birkaç uyarı: Bu, regex veya python için kapsamlı bir kılavuz değildir, ancak elinizdeki yapı ve araçlar hakkında size bir fikir verecektir.
Desen Eşleştirme
Yorumlayıcıda başlayacağız çünkü bize test durumlarını hızlıca çalıştırabileceğimiz ve kullanmak istediğimiz modüller ve işlevler için temel yardım alabileceğimiz bir arayüz sağlıyor.
İlk önce yorumlayıcıya bir göz atalım, yeniden içe aktaralım (regexe erişim sağlayan python modülüdür) ve temel yardım almaya bir göz atalım.
Kod:
Root @ Trident : ~ / Masaüstü # python
Python 2.7.3 (varsayılan, 2 Ocak 2013, 13:56:14)
Linux2 üzerinde [GCC 4.7.2]
Daha fazla bilgi için yardım, telif hakkı, kredi veya lisans yazın.
>>>
# Normal ifadelerle ilgilenen python modülü olan re yi içe aktarıyoruz.
>>> yeniden içe aktar
>>>
# dir (), ne tür işlevler çağırabileceğimizi listelememizi sağlar.
>>> dir (yeniden)
[HATA AYIKLA, DOTALL, I, IGNORECASE, L, LOCALE, M, MULTILINE, S, Scanner, T, TEMPLATE,
U, UNICODE, VERBOSE, X, _MAXCACHE, __all__, __builtins__, __doc__, __dosya__, __name__,
__package__, __version__, _alphanum, _cache, _cache_repl, _compile, _compile_repl,
_expand, _pattern_type, _pickle, _subx, compile, copy_reg, error, escape, findall,
bulucu, eşleşme, temizleme, arama, ayırma, sre_compile, sre_parse, alt, subn, sys,
şablon]
>>>
>>> dir (yeniden arama)
[__cagri__, __class__, __closure__, __code__, __defaults__, __delattr__, __dict__, __doc__,
__format__, __get__, __getattribute__, __globals__, __hash__, __init__, __module__,
__name__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__,
__subclasshook__, func_closure, func_code, func_defaults, func_dict, func_doc, func_globals,
func_name]
>>>
# help () ayrıca belirli bir işlev için bize kısa bir yardım sağlayacaktır.
>>> yardım (yeniden arama)
Modülde işlev arama yardımı:
Arama (desen, dize, bayraklar = 0)
Kalıpla eşleşme arayarak dizeyi tarayın, geri dönün
Bir eşleşme nesnesi veya eşleşme bulunmadıysa.
(SON)
Normal ifadelerle ilk adımlarımızı atmanın zamanı geldi. İlk bakacağımız şeyler . (nokta) \ ve r. Hayatımızı kolaylaştırmak için yorumlayıcıda küçük bir işlevi doğrudan tanımlayacağız. Sonunda, içinde tüm test durumlarının bulunduğu bir python betiği sunacağım, böylece onları gözden geçirebilirsiniz.
Tanım:
. (nokta) Yeni satır dışında herhangi bir karakterle eşleşir.
\ (ters eğik çizgi) Belirli karakterlerin harfi harfine yorumlanmasına izin verir.
R Modelin başına r eklemek, kelimenin tam anlamıyla yorumlanmasını sağlar. Bunun hakkında çok fazla düşünmemize gerek yok, sadece tüm kalıplarımıza ekleyeceğiz.
Kod:
>>>
# Bu küçük bul işlevi iki argüman alır pat = regex kalıbı ve text = string we
Aranıyor. İşlev, eşleşmeyi veya Bulunamadı! Değerini döndürür.
>>> def find (pat, text):
... match = re.search (pat, text)
... eşleşirse:
... print match.group ()
... else:
... print Değil Bulundu!
>>>
# Bu durumda ... y, eeey ile eşleşir.
>>> find (r ... y, Say heeey)
Eeey
>>>
# Bu durumda Bulunamadı! çünkü eşleşmenin tam olması gerekiyor.
>>> find (r ... ys, Say heeey)
Bulunamadı!
>>>
# Bu, eeey ve vwxy ile eşleşir ancak yalnızca ilk eşleşmeyi döndürür.
>>> find (r ... y, Say heeey veya daha iyisi vwxy)
Eeey
>>>
# Bu vwxy ile eşleşir.
>>> bul (rv..y , heeey veya daha iyisi vwxy de )
Vwxy
>>>
# Eğer gerçekten ile eşleşmek istiyorsak. (nokta) bir \ (ters eğik çizgi) ile ondan kaçmalıyız.
>>> find (r . \ .. y, Say hee.ey)
e.ey
Şimdiye kadar her şey yolunda, karışıma biraz daha normal ifade ekleme zamanı. Bir sonraki bakacağımız şey \ w, \ d, \ s ve + operatörüdür.
Tanım:
\ w Biraz yanıltıcı olan ancak alfasayısal ve alt çizgi içeren herhangi bir kelime karakteriyle eşleşir.
\ d Herhangi bir rakamla eşleşir.
\ s & \ S - \ s beyaz boşlukla ve \ S boşluk olmayan herhangi bir karakterle eşleşir.
+ Operatör Bir normal ifade operatörüne + eklemek, bu operatör türünden bir veya daha fazlasını gösterir (örneğin: \ w +, kelime olmayan bir karaktere ulaşana kadar kelime karakterleriyle eşleşir).
Kod:
>>>
# : ve üç kelime karakteriyle eşleşir.
>>> find (r : \ w \ w \ w, liste: kedi köpek balığı!)
:kedi
>>>
# : Ve üç basamakla eşleşir.
>>> bul (r : \ d \ d \ d, bla: 123xxx)
: 123
>>>
# Bu, ilk b + \ w \ w \ w ile başlayan bob baker ile eşleşir, bu örnek tamamen abartılıdır ancak
Amacı.
>>> bul (rb \ w \ w \ s \ w \ w \ w \ w \ w , bu bob baker )
Bob baker (fırıncı)
>>>
# Burada + operatörü, rastgele miktarda boşlukla eşleşir.
>>> bul (r \ d \ s + \ d \ s + \ d, 1 2 3)
1 2 3
>>>
# Benzer şekilde + operatörü, rastgele bir kelime miktarını eşleştirerek önceki kalıbımızı basitleştirmeye yardımcı olur
Karakterler.
>>> bul (rb \ w + \ s \ w + , bu bob baker )
Bob baker (fırıncı)
>>>
# Son bir örnek olarak, kalıp : ve keyfi miktarda kelime karakteriyle eşleşir.
>>> find (r : \ w +, bla bla: sweet ow snap)
: tatlı
Tamam, şimdi basit kalıpları seçebiliriz, sonra [] ve () ye bakacağız.
Tanım:
[] [], sırayı bilmemize gerek kalmadan eşleştirebileceğimiz bir dizi karakter belirlememize izin verir.
() Kalıbımıza () eklemek, ilgilendiğimiz kalıbın bir parçasını veya parçalarını seçmemizi sağlar.
Kod:
>>>
# Bu durumda http ile keyfi miktarda iki nokta üst üste işareti, eğik çizgi, kelime ile eşleşiyoruz
Karakterler ve noktalar. Burada dikkat edilmesi gereken en önemli şey, karakterlerin eşleştirilebilmesidir.
Herhangi bir sipariş ve bu . (nokta) bu durumda tam anlamıyla nokta olarak yorumlanır.
>>> bul (rhttp [: / \ w.] + , <a href=http://sample_url.here> Burayı tıklayın! </a> )
[url]http://sample_url.here[/url]
>>>
# Öncekine benzer teknikler kullanmak, e-posta adreslerini seçer.
>>> bul (r [\ w.] + @ [\ w.] +, önemsiz [email][email protected][/email] snap @)
[email][email protected][/email]
>>>
# Önceki örneğimizin arkasında, () parantezleri kullanarak birinci ve ikinci kısımları seçiyoruz
Email adresi.
>>> x = re.search (r ([\ w.] +) @ ([\ w.] +), önemsiz [email][email protected][/email] snap @)
>>>
# Seçtiğimiz tüm eşleşmeyi veya tek tek parçaları yazdırabiliriz.
>>> x.group () yazdır
[email][email protected][/email]
>>> x.group yazdır (1)
Total.ph33r
>>> x.group yazdır (2)
Offsec.com
>>>
# Şimdiye kadar sadece ilk eşleşmeyi döndüren re.search kullanıyorduk, ancak re.findallı da kullanabiliriz
Hangi tüm maçları döndürecektir.
>>> x = yeniden arama (r [\ w.] + @ [\ w.] +, bla [email][email protected][/email] snap @ [email][email protected][/email])
>>>
# X yazdırıldığında bir eşleşme listesi döndürülür.
>>> x yazdır
[[email protected], [email protected]]
>>>
# Şimdi birden fazla eşleşme üzerinden modelin parçalarını seçiyoruz.
>>> x = yeniden arama (r ([\ w.] +) @ ([\ w.] +), bla [email][email protected][/email] snap @ [email][email protected][/email])
>>>
# Bu bir demet listesi döndürür.
>>> x
[(total.ph33r, offsec.com), (foo, bar.com)] yazdır
Şimdi iyi bir kalıp eşleştirme yapabiliriz. Sunmak istediğim son bir şey var, normal ifade iddiaları.
Tanım:
Pozitif ilerleme a (? = B) a işaretinin ardından b gelir.
Negatif ilerleme a (?! B) a işaretinin ardından b gelmiyor.
Geriye pozitif bak (? <= A) b b nin önünde a olup olmadığını kontrol edin.
Geriye negatif bak (? <! A) b b nin önünde a olup olmadığını kontrol edin.
İnceleme (? =. * A) Eşleşme içinde a olup olmadığını kontrol edin.
Normal ifade test durumlarının her birinin ayrı bir if ifadesi vardır, bu nedenle bunları yorumlayıcıda yapmak pratik olmaz.
?
Kod:
#!/usr/bin/python
# . (dot) finds any character except newline
# \w any word character (letters, digits, underscore)
# \d any digit
# \s whitespace
# \S all non-whitespace
# + one or more of that
# * zero or more of that
# rpat send pattern in raw format (no formatting)
# [] define set of allowed characters (inside [] . == raw dot)
# () pick out the parts that we care about
# (?= string) Positive lookahead
# (?! String) Negative lookahead
# (?<= string) Positive lookbehind
# (?<! string) Negative lookbehind
# (?=.* string) Is the string present
İmport re
Def find(pat, text):
Match = re.search(pat, text)
İf match:
Print match.group()
Else:
Print Not found!
Def main():
Print Using our find function:
Print --------------------------------------------------
Find(...y, Say heeey) #finds eeey
Find(...ys, Say heeey) #finds Not Found!
Find(...y, Say heeey or even better vwxy) #finds eeey
Find(v..y, Say heeey or even better vwxy) #finds vwxy
Find(..yz, Say heeey or even better vwxyz) #finds wxyz
Find(r.\..y, Say hee.ey) #finds e.ey
Find(r:\w\w\w, list :cat dog fish!) #finds :cat
Find(r:\d\d\d, bla :123xxx) #finds :123
Find(rb\w\w\s\w\w\w\w\w, this is bob baker) #finds bob baker
Find(r\d\s+\d\s+\d, 1 2 3) #finds 1 2 3
Find(rb\w+\s\w+, this is bob baker) #finds bob baker
Find(r:\w+, bla bla :sweet ow snap) #finds :sweet
Find(r:\S+, bla bla :kitten&a=123&test hello) #finds :kitten&a=123&test
Find(rhttp[:/\w.]+, <a href=http://sample_url.here>Click here!</a>) #finds [url]http://sample_url.here[/url]
Find(r[\w.]+@[\w.]+, junk [email][email protected][/email] snap @ ) #finds [email protected]
Print
Print Using re.search:
Print --------------------------------------------------
X = re.search(r([\w.]+)@([\w.]+), junk [email][email protected][/email] snap @ ) # total.ph33r and offsec.com
Print x.group() #returns [email protected]
Print x.group(1) #returns total.ph33r
Print x.group(2) #returns offsec.com
Print
Print Using re.findall:
Print --------------------------------------------------
X = re.findall(r[\w.]+@[\w.]+, bla [email][email protected][/email] snap @ [email][email protected][/email] ) #returns list
Print x # returns [[email protected], [email protected]]
X = re.findall(r([\w.]+)@([\w.]+), bla [email][email protected][/email] snap @ [email][email protected][/email] ) #returns list of tuples
Print x # returns [(total.ph33r, offsec.com), (foo, bar.com)]
Print
Print Regex Assertions:
Print --------------------------------------------------
Week_d = Monday Tuesday Wednesday Thursday friday Saturday Sunday
# Monday is followed by Tuesday
Expression = re.compile(rmonday\s(?=Tuesday))
İf expression.search(week_d):
Print Positive lookahead!
# Monday is not followed by Friday
Expression = re.compile(rmonday\s(?!friday))
İf expression.search(week_d):
Print Negative lookahead!
# Thursday is preceded by Wednesday
Expression = re.compile(r(?<=Wednesday)\sthursday)
İf expression.search(week_d):
Print Positive lookbehind!
# Thursday is not preceded by Tuesday
Expression = re.compile(r(?<!Tuesday)\sthursday)
İf expression.search(week_d):
Print Negative lookbehind!
# String contains Sunday
Expression = re.compile(r(?=.*Sunday))
İf expression.search(week_d):
Print There is a Sunday!
Print
Print Extended options dir(re):
Print --------------------------------------------------
Print dir(re)
# eg => re.findall(rh\w+, Hey hola Hello, re.IGNORECASE) # [Hey, hola, Hello]
Main()
Belirli kalıplara bağlı metin dosyalarınız veya dizeleriniz varsa, normal ifadeler bu verileri incelemek ve ihtiyacınız olan bitleri hızlıca çıkarmak için harika araçlardır. Arka uçtaki python ile, hedeflerinize ulaşmak için bu verileri programlı bir şekilde kolayca kullanabilirsiniz.
Jamie Zawinskinin şu sözünü aklınızda tutun:
Bazı insanlar bir sorunla karşılaştıklarında
Biliyorum, normal ifadeler kullanacağım diye düşünüyorlar . Şu an iki problemleri var.
Regex güçlüdür ancak kendinizi ayağınıza vurmayın, ihtiyaçlarınıza uygun olduğunda kullanın !!
Kullanım / Uygulama
Size daha az kullanışlı olmayan ve regex alıştırması yapmanıza izin verecek çok basit bir kullanım durumu sunarak bu öğreticiyi bitirmek istiyorum (daha ne isteyebilirsiniz).
Herhangi bir (ciddi) Geri Dönüş Odaklı Programlama (ROP) yaptıysanız, genellikle orada herhangi bir hazır çözüm olmadığını bileceksiniz. Büyük olasılıkla, aradığınızı bulmak için gadgetları gözden geçirmek için çok zaman harcayacaksınız.
Tecrübelerime göre, ROP araçlarının temel bir ham listesini elde etmek için en kullanışlı araç mona(Corelandan bir hata ayıklayıcı eklentisi). Öyle olsa bile, özel ROP zincirleri oluşturuyorsanız ve 20 binlik bir listede çok özel talimatlar bulmanız gerekiyorsa, kesinlikle dünyanın heheyi bitirdiğini düşündüğünüz anlar olacaktır. ROP aygıtları belirli kalıpları takip eder, ancak çoğu zaman basit aramalarla verimli bir şekilde eşleştirilemezler. Bu, tonlarca işe yaramaz sonuç ve migrenle sonuçlanır. Neyse ki bizim için regex çok daha iyi kalıp eşleştirme yapmamızı sağlıyor.
Aşağıdaki 17 satır python, size zaman ve aspirin tabletlerinden tasarruf etmenizi sağlar. Komut dosyası iki komut satırı bağımsız değişkeni, bir metin dosyası ve bir normal ifade kalıbı alır. Unutulmaması gereken birkaç şey (1) Bunu mona çıktı dosyalarıyla çalışmak için biçimlendirdim ve (2) araçlar genellikle daha az karmaşık olduğundan, eşleşmeleri uzunluklarına göre sıraladıkça daha kısa sürede harikalar yaratır.
Kod:
#!/usr/bin/python
İmport sys, re
Def regex(rop):
Gadget = open(rop, rU)
Text = re.findall(r.+ + sys.argv[2] + .+RETN , gadget.read())
For x in sorted(text, key=len):
Print x
Def main():
Regex(sys.argv[1])
Main()
Aşağıda test amaçlı örnek bir ROP listesi ve birkaç arama ekledim, böylece komut dosyasının nasıl çalıştığı hakkında bir fikir edinebilirsiniz. MSVCR71.dll
- Raw_rop.txt
Bunların sadece basit aramalar olduğunu unutmayın, ancak en nadir talimatları bulmak için tüm normal ifadeleri de kullanabilirsiniz. Ayrıca aşağıdaki çıktıyı sadece birkaç sonuçla sınırlandırdım, ancak çoğu arama tonlarca eşleşme döndürüyor.
Kod:
Root @ Trident : ~ / Masaüstü # ./regROP.py raw_rop.txt PUSH ESP. + POP
0x7c372f4f: # PUSH ESP # AND AL, 10 # MOV DWORD PTR DS: [EDX], ECX # POP ESI # RETN
0x7c34969e: # PUSH ESP # MOV AL, BYTE PTR DS: [C68B7C37] # POP ESI # POP EBX # RETN
0x7c37591f: # PUSH ESP # ADD CH, BL # INC EBP # OR AL, 59 # POP ECX # POP EBP # RETN
[... Snip ...]
Root @ Trident : ~ / Masaüstü # ./regROP.py raw_rop.txt ESP EKLE, .. \ s #
0x7c352007: # ESP EKLE, 0C # RETN
0x7c352041: # ESP EKLE, 0C # RETN
0x7c35f9a0: # ESP EKLE, 2C # RETN
0x7c35207e: # ESP EKLE, 0C # RETN
0x7c3520bd: # ESP EKLE, 0C # RETN
0x7c3440be: # ESP EKLE, 14 # RETN
[... Snip ...]
Root @ Trident : ~ / Masaüstü # ./regROP.py raw_rop.txt MOV \ s \ w +, DWORD PTR DS: \ [EAX \]
0x7c3530ea: # MOV EAX, DWORD PTR DS: [EAX] # RETN
0x7c3413aa: # MOV EAX, DWORD PTR DS: [EAX] # PUSH EAX # RETN
0x7c35a000: # MOV EAX, DWORD PTR DS: [EAX] # EKLE EAX, ECX # RETN
0x7c359fff: # POP ESI # MOV EAX, DWORD PTR DS: [EAX] # EKLE EAX, ECX # RETN
[... Snip ...]
Root @ Trident : ~ / Masaüstü # ./regROP.py raw_rop.txt XCHG
0x7c348b05: # XCHG EAX, ESP # RETN
0x7c36c652: # XCHG EAX, EDI # PUSH ESP # STD # DEC ECX # RETN
0x7c341cae: # XCHG EAX, ESP # PUSH ES # ADD BYTE PTR DS: [EAX], AL # RETN
0x7c3413a9: # XCHG EAX, ESP # MOV EAX, DWORD PTR DS: [EAX] # PUSH EAX # RETN
0x7c342643: # XCHG EAX, ESP # POP EDI # BYTE PTR EKLE DS: [EAX], AL # POP ECX # RETN
[... Snip ...]
Root @ Trident : ~ / Masaüstü # ./regROP.py raw_rop.txt KERNEL
0x7c355c63: # ADC EAX, <& KERNEL32.Beep> # RETN
0x7c355c54: # ADC EAX, <& KERNEL32.Sleep> # RETN
0x7c341a0f: # ADC EAX, <& KERNEL32.TlsAlloc> # RETN
0x7c35f575: # ADC EAX, <& KERNEL32.LoadLibraryA> # RETN
0x7c355c61: # OR BH, BH # ADC EAX, <& KERNEL32.Beep> # RETN
0x7c34ade7: # ADC EAX, <& KERNEL32.HeapFree> # POP ESI # RETN
0x7c341a0d: # ADD BH, BH # ADC EAX, <& KERNEL32.TlsAlloc> # RETN
[... Snip ...]
Root @ Trident : ~ / Masaüstü # ./regROP.py raw_rop.txt POP. + POP. + POP
0x7c374011: # POP ECX # POP ESI # POP EBP # RETN
0x7c37606c: # POP EDI # POP ESI # POP EBX # RETN
0x7c3660e2: # POP EDI # POP ESI # POP EBX # RETN
0x7c3761a5: # POP EDI # POP ESI # POP EBX # RETN
0x7c342301: # POP EDI # POP ESI # POP EBP # RETN
0x7c35437b: # POP EDI # POP ESI # POP EBP # RETN
0x7c350389: # POP ESI # POP EBX # POP EBP # RETN
[... Snip ...]
Root @ Trident : ~ / Masaüstü # ./regROP.py raw_rop.txt XOR \ sEAX, EAX. + INC \ sEAX
0x7c364045: # XOR EAX, EAX # INC EAX # RETN
0x7c364071: # XOR EAX, EAX # INC EAX # RETN
0x7c358077: # XOR EAX, EAX # INC EAX # RETN
0x7c36409d: # XOR EAX, EAX # INC EAX # RETN
0x7c3480c1: # XOR EAX, EAX # INC EAX # RETN
0x7c3640e7: # XOR EAX, EAX # INC EAX # RETN
0x7c34810b: # XOR EAX, EAX # INC EAX # RETN
0x7c354146: # XOR EAX, EAX # INC EAX # RETN
[... Snip ...]
Source: https://www.fuzzysecurity.com/tutorials/15.html
Translators: Qgenays
M3m0ry