Turkhackteam.net/org - Turkish Hacking & Security Platform  
Geri git   Turkhackteam.net/org - Turkish Hacking & Security Platform >
Programlama
> Android Geliştirme

Android Geliştirme SDK | NDK


hexene/LocalVPN [Proje İncelemesi]

Android Geliştirme

Yeni Konu aç Cevapla
 
Seçenekler
Alt 3 Hafta önce   #1
  • AR-GE Tim Lideri
  • Üye Bilgileri
Üyelik tarihi
10/2015
Nereden
k3pwn
Mesajlar
Konular


  
Post hexene/LocalVPN [Proje İncelemesi]



Proje: https://github.com/hexene/LocalVPN

Android için bir VPN implementasyonu olan hexene isimli kullanıcıya ait olan LocalVPN projesini inceleyeceğiz. Projenin amacı Android işletim sisteminde lokal bir VPN bağlantısı üzerinden ağ trafiğini izlemektir.

Projedeki dizin yapısı üzerinden her bir dosya için detaylı anlatım yapılmaya çalışılmıştır. İçerikleri hakkında bilgi verilmiş olup kullanılan mantığa da değinilmiştir. Burada amaç Android geliştiricilerine farklı bir bakış açısı kazandırmak ve teknik konulara değinip geliştiricilerin bazı terimler ve kavramlar hakkında bilgi sahibi olmalarını sağlamaktır.


Şekil 1.1 (Projenin dizin yapısı)

AndroidManifest.xml

Uygulamada Entry Point olarak LocalVPN adlı Activity tanımlanmıştır. (#L10)
Kod:
...
<activity
            android:name=".LocalVPN"
            android:label="@string/app_name" >
...
LocalVPNService adlı sınıf ise Android-VpnService alt sınıfı olarak tanımlanmıştır. (#L19)
Kod:
 
...
<service
            android:name=".LocalVPNService"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.BIND_VPN_SERVICE">

            <intent-filter>
                <action android:name="android.net.VpnService"/>
            </intent-filter>
        </service>
...
VpnService Sınıfı

Android uygulamaları için işletim sisteminde VPN konfigure etmeyi ve kullanmayı sağlayan ön tanımlı sınıftır.
Android'in kendi dökümantasyonunda bu sınıfın yaptığı işlemler şu sırayla açıklanmıştır:
Kod:
Sanal ağ için bir arayüz oluşturduktan sonra adresleri ve yönlendirme kurallarını bu ağa göre düzenler. 
Konfigure işlemleri bittikten sonra integer tipinde FD (File Descriptor) döndürür.
* (FD: i/o işlemleri kısmında bir dosyaya, network kısmında ise bir socket veya pipe'a erişmemizi sağlayan negatif değer almayan değişken olarak düşünebilirsiniz)


Şekil 2.1 (File Descriptor)

Bu FD'de yapılan her okuma işlemi oluşturulan arayüze yönlendirilen bir paketi okumamızı sağlar. Yazma işlemleri ise paket göndermemizi sağlamaktadır.
Oluşturulan arayüz IP protokolünde çalıştığından ötürü her paket IP header bilgisi içermektedir.

IP Header


Şekil 3.1 (IP Header)

● Versiyon bilgisi (IP protokolünün versiyonu. IPv4 için değeri 4'tür.)
● Header Boyutu
● Servisin Tipi ve Önceliği (Verinin nasıl işlenmesi gerektiği ile ilgili detaylı bilgiler sunar)
● Toplam Boyut (header ve paketin toplam boyutu. 20-65,535 byte arasında değer almaktadır.)
● Kimlik (Identification) (Farklı paketleri farklı datagram'lardan ayırmak için kullanılan veridir.)
● Flags (Paketteki ayrılmış bölümleri tespit etmek için kullanılır.)
● Ayrılmış Offset (Fragmented offset) (Eğer paket tek bir frame ile gönderilemeyecek kadar büyük olduğundan ötürü parçalanıp gönderilmiş ise [MTU-Maximum Transmit Unit diğer bir deyişle ağ tarafından taşınabilecek en büyük datagram boyutu aşıldıysa] bu parçalanmış bölümleri tekrar birleştirmeyi sağlayan veriyi içerir.)
● Yaşam Süresi (Time to Live - TTL) (Paket-datagram bu süre tükenmeden hedefine ulaşmalıdır.)
● Protokol (Kullanılan protokolü tanımlar. TCP-6/UDP-17)
● Header Checksum (Router, Header bilgisinde hata olup olmadığını bu checksum ile kendi hesapladığı checksum'u karşılaştırarak belirler.)
● Kaynak IP Adresi
● Hedef IP Adresi
● Options (Ağ testlerinde kullanılır.)

TCP Header


Şekil 4.1 (TCP Header)

● Kaynak Port
● Hedef Port
● Sıra Numarası (Sequence) (TCP paketlerinin kaynağa ulaşıp ulaşmadığını belirlemek için kullanılır.)
● Onay Numarası (Acknowledgment-ACK) (TCP paketlerinin kaynağa ulaşıp ulaşmadığını belirlemek için kullanılır.)
● TCP Data Offset (Header boyut değerini tutar.)
● Reserved Data (Genelde 0 değerine sahiptir.)
● Kontrol Bayrakları (TCP protokolü veri akışını sağlayan 6 adet bayrak kullanmaktadır.)
1- urgent: Acil olarak işlenmesi gereken bir veri olduğunda durumlarda kullanılır.
2- acknowledgement-ack: Onay durumunda kullanılır.
3- push: Gönderim işlemi tamamlandığında kullanılır.
4- reset: Anlık olan bağlantıyı sıfırlar.
5- synchronize-syn: Senkronize edilmesi gereken paketler ile beraber gönderilir.
6- finished-fin: İşlemin tamamlandığı durumlarda kullanılır.
● Window Size (TCP bağlantısında veri alırken kullanılacak alanın boyutunu belirlemeye yarar.)
● Checksum (Verinin doğrulamasını yapmak için gereklidir.)
● Urgent Pointer (Urgent flag'inin durumuna göre değer alır. Paketteki acil olarak nitelendirilen veriyi gösteren bir offset tanımlar.)
● Ayarlar
● Padding (Header boyutunun 32 bit'in katları olması için sonuna 0 eklemekle yükümlüdür.)

Bir TCP bağlantısı örneği aşağıda gösterilmiştir.


Şekil 5.1 (TCP Bağlantısı)

■ Server, client'in bağlanması için bir socket açar ve dinlemeye alır.
■ Client server'a bağlanmak istediğinde belirlenen özel flag'ler ile aralarında handshake (el sıkışma) işlemi gerçekleşir.
(SYN, SYN/ACK, ACK) [s=socket; connect(s)]
■ Handshake işlemi başarıyla tamamlanması bağlantının kurulduğu anlamına gelir. [accept()]
Bu aşamadan sonra server ile client arasında veri alış-verişi gerçekleşebilir. (write()-read())
■ Server veya client bağlantıyı sonlandırmak istediğinde FIN ve ACK bayrakları ile bağlantı sonlandırılır. (close(s))
■ Server ya bağlantıyı kapatır ya da socket'i dinlemeye devam eder.

UDP Header


Şekil 6.1 (UDP Header)

● Kaynak Port
● Hedef Port
● Veri Boyutu (8-65,000 byte arası değer alır.)
● Checksum

LocalVpn uygulaması daha sonra paket alışverişini belirlenen konfigürasyonlar ile tünel üzerinden sağlayarak VPN bağlantısını kurmuş olacaktır.

Android, aplikasyonların ağ paketlerinin arasına bu sınıfı kullanarak girmesinin tehlikeli olduğunu anlamış olacak ki bu işlem sırasında kullanıcıya bir sanal ağa bağlandığını onaylaması için bir diyalog göstermektedir. Daha sonra bildirim alanından VPN aktivitesi gözlemlenebilir, durdurulabilir.


Şekil 7.1 (Android VPN notifikasyonu)

Packet

Genel olarak bir IP paketinin tanımlaması yapılmıştır. Bu sınıfta Ipv4, UDP ve TCP protokollerinin header tanımlaması bulunmaktadır. Kısaca bir ağ paketini temsil etmesi için kullanılan bir sınıftır.

LocalVPN

Sanal ağa bağlantının başlatılması için bir BroadcastReceiver tanımlanmıştır. (#L37) (vpnStateReceiver)
(BroadcastReceiver: İşletim sisteminden uygulamalara gönderilen sinyalleri dinlemek ve takip etmekle yükümlü sınıf)
Daha sonra LocalBroadcastManager kullanılarak bu BroadcastReceiver işletim sistemine tanıtılmıştır. (#L65)
LocalBroadcastManager'in avantajı bu sinyali sistem üzerinden değil uygulama üzerinden göndermesidir. Bu sayede başka uygulamalar uygulamaya bu sinyalleri gönderemez. Bu da güvenlik açısından bir önlem olarak düşünülebilir.

Tanımlanan R.id.vpn ID'sine sahip vpnButton'a tıklanması ile LocalVPN: startVPN() fonksiyonunun çağrıldığı görülmektedir. (#L69)

Kod:
...
private vo-id startVPN()
    {
        Intent vpnIntent = VpnService.prepare(this);
        if (vpnIntent != null)
            startActivityForResult(vpnIntent, VPN_REQUEST_CODE);
        else
            onActivityResult(VPN_REQUEST_CODE, RESULT_OK, null);
    }
...
Bu fonksiyonun yaptığı işlemler sırasıyla uygulamadan VPN servisi için izin isteyen VpnService:: prepare(Context) fonksiyonunu bir intent'e eşitleyip bu intent'i aktivite başlatma fonksiyonuna VPN_REQUEST_CODE (0x0F) ile parametre verip aktiviteyi başlatmasıdır. Aktivite tekrar başlatıldığında requestCode olarak 0x0F olup olmadığını kontrol eder. Eğer mevcut ise ön tanımlı startService(Intent) fonksiyonu ile VPN servisimizi başlatır.

Kod:
...
  @override
    protected vo-id onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == VPN_REQUEST_CODE && resultCode == RESULT_OK)
        {
            waitingForVPNStart = true;
            startService(new Intent(this, LocalVPNService.class));
            enableButton(false);
        }
    }
...
Bunun dışında arayüz ile ilgili buton'un Enabled ve Text durumunu değiştiren bir fonksiyon bulunmaktadır.

LocalVPNService

Beklendiği ve Manifest dosyasında görüldüğü üzere bir IntentService veya Service olmayıp VpnService'i extend etmektedir.
Sınıfın başında bazı değişken tanımlamaları yapılmıştır. Bu değişken türlerini açıklamak gerekirse:
ParcelFileDescriptor: Parcel türünden (İki process arasında veri iletişimi sağlayan Binder isimli sınıfın arayüzü olan IBinder üzerinden mesaj göndermeye yarayan değişken türü) okunan File Descriptor
ConcurrentLinkedQueue: FIFO (first-in-first-out) prensibine dayanan queue (kuyruk) yapısı.
Runnable: Dosyada tanımlanmamıştır ancak yine de açıklanması gerekmektedir. Android'de 2 türlü thread tanımı mevcuttur. İlki Thread nesnesini extend ederek tanımlamak iken ikincisi ise Runnable nesnesini sınıfımıza implement etmektir. Runnable, genel olarak Thread sınıfı içerisinde yapılması gereken işlemleri run metodunu override etmek suretiyle belirtmemizi sağlar.

Kod:
// Örnek 1.1 : Runnable
public class MyRunnable implements Runnable {
    public vo-id run() {
        //
    }
}
Kod:
// Örnek 1.2 : Thread
public class MyThread extends Thread {
    public MyThread() {
        super("MyThread");
    }
    public vo-id run() {
        //
    }
}
ExecutorService: Runnable olarak ayarlanan task'ları çalıştırmak için kullanılan Executor'dan farkı bahsedilen işlemi sonlandırmayı yönetebilmesi ve işlemin durumunu izleyecek (Future tipinden) başka asenkron işlemler ayarlamaya yönelik farklı metotlar sunmasıdır.
Uygulamada Executors.newFixedThreadPool(int) metodu ile bir ThreadPool yapısı kullanılmıştır. (Sırayla belirlenen Thread'leri çalıştırmamıza yarar. Thread listesini bir queue yapısı içerisinde tutar.)
Selector: SelectableChannel nesnelerini çoklamamızı sağlar. Tek bir thread ile birkaç channel içerisindeki işlemleri gerçekleştirmeye yarar.


Şekil 8.1 (Selector)

PendingIntent: Android işletim sisteminde aplikasyon içerisinden veya dışarısından bileşenler arasında veri aktarımını sağlayan Intent isimli sınıf bulunmaktadır. Activity'ler Service'ler ve BroadcastReceiver'lar arasında mesaj aktarımını sağlamaktadır. PendingIntent ise başka uygulamalar ve programlara veri göndermek suretiyle istenilen işlemin yaptırılmasını sağlayan Intent türevi bir sınıftır. Örnek olarak işletim sistemindeki NotificationManager kullanılarak kullanıcıya notifikasyon gönderme işlemi yapılırken PendingIntent kullanılmalıdır.

LocalVPNService:: onCreate() metoduna baktığımızda yapılan ilk işlemlerden birinin LocalVPNService::setupVPN() metodunu çağırmak olduğunu görebiliriz.
#L65
(#93)
Bu fonksiyonun yaptığı iş VpnService.Builder sınıfını kullanarak adres ve route bilgisini vermek suretiyle yeni bir obje oluşturmak ve bunu setConfigureIntent(PendingIntent intent) metodu ile vpnInterface isimli ParcelFileDescriptor'a eşitlemektir. Ardından tcpSelector ve udpSelector isimli iki Selector'u open() ile aktif hale getirmektedir. Paketlerin takibi için üç adet ConcurrentLinkedQueue oluşturduktan sonra beş Executor yardımıyla beş Thread'e sahip olan bir ThreadPool oluşturmaktadır. Sonraki satırlarda bu Thread'leri belirlemektedir. Sırayla belirlenen Thread'leri incelemek gerekirse: (#66)

Kod:
...
            udpSelector = Selector.open();
            tcpSelector = Selector.open();
            deviceToNetworkUDPQueue = new ConcurrentLinkedQueue<>();
            deviceToNetworkTCPQueue = new ConcurrentLinkedQueue<>();
            networkToDeviceQueue = new ConcurrentLinkedQueue<>();

            executorService = Executors.newFixedThreadPool(5);
            executorService.submit(new UDPInput(networkToDeviceQueue, udpSelector));
            executorService.submit(new UDPOutput(deviceToNetworkUDPQueue, udpSelector, this));
            executorService.submit(new TCPInput(networkToDeviceQueue, tcpSelector));
            executorService.submit(new TCPOutput(deviceToNetworkTCPQueue, networkToDeviceQueue, tcpSelector, this));
            executorService.submit(new VPNRunnable(vpnInterface.getFileDescriptor(),
                    deviceToNetworkUDPQueue, deviceToNetworkTCPQueue, networkToDeviceQueue));
            LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(BROADCAST_VPN_STATE).putExtra("running", true));
...
VPNRunnable isminde Runnable nesnesini implement eden bir Thread bulunmaktadır. (#150)
Parametre olarak service'in başında tanımlanan FD'yi ve ConcurrentLinkedQueue yapılarını almaktadır. Bu thread'in yaptığı ana iş tüm sınıflar ve selector'lar arasındaki bağlantıyı sağlamak yani local VPN'in çalışmasını sağlamaktır.

UDPInput

Executor'a parametre verilebilmesi için Runnable sınıfını implement etmektedir.
ConcurrentLinkedQueue ve Selector olmak üzere iki türde parametre almaktadır.
Sınıf initialize edildikten sonra run() metodunda yapılan işlemler sırasıyla parametre verilen selector ile hazır olan channel'lar seçilir ve bu channel'lar SelectionKey Iterator metodu ile teker teker gezilir. Bu gezilen key'lerin channel değeri UDP için kullanılacak olan DatagramChannel türündeki inputChannel değişkenine eşitlenir. Daha sonra ByteBuffer yardımıyla bu channel'ın attachment'ından okunan veri hata kontrolü ve işlenmek üzere tanımlanan bir class olan Packet'a eşitlenir. Ardından okunan buffer değeri ConcurrentLinkedQueue yapısının sonuna eklenir ve iteration tamamlanmış olur.
(#62)

UDPOutput

Runnable sınıfını implement etmektedir.
ConcurrentLinkedQueue, Selector ve halihazırda tanımlı VpnService sınıfı olmak üzere üç parametre almaktadır.
Boyutu 50 olmak üzere bir LRUCache tanımlanmıştır.
run() metoduna baktığımızda en başta ConcurrentLinkedQueue için tanımlanmış hazır bir fonksiyon olan poll() fonksiyonu ile ilk elemanı alıp kuyruk'dan kaldırdığını görebiliriz. Daha sonra bu paketten IP ve Port bilgilerini çıkarıp outputChannel'a aktarmaktadır. (#72)

Kod:
currentPacket = inputQueue.poll();
Bağlantı kurduktan sonra selector'un wakeup metodu ile select() metodunun çağrıldığı yere dönmesini sağlar.
#L104

Ardından channel register() fonksiyonu ile paket selector'a tanıtılmıştır. Bu sayede channel'lar arasında bağlantı sağlanmıştır. En sonda ise ByteBuffer yardımıyla paket gönderimi yapılmıştır.

Kod:
...
              try
                {
                    ByteBuffer payloadBuffer = currentPacket.backingBuffer;
                    while (payloadBuffer.hasRemaining())
                        outputChannel.write(payloadBuffer);
                }
                catch (IOException e)
                {
                    Log.e(TAG, "Network write error: " + ipAndPort, e);
                    channelCache.remove(ipAndPort);
                    closeChannel(outputChannel);
                }
...
TCPInput

Runnable sınıfını implement etmektedir.
ConcurrentLinkedQueue ve Selector olarak iki parametre almaktadır.
UDPInput'da olduğu gibi channel'ları gezdikten sonra buradan bağlantı bilgilerini alıp processConnect(SelectionKey, Iterator) ile bağlantı kurmakta veya processInput(SelectionKey, Iterator) ile okuma yapmaktadır.
(#L87 - #118)
TCB yapısı kullanılarak paket bilgileri burada tutulmakta ve bağlantı durumunun takibi bu şekilde sağlanmaktadır.

TCPOutput

Runnable sınıfını implement etmektedir.
UDPOutput sınıfı ile parametreleri benzer olmakla beraber tek farkı ConcurrentLinkedQueue tipinde outputQueue isminde bir parametre almaktadır.
(#L44)

Ardından run() metodu içerisinde paket bilgilerini aldıktan sonra paketteki flag durumuna göre cevap oluşturmakta ve göndermektedir. Paketten ip ve port bilgisini almak için TCB yapısı kullanılmakta, bu yapıya ek olarak asenkron şekilde LRU kullanılmaktadır. Sınıfın amacı parametre olarak gelen TCP paketine karşılık flag değerleri ve veri ile gerekli cevabı üretip sağlıklı bir bağlantı sağlamaktır.

TCB

TCP protokolü her bağlantı için iletim, veri alma ve yeniden iletim gibi işlemleri tek bir veri yapısı üzerinden yürütmektedir.
Transmission Control Block (TCB) olarak bilinen bu veri yapısı her bir bağlantı için ayrı bir şekilde kullanılmaktadır.
TCB yapısı, kurulan bağlantı ile ilgili önemli bilgiler tutmaktadır. (Socket, paket durumu vs.)

Aplikasyondaki TCB sınıfına gelecek olursak flag'ler ile ilgili bilgilerin tutulduğunu görebiliriz.
(#L37)
Daha sonra bu flag'ler bağlantının durumuna göre takip edilecektir. (ACK-SEQ) Ayrıca enum yapısı yardımıyla TCP paket durumlarının bilgisi tutulmaktadır. Java'daki synchronized anahtar kelimesi kullanılarak TCB'nin asenkron şekilde çalışması sağlanmıştır. Kısaca TCB sınıfı TCB yapısını temsil etmekte, TCP paketleri ile ilgili bilgileri içermektedir.

ByteBufferPool

Aplikasyonun pek çok yerinde kullanılmıştır. Queue (kuyruk) tipi içerisinde ByteBuffer objeleri oluşturmak için yazılmış bir sınıftır. Bu sayede ByteBuffer nesnesi pool içerisinde asenkron olarak kullanılabilir.

Kod:
private static ConcurrentLinkedQueue<ByteBuffer> pool = new ConcurrentLinkedQueue<>();
LRUCache

Cleanup işlemleri için tanımlanmış sınıfımız. Least Recently Used (LRU) veri yapısı programın bellekte yer açmak için hangi veriyi dışarı alması gerektiğine karar vermesini sağlamaktadır. Aplikasyonda kullanılan yapı ile ilgili detay: https://medium.com/@krishankantsingh...m-583159139237

res/layout/activity_local_vpn.xml
Ana activity xml dosyasıdır. Bir adet buton tanımlanmıştır.

res/menu/menu_local_vpn.xml
Menu dosyasıdır.

res/drawable/ic_launcher.png
Uygulama ikonu.

res/values/dimens.xml
Margin ayarlamaları yapılmıştır.

res/values/strings.xml
Uygulama string'leri

res/values/styles.xml
Styles dosyası. Uygulama teması olan AppTheme'i içermektedir.

Proje, herhangi bir 3. parti kütüphane kullanmamaktadır. Tamamen Android'in ön tanımlı sınıfı olan VpnService ve network (UDP-TCP/IP) temellerine dayanmaktadır.
Ayrıca projenin pek çok yerinde kullanılan veri yapıları problemlere hızlı ve yeterli bir çözüm sağlamıştır. (ConcurrentLinkedQueue, LRUCache, TCB)
Son olarak proje sahibi hexene'yi ortaya sade ve işlevsel bir VPN çözümü koymasından ve emeklerinden ötürü tebrik etmek istiyorum.
    


___________________________________________

TürkHackTeam | Araştırma - Geliştirme Timi



Konu KeyLo99 tarafından ( 3 Hafta önce Saat 20:10 ) değiştirilmiştir..
 Offline  
 
Alıntı ile Cevapla
Alt 3 Hafta önce   #2
  • AR-GE Tim (Bug.Res.)
  • Üye Bilgileri
Üyelik tarihi
07/2017
Nereden
$ebp
Mesajlar
Konular


  


Cok detayli ve aciklayici olmus, eline saglik.
    


___________________________________________


"Emacs > Vim"
(•_•)
( •_•)>⌐■-■
(⌐■_■)
 Offline  
 
Alıntı ile Cevapla
Alt 3 Hafta önce   #3
  • Albay
  • Üye Bilgileri
Üyelik tarihi
05/2013
Nereden
İstanbul
Mesajlar
Konular


  


Ellerine sağlık cidden detaylı olmuş, böyle proje incemelerin mobil programming'e yönlendirebilir beni

Artı olarak sormak istediğim soru;

Konu çeviri mi veyahut görseller de alıntı var mi?
Eğer öyle ise kaynak paylaşırsanız tabiri caizse sömürmek istiyorum
    


___________________________________________

En çok ne zoruma gidiyor biliyor musun? "Ülkem" diye kaydetmiştin beni telefonuna. Kalbimi parçalara ayırdın, hani vatan bölünmezdi?

Yokluğun bilinç altımdayken , varlığın kimin altında merak ediyorum.
 Online  
 
Alıntı ile Cevapla
Alt 3 Hafta önce   #4
  • AR-GE Tim Lideri
  • Üye Bilgileri
Üyelik tarihi
10/2015
Nereden
k3pwn
Mesajlar
Konular


  


Alıntı:
ALcatraz'´isimli üyeden Alıntı Mesajı göster
Ellerine sağlık cidden detaylı olmuş, böyle proje incemelerin mobil programming'e yönlendirebilir beni

Artı olarak sormak istediğim soru;

Konu çeviri mi veyahut görseller de alıntı var mi?
Eğer öyle ise kaynak paylaşırsanız tabiri caizse sömürmek istiyorum
Konu çeviri değil En major kaynak GitHub adresi: https://github.com/hexene/LocalVPN
Bunun dışında konu içerisinde terimlerin üzerine tıklayarak Android'in kendi dökümantasyonuna gidebiliyorsunuz. Ekstra olarak şunlar kullanıldı:

https://www.ibm.com/support/knowledg...7/s5tcpcf.html
The TCP Datagram
https://www.lifewire.com/tcp-headers...plained-817970
https://medium.com/@krishankantsingh...m-583159139237
http://tutorials.jenkov.com/java-nio/selectors.html
    


___________________________________________

TürkHackTeam | Araştırma - Geliştirme Timi


 Offline  
 
Alıntı ile Cevapla
Alt 3 Hafta önce   #5
  • Albay
  • Üye Bilgileri
Üyelik tarihi
05/2013
Nereden
İstanbul
Mesajlar
Konular


  


Alıntı:
KeyLo99´isimli üyeden Alıntı Mesajı göster
Konu çeviri değil En major kaynak GitHub adresi: https://github.com/hexene/LocalVPN
Bunun dışında konu içerisinde terimlerin üzerine tıklayarak Android'in kendi dökümantasyonuna gidebiliyorsunuz. Ekstra olarak şunlar kullanıldı:

https://www.ibm.com/support/knowledg...7/s5tcpcf.html
The TCP Datagram
https://www.lifewire.com/tcp-headers...plained-817970
https://medium.com/@krishankantsingh...m-583159139237
http://tutorials.jenkov.com/java-nio/selectors.html
O zaman tekrardan ellerine, emeğine sağlık. Kaynak olarak seni mi sömürüyoruz yani
Devamını 4 gözle bekliyorum
    


___________________________________________

En çok ne zoruma gidiyor biliyor musun? "Ülkem" diye kaydetmiştin beni telefonuna. Kalbimi parçalara ayırdın, hani vatan bölünmezdi?

Yokluğun bilinç altımdayken , varlığın kimin altında merak ediyorum.
 Online  
 
Alıntı ile Cevapla
Alt 3 Hafta önce   #6
  • AR-GE Tim (Bug.Res.)
  • Üye Bilgileri
Üyelik tarihi
08/2015
Nereden
Phobos/Space
Mesajlar
Konular


  


Ellerine saglik
    


___________________________________________

~Cahile gelmez benden hayır
 Offline  
 
Alıntı ile Cevapla
Alt 2 Hafta önce   #7
  • AR-GE Tim Lideri
  • Üye Bilgileri
Üyelik tarihi
10/2015
Nereden
k3pwn
Mesajlar
Konular


  


Teşekkürler
    


___________________________________________

TürkHackTeam | Araştırma - Geliştirme Timi


 Offline  
 
Alıntı ile Cevapla
Alt 2 Hafta önce   #8
  • Binbaşı
  • Üye Bilgileri
Üyelik tarihi
05/2018
Mesajlar
Konular


  


Güzel ve detaylı konu olmuş elinize sağlık
    
 Offline  
 
Alıntı ile Cevapla
Alt 2 Hafta önce   #9
  • Üsteğmen
  • Üye Bilgileri
Üyelik tarihi
03/2018
Nereden
Atatürkiye
Yaş
94
Mesajlar
Konular


  


Elinize Sağlık
    


___________________________________________

███▓ ☾✯ ▓███ATATÜRK'ÜN TORUNU ███▓ ☾✯ ▓███
Hak Yiyen Hack Yer
Amacım İnterneti Kötü Niyetli İnsanlardan Temizlemektir

Başkomutan Gazi Mustafa Kemal Paşa'nın Askerleriyiz...
 Offline  
 
Alıntı ile Cevapla
Alt 2 Hafta önce   #10
  • Binbaşı
  • Üye Bilgileri
Üyelik tarihi
03/2016
Nereden
Unknown
Mesajlar
Konular


  


Elinize sağlık
    


___________________________________________


i want to sleep f o r e v e r
 Offline  
 
Alıntı ile Cevapla
Cevapla

Bookmarks

Seçenekler


Bilgilendirme Turkhackteam.net/org
Sitemizde yer alan konular üyelerimiz tarafından paylaşılmaktadır.
Bu konular yasalara uygunluk ve telif hakkı konusunda yönetimimiz tarafından kontrol edilse de, gözden kaçabilen içerikler yer alabilmektedir.
Bu tür konuları turkhackteamiletisim [at] gmail.com mail adresimize bildirebilirsiniz, konular hakkında en kısa sürede gerekli işlemler yapılacaktır.
Please Report Abuse, DMCA, Harassment, Scamming, Warez, Crack, Divx, Mp3 or any Illegal Activity to turkhackteamiletisim [at] gmail.com

Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz.
Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.



         

Powered by vBulletin® Copyright ©2000 - 2018

TSK Mehmetçik Vakfı

Türk Polis Teşkilatını Güçlendirme Vakfı



Google+

wau

Search Engine Friendly URLs by vBSEO 3.6.0 ©2011, Crawlability, Inc.