• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi编译出来的程序被小红伞报病毒TR/Spy.Banker.Gen4[trojan]

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

      今天碰到非常奇怪的问题,正常开发的单元代码,在A程序编译出来没有问题,将相同的单元引用到B程序编译出来就被小红伞报病毒TR/Spy.Banker.Gen4 [trojan],自动隔离删除。

      今时今日的防病毒软件,实在是让人纠结不已,今天一个下午的排查代码,最后发现问题居然是出现在调用Windows API的地方,总体有两处代码会出现报病毒:

问题代码1:

//单元1声明引用API函数
function GetCPInfoEx(CodePage: UINT; Flags:DWORD;
  var lpCPInfo: TCPInfoEx):BOOL;stdcall;
  external kernel32 Name
  {$IFDEF UNICODE}
  'GetCPInfoExW';
  {$ELSE}
  'GetCPInfoExA';
  {$ENDIF}

//单元2
  // 这里一旦写上调用 单元1的GetCPInfoEx 的代码,则编译后的EXE马上报病毒,
  if GetCPInfoEx(FCodePage, 0, LCPInfo) then

  // 而修改为调用Windows单元的 GetCPInfoEx 则不会
  if Windows.GetCPInfoEx(FCodePage, 0, LCPInfo) then


// 总得来说非常奇怪,难道在单元1引用GetCPInfoEx就会生成病毒特征码?

问题代码2:

单元3:
//一旦写上调用EnumSystemCodePages的代码则编译后的EXE马上报病毒
Windows.EnumSystemCodePages(@DoEnumCodePageCallBackEx, dwFlag);

 

最后实在没辙了,全部改为动态加载DLL并调用API。

初步推断:

1)应该是Delphi在使用external引入DLL的接口时由编译器所生成的IAT表以及相关跳转代码刚好存在病毒的特征码

2)采用动态加载(LoadLibrary和GetProcAddress)则可以避免这些自动生成代码的发生,所以一切正常

3)此问题存在一定的偶然性,不一定是在每个程序中调用GetCPInfoEx和EnumSystemCodePages会出现该问题,也可能调用其他API同样会出现

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi引用C对象文件发布时间:2022-07-18
下一篇:
delphiIXMLDocument解析xml异常。发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap