IDA中导入函数以粉色显示在函数列表中:
start+E4↓p 表示start+E4的地方引用了_main,下箭头表示引用代码在下面,p表示函数过程proc
_main↑j 表示_main的地方引用了_main_0,上箭头表示引用代码在上面,j表示jmp
左侧亮蓝色的地址表示运行时库代码或框架代码,分析时一般无需关注,如果是黑色,表示用户代码或未识别出,尤其是库代码未识别出,IDA把它当作是用户代码:
几个快捷键:
N rename 重命名
D data 切换数据解释方式
C code 解释为代码
A Ascii 解释为字符串
VC6找到main函数:
3个push,一个call
VS2019找到main函数:
Debug版:
main前有两个if结构,if中用&&判断条件,故一共生成了4个jcc指令,且都是jz,前两个jz到同一地址,后两个jz到另一个同一地址,接下来的call就进入main函数。
Release版相对简单,可参照Debug版方法,也可参照VC6的方法。
如果有obj文件,可以制作IDA签名文件:
1. 运行以下命令行,生成sig文件,其中-n”Hang”是对签名文件的说明性意义。
- 将sig文件放在IDA的sig文件夹内。
- 打开IDA,Shit + F5,或者点以下菜单。
- 在新窗口中右键,添加制作好的签名文件,IDA即可识别出函数名。
静态编译出的lib文件是obj文件的集合,命令行link -lib /list libc.lib可以查看lib文件中的所有obj文件,也可使用命令行lib /list libc.lib
从lib中提取某个obj文件,以下两个命令皆可:
出现以下错误时,去文件夹中找到exc文件,例如libc.exc,
打开libc.exc,发现特征码冲突了,手动删除开头4行,意味着告诉sigmake,随便选一个
再执行一次出错的指令,成功: