Bu makalemde bir hacking senaryosu hazırlayıp mobil cihazda nasıl benzeri bir hack yapacağımızı irdeleyeceğiz. Bu yöntem tamamen “ethical hacking” konusu altında incelenmekte olup asıl amacımız bu tehlikeli saldırılara karşı nasıl güvenli bir yöntem bulacağımız konusuna eğilmektir.
Öncelikle bir senaryo hazırlayalım. Ali isimli kişinin mobil cihazına internete bağlıyken sızabiliyor veya toplumsal mühendislik konularını kullanarak offline cihaza erişebiliyoruz. Diğer bir yöntemse bir “sazan avlama” (phishing) yöntemi ile kötü niyetli uygulamamızı kullanıcının çalıştırmasını sağlamak olacaktır. Yapacağımız işlemse background’da çalışan bu programın her click işleminde ekran görüntüsünü almak olacaktır. Bu sayede eğer mobil cihaz üzerinden internet bankacılığı gibi bir işlem yapıyorsa dahi bu şifreleri yakalayabilmek olasıdır. Kullanıcının bu açığa en iyi cevabı uygulama cihaza yüklenmeden önce onu durdurmak olmalıdır. Basit bir “ekran görüntüsü yakalama” (screen capture) uygulaması yaparak bu işlemin ne kadar kolay olacağını inceleyelim.
Yapacağımız uygulama için basit bir kullanıcı arayüzü yapalım. Bu arayüzde bir buton kontrolü ve bir picturebox kontrolü bulunsun.

C# kodu:
using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace SmartDeviceProject26
{
public partial class Form1 : Form
{
[DllImportAttribute("coredll.dll")]
public static extern IntPtr GetWindowDC(IntPtr hWnd);
[DllImport("coredll")]
public static extern int DeleteDC(IntPtr hdc);
[DllImportAttribute("coredll.dll")]
internal static extern IntPtr ReleaseDC(IntPtr hdc);
public const int SRCCOPY = 0x00CC0020;
[DllImport("coredll.dll")]
public static extern bool BitBlt(IntPtr hdcDest,
int nXDest, int nYDest, int nWidth,
int nHeight, IntPtr hdcSrc, int nXSrc,
int nYSrc, uint dwROP);
public Form1()
{
InitializeComponent();
}
private Bitmap CaptureScreen()
{
Bitmap b = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
using (Graphics g = Graphics.FromImage(b))
{
IntPtr hdcSrc = IntPtr.Zero;
IntPtr hdcDest = g.GetHdc();
try
{
hdcSrc = GetWindowDC(IntPtr.Zero);
BitBlt(hdcDest, 0, 0, b.Width, b.Height,
hdcSrc, 0, 0, SRCCOPY);
}
finally
{
if (hdcSrc != IntPtr.Zero)
{
ReleaseDC(hdcSrc);
DeleteDC(hdcSrc);
}
g.ReleaseHdc(hdcDest);
}
}
return b;
}
private void button1_Click(object sender, EventArgs e)
{
this.pictureBox1.Image = CaptureScreen();
}
}
}
VB.NET kodu:
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Namespace SmartDeviceProject26
Public Partial Class Form1
Inherits Form
<DllImportAttribute("coredll.dll")> _
Public Shared Function GetWindowDC(hWnd As IntPtr) As IntPtr
End Function
<DllImport("coredll")> _
Public Shared Function DeleteDC(hdc As IntPtr) As Integer
End Function
<DllImportAttribute("coredll.dll")> _
Friend Shared Function ReleaseDC(hdc As IntPtr) As IntPtr
End Function
Public Const SRCCOPY As Integer = &Hcc0020
<DllImport("coredll.dll")> _
Public Shared Function BitBlt(hdcDest As IntPtr, nXDest As Integer, nYDest As Integer, nWidth As Integer, nHeight As Integer, hdcSrc As IntPtr, _
nXSrc As Integer, nYSrc As Integer, dwROP As UInteger) As Boolean
End Function
Public Sub New()
InitializeComponent()
End Sub
Private Function CaptureScreen() As Bitmap
Dim b As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Using g As Graphics = Graphics.FromImage(b)
Dim hdcSrc As IntPtr = IntPtr.Zero
Dim hdcDest As IntPtr = g.GetHdc()
Try
hdcSrc = GetWindowDC(IntPtr.Zero)
BitBlt(hdcDest, 0, 0, b.Width, b.Height, hdcSrc, _
0, 0, SRCCOPY)
Finally
If hdcSrc <> IntPtr.Zero Then
ReleaseDC(hdcSrc)
DeleteDC(hdcSrc)
End If
g.ReleaseHdc(hdcDest)
End Try
End Using
Return b
End Function
Private Sub button1_Click(sender As Object, e As EventArgs)
Me.pictureBox1.Image = CaptureScreen()
End Sub
End Class
End Namespace
Uygulamanın ekran görüntüsü:

Gördüğünüz gibi 30 satırı geçmeyen bir kodla o anda ekranda hangi görüntü varsa yakalayabildik. Kullanıcının yapması gereken en başta bu uygulamanın çalışmasına izin vermemektir. Diğer bir yolsa “process” listesinde bilmediği bir uygulamayı derhal sonlandırması gerektiğidir.
Diğer bir yöntem ise kayıt defterine hakim olmaktır. Bu sayede cihaz içinde istediğiniz işlemi yapabilirsiniz. Kayıt defterinde ilgili bilgilerin nerede kaydedildiğini bilmeniz gerekmektedir. Tüm anahtarların bir anlamı vardır.
Kayıt defterindeki bazı anahtarlara ve değerlerine göz atalım.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shell\Start Items
Bu kayıt defteri yolunda başlangıçta çalışacak programlar listelenmiştir. Her prgram burada listelenmemekle birlikte ilgili ayarları değiştirebilirsiniz.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Inbox\
“Settings” anahtarına basın ve “SMSNoSendMsg” string değerini 1 olarak ayarlayın. Bu sayede mobil cihazdan mesaj yollandığında mesaj yollama notification kontrolü gözükmeyecektir. Aslında bu hackerlar açısından istenen bir durumdur. Kendi gizli uygulamalarından mesaj gönderdikleri zaman bu değeri 1 olarak ayarladıklarında kullanıcı cihazdan mesaj gittiğini farketmeyecektir. Kaçak uygulamanın işi bittiği zaman programatik olarak bu değeri tekrar değiştirebilmektedir.