日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

爱加密加固病毒分析-脱壳篇

發(fā)布時(shí)間:2024/6/21 综合教程 49 生活家
生活随笔 收集整理的這篇文章主要介紹了 爱加密加固病毒分析-脱壳篇 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.文件信息

文件名稱:久秒名片贊系統(tǒng)
包名: android.support.v8
大小: 1497829 bytes
MD5: 8123AC1150B47EF53507EC2360164E3B
SHA1: 958B1E341C72DBCF52863C570B77C71A862987B1
程序殼:愛加密
描述:愛加密有反調(diào)試功能,無法直接給關(guān)鍵函數(shù)下斷點(diǎn),所以只能單步跟蹤到它檢測(cè)反調(diào)試的地方修改比較值,從而跳過反調(diào)試。殼程序通過讀取進(jìn)程文件(/proc/uid/status)中的TracerPid屬性來確認(rèn)自己是否被調(diào)試,該屬性如果不為0則說明程序是被調(diào)試狀態(tài)。如果要獲取該文件的值那么必然是有讀寫操作的,通過在讀寫函數(shù)地方下斷點(diǎn),就可以修改它的值從而騙過反調(diào)試。即只要在fopen和fgets處下斷點(diǎn)單步跟蹤就可以了(函數(shù)在libc.so)。


二.調(diào)試準(zhǔn)備

安裝IDA Pro 服務(wù)器:
adb push android_server /data/local/tmp
設(shè)置服務(wù)器運(yùn)行權(quán)限:
cd data/local/tmp/ chmod 777 android_server
運(yùn)行服務(wù):
adb shell & cd /data/local/tmp & ./android_server
設(shè)置端口轉(zhuǎn)發(fā):
adb forward tcp:23946 tcp:23946
調(diào)試運(yùn)行
adb shell am start -D -n android.support.v8/android.support.v7.q448870015
IDA 附加進(jìn)程調(diào)試
Debugger -> Attach
Ctrl+F 搜索 android.support.v8
函數(shù)下斷點(diǎn)
Modules中搜索 libc.so
給fopen,fgets下斷點(diǎn)
Modules 中搜索 libdvm.so
給dvmDexFileOpenPartia 下斷點(diǎn)
jdb調(diào)試
打開monitor
鼠標(biāo)選中要調(diào)試的進(jìn)程(android.support.v8)
jdb–connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700


三.調(diào)試脫殼

環(huán)境準(zhǔn)備好后按F9 開始運(yùn)行程序,這時(shí)會(huì)斷到我們下斷點(diǎn)的地方。

此時(shí) R7寄存器中有值 /proc/self/cmdline.debug.atrace

使用adb查看

繼續(xù)F9 運(yùn)行讓程序再次斷在fopen函數(shù)處。在運(yùn)行的過程中可能出現(xiàn)如下錯(cuò)誤提示,忽略它繼續(xù)運(yùn)行。


程序再次斷在fopen函數(shù)處,這時(shí) R7寄存器中的值

即 /proc/11446/status ,從這里開始?xì)こ绦蜷_始讀取status文件檢查自己是否被調(diào)試跟蹤了。繼續(xù)F9運(yùn)行。程序會(huì)斷在fgets函數(shù)處,這時(shí)我們?cè)诤瘮?shù)結(jié)束處下斷點(diǎn)。查看函數(shù)返回值,如果是TracerPid屬性則修改值為0。
程序運(yùn)行到函數(shù)末尾斷點(diǎn)處,此時(shí)查看R0寄存器的值

即 Name:roidd.support.v8
通過查看status文件可以知道,這個(gè)值是文件內(nèi)第一行的字符串

從這里就可以知道程序還需要在運(yùn)行5次才能讀到 TracerPid屬性
F9運(yùn)行5次,在次查看fgets函數(shù)返回值

Tracerpid:11465
這個(gè)值正是IDA 服務(wù)器進(jìn)程的UID

在Hex View中按F2修改這個(gè)值


這里要注意,修改的顏色是橙黃色,但是還不能使用,必須在按F2應(yīng)用才行。

修改完之后,再次F9運(yùn)行程序。

在次斷在fopen函數(shù)處,此時(shí)R0寄存器的值

可以看到,殼程序再次讀取 /proc/11446/status 文件。顯然反調(diào)試不是只有一次的,那么繼續(xù)修改它的返回值,直到不再讀取這個(gè)文件。
通過再次修改,殼程序不再讀取 /proc/11446/status文件了。說明它的反調(diào)試就比較了兩次,那么現(xiàn)在就可以去掉fgtes斷點(diǎn)按F9讓程序跑起來了。
程序斷在了這個(gè)函數(shù)處,這說明殼開始解密dex了同時(shí)證明前面已經(jīng)成功欺騙了反調(diào)試,繼續(xù)單步觀察寄存器中的值。

R0寄存器中保存著dex在內(nèi)存中的地址,R1寄存器中保存著dex文件的大小。

通過Hex View 查看內(nèi)存

內(nèi)存中已經(jīng)顯示 0A 78 65 64 dex文件頭模數(shù)了,右邊字符串同樣顯示著dex.035。紅框中 06 FD 00 和R1寄存器的值一樣。已經(jīng)得到了dex內(nèi)存地址和大小,接著使用IDA腳本dump出這個(gè)dex文件。

static main(void)
    {
        auto fp, begin, end, dexbyte;
        fp = fopen("F:\dump.dex", "wb"); //打開或創(chuàng)建一個(gè)文件
        begin =  R0;                       //dex基址
        end = begin + R1;                  //dex基址 + dex文件大小
        for ( dexbyte = begin; dexbyte < end;dexbyte ++ )
        {
            fputc(Byte(dexbyte), fp);     //按字節(jié)將其dump到本地文件中
        }
    }


將dump出的文件使用工具打開:

文件能正常打開,下一篇分析鎖機(jī)密。


四.問題總結(jié)

調(diào)試環(huán)境中出現(xiàn)問題的解決:
IDA附加程序時(shí)顯示目標(biāo)積極拒絕則 重新輸入端口轉(zhuǎn)發(fā)命令。
IDA附加程序彈出錯(cuò)誤則 重新運(yùn)行IDA服務(wù)器命令
IDA F9運(yùn)行程序如果沒有反應(yīng)則 檢查是否輸入jdb調(diào)試命令。
因?yàn)樵摮绦蚴羌託さ逆i機(jī)軟件,所有調(diào)試過程中難免會(huì)因?yàn)殄e(cuò)誤步驟讓程序運(yùn)行起來從而導(dǎo)致鎖機(jī),這時(shí)可以運(yùn)行 adb uninstall android.support.v8 卸載鎖機(jī)軟件(注意:在手機(jī)被鎖后切勿拔掉usb數(shù)據(jù)線)。

總結(jié)

以上是生活随笔為你收集整理的爱加密加固病毒分析-脱壳篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。