Soru:
Bir PHP betiğini güvenli bir şekilde yeniden oluşturma
user187
2013-03-27 13:23:11 UTC
view on stackexchange narkive permalink

İşlevini belirlemem gereken çok dağınık bir PHP betiğim var. Kodu tam olarak anlayamıyorum, gerçekten dağınık. Şimdi bu betiği tersine çevirebileceğimi düşündüm.

Yapmak istediğim, senaryonun hangi bölümünün ne yaptığını daha iyi anlamak için bu betiği çalıştırmak (sonunda belirli bölümler yorumlanarak). Bu bilgilerle, komut dosyasını tam olarak anlayabilirim.

Ancak, sunucudaki veritabanında hiçbir şeyi değiştirmek istemiyorum, betiğin posta şeyler vb. Temel olarak, komut dosyası dünyadan tamamen ayrı olmalıdır, ancak ne yapmaya çalıştığını görmek istiyorum. Dolayısıyla, örneğin, komut dosyası bir mail () işlevini çalıştırdığında, komut dosyası dünyadan ayrılmamış olsaydı bir postanın gönderilmiş olacağını görmek istiyorum.

Bu nedenle sunucu kurulumunun bir kopyasına ihtiyacım var (Ubuntu Sunucusu 12.04), bu o kadar da zor değil. İşin zor yanı, dış dünya gibi davranan , ancak gerçekte ne olduğunu görebildiğim bir günlük sistemi olan bir sisteme ihtiyacım olması.

Bunu yapabilecek herhangi bir araç var mı? Değilse, kendim oluşturmaya nasıl başlamalıyım?

[Tag: software] etiketi burada gerekli mi? http://meta.reverseengineering.stackexchange.com/q/3/189
@AshRj Kaldırdım.
Dört yanıtlar:
#1
+8
amccormack
2013-03-28 04:21:19 UTC
view on stackexchange narkive permalink

Örneğinizi test etmek için sanal makineler kullanmanızı öneririm. Örnek diğer makinelerle etkileşime girecekse (örneğin, posta gönderiyorsa ancak posta sunucusu mail.example.com'da bulunuyorsa), muhtemelen iki makine kurulumunu taklit etmek isteyeceksiniz. Örneğinizin çalışacağı makinede her şey zaten yapılandırılmışsa (bu nedenle posta aramaları yerel olarak yapılıyorsa), muhtemelen yalnızca bir sanal makineye ihtiyacınız olacaktır.

Yalnızca Sanal Makine Ana Bilgisayarı Ağı Kurun

Varsa, VMWare'i kullanabilir veya ücretsiz olan VirtualBox 'ı kullanabilirsiniz. Yalnızca ana bilgisayar ağı kullanıyorsanız ( VMWare veya VirtualBox talimatları), sanal makinelerin ağ trafiğini ana makinenizden koklayabilirsiniz, ancak trafik ana makinenizden asla ayrılmayacaktır. .

Örneği çalıştırmadan önce

Bu php betiğinin sanal makinenizin durumunu değiştireceğinden şüpheleniyorsanız (örneğin, veritabanlarını bırakacak veya dosyaların üzerine yazacak), o zaman size bir enstantane fotoğraf. Bu şekilde, komut dosyası çalıştığında yapılan değişiklikleri her zaman geri alabilirsiniz. VMWare veya VirtualBox talimatları.

Örneği Çalıştırma

Sanal ağ oluşturulduktan sonra, yakalama sırasında örneğinizi çalıştırabilirsiniz wireshark gibi bir araçla trafik. Bu, tüm ağ trafiğini yakalayacaktır

Dışarıdan geri bildirim alma

Açıkladığınız gibi, örneğinizin muhtemelen sahte hizmetlerle iletişim kurması gerekmeyecektir, ancak varsa, işte bir inceleyebileceğiniz birkaç uygulama var.

  • Mick'in bahsettiği gibi Windows
    • FakeNet, Windows XP SP3'te çalıştırıyorsanız bu iyi bir çözümdür .
  • Linux
    • inetsim - Bu, HTTP, TCP veya SMTP gibi uygulama düzeyindeki protokoller için yanıtları simüle edecektir. Ayrıca, DNS isteklerine yanıt verebilir.
    • honeyd - Bu, inetsim'den daha hafiftir ancak HTTP, TCP veya SMTP gibi uygulama düzeyindeki protokoller için yanıtları da simüle eder. Ayrıca DNS isteklerine yanıt verebilir.
    • farpd - Bu yardımcı program, istenecek IP adresini bilmiyorsanız çok kullanışlıdır. Bu uygulama, IP trafiğini sanal makinenize yönlendirmek için kullanılabilir.
#2
+5
Mick
2013-03-27 19:12:33 UTC
view on stackexchange narkive permalink

Gerçek bir ağı simüle etmek için açık kaynaklı FakeNet 'i kullanabilirsiniz.

Ancak, FakeNet bir XP SP3 sistemi üzerinde çalıştırılmak üzere tasarlanmıştır, bu nedenle bunu kullanmak, trafiğin Ubuntu sisteminizden / sanal makinenizden bir XP sp3 sistemine yönlendirilmesini sağlamanızı gerektirir. /VM.

Muhtemelen bazı Linux tabanlı FakeNet alternatifleri vardır, ancak daha önce Windows kötü amaçlı yazılımlarını analiz ederken FakeNet'i kullandım ve çok iyi çalışıyor.

Özellikler

  • DNS, HTTP ve SSL'yi destekler
  • HTTP sunucusu her zaman bir dosya sunar ve anlamlı bir dosya sunmaya çalışır; kötü amaçlı yazılım bir .jpg isterse, uygun şekilde biçimlendirilmiş bir .jpg vb. sunulur. Sunulan dosyalar kullanıcı tarafından yapılandırılabilir.
  • Sabit kodlanmış bir trafik için hedeflenen trafik dahil tüm trafiği yerel ana bilgisayara yeniden yönlendirme yeteneği IP adresi.
  • SSL üzerinden SMTP ve SMTP uygulayan bir örnek uzantı içeren Python uzantıları.
  • Localhost üzerindeki paketler için bir yakalama dosyası (.pcap) oluşturma yeteneği yerleşik.
  • Herhangi bir bağlantı noktasındaki trafiği dinleyen, SSL trafiğini otomatik olarak algılayıp şifresini çözen ve içeriği konsola görüntüleyen kukla dinleyici.
#3
+5
Daniel W. Steinbrook
2013-03-28 07:34:33 UTC
view on stackexchange narkive permalink

Daha genel bir çözüm, rastgele işlev çağrılarını engellemek için bir PHP uzantısı olan runkit gibi bir şey kullanmaktır. Bir ağı simüle etmeye çalışmak yerine (durumunuz için daha güvenli seçenek), bunun yerine çağrılmasını önlemek istediğiniz tüm işlevler kümesini biliyorsanız, her birini bir ileti kaydetmek için runkit_function_redefine yapabilirsiniz bunun yerine.

Bu tür bir yaklaşımın dezavantajı, önceden bilmediğiniz bir yerde yakalamak istediğiniz şeyi önceden tanımlamanız gerektiğidir.
#4
+3
jg0
2013-03-28 07:58:40 UTC
view on stackexchange narkive permalink

Kaynak dosyaya zaten sahip olduğunuz için, daha basit ve daha kolay bir yaklaşım olduğuna inanıyorum (ağ trafiğini düşük seviyelerde yeniden yönlendirmeye kıyasla, çağrılan yöntemleri durdurmak olacaktır.)

İlk olarak, php dosyanızdaki yöntemleri tanımlayın ve değiştirin (bir kopya yapmayı unutmayın!). Örneğin, postaya () müdahale etmek istiyorsanız, postayı ( bulabilir ve shim_mail () ile değiştirebilirsiniz. Bunu da yapabilirsiniz mysql_connect () gibi diğer ilginç yöntemler için.

Bitirdiğinizde, include 'shim.php' ekleyin; "shim" php betiği ile gerçek yöntem arasında bir katman görevi görecek, böylece bir metin dosyasına günlüğe kaydetmeyi, yürütmesine izin vermeyi veya hatta onu bir kopya veritabanına yönlendirmeyi seçebilirsiniz. !

shim.php

  $ logfile = 'log.txt'; function shim_mysql_connect ($ server, $ username, $ password, $ new_link = false, $ client_flags = 0) {file_put_contents ($ logfile, file_get_contents ($ logfile). "\ r \ nmysql_connect () için". $ server. "kullanıcı adı ile". $ username. "ve şifre". $ password); // intercept komutu ve onu 'bal potu'na yönlendirin return mysql_connect (' yeni_ sunucunuz ',' kullanıcı adı ',' şifre ');} işlev shim_mail ($ to, $ konu, $ ileti, $ a dditional_headers = '', $ additional_parameters = '') {file_put_contents ($ logfile, file_get_contents ($ logfile). "\ r \ nmail () alıcı". $ to. "konu ile". $ konu. "ve mesaj". $ mesaj); // aslında bir e-posta göndermeyin}? >  

Bu shim dosyasında, öğrenmek istediğiniz işlevleri ekleyebilirsiniz (yalnızca aynı yöntem imzasını kopyalayarak orijinal dosya ve ilgili günlüklerin yazdırılması). Günlüğü inceleyerek php betiği hakkında muhtemelen daha çok şey öğrenebilirsiniz!

(Bunu yazarken, Daniel W. Steinbrook'un da benzer bir yöntem geliştirdiğini fark ettim. Benim yöntemimin yeni bağımlılıklar eklemeden daha basit olması gibi küçük bir avantajı var, ancak runkit daha fazla doğru şekilde. Her iki durumda da, işe yarayan birini seçebilirsiniz!)

Bu tekniğin basitliği kayda değerdir.
Bu teknik yeterli DEĞİLDİR. Http://www.php.net/manual/en/functions.variable-functions.php


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...