常用程序的特征
1.BC++
2Delphi
3易语言
4VB
3VC++
分析BC++程序特征
OPE特征 EB 10 Fb c++hook
二进制特征:EB 10 66 62 3A 43 2B 2B 48 4F 4F 4B 90
第一个CALL内有API调用 GetMouduleHandleA
分析Delphi程序特征
OPE特征 5个Call ,上面全是地址,后面全是0,第一个CALL内有API调用 GetMouduleHandleA
调用函数时,跳转IAT时OPCODE跳转是FF25,VC是FF15
区段名比较细致
CODE,DATA,BSS(),idata,tls,rdata,reloc,rsrc
链接器版本
2.25
分析VS程序
VC6.0 6.0
VC2003 7.0 7.1
VC2005 8.0
VC2008 9.0
VS2010 10
VS2012 11
VS2015 14.0
VS2017 14.1
分析VC6.0和易语言程序特征
这两个编译器一样,链接器都是6.0版本,第一个api调用getversion,
Sub esp,0x58
逆向步骤
拿到程序
1.确定格式和加密
2.根据分析,选择工具全面静态分析
1.查看链接器版本(4.20-VB5,2.25-Delphi7)
2.查看OEP代码,是否加壳,未加壳的编译器环境(代码是否正常,pushad这类不正常)
3.查看区段(.text 微软 CODE 宝蓝)
4.查看导入导出 表(函数名)
5.查看资源信息(有无自定义资源)
6.查看TLS信息息(有无设置TLS回调函数)
7.文件大小,图标
3.使用完PE工具,在使用其他工具进行分析
1.如果加壳,就脱壳,如果是强壳还是需要脱壳才能分析,那就先找OEP再转存到文件,结合IDA进行分析。
2.若果程序为保护,看引用了API之类的,根据API确定实现的功能,比如文件操作,网络操作,注册表操作。用监控类工具分析,分析日志,,再进行下一步分析,如果需要分析网络数据可以使用抓包工具。
3.如果其他的文件,如资源文件,分析字符串推测功能
4.如果程序有安装目录,目录每个文件子目录都要查看
4.根据静态分析情况,再动态分析
第一种,单步跟踪调试,就是从程序加载开始跟踪,一直到找到需要的信息。
第二种,附加调试程序,这是在程序运行的状态下,附加进程,进行分析,一般在API下断,然后栈回溯进行分析,还有一种就是如果是窗口程序,我们可以通过窗口回调函数然后进行分析。
5.动静结合
OD,IDA
如果分析中还是有很多困难,那么就需要使用IDA/OD等工具进行进一步的分析,尤其是字符串。
根据字符串,下断栈回溯分析。
6.使用源码对比法,辅助逆向
分析程序,用了什么库,写代码demo反汇编我们的程序进行对比,提高逆向效率