不同语言程序的特征

本文探讨了通过OEP特征、链接器版本和区段信息来识别不同编程语言的方法,如BC++、Delphi、易语言、VC6.0、VS系列、VB及汇编程序。强调OEP的特征不能单独作为判断依据,需要多层验证。
不同opCode,Call的作用是不同的。

E8 Call Offset(调用普通函数)(VS)
FF 15 Call Dword ptr [ 地址 ] (调用IAT)(VS)

如何确定目标程序的语言?

1.OEP特征
2.链接器版本
3.区段信息

Borland C++程序 ( BC++ )

1.OEP特征

  • OEP是一个短跳转,之后是一个字符串:fb:C++Hook
  • 第一个调用的函数:GetModuleHandle
  • 二进制特征:EB 10 66 62 3A 43 2B 2B 48 4F 4F 4B
    在这里插入图片描述
  • IAT函数的调用通常都是 E8 跳转表 + FF25 IAT 地址
    在这里插入图片描述
    2.链接器版本 5.0
    在这里插入图片描述
    3.区段信息
    在这里插入图片描述

Borland Delphi程序(Delphi)

1.OEP特征

  • 二进制特征:55 8B EC 83 C4 F0 B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? A1 ?? ?? ?? ?? 8B 00
  • OEP处有连续的5个Call,后面紧跟着一堆零;其中第一个Call里面调用了GetModuleHandle
    在这里插入图片描述

在这里插入图片描述

  • 由于 Delphi 和 BC++ 程序都是宝蓝公司的,所以 IAT 调用特征相同;即IAT函数的调用通常都是 E8 跳转表 + FF25 IAT 地址
    在这里插入图片描述
    2.链接器版本 2.25
    在这里插入图片描述
    3.区段信息
    在这里插入图片描述

易语言、VC6.0(Debug、Release版本)

1.OEP特征

  • 二进制特征:55 8B EC 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00
  • 第一个CALL是调用 GetVersion
  • 易语言、Release版:SUB ESP,0x58
    在这里插入图片描述
  • Debug版:ADD ESP,-0x5C
    在这里插入图片描述
    2.区段信息、链接器版本 6.0
    在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

VS 程序的特征

VS 版本的不同会导致编写出的程序特征(链接器、入口点、区段)也不同。

  • Debug 下编译的程序区段的数量相对于 Release 多一些
  • Debug版的OEP在内存窗口(查看地址)时,不会显示IAT的名称,而Release版的却可以。
  • (2008、2013) Debug 版本的程序入口点是 JMP -> Call + Call,而 Release版 是 Call + JMP
    在这里插入图片描述

VS2008

1.OEP特征

  • Debug版本( JMP -> Call + Call ):先跳转到某一个地址,地址代码有两个CALL。
    第一个是初始化安全Cookie
    第二个C运行库函数,内有Main函数或者Winmain函数
    在这里插入图片描述

在这里插入图片描述

  • Release版本( Call + JMP )
    在这里插入图片描述
    2.区段信息、链接器版本 9.0
    在这里插入图片描述

在这里插入图片描述

VS2013、VS2012、VS2010

1.OEP特征

  • Debug版本( JMP -> Call + Call ):先跳转到某一个地址,地址代码有两个CALL。
    在这里插入图片描述

在这里插入图片描述

  • Release版本( Call + JMP )
    在这里插入图片描述
    2.区段信息、链接器版本 12.0
    在这里插入图片描述

在这里插入图片描述

VB( VB5、VB6 )

1.OEP特征

  • Push参数之后,调用VB的Dll(msvbvm50 或 msvbvm60)
  • VB6程序
    在这里插入图片描述
  • OEP 上面有一片调用IAT的代码(FF25 IAT 地址
    在这里插入图片描述
  • VB5程序
  • 同样的,在VB5中OEP 上面也是一片调用IAT的代码(FF25 IAT 地址
    在这里插入图片描述
    2.区段信息、链接器版本
    在这里插入图片描述

在这里插入图片描述

汇编程序

  • OEP的特征:文件体积小,入口点直接就是逻辑代码;由于其编写代码不包括C运行库或者其他的一些库,OEP完全由程序员自己指定,那么特征不明显。
  • 链接器版本:一般链接器版本5.12 或者 2.18
补充:这些OEP的特征并不能作为唯一的准则,因为OEP也是可以伪造的;
所以,当我们找到OEP的时候,还需要去多层验证是否为真的OEP。

最后,常见的OEP特征就先总结到这里了,后期遇到 . NET、vs2017、vs2019的程序再添加上来。

如有疑问,欢迎大家指正。

谢谢大家

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值