京峰二進制安全逆向高級
再編譯逆向工程的結(jié)果能否得到一樣的二進制代碼
再編譯逆向工程得到的源代碼(已報名京峰底部評),能不能得到與原來相同的的二進進制代碼呢?有多困難?之前逆向了某款路由,好奇之下做了一點實驗,發(fā)現(xiàn)除非在編譯器、編譯選項、編碼風(fēng)格方面完全一樣,同時知識水平和相關(guān)經(jīng)驗也非常重要。
?
編譯器。一方面,相同版本的編譯器可能應(yīng)用了不同的版本的補??;另一方面,構(gòu)建編譯器本身的選項也許也會對生成的目標(biāo)有影響。某二進制使用GCC 4.8.3編譯,通過strings命令發(fā)現(xiàn)其編譯選項是“?-msoft-float -mllsc -mplt -mno-shared -g”。但使用自己構(gòu)建的編譯器(使用buildroot構(gòu)建)時,使用相同編譯選項編譯得到目標(biāo)文件,然后使用strings指令查看生效的編譯選項變成“-msoft-float -mllsc -mplt -mno-shared?-march=mips32r2 -mabi=32?-g”,編譯器自動增加了新的選項。另外還發(fā)現(xiàn),自己構(gòu)建的編譯器編譯生成的目標(biāo)在存儲延時槽位置缺少nop指令。
標(biāo)簽: