零基礎(chǔ)學(xué)習(xí)Android so文件分析(一)

在之前的Android安全學(xué)習(xí)過程中溉仑,大部分都是dex部分的分析吊说,關(guān)于native只有零散的一些知識(shí)點(diǎn)吧兔,偽代碼全靠F5磷仰。但是遇到復(fù)雜的函數(shù)就看不懂了,因此往往在分析至so層面時(shí)遭遇失敗境蔼。然而elf文件的分析又是Android安全中不可避免的一塊內(nèi)容灶平,所以還得從基礎(chǔ)學(xué)起來。

自己寫了個(gè)簡單的demo箍土,定義了一個(gè)native的add方法逢享。

接下來將so文件拖入IDA中等待分析,以下的內(nèi)容還是需要一些基礎(chǔ)arm指令集吴藻、寄存器瞒爬、尋址方式、棧平衡等知識(shí)才會(huì)無障礙。但即便是零基礎(chǔ)侧但,因?yàn)樯婕暗降膬?nèi)容都很簡單矢空,邊查邊看也是能看懂的。

等待載入的過程中禀横,正好簡單地回顧一下arm匯編中的寄存器內(nèi)容屁药,節(jié)選自網(wǎng)絡(luò):

寄存器 說明
R0-R3 用作傳入函數(shù)參數(shù),傳出函數(shù)返回值柏锄。在子程序調(diào)用之間酿箭,可以將 R0-R3 用于任何用途。被調(diào)用函數(shù)在返回之前不必恢復(fù) R0-R3趾娃。如果調(diào)用函數(shù)需要再次使用 R0-R3 的內(nèi)容缭嫡,則它必須保留這些內(nèi)容。
... (其他請(qǐng)自行查閱)

等到IDA載入完成后找到入口函數(shù)Java_com_johnhao_myjniapplication_JniTest_add茫舶,就可以一行一行閱讀了械巡。其中涉及到的ADD等arm指令,尋址方式等都很簡單饶氏,就像上面說的現(xiàn)學(xué)也能看的懂讥耗,下面步入正題:

一行一行閱讀然后加注釋是個(gè)不錯(cuò)的初學(xué)手段,首先是將R4,R5,R7,LR壓入堆棧疹启,然后設(shè)置R7的值古程,并作為棧幀指針。接下來是R0-R3寄存器的保存喊崖,我們知道這個(gè)函數(shù)正好有4個(gè)參數(shù)(JNIEnv 挣磨、jclass、jint和jint)荤懂,結(jié)合上面的表格知道R0-R3分別與之對(duì)應(yīng)茁裙。STR R0, [SP,#0x2C+var_c]這行表示的是一種arm的尋址方式,SP表示的棧指針节仿,后面可以根據(jù)這個(gè)指針和地址的偏移量晤锥,找到對(duì)應(yīng)的操作數(shù)。

為了后面閱讀方便廊宪,重命名了部分偏移量的名字矾瘾,用以對(duì)應(yīng)函數(shù)的四個(gè)參數(shù)(env、jclass箭启、number1壕翩、number2)。

繼續(xù)往后分析傅寡,B是跳轉(zhuǎn)指令放妈,這里跳轉(zhuǎn)到了loc_668中北救。還是先看第一行LDR R0, [SP,#0x2C+temp_var],和上面那行STR類似大猛,都是基址變址尋址扭倾。通過sp指針以及偏移地址,取出tem_var的值并賦值給R0寄存器(tem_var是上面一個(gè)初始值為0的臨時(shí)變量挽绩,所以重新命名為了tem_var),然后和2進(jìn)行比較驾中,如果大于就跳轉(zhuǎn)到loc_682唉堪,否則跳轉(zhuǎn)到loc_670。

接著往下看肩民,loc_670中把臨時(shí)變量tem_var和傳入的參數(shù)number1相加唠亚,tem_var再自相加后跳轉(zhuǎn)回loc_668。這里很明顯的就是for循環(huán)的特征了持痰,如果切換一下IDA視圖灶搜,也可看出來。

完成循環(huán)后工窍,將number1和number2相加割卖,并將棧恢復(fù)成入棧時(shí)的樣子患雏,這個(gè)函數(shù)就結(jié)束了鹏溯。最后再看一下F5的偽代碼,不得不感嘆IDA還真的是非常的強(qiáng)大淹仑。

至此丙挽,一篇簡單的分析就完成了。這個(gè)過程中匀借,了解了一些arm的基礎(chǔ)指令(ADD颜阐、SUB、LDR吓肋、CMP等)凳怨;學(xué)習(xí)了一種尋址方式--基址變址尋址;回顧了寄存器的一些知識(shí)(R0-R3傳遞前4個(gè)參數(shù)蓬坡,多余4個(gè)參數(shù)則使用堆棧方式傳遞)猿棉;脫離了F5偽代碼獨(dú)立完成了一段簡單函數(shù)的分析,為后面的學(xué)習(xí)分析提供了一種方法屑咳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萨赁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子兆龙,更是在濱河造成了極大的恐慌杖爽,老刑警劉巖敲董,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異慰安,居然都是意外死亡腋寨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門化焕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萄窜,“玉大人,你說我怎么就攤上這事撒桨〔榭蹋” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵凤类,是天一觀的道長穗泵。 經(jīng)常有香客問我,道長谜疤,這世上最難降的妖魔是什么佃延? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮夷磕,結(jié)果婚禮上履肃,老公的妹妹穿的比我還像新娘。我一直安慰自己企锌,他們只是感情好勺卢,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布漏益。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蟹倾。 梳的紋絲不亂的頭發(fā)上槽华,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天亿柑,我揣著相機(jī)與錄音味咳,去河邊找鬼。 笑死擦俐,一個(gè)胖子當(dāng)著我的面吹牛脊阴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚯瞧,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼嘿期,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了埋合?” 一聲冷哼從身側(cè)響起备徐,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甚颂,沒想到半個(gè)月后蜜猾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秀菱,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年蹭睡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衍菱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肩豁,死狀恐怖脊串,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情清钥,我是刑警寧澤洪规,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站循捺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏雄人。R本人自食惡果不足惜从橘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望础钠。 院中可真熱鬧恰力,春花似錦、人聲如沸旗吁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽很钓。三九已至香府,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間码倦,已是汗流浹背企孩。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袁稽,地道東北人勿璃。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像推汽,于是被迫代替她去往敵國和親补疑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359