真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android逆向-Android基礎(chǔ)逆向(2-2)-創(chuàng)新互聯(lián)

[toc]

創(chuàng)新互聯(lián)公司是一家企業(yè)級(jí)云計(jì)算解決方案提供商,超15年IDC數(shù)據(jù)中心運(yùn)營(yíng)經(jīng)驗(yàn)。主營(yíng)GPU顯卡服務(wù)器,站群服務(wù)器,西部信息機(jī)房,海外高防服務(wù)器,成都機(jī)柜租用,動(dòng)態(tài)撥號(hào)VPS,海外云手機(jī),海外云服務(wù)器,海外服務(wù)器租用托管等。

#0x00 前言
##不知所以然,請(qǐng)看
Android逆向-Android基礎(chǔ)逆向(1)
Android逆向-Android基礎(chǔ)逆向(2)
##以及java系列:
Android逆向-java代碼基礎(chǔ)(1)
Android逆向-java代碼基礎(chǔ)(2)
Android逆向-java代碼基礎(chǔ)(3)
Android逆向-java代碼基礎(chǔ)(4)
Android逆向-java代碼基礎(chǔ)(5)
Android逆向-java代碼基礎(chǔ)(6)
Android逆向-java代碼基礎(chǔ)(7)
Android逆向-java代碼基礎(chǔ)(8)
由于之前的Android逆向-Android基礎(chǔ)逆向(2)的偽加密部分篇幅太長(zhǎng),導(dǎo)致其他內(nèi)容沒(méi)有完成,所以才有了這里的Android逆向-Android基礎(chǔ)逆向(2-2)。希望可以完成計(jì)劃中的內(nèi)容。
##學(xué)習(xí)內(nèi)容
(1)APK文件偽加密√
(2)資源文件防反編譯
(3)apk打包流程
(4)apk反編譯流程
(5)apk回編譯流程、
#0x01 資源文件防反編譯
之前說(shuō)過(guò)可以通過(guò)更改第四個(gè)字段來(lái)進(jìn)行防止一定程度的反編譯。那么除了這種偽加密的方式,還有什么方式可以防止這種偽加密的出現(xiàn)呢。
來(lái)看看資源文件是如何防止反編譯的。
自然我們需要研究一下xml文件的格式。四哥在2016年已經(jīng)分析過(guò)了,不過(guò)那是人家分析的,只看別人分析的不能進(jìn)行更深入的學(xué)習(xí)。紙上得來(lái)終覺(jué)淺,絕知此事要躬行。so,就有了這篇。
##1.第一個(gè)模塊
Android逆向-Android基礎(chǔ)逆向(2-2)
這里對(duì)應(yīng)使用一個(gè)實(shí)例分析,就用Android逆向-Android基礎(chǔ)逆向(1)中的簡(jiǎn)單的apk來(lái)分析吧。
###1.1 Magic Number
Android逆向-Android基礎(chǔ)逆向(2-2)
這里魔數(shù)是00 08 00 03,這個(gè)是一個(gè)固定的值。
###1.2File Size
這個(gè)就是用來(lái)確認(rèn)文件大小的。
Android逆向-Android基礎(chǔ)逆向(2-2)
這里是00 00 07 90 ,也就是1970個(gè)bytes。
###1.3用python實(shí)現(xiàn)分析
四哥用java寫的,我就獻(xiàn)丑寫個(gè)python的,還在學(xué)習(xí)python的過(guò)程中,有什么錯(cuò)誤或者做的不好的地方,還請(qǐng)見(jiàn)諒。
這個(gè)是實(shí)現(xiàn)這個(gè)模塊的代碼。但是感覺(jué)自己寫的好繁瑣,等一會(huì)兒適當(dāng)修改一下。
2018年1月27日11:57:35,忙別的事情去了。

def fenxi(filename):
    try:
        f=open(filename,'rb')
        print 'start--------'
        i=0
        p1=""
        p2=""
        p3=""
        p4=""
        p=""
       while True:
            t=f.read(1)
            t1=t.encode('hex')
            if i==0:
                p1=t1
            if i==1:
                p2=t1
            if i==2:
                p3=t1
            if i==3:
                p4=t1
            i=i+1
            if i<4:
                p=p+" "
            if i==4:
                break
            pass
        p=p4+" "+p3+" "+p2+" "+p1   
        print "Magic Number:",p
        i=0
        p1=""
        p2=""
        p3=""
        p4=""
        p=""
       while True:
            t=f.read(1)
            t1=t.encode('hex')
            if i==0:
                p1=t1
            if i==1:
                p2=t1
            if i==2:
                p3=t1
            if i==3:
                p4=t1
            i=i+1
            if i<4:
                p=p+" "
            if i==4:
                break
            pass
        p=p4+" "+p3+" "+p2+" "+p1   
        print "FileSize:",p
    except IOError:
        print "This is bad for input '",name,"'." 
        print "You can enter -h for help." 

2.第二個(gè)模塊

Android逆向-Android基礎(chǔ)逆向(2-2)
###1.Chunk Type
String Chunk 的標(biāo)識(shí)符,默認(rèn)是00 08 00 03
Android逆向-Android基礎(chǔ)逆向(2-2)

2.Chunk Size

String Chunk的大小。
Android逆向-Android基礎(chǔ)逆向(2-2)
Android逆向-Android基礎(chǔ)逆向(2-2)

3.String Count

字符串的個(gè)數(shù)。
Android逆向-Android基礎(chǔ)逆向(2-2)

4.Style Count

樣式的個(gè)數(shù)
Android逆向-Android基礎(chǔ)逆向(2-2)
Android逆向-Android基礎(chǔ)逆向(2-2)

5.Unknow

Android逆向-Android基礎(chǔ)逆向(2-2)
Android逆向-Android基礎(chǔ)逆向(2-2)

6.String Pool Offset

首部偏移量,也就是String Chunk的位置。
Android逆向-Android基礎(chǔ)逆向(2-2)
Android逆向-Android基礎(chǔ)逆向(2-2)

7.Style Pool Offset

樣式偏移,但是因?yàn)闃邮經(jīng)]有。所以這里全部為0

8.String Offsets

這個(gè)是字符串偏移,大小就是String count*4個(gè)bytes
Android逆向-Android基礎(chǔ)逆向(2-2)

9.常量池

這個(gè)就是最主要的地方了。不過(guò)中間有一個(gè)0的空字符串。需要注意,然后使用一個(gè)循環(huán)就可以簡(jiǎn)單的分析出來(lái)了。
這里帖出代碼部分。

while True:
            t1=f.read(1)
            t2=f.read(1)
            tf1=t1.encode('hex')
            tf2=t2.encode('hex')
            p1=tf2+tf1
            ph=int(p1, 16)
            p3=""
            i=0
           while True:
                t=f.read(1)
                t1=t.encode('hex')
                p=int(t1, 16)
                p3=p3+chr(p)
                t=f.read(1)
                i=i+1
                if i==ph:
                    break
                pass
            print "first string:",p3
            t=f.read(2)
            if l==12:
                t=f.read(4)
            l=l+1
            if l==x-1:

                break

運(yùn)行結(jié)果展示:
Android逆向-Android基礎(chǔ)逆向(2-2)
Android逆向-Android基礎(chǔ)逆向(2-2)

3.第三個(gè)模塊 Resourceld Chunk

Android逆向-Android基礎(chǔ)逆向(2-2)
這個(gè)Chunk主要是存放的是AndroidManifest中用到的系統(tǒng)屬性值對(duì)應(yīng)的資源Id

3.1 Chunk Type

和其他Chunk一樣,都有特征值,Resourceld Chunk的特征值是:0x00080108
Android逆向-Android基礎(chǔ)逆向(2-2)

3.2 Chunk Size

Size大小沒(méi)有什么好解釋的。
Android逆向-Android基礎(chǔ)逆向(2-2)

3.3Resourcelds

Android逆向-Android基礎(chǔ)逆向(2-2)
Android逆向-Android基礎(chǔ)逆向(2-2)
這里可以根據(jù)id在frameworks\base\core\res\res\values\public.xml中查找到相對(duì)應(yīng)的string。
一下是簡(jiǎn)單的代碼模塊:

a=p/4-2
        i1=0
       while True:
            i=0
            p1=""
            p2=""
            p3=""
            p4=""
            p=""
           while True:
                t=f.read(1)
                t1=t.encode('hex')
                if i==0:
                    p1=t1
                if i==1:
                    p2=t1
                if i==2:
                    p3=t1
                if i==3:
                    p4=t1
                i=i+1
                if i==4:
                    break
                pass
            p=p4+p3+p2+p1   
            p5=p4+" "+p3+" "+p2+" "+p1
            p=int(p, 16)
            print "123id:",p,"bytes","hex:",p5
            i1=i1+1
            if i1==a:
                break

4.第四個(gè)模塊

Android逆向-Android基礎(chǔ)逆向(2-2)
這個(gè)Chunk主要包含一個(gè)AndroidManifest文件中的命令空間的內(nèi)容

4.1 Chunk Type

特征碼,這里不強(qiáng)調(diào)了。 特征碼是00 10 01 00。
Android逆向-Android基礎(chǔ)逆向(2-2)

4.2 Chunk Size

Chunk的大小。
Android逆向-Android基礎(chǔ)逆向(2-2)

4.3 Line Number

在AndroidManifest文件中的行號(hào)
Android逆向-Android基礎(chǔ)逆向(2-2)

4.4Unknown

未知區(qū)域,一般是ffff
Android逆向-Android基礎(chǔ)逆向(2-2)

4.5 Prefix

命名空間的前綴
Android逆向-Android基礎(chǔ)逆向(2-2)

4.6Uri

命名空間的Urk
Android逆向-Android基礎(chǔ)逆向(2-2)

5.第五個(gè)模塊

這個(gè)模塊主要是為了存放標(biāo)簽信息
這里要啰嗦了。第五個(gè)模塊要寫完的時(shí)候,突然鼠標(biāo)的返回鍵被按到了。我都在想是不是應(yīng)該在本地寫了,而不是在云端寫,太感人了這個(gè)。傷心。準(zhǔn)備偷懶了。
Android逆向-Android基礎(chǔ)逆向(2-2)

5.1 Chunk Type

標(biāo)志字段,固定字符。
00 10 01 02

5.2 Chunk Size

Chunk 大小

5.3 Line Number

行數(shù),和上一個(gè)段一樣

5.4 Unknown

位置區(qū)域

5.5Namespace Uri

標(biāo)簽用的uri,但是也有可能是返回 ff ff ff ff。
代碼實(shí)現(xiàn):

i=0
    p1=""
    p2=""
    p3=""
    p4=""
    p=""
   while True:
        t=f.read(1)
        t1=t.encode('hex')
        if i==0:
            p1=t1
        if i==1:
            p2=t1
        if i==2:
            p3=t1
        if i==3:
            p4=t1
        i=i+1
        if i==4:
            break
        pass
    p=p4+p3+p2+p1   
    p=int(p, 16)
    try :
        print "Namespace Uri:",list[p]      
    except IndexError:
        print "Namespace Uri is nothing"

Android逆向-Android基礎(chǔ)逆向(2-2)

5.6 name

標(biāo)簽名稱字段
Android逆向-Android基礎(chǔ)逆向(2-2)

5.7 flags字段

標(biāo)識(shí)是開始flags還是結(jié)束flags
Android逆向-Android基礎(chǔ)逆向(2-2)

5.8 Attribute Count

包含屬性的個(gè)數(shù)
Android逆向-Android基礎(chǔ)逆向(2-2)

5.9 Class Attribute

標(biāo)簽包含的類屬性
Android逆向-Android基礎(chǔ)逆向(2-2)

5.10Attributes Attribute

屬性內(nèi)容。包括NamespaceUri,Name,ValueString,type,Data,這五個(gè)字段。
Android逆向-Android基礎(chǔ)逆向(2-2)

6.第六個(gè)模塊

Android逆向-Android基礎(chǔ)逆向(2-2)
這個(gè)和第五個(gè)塊一樣。
Android逆向-Android基礎(chǔ)逆向(2-2)

7.第七個(gè)模塊

因?yàn)槭呛椭暗哪K一樣這里就不做解釋了
Android逆向-Android基礎(chǔ)逆向(2-2)

收獲

##python
1.python右移的方式
2.python格式轉(zhuǎn)換
3.對(duì)二進(jìn)制模塊分析
4.這個(gè)是大的收貨,得到了一個(gè)xml文件分析工具。
5.github地址:xml.py文件分析

結(jié)束語(yǔ)

感覺(jué)這里需要的內(nèi)容很多,就得要分成很多小塊來(lái)說(shuō)。為什么這里要寫關(guān)于xml的分析呢,因?yàn)榧庸痰哪康木褪菫榱朔乐狗淳幾g。那么我們可以針對(duì)反編譯軟件進(jìn)行針對(duì)化加固,在下一個(gè)小塊將會(huì)詳細(xì)講解。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


名稱欄目:Android逆向-Android基礎(chǔ)逆向(2-2)-創(chuàng)新互聯(lián)
本文地址:http://weahome.cn/article/dpippp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部