What is JSON And How To Using It In C#

Merhabalar.

Geçen hafta C# Corner adresinde yayınlanmış olan İngilizce makalemin orijinal kopyasını kendi web adresimde de paylaşmaya karar verdim. 11.04.2016 10:47 itibari ile 2.9k okunmasıyla beraber, aldığım geri bildirimler ve gelen mesajlar ile “Bir sonraki makale ne olsun?” sorusuna da cevap arıyorum. Herkese iyi kodlamalar.

Working with JSON in C#
(What is JSON And How to Using It In C#)

This article will cover the following:

  • What is JSON
  • How to create JSON string in C#
  • How to read JSON string in C#

 

What is JSON

JSON (JavaScript Object Notation) is standard designed for human-readable data interchange. I think the thing of ‘human-readable’ for developers. JSON works with a tree structure and it looks like a XML. It’s shorter and It’s very easy for using. If you have already experience with XML, you will certainly learn easily.

JSON vs. XML

\wp content\uploads\2016\csharpcorner\picture1 - What is JSON And How To Using It In C#

Let’s examine this expression { “name”: “Stephen Cousins” }

  1. If you’re using JSON, you must put your expression in “{ }”
  2. “name” is the key.
  3. “Stephen Cousins” is a value of “name” key

 

JSON has the logic like { “key”: “value” } statement.
And also JSON has the array.

Let’s take another expression and examine that:

"students": [
{ "name": "Stephen Cousins" },
{ "name": "Austin A. Newton" },
{ "name": "Adam Wilhite" },
{ "name": "Enis Kurtay YILMAZ" }
]
  1. “students” is the key.
  2. “[“ and “]” square brackets are array statement. It means there is the array between “[“ and “]” in brackets.
  3. All of statements in square brackets are value of “students” key.
  4. As you see there are four arrays in square brackets and it represents four student names.

 

How to create JSON string in C#

Please create your new console project from Visual Studio

File -> New-> Project->Console Application (.NET Framework 3.5)

If you want to create or read a JSON string, you need a JSON Serialize or Deserialize.

So, please open your Solution Explorer in Visual Studio, right click on References, click “Manage NuGet Packages”

\wp content\uploads\2016\csharpcorner\picture2 - What is JSON And How To Using It In C#

Please search “Newtonsoft.JSON” on Nuget Package Manager and install it.

\wp content\uploads\2016\csharpcorner\picture3 - What is JSON And How To Using It In C#

Please add “using Newtonsoft.Json;” statement. If you forget to add this statement, you can’t serialize any JSON strings.

Example JSON:

{
 "universities": {
 "university": "South Carolina State University",
 "students": [
 { "name": "Stephen Cousins" },
 { "name": "Austin A. Newton" },
 { "name": "Adam Wilhite" },
 { "name": "Enis Kurtay YILMAZ"}
 ]
 }
}

Now, you need to create class for example JSON. If you want to create easily, you can use that web site -> www.jsonutils.com

\wp content\uploads\2016\csharpcorner\picture4 - What is JSON And How To Using It In C#

Creating JSON string in C#:

using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace EKY.CSharpCornerJSONArticle
{
 public class Student
 {
 public string name { get; set; }
 }
 public class Universities
 {
 public string university { get; set; }
 public IList<Student> students { get; set; }
 }
 public class ClassUniversities
 {
 public Universities universities { get; set; }
 }
 class Program
 {
 static void Main(string[] args)
 {
 ClassUniversities university1 = new ClassUniversities();

 university1.universities = new Universities();
 university1.universities.university = "South Carolina State University";

 List<Student> listStudent = new List<Student>();
 Student student1 = new Student { name = "Stephen Cousins"};
 Student student2 = new Student { name = "Austin A. Newton" };
 Student student3 = new Student { name = "Adam Wilhite" };
 Student student4 = new Student { name = "Enis Kurtay YILMAZ" };

 listStudent.Add(student1);
 listStudent.Add(student2);
 listStudent.Add(student3);
 listStudent.Add(student4);

 university1.universities.students = listStudent;
 string json = JsonConvert.SerializeObject(university1);

 Console.WriteLine(json);
 Console.ReadLine();
 }
 }
}

Result.

\wp content\uploads\2016\csharpcorner\picture6 - What is JSON And How To Using It In C#

 

How to read JSON string in C#

I think this part will be very easy for you. Just you need an example JSON string and JSON class of your example. You can use www.jsonutils.com again, if you want to create a class for your example JSON.

I will JSON strings from my website -> https://www.eniskurtayyilmaz.com/api/get_posts/

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Net;
using System.IO;

namespace EKY.CSharpCornerJSONArticle
{
 public class Category
 {
 public int id { get; set; }
 public string slug { get; set; }
 public string title { get; set; }
 public string description { get; set; }
 public int parent { get; set; }
 public int post_count { get; set; }
 }
 public class Tag
 {
 public int id { get; set; }
 public string slug { get; set; }
 public string title { get; set; }
 public string description { get; set; }
 public int post_count { get; set; }
 }
 public class Author
 {
 public int id { get; set; }
 public string slug { get; set; }
 public string name { get; set; }
 public string first_name { get; set; }
 public string last_name { get; set; }
 public string nickname { get; set; }
 public string url { get; set; }
 public string description { get; set; }
 }
 public class CustomFields
 {
 }
 public class Post
 {
 public int id { get; set; }
 public string type { get; set; }
 public string slug { get; set; }
 public string url { get; set; }
 public string status { get; set; }
 public string title { get; set; }
 public string title_plain { get; set; }
 public string content { get; set; }
 public string excerpt { get; set; }
 public string date { get; set; }
 public string modified { get; set; }
 public IList<Category> categories { get; set; }
 public IList<Tag> tags { get; set; }
 public Author author { get; set; }
 public IList<object> comments { get; set; }
 public IList<object> attachments { get; set; }
 public int comment_count { get; set; }
 public string comment_status { get; set; }
 public CustomFields custom_fields { get; set; }
 }
 public class Query
 {
 public bool ignore_sticky_posts { get; set; }
 }
 public class ClassWebsiteposts
 {
 public string status { get; set; }
 public int count { get; set; }
 public int count_total { get; set; }
 public int pages { get; set; }
 public IList<Post> posts { get; set; }
 public Query query { get; set; }
 } 
 class Program
 {
 static void Main(string[] args)
 {
 string url = "https://www.eniskurtayyilmaz.com/api/get_posts/";

 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
 string jsonValue = "";
 using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
 {
 StreamReader reader = new StreamReader(response.GetResponseStream());
 jsonValue = reader.ReadToEnd();
 }

 ClassWebsiteposts websitePosts = JsonConvert.DeserializeObject<ClassWebsiteposts>(jsonValue); 
 }
 }
}

Result.

\wp content\uploads\2016\csharpcorner\picture5 - What is JSON And How To Using It In C#

All of source code for downloading  http://download.eniskurtayyilmaz.com/csharpcornerarticle.rar

bagis genel 150x150 - What is JSON And How To Using It In C#
Enis Kurtay YILMAZ

Bir yazılım geliştiricinin donanımı

2013 yıllarının ortalarında şimdiki kullanmış olduğum dizüstü bilgisayarı aldım (Asus K55VM).

O zamanlar özelliği Intel i5 2.60 Ghz, 8 GB RAM DDR3, 2 GB ekran kartı ve 750 GB HDD idi..

Bu süreçte yazdığım uygulamalar ilk zamanlarda çok hızlı çalışıyordu ve zamanla derleme esnasında, uygulama çalıştırma durumlarında veya SQL Management Studio üzerinden yaptığım sorgunun geri gelme süreleri zamanla gecikmeye veya uzamaya başladı.

Herkes gibi düzenli olarak yeniden işletim sistemi dönemlerim başladı.
Beş (5) ay geçiyor, bir yavaşlama var..

Evet! Format zamanın geldi senin!

* * *

Elimde bir proje var ve gerçekten çok sıkıcı. Zamanında bir yazılımcı ilgili müşterime uygulamayı yazmış, kaynak kodlarını da teslim etmiş ve projeyi iki etaptan oluşturulmuş. Masaüstü ve web uygulaması. Web ve masaüstü uygulamasında birkaç değişiklik ve beş(5) adet raporlama istiyor, üstelik fiyat uçuk seviyede..

(Bu arada en nefret ettiğim iş türlerinden biridir başkasının yazdığı bir uygulamayı tekrar düzenlemek. Yazılımcının “yazdığı kafayı” anlamak, gerektiğinde onu tebrik etmek ve gerektiğinde de küfür etmek bunun içerisindedir bu süreçte)

Proje başarılı.
Bunu yazan kişi evet programlamayı yalayıp yutmuş, modellemeyi de üstelik çok iyi biliyor. Yazdığı sınıflardaki mantık bir o kadar güzel..

Fakat(!),
İçine etmiş her şeyin. Çok saçma sapan yerlerde, çok alakasız bir ilişki kurmuş.. Veritabanı öyle bir tasarlanmış ki “Neden müşterim benden önce bir yazılımcı bulamamış ve bütçe bu kadar uçuk?” sorusunun cevabını veriyor.

Uygulama resmen sadece bitirilmek için yazılmış. Yaparken modelleme başarılı ama alakasız şekilde olanlar o kadar çok fazla ki.. Yazılım resmen Tanrıya emanet çalışmış bunca zaman..

Hayatımda bu kadar berbat ve alakasız veritabanı tasarımı görmedim. [1]

Derle, 30 saniye bekle..
Uygulamanın veritabanına bağlanmasını bekle, sorgu çeksin, 10 saniye..
Web tarafını kodluyorsan, açılması için en az 20 saniye bekle..

Bir yanda ikinci bir kişinin yazdığı yazılımsal sorunlardan kaynaklanan yavaşlama, diğer yanda da benim cihazımın zamanla yıpranan donanımsal durumu..

* * *

(Önceki yazılım şirketinde sunucumuz için SSD almıştık ve performansın büyük işlemlerde ne kadar önemli olduğunu kanıtlamıştık. Kendi bilgisayarıma da bir SSD almak için hiçbir çaba da sarf etmemiştim o zamanlar)

* * *

Geçen hafta bu bahsetmiş olduğum müşterim bana SSD ve RAM almaya karar verdi. Çok sevdiğim ve gerçekten uzun bir süre ona yazılımlar yazacağım, saygımı kazanmış bir insan. Hiçbir dediğimi de iki etmemiştir. Ödeme konusunda ben bir şey demeden direk kendisi hallediyor, varın gerisini siz düşünün.

Sipariş verirken bilhassa Samsung EVO 850 serisi seçmeye özen gösterdim önceki tecrübemden dolayı. 540Mb Read/520 Write şeklinde 250 GB’lik bir SSD aldık ve 8GB RAM. Şu an toplamda 12 GB RAM takılı bu bilgisayara.

Dün bilgisayarıma yeniden işletim sistemi kurdum.
Yazılımları kur, konfigre et, yedekten geri dön falan bunları saymıyorum bile altı(6) saatimi yedi nerdeyse ve hala eski HDD’mdeki verileri sunucuya gönderiyorum şu an bu yazıyı yazarken.

* * *

Altı buçuk(6.5) – Yedi (7) saat sonra..

Kurtay deli küfür etmeye başladı
Hem de nasıl..

Seni zeki! Önceden neden böyle bir şey yapmadın!

Oha Windows 10 Enterprise beş(5) saniyede açılıyor, projeyi Visual Studio 2015 Enterprise’da açmak üç(3) saniye; debug edilip veritabanına bağlanması, sorgunun cevaplanması sayfanın yüklenmesi nerdeyse iki buçuk (2.5) saniye! Yuh ….. …….! Yok artık!

Sen nasıl bir SSD çıktın lan!

HDD’nin canı cehenneme!

* * *

SSD’lerinde belirli bir ömrü olduğunu hatırlatırım.

* * *

Şimdi gidip deli gibi kod yazacağım.

Enis Kurtay YILMAZ

[Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)

Herkese tekrardan merhaba.

Bu aralar Android’e merak salmış vaziyetteyim.

Üniversite yıllarında yazdığım masaüstü uygulaması olan Muhbir – Informant için, gelen fazlaca talepler doğrultusunda mobil platforma entegre etmeye karar verdim. Prototip halini yazdım ve hatta geçen hafta Makros Bilgisayar adlı bilişim firması ile kurumsal anlamda satışı için anlaşma sağladım. Projeme destek oldular ve daha geniş kapsamlı ele aldık yazılımı. Önümüzdeki aylarda yeni ismiyle beraber ve daha kurumsal bir yapıda; yazılımın yeni özellikleriyle karşınıza çıkacak.

Aldığımız kararlar doğrultusunda hukuki anlamda ne kullanıcılarımızın ne de firmamızın sıkıntı yaşanmaması adına bireysel müşterilere değil, kurumsal firmalara satışını gerçekleştirmeye karar verdik. Çünkü bireysel kullanıcılar; kişisel bilgisayarlarına kuracaklarını iddia etseler de üçüncü bir kişinin bilgisayarına gizli kurduğu takdirde yasal sorumluluk tamamen kendisine aittir. Kaldı ki hiçbir şekilde yazılımı yazan sorumlu tutulamadığı gibi sadece şahitlik bakımından davaya müdahil olmaktadır. Çünkü yazdığım yazılımda sözleşmede tüm sorumluluk belirtilerek kullanıcı onaylayarak kurulum işlemini tamamlayabilmekteydi.

* * *

Bildiğiniz üzere Microsoft’un yaklaşık bir hafta kadar önce Xamarin’i satın alarak, daha iyi geliştirmeler yapacağını umduğum bu teknoloji sayesinde; Java öğrenmeden .Net ortamında kodlarınızı mobil platforma entegre edebilme imkanına sahipsiniz.

Xamarin’den bahsetmek gerekirse aslında bir bileşendir. Mono ile gelen bir teknoloji olmasına rağmen, adı günümüzde çok sık duyulmaya başlandı. Microsoft 2011 yılından beri bu teknolojiyi yakından izliyor ve şu ana kadar yapılan resmi açıklamalara göre 82 milyon dolar kadar bir yatırım yaptı. VS 2015 (Visual Studio) kullananlar bilirler ki Xamarin’i yeni projeler geliştirdiğimizde sol framede görebiliyorduk. Team Service veya Azure entegrasyonuyla da inceleme fırsatımız vardı. Gün geldi çattı ve Microsoft mobil platformda başarılı olmak için kendi renklerine katmak istedi, geçen hafta resmi olarak satın aldı.

.Net ortamında hep uygulama geliştirenler için oldukça ideal ve mobil platformlar için başlangıç seviyesi olabilir; ancak bir Java kadar rahat değil, bunu baştan söylemem gerekir. Çünkü optimize ve performans bakımından oldukça başarı geliyor bana Java. Yani Java, Android’te başarılı uygulama geliştirmek isteyenler için birebir.

“Ben .Net kullanırım, başka bir şey kullanmam” diyenleri de anlamam. Yenilik istiyorsak, algıyı açmak istiyorsak ve yeni diğer teknolojileri değerlendirme ihtiyacı doğurur, ki hangisi daha iyi hangisi kötü ayırt edebilelim. “.NET’ten şaşmam!” diyorsan, şuraya alalım sizi [1].

Microsoft’un Xamarin başarısını ise ileri zamanlarda göreceğiz. Yapılan resmi açıklamalara göre Nisan aylarında gelecek yeniliklerle performans bakımından oldukça daha ileri seviyeye çekileceğini belirtti. Merakla bekliyoruz efendim.

Şimdi gelelim bizim konuya..

* * *

Sizlere bu makaleyi video şeklinde çekip, en baştan nasıl yaptığımı göstermek isterdim ancak bu işlem için çok geç. Xamarin nasıl kurulur, nasıl debug modda telefon çalıştırılır, driverların kurulumu falan filan hiç Amerika’yı yeniden keşfetmeye gerek yok. Yeniden Windows kurulum ihtiyacım olduğunda elbet çeker, bu makalenin ilgili yerinde paylaşırım; sizlerde görmüş olursunuz.

Ben doğrudan kaynak kodlara, Xamarin’in genel yapısını ve bu işin püf noktasını göstermeye çalışacağım. Çünkü Xamarin ile alakalı araştırmalar yaptığımda, evet benden önce birileri “Gelen & Giden çağrıları” gösteren uygulamalar yazmışlar, hatta “Anında gelen & giden mesajları göstermeyi” bile yapmışlar 🙂

Ama bir kişi de, “Mevcut olan mesajları bulmayı” yazmamış, işte burada ben devreye giriyorum.

Hadi başlayalım.

* * *

Sisteminizde kurulu olması gerekenler:

  1. Visual Studio 2015, 2017 (Bu proje 2015 Enterprise içerisinde gerçekleştirildi)
  2. Xamarin Studio
  3. Kendi Android telefonunuzda denemeyi düşünüyorsanız, ilgili telefonun driverlarının yüklü olması.

İlk yapmanız gereken VS 2015’te yeni bir proje oluşturmak, ilgili adımlar New Project ->Visual C# -> Android -> Blank App (Android)

\wp content\uploads\2016\xamarinKeylogger\goruntu091 - [Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)
Resim 1

Yeni proje ekledikten sonra, Resim 1’de görüldüğü gibi Solution Explorer’da ilgili alanlar gözükecektir.

Şimdi Xamarin’de uygulama geliştirmenin esas noktasına gelelim.
Layout ve Class’lardan bahsedelim.

Layout, aslında uygulamamızdaki tasarımıdır, katmanıdır. Yani uygulamaya eklemek istediğimiz nesneleri, araçları, resimleri veya yazıları burada yaparız. Default olarak “Main.axml” gelecektir. İçerisini açtığınızda varsayılan olarak eklendiğini göreceksiniz. Layout -> Main.axml yönergelerini takip ederek, ilgili axml dosyasına çift tıklamanız yeterlidir Solution Explorer üzerinden.

\wp content\uploads\2016\xamarinKeylogger\Görüntü 091 - [Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)
Resim 2

Resim 2’de gördüğünüz ve bir bakışta anlayacağınız üzere, bu bir basit “Kaç defa tıklandığını” gösteren bir uygulama. Klasik Hello World işte 😉

Peki bu tasarımı oluşturan asıl kodlara nerede?
İşte burada devreye XAML devreye giriyor. XML yapısına benzer, WPF ile tanıdığımız özellik var. Resim 2’in sol alt köşesinde bulunan Desing | Source kısmı dikkatinizi çekmiştir. Source’a tıklayalım ve görelim bu tasarımı oluşturan ilgili kodlara.

\wp content\uploads\2016\xamarinKeylogger\Görüntü 092 - [Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)
Resim 3

Resim 3’te görüldüğü üzere bir XML yapısından esinlenmiş ve ilgili butona ait nitelikler tanımlanmış. Yükseklik boyutu, içerisindeki metin, name (id) gibi alanlar tanımlı.

Burada dikkatinizi çekmesini istediğim şey, id alanı. Birazdan göreceğimiz Resim 4’te, bu buton nesnesine id üzerinden erişeceğiz. Burada Id yani Name kısmı MyButton diye geçmekte. Bir nesneye ID tanımlamak için @+id/Nesneİsmi mantığı kullanılmış.

Şimdi Solution Explorer’da yer alan MainActivity.cs dosyasına çift tıklayalım. Bu formun kullanıcıya gösterilmesi ve butona tıklandığında ne yapması gerektiğini ifade eden alanları inceleyelim.

\wp content\uploads\2016\xamarinKeylogger\Görüntü 093 - [Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)
Resim 4

Resim 4’te görüldüğü üzere kodlar gene hazır default olarak gelmiş ve Main.axml içerisinde yer alan butona tıklandığında yapılacak işlemler tanımlanmış.

Uygulamadaki MainActivity aslında bizim kod alanımızdır. Yani classlar üzerinden formdaki nesneye erişeceğiz, ilgili eventları, tanımlamaları burada yaparak çalışmasını istediğimiz şeyleri burada yapacağız.

Dikkatinizi çekerse Override edilmiş bir void içerisinde base’in altına yazılmış asıl kodlar.

SetContentView(Resource.Layout.Main): Uygulamamızın ilk çalıştırıldığında hangi formun ekrana geleceğini ifade eder. Masaüstünde formlarla uygulama yazan arkadaşlar Application.Run() özelliğini hatırlayacaktır. Mantık aynıdır.

Formdaki nesneye ise FindViewById ile ulaşmaktayız ve değişken olarak tanımladığımız bir buton nesnesine atanmış Resim 4’te.

Button button = FindViewById<Button>(Resource.Id.MyButton);

Yukarıdaki kod ile button adlı oluşturduğumuz Button değişkenine, Layout içerisinde yer alan buton nesnesine ulaştık. Buradaki en önemli etken ID’ye ulaşmaktır ve axml içerisinde tanımlı ilgili butonun ID’sinin MyButton olmasıdır.

button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); };

Buradaki kodlarda ise layout içerisinde yer alan butona tıklandığında, hangi işlemi gerçekleştireceğini delegate ile tanımlamıştır. Yani bu kodlar derlenecek ve butonun Click event’ı çalıştığında ilgili delegate arasında yazdığımız kodlar aktif olarak, ilgili işlemi gerçekleştirecektir.

* * *

Mesajları okumak için örnek teşkil etmesi adına prototip yapabileceğimiz uygulama yazacağım. Yeni bir proje oluşturdum ve adını EKY.Mobile koydum.

Resim 5’teki gibi EKY.axml Layout’u oluşturdum olacaktır (Layout klasörüne sağ tıklayıp -> Add -> New Item dedikten sonra adını EKY.axml diye değiştirmeniz yeterli). XAML kodlarını Source alanına geçerek, kopyala/yapıştır şeklinde de otomatik gerçekleştirebilirsiniz:

\wp content\uploads\2016\xamarinKeylogger\Görüntü 094 - [Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)
Resim 5
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:id="@+id/editText"
        android:layout_width="fill_parent"
        android:layout_height="198.0dp"
        android:textAlignment="viewStart" />
    <Button
        android:text="Button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/buttonEKY" />
</LinearLayout>

Buraya kadar işlemimiz form ekranımızın tasarımıydı.

Xamarin’de eğer Android’in bazı özelliklerinden yararlanmak adına API’lerini kullanarak çalışmak istiyorsanız, yetkilendirme tanımlamanız gerekmektedir. Örneğin şimdi biz bu uygulamamızda mesajları okumak, telefona gelen kayıtları görüntülemek istiyorsak; bunun için özel izinleri uygulamamızda tanımlamamız gerekmektedir.

Bu işlemi Solution Explorer üzerinden, ilgili projemizin Properties kısmından yapıyoruz.
Android Manifest sekmesinde, Required permissions alanlarından Resim 6’te yer alan alanlar seçilmelidir.

\wp content\uploads\2016\xamarinKeylogger\Görüntü 095 - [Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)
Resim 6

Şimdi gelelim kodlara.

Direk doğrudan kodları, MainActivity.cs içerisinde yer alan alana yapıştırmanız veya kendinize göre düzenlemeniz yeterlidir.

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Webkit;
using Android.Provider;
using System.Collections.Generic;
using Java.Text;
namespace EKY.Mobile
{
    [Activity(Label = "EKY.Mobile", MainLauncher = true, Icon = "@drawable/icon")]
    [IntentFilter(new string[] { "android.provider.Telephony.READ_SMS" }, Priority = (int)IntentFilterPriority.HighPriority)]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.EKY);
            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button>(Resource.Id.buttonEKY);
            button.Text = "GİT!";
            button.Click += delegate
            {
                //Gelen son 10 çağrıyı bulur. 
                //Değiştirmek için querySorter değişkeninde yer alan limit 10 kısmını değiştirmek yeterli
                var editText = FindViewById<EditText>(Resource.Id.editText);
                editText.Text = "http://eniskurtayyilmaz.com";
                editText.Text = "Gelen çağrılar:" + "\n";
                string queryFilter = String.Format("{0}={1}", CallLog.Calls.Type, (int)CallType.Incoming);
                string querySorter = String.Format("{0} desc limit 10", CallLog.Calls.Date);
                Android.Database.ICursor queryData = ContentResolver.Query(CallLog.Calls.ContentUri, null, queryFilter, null, querySorter);
                while (queryData.MoveToNext())
                {
                    editText.Text += queryData.GetString(queryData.GetColumnIndex(CallLog.Calls.Number)) + "\n";
                }
                //Giden son 10 çağrıyı bulur
                editText.Text += "Giden Çağrılar:" + "\n";
                queryFilter = String.Format("{0}={1}", CallLog.Calls.Type, (int)CallType.Outgoing);
                querySorter = String.Format("{0} desc limit 10", CallLog.Calls.Date);
                queryData = ContentResolver.Query(CallLog.Calls.ContentUri, null, queryFilter, null, querySorter);
                while (queryData.MoveToNext())
                {
                    editText.Text += queryData.GetString(queryData.GetColumnIndex(CallLog.Calls.Number)) + "\n";
                }
                /* 
                    Gelen SMS'leri bulmak için gerekli alan.
                    Giden smsler için Query içerisine "Telephony.Sms.Outbox.ContentUri" yazmak yeterlidir.
                */
                editText.Text += "-------------" + "\n";
                Android.Database.ICursor c = ContentResolver.Query(Telephony.Sms.Inbox.ContentUri, new String[] { "address", "body", "date" }, null, null, null);
                while (c.MoveToNext())
                {
                    long unixDate = long.Parse(c.GetString(c.GetColumnIndex("date")));
                    DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                    DateTime date = start.AddMilliseconds(unixDate).ToLocalTime();
                    editText.Text += "Gönderen:" + c.GetString(c.GetColumnIndex("address")) + "\n";
                    editText.Text += "Mesaj:" + c.GetString(c.GetColumnIndex("body")) + "\n";
                    editText.Text += "Tarih:" + date.ToString() + "\n";
                    editText.Text += "-------------" + "\n";
                }
            };
        }
    }
}

Unutmamanız gereken bir diğer önemli konu ise ilgili yazılıma bulunduğu kod bloğunun, class başlangıcında yetki tanımlanmasıdır. Bu olmadan mesajları okumayı aklınızdan bile geçirmeyin 🙂 (Tecrübeyle sabittir)

[IntentFilter(new string[] { "android.provider.Telephony.READ_SMS" }, Priority = (int)IntentFilterPriority.HighPriority)]

Uygulamayı cep telefonunda çalıştırdıktan sonra, bendeki Screenshot’larını da sizlerle paylaşayım Resim 7-8-9):

\wp content\uploads\2016\xamarinKeylogger\Screenshot 2016 02 29 13 26 22 - [Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)
Resim 7
\wp content\uploads\2016\xamarinKeylogger\Screenshot 2016 02 29 13 26 35 - [Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)
Resim 8
\wp content\uploads\2016\xamarinKeylogger\Screenshot 2016 02 29 13 26 45 - [Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)
Resim 9

Bu makalede geçen bütün kodları github adresimde bulabilirsiniz:
https://github.com/eniskurtayyilmaz/EKY.Mobile-Android-Keylogger–Prototype-

Bu makale yazılırken kullanılan yardımcı şarkılar [2]

Bir sonraki makalede görüşmek üzere.

bagis genel 150x150 - [Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)

Enis Kurtay YILMAZ