0%

Reverse学习第一周——特征和壳

什么是特征?

每一种编程语言或者编译器所编译出来的程序都有其独特的特征,其通常表现在:入口点程序区段加载模块等。
下面就各种语言和编译器所编译出来的程序进行分析。

VC6

使用OllyDbg查看upload successful
可以看到其入口点代码为

1
2
push ebp
mov ebp, esp

使用Exeinfope查看区段情况
upload successful

总结

在入口点代码上,VC6程序使用了固定的两行代码,其调用的API也是相同的
在程序区段上,VC6程序的区段为固定的.text,.rdata,.data,.rsrc

VS2008&VS2013

使用OllyDbg查看
2008:
upload successful
2013:
upload successful
其入口点代码为

1
2
call xxx ;调用模块相同
jmp xxx

使用Exeinfope查看区段情况
2008:
upload successful
2013:
upload successful
相较于VC6多了一个.reloc

总结

VS2008&VS2013的入口点代码特征为先call后jmp,区段相较vc6多一个.reloc

易语言独立(非独立)编译程序

使用OllyDbg查看入口点代码非独立编译:upload successful
第一个call作用我感觉是进入主函数(main)的意思,后面则定义了几个字符串进入到0x40108E后,0x40109E开始调用krnln.fnr

易语言程序在非独立编译后,会生成两个运行所需的依赖库分别为krnln.fnrkrnln.fne

还有个很独特的特征,就是在每次call完之后,都会返回到一个核心函数中upload successful
在我理解看来,这个操作和C语言中调用库函数会触发延迟绑定重定向到真正函数的操作差不多

使用Exeinfope查看区段情况upload successful
可以看到区段情况和VC6相同

总结

从入口点代码特征上看,易语言程序先是call到主函数,后面则定义了几个字符串
从程序执行流程代码上看,每次调用函数,会触发重定向操作
从区段上看,和VC6相同

Delphi