在分析/逆向 程式時,如果事先知道這類程式的一些特征,那將會是事半功倍的; 分析/逆向 程式,和寫程式不同,比喻的話:寫程式像在作案,分析/逆向 程式就像是在破案,對破案來講,重在假想和推理; 特征1:VC鏈接器版本 4.20 特征2:OEP a0) VB5: 【VB5】的OEP平衡堆棧是 sub ...
- 在分析/逆向 程式時,如果事先知道這類程式的一些特征,那將會是事半功倍的;
- 分析/逆向 程式,和寫程式不同,比喻的話:寫程式像在作案,分析/逆向 程式就像是在破案,對破案來講,重在假想和推理;
特征1:VC鏈接器版本
VS版本 | 鏈接器版本 |
VS2017 | 14.12 |
VS2015 | 14.0, 14.1 |
VS2013 | 12.0 |
VS2012 | 11.0 |
VS2010 | 10.0 |
VS2008 | 9.0 |
VS2005 | 8.0 |
VC2003 | 7.0, 7.1 |
VC6/VB6/E語言 | 6.0 |
VC5/BC++ | 5.0 |
Delphi | 2.25 |
VB5 |
4.20 |
特征2:OEP
a0) VB5:
【VB5】的OEP平衡堆棧是 sub esp,0x54
【VB5】的OEP第一個API調用是GetStartupInfoA
【VB5】程式的IAT引用,都是FF15型的
a1) VB6
【VB6】的OEP平衡堆棧是 sub esp,0x4C
【VB6】的OEP第一個API調用是GetStartupInfoA
【VB6】程式的IAT引用,都是FF15型的
b0) Delphi
【Delphi】OEP上面是一個地址
【Delphi】OEP處 有5個CALL
【Delphi】OEP 5個CALL之後,全是0
【Delphi】OEP處第一個CALL有GetModuleHandleA調用
【Delphi】的IAT調用是 FF25形式的
b1) BC++
【BC++】 二進位特征:EB1066623A432B2B484F4F4B90
【BC++】 OEP的第一個API調用是 GetModuleHandleA
【BC++】 IAT調用是 FF25形式的
c) VC6/E語言(通過分析,發現二者特征一致,可以判定E語言和VC6如出一轍)
【VC6】的OEP平衡堆棧是 sub esp,0x58 或 sub esp,0x68或add esp, -0x5C
【VC6】的OEP第一個API調用是GetVersion
【VC6】程式的IAT引用,都是FF15型的
d) VS2013
【VS2013】開始處,call xxx; jmp xxx;
【VS2013】的OEP平衡堆棧是sub esp, 0x44
【VS2013】的OEP第一個API調用是GetStartupInfoW
【VS2013】程式的IAT引用,都是FF15型的
這些特征,會對分析程式起到一定的幫助作用,這裡,並沒有完全列出全部的主流程式,希望拋磚引玉吧;