معرفی

در این مقاله قصد داریم در مورد امنیت برنامه های اندرویدی  که یکی از مهمترین موضوعات امروزه در حوزه ی برنامه نویسی اندروید می باشد ، بحث کنیم . برنامه های اندرویدی از لحاظ آسیب پذیر بودن به دسته های مختلفی تقسیم می شوند ، به عنوان مثال : آسیب پذیر بودن برنامه در هسته ، آسیب پذیر بودن خود برنامه ، فریب دادن کاربران برای دانلود و اجرای نرم افزارهای مخرب جهت به دست آوردن اطلاعات شخصی آنها و گونه ی دیگری از حملات شامل اجرای سرویس های نادرست توسط خود کاربران ، در دستگاه می باشد . یکی از روش های ایجاد تغییر در رفتار برنامه های اندرویدی فریم ورک xposed می باشد . در واقع با استفاده از این فریم ورک می توان ماژول هایی ایجاد کرد  که به کمک آنها ، رفتار برنامه های اندرویدی را در زمان اجرا تغییر داد . باید توجه داشته باشیم که در این روش هیچ نیازی به تغییر کد برنامه نمی باشد . به عبارت دیگر شما می توانید با نصب ماژول های مورد نظر ، بر روی xposed ، برنامه مورد نظر خود را بهبود بدهید ، xposed  شامل مجموعه ای از ماژول ها می باشد که امکان کنترل جنبه های مختلف و سفارشی سازی گوشی و برنامه های یک دستگاه با سیستم عامل اندروید را فراهم می کند .

 

نحوه عملکرد XposedFramework

 

xposed   اولین برنامه ای است که بعد از root کردن گوشی ، جهت بهبود عملکرد برنامه مورد نظر ، بر روی گوشی نصب می شود . در واقع  Xposed به root  سیستم می رسد و عملیات خود را با Zygote شروع می کند . زیگوت در واقع مادر تمام  برنامه های اندروید است که با boot شدن سیستم آغاز به کار می کند که یکی از مهمترین وظایف آن این است که با استفاده از مکانیزم fork  باعث می شود که برنامه سریع شروع شود .

 

 

 زمانی که گوشی boot  می شود این فرآیند توسط init() شروع می شود . این فرایند با system/bin/app-process شروع می شود که تمام کلاس های و متد های اولیه موردنیاز را بارگذاری می کند . هنگامی که فریم ورک Xposed نصب می شود، یک فایل اجرایی app-process در system/bin کپی می شود و جایگزین فایل اصلی  ( app-process ) می گردد. که این فایل ، یک فایل jar اضافه به مسیر کلاس های اندروید اضافه می کند. app-process  به متد ها این امکان را می دهد که حتی قبل از متد  main از Zygote ، فراخوانی شود و به عنوان بخشی از zygote  عمل کند  .

در فایل jar اضافه شده ، کلاسی به نام XposedBridge وجود دارد که درون آن متدی به نام hookMethodNative  وجود دارد . که این متد به صورت private و native تعریف شده است که کدهای آن در app-process پیاده سازی شده و  به آن پیوند داده می شود .

این بدین معنا می باشد که هرزمانی که متد hookMethodNative فراخوانی می شود ، کدهایی که در درون app-process قرار دارند ، فراخوانی می شوند. پس ما می توانیم متدها و مقادیر مورد نظر خود را به عنوان پارامتر در ورودی این  متد  قرار بدهیم و تغییرات را در زمان اجرا در برنامه  موردنظر ایجاد کنیم.

نصب  Xposed Framework

همان طور که گفتیم اولین گام برای نصب Xposed روت کردن گوشی می باشد . در این مقاله برای نصب Xposed از شبیه ساز GENYMOTION استفاده می کنیم ، برای روت کردن شبیه ساز ، اپلیکشین king-root را از play store دانلود می کنیم و شبیه ساز را روت می کنیم و در ادامه  برای تست روت ،  از Root Checker  می کنیم.  بعد از روت کردن شبیه ساز فایل apk  . Xposed Installer را دانلود کرده و در شبیه ساز نصب می کنیم .

 

 

ایجاد برنامه

در این قسمت قصد داریم   بازی  hang man را جهت انجام inject ایجاد کنیم . این بازی به این صورت کار می کند که ابتدا یک کلمه به صورت تصادفی  تولید می شود  ، سپس کاربر با تشخیص جواب( با توجه به تعداد کلمه و  نام رنگ )،جواب خود را وارد می کند سپس این کلمه توسط تابع  public void End(boolean k )    بررسی می گردد که آیا کلمه ای که توسط کاربر وارد شده است با کلمه ای که به صورت تصادفی ایجاد شده است یکسان می باشد یا خیر .

 در صورتی که جواب وارد شده درست باشد ، جواب و  پیام   You Wine !!!   نمایش داده خواهد شد .

 

 

 

 

 

 

 

 

 

 

توسعه ماژول

 

در این قسمت قصد داریم ماژولی را ایجاد کنیم که با  کلیک بر روی هر یک از حروف ، جواب درست نمایش داده شود . برای این کار ابتدا یک پروژه جدید با نام  Xposed Game در اندروید استادیو ایجاد می کنیم وگزینه Add No Actvity را انتخاب می کنیم .

 

۲- فایل XposedBridgeApi-54.jar را دانلود می کنیم .

۳- در این مرحله یک پوشه به نام provided در پوشه app ایجاد می کنیم و کتابخاته XposedBridgeApi-54.jar را در آن قرار می دهیم .

۴- اکنون در مسیر app/src/main/  یک  پوشه به نام assets ایجاد می کنیم و یک فایل به نام xposed_init  در آن ایجاد می کنیم . بعد از این سه مرحله خواهیم داشت :

 

۵- اکنون فایل build.gradle   را در پوشه app باز کرده و مقدار زیر را در آن قرار می دهیم :

 

۶- در این مرحله یک کلاس  به نام  XposedClass   ایجاد می کنیم :

 

 

۷-  بعد از ساخت کلاس ، ساختار پروژه به شکل زیر خواهد :

 

۸-  اکنون در فایل xposed_init   که در مرحله ۴ ایجاد کردیم مقدار زیر را در آن قرار می دهیم :

۹- اکنون اطلاعاتی را در مورد ماژول در فایل AndroidManifest.xml قرار می دهیم :

۱۰-  در آخر، کد برنامه ی خود را  جهت inject  در برنامه ، در کلاس XposedClass قرار می دهیم :

در  این  قسمت  ابتدا نام کلاسی  را که می خواهیم در آن injection  انجام دهیم   را  در متغیر classtohook قرار می دهیم و  همچنین نام متد مورد نظر خود را در  functiontohook قرار می دهیم . سپس با استفاده از lpparam.packageName.equals(string s) مشخص می کنیم که آیا به درستی در package  مورد نظر قرار گرفته ایم یا نه ! در ادامه متد  findAndHookMethod  که یک متد کمکی است ابتدا کلاس مورد نظر را جستجو می کند و سپس بعد از شناسایی کلاس ، متدی را  که می خواهیم hook  را بر روی آن انجام دهیم را شناسایی می کند. در ادامه در صورتی که متد مورد نظر پارامتر های ورودی داشته باشند ، باید به ترتیب کلاس های نوع پارامترهای ورودی را در پارامترهای این تابع  قرار بدهیم (که در اینجا پارامتر ورودی تابع  void end(boolean) از نوع Boolean می باشد).

در آخرین  پارامتر باید کلاس XC_MethodHook را پیاده سازی کنیم . در صورتی که حجم کد شما کم باشد می توانید از یک کلاس بدون نام استفاده کتید و اما در صورتی حجم کد زیاد باشد ، می توانید یک کلاس معمولی ایجاد کنید و سپس یک نمونه از آن را به عنوان ورودی در آخرین پارامتر  findAndHookMethod قرار دهید . سپس عملیاتی را که در این کلاس مشخص کرده ایم را متد helper  انجام می دهد. در کلاس  XC_MethodHook دو متد  beforeHookedMethod و  afterHookedMethodوجود دارند که می توانیم آنها را override کنیم . با توجه به نیاز ما می توانیم عملیات خود را با استفاده از این توابع قبل یا بعداز تابع اصلی انجام بدهیم . در متد before شما  می توانید پارامترهای ورودی تابع را دستکاری کنید یا حتی از فراخوانی تابع جلوگیری کرده ، نتیجه مورد نظر خودتان را به عنوان خروجی بازگردانید. در متد after  شما می توانید  در نتیجه تابع اصلی دستکاری کرده و مقدار موردنظر خود را بازگردانید ، البته در هر دو متد شما می توانید کدهای  مورد نظر خودتان را جایگزین متد اصلی کنید .

حال ماژولی  را که ایجاد کرده ایم را بر روی شبیه ساز نصب می کنیم ، سپس آنرا از لیست ماژول های

 نصب شده انتخاب می کنیم و شبیه ساز را Soft Boot  می کنیم :

حال همان طور که انتظار داشتیم ، جواب درست را با کلیک کردن بر روی  هر یک از کلمات نمایش  داده می شود :

 

خلاصه : 

 


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دو × 3 =