Reverse Engineering challenge #2

    最近思考了一下,爲何我逆向很吃勁兒...學習

    我以爲這是逆向工程自己就決定了的,它的問題牽扯知識範圍廣闊,並且沒有一個特別豐富的學習路線+資料,當你做爲菜鳥入門的時候很容易由於知識盲區的過多而陷入困境,同時,逆向的工做語言幾乎是ASM,而這也是咱們大多數人的弱項,致使咱們抽象反彙編代碼時能力嚴重不足,以上緣由讓咱們面臨一個陡峭的學習曲線,也正是咱們沮喪的緣由,可是,幾乎全部的逆向教程都強調了「耐心」+「堅持」。耐心的堅持,不單單逆向須要,生活也須要,乃人生之本。this

    #2---What does this code do ? (PS:Optimizing GCC 4.8.2 -M32)3d

0:          mov    eax,DWORD PTR [esp+0x4]
   4:          bswap  eax
   6:          mov    edx,eax
   8:          and    eax,0xf0f0f0f
   d:          and    edx,0xf0f0f0f0
  13:          shr    edx,0x4
  16:          shl    eax,0x4
  19:          or     eax,edx
  1b:          mov    edx,eax
  1d:          and    eax,0x33333333
  22:          and    edx,0xcccccccc
  28:          shr    edx,0x2
  2b:          shl    eax,0x2
  2e:          or     eax,edx
  30:          mov    edx,eax
  32:          and    eax,0x55555555
  37:          and    edx,0xaaaaaaaa
  3d:          add    eax,eax
  3f:          shr    edx,1
  41:          or     eax,edx
  43:          ret
  1. bswap eax指令將eax中的字節次序變反
  2. and eax,0x0F0F0F0F取出字節中的低4位;and edx,0xF0F0F0F0取出字節中的高4位;shr edx,4;shl eax,4;or eax,edx是讓低4位和高4位調轉位置存儲,即低4位變成高4位,高4位變成低4位
  3. 同理,and eax,0x33333333....or eax,edx,則是讓半字節中的高2位和低2位調轉位置存儲;and eax,0x55555555...or eax,edx,也是讓1/4字節中的高1位和低1位調轉位置存儲
  4. 最後可推出,eax二進制位次序變反
相關文章
相關標籤/搜索