記一次逆向菜鳥題,攻防世界Reversing-x64Elf-100

下載文件,首先查看是否有加殼,這里沒有加殼,看出來(lái)是64位的elf文件

將該文件拖進(jìn)IDA64位工具里進(jìn)行分析
進(jìn)去先找main函數(shù),一般我的思路是這樣,初入逆向,有什么不對(duì)的地方請(qǐng)指正

進(jìn)入main函數(shù)大致是這樣,點(diǎn)擊tab鍵進(jìn)入偽代碼頁(yè)面

此處if語(yǔ)句為關(guān)鍵點(diǎn),用于判斷輸入的值是否正確,我們點(diǎn)擊if右邊的函數(shù)進(jìn)去查看內(nèi)容

這里就為判斷的主要內(nèi)容了,這里是定義了一個(gè)二維數(shù)組,(二維數(shù)組不會(huì)的可以先去了解一下)

下面進(jìn)行分析了

主要看這里,這里做了一個(gè)判斷,顯而易見我們想要的是0LL的返回而不是1LL,下面來(lái)講講if內(nèi)容里是什么意思
這個(gè)*(char *)是一個(gè)強(qiáng)類型的轉(zhuǎn)換就是說轉(zhuǎn)化為字符,v3[i%3]是取循環(huán)數(shù)i除以3的余數(shù),就是他指向一維數(shù)組的地址,+2*(i/3)指的是加上一維數(shù)組指向的字符串里指向的字符i/3則是取他的整型,就是說管后面的小數(shù)位,整數(shù)位是多少就取多少,再到后面的- *(char *)(i +a1)此處應(yīng)該為我們輸入的值,最后再來(lái)一個(gè)判斷,如果說他前面的算法減去我們輸入的值的差不等于1則返回1LL,我們需要他返回0LL那么就要他們的差等于一
這里用python寫一個(gè)腳本

運(yùn)行得到flag

初入逆向,很多不會(huì),還請(qǐng)師傅們多多指點(diǎn)