بلاگ شخصی میلاد احمدپناه

بلاگ شخصی میلاد احمدپناه

مکانی برای انتشار ایده‌های جدید و تاثیرگذار در دنیای برنامه نویسی
برنامه نویسی مبدا شروع تفکر منطقی و سازمان یافته در انسان است، پس می‌توان از این مهارت برای تغییر در تمام جنبه‌های زندگی استفاده کرد.

طبقه بندی موضوعی

در این سری از آموزش‌ها به معرفی مهندسی معکوس و روش‌های اجرای آن می‌پردازیم:

قسمت اول: مهندسی معکوس چیست؟

قسمت دوم: مهندسی معکوس فایل‌های پکیج اندروید (APK Files.)

قسمت سوم: روش‌های مقابله با مهندسی معکوس فایل‌های پکیج اندروید (APK Files.)


در قسمت دوم آموزش به دیکامپایل کردن (فرایند استخراج سورس کد از فایل کامپایل شده) یک پکیج نرم‌افزاری اندروید (APK) می‌پردازیم.

فایل پکیج اندروید تنها یک بسته فشرده شده است که شامل منابع برنامه، فایل مانیفست، کتابخانه‌های اضافی و فایل classes.dex می‌باشد. پس به راحتی می‌توان محتوای درون آن را به کمک نرم‌افزارهای فشرده سازی مانند Winrar مشاهده کرد.

ابتدا نرم افزارها و بسته‌های زیر را دانلود کنید:

بسته‌های بالا را از حالت فشرده خارج کرده و به ادامه آموزش توجه کنید.

برای اجرای مهندسی معکوس و دیکامپایل کردن از یک پکیج تمرینی (BBCNews.apk) استفاده می‌کنیم تا مطالب توضیح داده شده به شکل عملی نشان داده شود.

راهنمای گام‌به‌گام:

  • پسوند فایل BBCNews.apk را به zip. تغییر داده و محتوای درون آن را استخراج می‌کنیم و دوباره به apk. تغییر می‌دهیم.
  • محتوای بسته dex2jar-0.0.9.15 را استخراج کرده و بوسیله پنجره فرمان یا CMD دستور زیر را اجرا می‌کنیم.

dex2jar d ../classes.dex

مهندسی معکوس فایل‌های پکیج اندروید

  • خروجی دستور بالا یک فایل با پسوند Jar. است که یا استفاده از ابزار jd-gui-0.3.6.windows می‌توانیم به کلاس‌هایی که طی فرایند دیکامپایل بدست آمده‌اند دسترسی پیدا کرد.
  • ابتدا نرم‌افزار را اجرا کرده و از منوی فایل classes_dex2jar.jar را باز می‌کنیم. همانطور که در تصویر زیر می‌بینید تمام سورس‌های جاوا استخراج شده و تنها کافی است از منوی فایل Save All Sources را برای ذخیره آنها کلیک کنید.مهندسی معکوس فایل‌های پکیج اندروید
  • تا اینجا توانسته‌ایم تمام سورس کدهای جاوا را بازیابی کنیم اما فایل مانیفست بصورت کامپایل شده هیچ اطلاعات خاصی را در اختیار ما قرار نمی‌دهد. پس در مرحله بعد مانیفست را دیکامپایل می‌کنیم.
  • از پکیج‌های معرفی شده بالا apktool1.5.2 را استخراج کرده و از پنجره دستورات یا CMD دستورات زیر را به ترتیب اجرا می‌کنیم.

apktool.jar if framework-res.apk

مهندسی معکوس فایل‌های پکیج اندروید

apktool.jar d BBCWorld.apk

مهندسی معکوس فایل‌های پکیج اندروید

  • و در آخر فایل مانیفست نیز بدست می‌آید. حالا کافیست سورس کدها و فایل مانیفست را در پوشه‌ای قرار داده و به داخل کیت توسعه اندروید Import کنید و از پروژه خود لذت ببرید!

نمومه کد فایل:

<?xml version="1.0" encoding="utf-8"?>
<manifest android:versionCode="1" android:versionName="1.0" android:installLocation="auto" package="bbc.mobile.news.ww"
  xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <application android:label="@string/app_name" android:icon="@drawable/icon" android:name="bbc.mobile.news.app.ww.BBCNewsWwApp" android:debuggable="false">
        <service android:name="com.medialets.advertising.AdManagerService" />
        <service android:label="@string/bbc_news_update_service_label" android:name=".service.UpdateService" />
        <activity android:label="@string/app_name" android:name=".HomeWwActivity" android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:label="@string/app_name" android:name=".ArticleActivity" android:screenOrientation="portrait">
            <intent-filter />
        </activity>
        <activity android:label="@string/app_name" android:name=".PersonalisationActivity" android:screenOrientation="portrait">
            <intent-filter />
        </activity>
        <activity android:label="@string/app_name" android:name="bbc.mobile.news.VideoActivity" android:screenOrientation="landscape">
            <intent-filter />
        </activity>
        <activity android:label="@string/app_name" android:name=".SettingsActivity" android:screenOrientation="portrait">
            <intent-filter />
        </activity>
        <activity android:label="@string/app_name" android:name=".PrivacyActivity" android:screenOrientation="portrait">
            <intent-filter />
        </activity>
        <activity android:label="@string/app_name" android:name=".RemoteInfoViewActivity" android:screenOrientation="portrait">
            <intent-filter />
        </activity>
        <receiver android:name="bbc.mobile.news.receiver.ConnectivityReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>
        <receiver android:name="bbc.mobile.news.ww.receiver.BootReceiverWw">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>
        <receiver android:label="BootReceiver" android:name="bbc.mobile.news.ww.receiver.BootReceiverWw" android:enabled="true" android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <receiver android:name=".receiver.AlarmReceiverWw" />
    </application>
    <uses-sdk android:minSdkVersion="4" android:maxSdkVersion="10" />
</manifest>

 مهندسی معکوس و دیکامپایل کردن پکیج‌های اندروید همیشه نتایج دلخواه و ایده‌آل ارایه نمی‌کند چون متغییرها و کلاسه‌ها در هنگام کامپایل تغییر نام داده می‌شوند و کشف روابط بین آنها زمانبر است.

نظرات (۲)

با سلام
قسمت آخر که گفتید داخل کیت توسعه اندروید import میکنید رو بیشتر توضیح میدید؟

in ghesmato nafahmidam
  • محتوای بسته dex2jar-0.0.9.15 را استخراج کرده و بوسیله پنجره فرمان یا CMD دستور زیر را اجرا می‌کنیم.

dex2jar d ../classes.dex

  • خروجی دستور بالا یک فایل با پسوند Jar. است که یا استفاده از ابزار jd-gui-0.3.6.windows می‌توانیم به کلاس‌هایی که طی فرایند دیکامپایل بدست آمده‌اند دسترسی پیدا کرد.

برگرفته شده از creativecoder.blog.ir

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی