初探android逆向

好久沒有更新博客了。一直在想要更新點什么樣子的干貨稠曼。

最近看了一點有關(guān)于逆向的文章,感覺還不錯客年。

對于“安卓開發(fā)沒人要了”這種話霞幅,我也很無奈,最近的RN量瓜,包括kotlin的出現(xiàn)司恳,還有Flutter框架的出現(xiàn)。 這些東西的出現(xiàn)感覺都像是意味著绍傲,往后的移動端開發(fā)不需要雙倍的人員了扔傅。

最近突然對逆向萌生了一點點興趣,關(guān)于逆向的東西依舊有很多烫饼,很多apk對進(jìn)行加固猎塞,加殼等等,這里的入門僅僅是對于沒有加密等操作的apk進(jìn)行逆向杠纵,對初學(xué)者可以更快的知道流程荠耽,更快的入門。

image.png

第一步:準(zhǔn)備工具

1比藻、下載android開發(fā)工具 android studio铝量,百度即可。 建議去中文網(wǎng)或者官網(wǎng)下載

2银亲、dex2jar: 把dex文件轉(zhuǎn)成jar文件 下載地址:https://sourceforge.net/projects/dex2jar/files/

3慢叨、JD-GUI: 這個工具用于將jar文件轉(zhuǎn)換成java代碼 下載地址:http://jd.benow.ca/

4、APKTool: 本文重要工具务蝠,APK逆向工具拍谐,用于修改apk中的源代碼 下載地址: http://ibotpeaches.github.io/Apktool/install/

第二步:準(zhǔn)備apk

1、這里我們自己寫一個測試的app,用于驗證我們是否能看到其原來的代碼轩拨。

上一下最簡單的代碼吧


image.png

然后是java代碼

public class MainActivity extends AppCompatActivity {

    TextView textView;
    Button button;
    int var0 = 1;

    @Override
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.main_tv);
        button = findViewById(R.id.main_btn);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
 public void onClick(View v) {
                if (var0 == 1) {
                    textView.setText("我是被修改過的文字");
                } else {
                    textView.setText("這個時候var0不等于1");
                }
            }
        });
    }
}

看一下效果

點擊前:


image.png

點擊后:


image.png

然后力穗,我們假設(shè),這個app已經(jīng)打包成了apk气嫁。(接下來当窗,我們打包成apk)

第三步:反編譯apk

我們知道,其實說白了,一個apk就是一個壓縮包,只是他將很多東西進(jìn)行了加密绘雁,轉(zhuǎn)成了另一種格式鬼贱。dex文件,交給底層去識別。

我們這一部分的工作就是要解密,然后要看到代碼邏輯。

1简识、首先,我們將打包好的.apk文件改成.zip

2感猛、然后進(jìn)行解壓

3七扰、將我們解壓后的文件里的 classes.dex文件放到 dex2jar中

image.png

4、然后執(zhí)行命令

sh d2j-dex2jar.sh classes.dex

(這里有可能會出現(xiàn)權(quán)限問題)

d2j-dex2jar.sh: line 36: ./d2j_invoke.sh: Permission denied

解決方案如下:

sudo chmod +x d2j_invoke.sh
密碼要求是開機(jī)密碼即可(mac)
5陪白、在同一個目錄下生成了一個jar文件


image.png

然后用JD-GUI將它打開颈走。

6、查看源代碼咱士,了解邏輯


image.png

我們看到立由,源代碼幾乎是一絲不掛的展現(xiàn)到了我們眼前。

第四步:用apktoos修改源代碼

1序厉、我們將apk放到下載好的apktool的文件目錄中锐膜,如圖


image.png

我們下載好之后會有兩個文件,apktool.sh 和 apktool.jar弛房,然后加上我們的apk現(xiàn)在一共有三個

2道盏、執(zhí)行命令

sh apktool.sh apktool d APK名字.apk
3、然后我們發(fā)現(xiàn)多了一個文件夾:


image.png

我們點進(jìn)去庭再,找到smali目錄

4捞奕、然后根據(jù)應(yīng)用的包名找到相關(guān)目錄


![image.png](https://upload-images.jianshu.io/upload_images/5981775-2e4fba94ae587f09.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

5牺堰、找到相關(guān)的Activity的java文件拄轻,我們的app只有一個頁面,我們知道是MainActivity伟葫,所以我們要打開 MainActivity$1.smali

6恨搓、并且根據(jù)我們的if判斷語句全局搜索

我們找到了這一行


image.png

這里稍微普及一下有關(guān)samli的語句:

條件關(guān)鍵字 意思
if-eq 如果等于
if-ne 如果不等于
if-lt 如果小于
if-le 如果小于等于
if-gt 如果大于
if-ge 如果大于等于
if-eqz 如果等于零
if-nez 如果不等于0
if-ltz 如果小于零
if-lez 如果小于等于零
if-gtz 如果大于零
if-gez 如果大于等于零

這里原本是ne,我修改成了eq。這句話的大概意思就是 如果這個變量不等于我的變量p1斧抱,就返回一個東西常拓。

我們根據(jù)java語句的字面意思,將其修改為等于辉浦。

7弄抬、修改完成后記得要保存哦

8、重新打包宪郊,命令:

sh apktool.sh b 剛才生成文件夾的名字 -o 新的apk的名字.apk
我們生成如下:


image.png

9掂恕、我們有了新的apk,但是去安裝發(fā)現(xiàn)會出錯弛槐。原因是我們需要重新簽名懊亡。

對于簽名文件,我們用AS生成一個即可乎串。然后放到同一目錄店枣,執(zhí)行以下命令:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 簽名文件名 -storepass 簽名密碼 待簽名的APK文件名 簽名的別名

10、最后得到apk叹誉,然后我們?nèi)ミ\行

第五步:運行盜版apk

我們換用一個模擬器鸯两,來對比其前后的執(zhí)行流程。

點擊前:


image.png

點擊后:


image.png

那么基本上就大功告成了长豁。這個過程還是很繁瑣的甩卓。

注:
1、這個僅僅是一個入門的簡單教程蕉斜,可能百度上已經(jīng)爛大街了逾柿,但是入門確實很好。
2宅此、很多市面上的apk都會進(jìn)行加固|加殼机错。這一部分水很深,需要很多實戰(zhàn)經(jīng)驗才能得出父腕,這里我也在學(xué)習(xí)弱匪。
3、切勿用于非法用途璧亮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萧诫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子枝嘶,更是在濱河造成了極大的恐慌帘饶,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件群扶,死亡現(xiàn)場離奇詭異及刻,居然都是意外死亡镀裤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門缴饭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暑劝,“玉大人,你說我怎么就攤上這事颗搂〉C停” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵丢氢,是天一觀的道長毁习。 經(jīng)常有香客問我,道長卖丸,這世上最難降的妖魔是什么纺且? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮稍浆,結(jié)果婚禮上载碌,老公的妹妹穿的比我還像新娘。我一直安慰自己衅枫,他們只是感情好嫁艇,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弦撩,像睡著了一般步咪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上益楼,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天猾漫,我揣著相機(jī)與錄音,去河邊找鬼感凤。 笑死悯周,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陪竿。 我是一名探鬼主播禽翼,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼族跛!你這毒婦竟也來了闰挡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤礁哄,失蹤者是張志新(化名)和其女友劉穎长酗,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姐仅,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡花枫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掏膏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劳翰。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖馒疹,靈堂內(nèi)的尸體忽然破棺而出佳簸,到底是詐尸還是另有隱情,我是刑警寧澤颖变,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布生均,位于F島的核電站,受9級特大地震影響腥刹,放射性物質(zhì)發(fā)生泄漏马胧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一衔峰、第九天 我趴在偏房一處隱蔽的房頂上張望佩脊。 院中可真熱鬧,春花似錦垫卤、人聲如沸威彰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歇盼。三九已至,卻和暖如春评抚,著一層夾襖步出監(jiān)牢的瞬間豹缀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工慨代, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留耿眉,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓鱼响,卻偏偏與公主長得像鸣剪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子丈积,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容