揭露骗子利用微信“聊天记录中图片不可变”的骗局

一、起因

那是一个阴冷的夜晚,我的一个老乡怒气冲冲的给我拨了个微信视频,说他在微信上被人骗了。

他给我转发了一条骗子给他发的聊天记录,在点开之前是这样的:

图1 聊天记录

看上去是一个图片。点进去一看,果然是个图片。里面写了 4个数字。

从图上的“错一罚十”来看,貌似是某些“大神”给人推荐的一些“神秘数字”。

值得注意的一个细节是,当我点开菜单想用浏览器去打开这个图片的时候,发现很多菜单都被隐藏了。

图2 图片

老乡怒吼到:“奶奶的,老子前天找人花了一万块钱买的这个买马的推荐单,结果今天看到的数字,跟我昨天看到的数字完全不一样!”

这么一说我就明白了。原来骗子发了个图片来推荐受害人买马,里面手写了几个数字号称“预测绝对准确”。

然而,结果出来后,骗子又第一时间把图片改掉了,从而实现“绝对正确”。

我在心里说道“。。。卧槽,这你都能信”,嘴里说道:“。。这个在原理上当然可以实现啊,图片换掉了而已。”

老乡囔囔说:“现在这骗子说,这个是前天发出来的,聊天记录有时间作证,改不了的!他说除非我能发一个这样的记录给他,如果确实能够随便变图片,他就把钱还给我。”

我叹了口气,声色俱厉的教育了他,世界上没有未卜先知的大神。

老乡唯唯诺诺道:“好的我知道了!你才是大神,快给我做一个这样的记录出来!”

二、原理

首先可以确认的一点是,图1这种聊天记录,普通微信用户是做不出来的。

因为他既不是文字,又不是图片,他是微信公众号给用户发送的文章(Article)。

而骗子为了蒙骗不懂技术的老百姓,让人认为这就是个图片,在这个文章上做了几个细节:

1、聊天窗口上显示的文章卡片既没有标题,也没有链接,只有一个图片的缩略图,在心理上给人一种暗示,这就是一个图片。

2、文章点开后,是一张大图铺满屏幕,菜单里面没有“使用浏览器打开”、“复制链接”之类的菜单,因此很难让人想到这是一个网页。

因此,要复现这个骗局,需要:

1、有一个自己的通过认证的公众号。

2、使用该公众号给受害者推送一个没有标题、链接,只有缩略图的文章。

3、文章里的链接指向自己服务器的一个网页,网页域名要备案,网页内的图片要能变化

4、这个网页隐藏了微信菜单,如“使用浏览器打开”等。

现在基本原理已经了解了,就可以尝试复现这个骗局了。

三、技术点

骗子敢信誓旦旦的说有本事你弄一个给我看,底气在于对普通百姓而言,要复现这一套骗术还是相当有技术门槛和成本的。

下面一个一个讲解。

1、已认证的公众号

公众号如果不通过认证,在调用接口来隐藏微信菜单的时候会有局限性(由于我已经认证了,这一点没有亲自证实。)

认证需要的最简单的材料也需要个体工商户营业执照、300元的认证费用。

这部分就是费时费力费钱,跟技术关系不大。

2、给用户推送特殊的文章。

公众号给用户推送的所有信息都是用xml来描述的。可查阅微信官方文档。

不过值得吐槽的是,这个官方文档恰恰漏了推送文章的xml描述方式:

    <xml><ToUserName><![CDATA[{target}]]></ToUserName><FromUserName><![CDATA[{source}]]></FromUserName><CreateTime>{time}</CreateTime><MsgType><![CDATA[news]]></MsgType><Content><![CDATA[{content}]]></Content><ArticleCount>{count}</ArticleCount><Articles>{items}</Articles></xml>

可以发现<ArticleCount>定义了一个推送里有几篇文章,每一篇文章可以组装到<Articles>中,每个文章的描述如下:

    <item><Title><![CDATA[{title}]]></Title><Description><![CDATA[{description}]]></Description><PicUrl><![CDATA[{img}]]></PicUrl><Url><![CDATA[{url}]]></Url></item>

因此,只需要把Title、Description都置空,把PicUrl设置成骗子要显示的缩略图,Url设置为骗人图片的网页链接,把文章发送给用户就完成了。

3、网页显示图片,且图片可变

这里要解决的一个问题是:如果用户已经打开过这个网页,那么手机里必然有缓存。那么即使你在服务器上换掉了图片,用户还是能看到之前的图片。

解决图片缓存的思路很多。如果不想改变图片文件名,一种思路是给图片加上随机的后缀,如 1.png 改成 1.png?123456

这样,骗子只需要在适当的时候后台把1.png换掉即可。

另外一种思路是把正确的结果做成另外一个名字的图片,使用代码,设计成某种条件下切换要展示的图片文件名。

为方便演示,我准备了5张png图片,随机生成文件名来展示。JS代码如下:

<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js">
</script>    
<script type="text/javascript">// 随机选择5个图片$(function(){var randName = Math.floor(Math.random() * 65535) % 5$('.img_randPng').each(function(){this.src = this.src + randName + '.png';console.log(this.src)});});
</script>

然后在img标签里做修改即可:

<img src='https://********' class='img_randPng' />

4、隐藏微信菜单

最后一步是隐藏微信自带浏览器的部分菜单。这就要使用JS-SDK来实现了。

而麻烦的地方在于:所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用:

<script src='https://res.wx.qq.com/open/js/jweixin-1.6.0.js'>
</script>wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: '', // 必填,公众号的唯一标识timestamp: , // 必填,生成签名的时间戳nonceStr: '', // 必填,生成签名的随机串signature: '',// 必填,签名jsApiList: ['hideAllNonBaseMenuItem'] // 必填,需要使用的JS接口列表
});wx.ready(function(){// 必须要放在这里才会生效wx.hideAllNonBaseMenuItem();
});

其中你需要调用JS的哪些api,都必须写到jsApiList中进行注册。

例如这里调用了'hideAllNonBaseMenuItem'接口来隐藏所有非必须的菜单。这个api必须在wx.read中调用。

上述配置信息注入最麻烦的地方在于需要签名,而签名需要向微信服务器请求获得jsapi_ticket,而jsapi_ticket又需要请求获得access_token。

官方文档中《获取access_token》说的足够详细了。https请求如下,要带上自己的appid和secret:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

access_token拿到之后再请求一个jsapi_ticket。https请求如下,要带上上面获得的access_token:

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

终于拿到jsapi_ticket,接下来就是签名算法了。可参阅《JS-SDK使用权限签名算法》。

Python代码如下:

# 当前访问的页面的完整URLurl = current_urlparameters = {"noncestr" : noncestr,"jsapi_ticket" : self.jsapi_ticket,"timestamp" : timestamp,"url" : current_url }# 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串unsinged_str = '&'.join(['{}={}'.format(key.lower(), parameters[key]) for key in sorted(parameters)])# 进行sha1签名,得到signaturesignedstr = hashlib.sha1(unsinged_str.encode("utf-8")).hexdigest()

noncestr为数字字母构成的随机数。

timestamp为时间戳,必须和请求jsapi_ticket的时间戳保持一致。

self.jsapi_ticket为上文获取到的jsapi_ticket。

url为准备调用JS-SDK接口的网页的url。

timestamp和noncestr随机数生成代码如下:

timestamp = int(time.time())
noncestr  = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(15))

将上述noncestr、timestamp、signedstr、appid插入到你的html模板中即可。

四、效果

最后展示下效果。每次打开,图片中第一个推荐的数字都会随机变化。

我把这条消息转给了老乡,说:“拿好,去干骗子吧。”

 

对了,这里漏了一点,为什么这个页面要备案?

因为如果不备案的话,这个网页打开一般都是这种结果:

这种情况当然你可以点申请恢复访问,但是申请的时候官方也要看你是否备案。。。

五、后续

几天后。

“怎么样,骗子退钱了没。”我问老乡。

老乡眉飞色舞的说:“退了退了,对了,这骗子还问我要你的微信,说他有一些全新的业务可以和你开展合作!

我:“。。。。。。”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19608.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘诈骗团伙通过裸聊软件实施敲诈勒索

头一次在csdn发文章,好激动!!! 进入正题: 今天闲的来,索性看到了一篇“裸聊被诈骗”的新闻,心血来潮,给大家写一篇如何防止此类事件再次发生 文章直链:https://mp.weixin.qq.com/s/C3JzDfHgcyfqQ7sf9riS_A 如果视频看不了前往: 纯手机操作: https://mpcdn.wpon.cn/3715591D5…

从电信网络诈骗角度剖析,诈骗资金是如何流转的?

前言 近年来&#xff0c;随着我国经济社会向数字化快速转型&#xff0c;犯罪结构发生了根本性变化&#xff0c;传统犯罪持续下降&#xff0c;以电信网络诈骗为代表的新型犯罪快速上升成为“主流”&#xff0c;严重阻碍了我国数字经济的健康发展。 面对严峻的电信网络诈骗现状…

交友APP诈骗黑幕:有组织手把手传授引诱充值套路

“哥哥也是进来相亲的吗&#xff1f;能听听我的故事吗”、“天冷了记得保暖&#xff0c;我的未知爱人”… 网上流传的聊天指南中&#xff0c;教着这样的话术。 这是用于各大交友平台的“斩男”秘诀&#xff0c;也是试图在交友APP上谋生的聊天员生财指南。 黑猫投诉上看到超30…

​央视新闻曝光TR外汇平台诈骗案,涉案金额高达5亿元

关于TR外汇&#xff0c;有一定交易经验的人一定听说过这个平台&#xff0c;这个平台这些年还一直在活跃&#xff0c;换过不少皮&#xff0c;也想出过许多新花样来实施诈骗&#xff0c;可以是说是外汇界的毒瘤。 这个平台‍在外汇天眼很早就进行了曝光&#xff0c;也早就列为了…

你用过猿如意吗?猿如意可以使用ChatGPT哦,这里详细介绍了猿如意的功能,为什么我建议你使用猿如意,来看看吧

文章内容介绍 你是否还在为为每次安装IDE&#xff08;集成开发工具&#xff09;要去各种网站找教程而烦恼&#xff1f;你是否还在为各种文本格式转换而头痛&#xff1f;你是否在为斗图都不过兄弟们而卑微&#xff1f;你是否在为互联网中庞大冗杂却低效的教程文档而崩溃&#x…

公司最大的内卷,是“过度管理”

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 马云在某财经节目做嘉宾时&#xff0c;现场一位管理层摸样的人&#xff0c;侃侃而谈&#xff0c;一顿输出。马校长边听边皱眉&#xff0c;等那人发挥完毕&#xff0c;校长反手一个灵魂拷问“你是不是读…

数据,真的是AI大模型市场化的「壁垒」吗?

来源&#xff1a;AI科技评论 作者&#xff1a;黄楠 编辑&#xff1a;陈彩娴 数据的重要性之于人工智能技术发展长期存在。但在大模型以前&#xff0c;鲜少有人能预见它背后巨大的想象力。 作为智能飞跃中的关键一环&#xff0c;ChatGPT 火爆全球后&#xff0c;“模型-用户数据-…

巴比特 | 元宇宙每日必读:大模型会成为每个数字化系统的标配?周鸿祎称,大模型真正的机会在中国,在企业级市场...

摘要&#xff1a;“大模型真正的机会在中国&#xff0c;我觉得是在企业级市场&#xff0c;包括政府和城市&#xff0c;中国做大模型最应该抓住产业互联网发展的机会。”三六零董事长周鸿祎在2023全球数字经济大会人工智能高峰论坛上指出&#xff0c;不能把大模型比喻为操作系统…

激斗云计算:互联网大厂打响新一轮排位战

大模型如同一辆时代列车&#xff0c;所有科技大厂都想上车。 自去年底ChatGPT一炮而红&#xff0c;国内外数十家科技大厂、创业公司、机构相继下场&#xff0c;一时间掀起大模型的热浪。 《中国人工智能大模型地图研究报告》显示&#xff0c;截至今年5月28日&#xff0c;中国…

GPT卷入实体机器人行业,进门掘金的“入场券”是什么?

破解ChatGPT/Matter如何驱动家居智能化升级&#xff01;GTIC 2023全球AIoT智能家居峰会4月28日在AWE同期举行&#xff0c;欢迎报名。 看似好做的GPT机器人&#xff0c;不是人人都有“入场券”。 作者 | 三北 编辑 | 漠影 近期&#xff0c;接入GPT的阿梅卡&#xff08;Ameca&a…

安卓系统开发笔记

安卓应用 【专题分析】使用Intent打开三方应用 Android应用开发知识仓库 看云 (kancloud.cn) 1&#xff09;AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/…

Android 原生 Picture in Picture 画中画功能避坑指南

最近生活有些变动所以断更好久&#xff0c;不过虽迟到但永远不会缺席。ChatGPT 浪潮还在持续扩大&#xff0c;各位同学一定要体验体验丫~ 这篇主要介绍最近需求中遇到的问题&#xff0c;希望能帮助后来者少踩坑。先说结论&#xff1a;Android 原生画中画功能并不完善&#xff0…

老胡的周刊(第090期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 privateGPT[2] 为保证数据私密性&#xff0c…

沉浸式翻译 – 沉浸式的阅读与学习双语的翻译工具

为何称为沉浸式呢 智能识别网页主内容区进行翻译&#xff0c;与同类插件翻译整个网页不同&#xff0c;降低对原网页的“侵入性”&#xff0c;提升阅读体验&#xff0c;因此得名“沉浸式翻译”。 受宠的缘由 自从谷歌翻译不再对大陆用户提供服务后。内心是一阵酸痛的&#xf…

如何让你的程序有背景音乐

1.先将MP3格式转化为wav,只能播放wav格式。&#xff08;下载格式工厂即可转换&#xff09; 2.调用函数PlaySound, 第一个参数&#xff1a;路径 第二个参数&#xff1a;窗口&#xff0c;NULL为全部窗口 第三个参数&#xff1a; 打开方式 PlaySound("D:\\dream.mp3",…

Unity背景音乐控制

实现功能&#xff1a; 点击按钮可实现音乐的播放与暂停及再次播放等&#xff0c;同时按钮sprite图片可在播放与暂停中切换。如点击按钮&#xff0c;图片变为暂停&#xff0c;同时播放背景音乐&#xff0c;再次点击按钮&#xff0c;即点击暂停按钮&#xff0c;音乐停止播放&…

android开发之背景音乐与音效

文章转载于https://www.cnblogs.com/hesi/p/5750862.html 仅供博主笔记学习用 android开发之背景音乐与音效 一&#xff1a;添加背景音乐&#xff08;MediaPlayer&#xff09; MediaPlayer class can be used to control playback of audio/video files and streams.MediaP…

在程序中添加背景音乐!...

//呵呵&#xff0c;这还是我第一次实现该功能呢&#xff0c;效果不错哦! //在程序中使用背景音乐时&#xff0c;记得包括以下两行代码(使用PlaySound函数 //时需要在#include<windows.h>后面加上, //注意&#xff1a;不能加在前面) //#include <mmsystem.h>    …

小程序之背景音乐—wx.backgroundAudioManager

onMusicTap:function(){const backgroundAudioManager wx.getBackgroundAudioManager()backgroundAudioManager.title 此时此刻;backgroundAudioManager.epname 此时此刻;backgroundAudioManager.singer 许巍;backgroundAudioManager.coverImgUrl http://y.gtimg.cn/music…

Unity(8)-开启或关闭背景音乐

文章目录 前言其他介绍上一篇笔记下一篇笔记 一、项目结构二、脚本[1]. 获取音频组件[2]. 按键监听[3]. 判断播放状态[4]. 开启或关闭音频[5]. 全部代码 三、创建Audio Source 前言 音乐播放时按下指定按键关闭音乐&#xff0c;未播放时按下按键开启音乐。 通过激活和关闭Autdi…