近日,笔者在浏览威胁情报的时候,发现了一款挺有意思的金融木马样本:此样本运行后,可篡改电脑屏幕上显示的支付二维码,将其替换为攻击者的二维码。
怀着好奇的心态,笔者对此样本功能进行了复现,发现其确实能够实时篡改二维码!!!
由于此样本是一款针对境外其他国家的金融样本,因此,笔者琢磨:
怀着上述疑惑,笔者对此样本的篡改原理进行了剖析,同时还基于此样本中的篡改原理对支付宝收款二维码、微信收款二维码进行了测试验证,最后发现:使用相同技术原理,是可以实现篡改支付宝收款二维码、微信收款二维码的效果。
此样本的执行效果很简单:其实就是实时捕获二维码位置,然后在二维码位置上覆盖上攻击者二维码。
仔细看二维码的话,其实是能发现其存在一点点瑕疵,如果再对其优化一下的话,可能效果更好。
原二维码截图如下:(互联网上随便搜索的二维码)

被篡改二维码截图如下:

梳理样本信息如下:
| 文件名 | MD5 | 备注 |
| amem.exe | B75AA76E1F86A0A7AAB64358ED375942 | 恶意.NET程序 |
| QRCoder.dll | 4885A17363679AAB6211D5960BB2BF72 | .NET二维码处理库 |
| zxing.dll | E6C9AA4532FCAB70D0B57E801EA2DB18 | .NET二维码处理库 |
相关截图如下:

通过分析,梳理样本首次运行逻辑如下:
相关代码截图如下:


通过分析,发现样本运行后,将通过Windows放大镜API捕获屏幕内容,实现实时屏幕截图功能。
相关代码截图如下:

进一步分析,发现样本将调用zxing.dll库解析识别屏幕截图内容。
由于zxing.dll库主要用于二维码识别,因此,若屏幕截图中携带了二维码,则可利用zxing.dll库成功从二维码中提取文本内容,
相关代码截图如下:


成功提取二维码文本内容后,样本将对文本内容进行识别,判断加密货币类型。
相关代码截图如下:

进一步分析,样本将向https://gsnacional.com/api/get-key?usuario_id=4&chave_tipo=1地址发送识别的加密货币类型,从C&C处接收攻击者的支付地址。
相关代码截图如下:

成功接收攻击者支付地址后,样本将调用函数生成新二维码文本内容。
相关代码截图如下:

成功生成二维码文本内容后,样本将调用QRCoder.dll库生成攻击者二维码。
相关代码截图如下:

成功生成攻击者二维码后,样本将调用线程函数实时定位原二维码位置,在原二维码位置上动态更新显示攻击者二维码窗口。
相关代码截图如下:

为了进一步验证使用此篡改技术是否对国内支付场景存在一定的影响?是否可实现对国内支付二维码的篡改?
笔者尝试按照如下逻辑进行了详细的研究对比:
此样本中支持的加密货币类型如下:

其实,国内很多网站都提供了支付宝收款或微信收款方式。
例如,笔者经常使用的msdn itellyou网站,相关二维码截图如下:

通过对支付宝二维码进行分析,笔者发现:
相关截图如下:


通过对微信二维码进行分析,笔者发现:
相关截图如下:



