在最近的亚马逊更新大动作中, 有一些内测的功能被推送, 比如说新的A+页面, 已经提前开放给大卖家使用.

@@@点击下方按钮即可检测是否为apng,如果被识别为apng动图,亚马逊A+肯定是不能上传了!!

不过你依然可以把他用在其他平台和实际项目中,并推荐使用此方式来呈现动图!

你也可以尝试瞎JB乱改,在这里来检测一下能不能不被识别为apng,理论上目前此方法已失效,已被Amazon完美的修复了,为了不占用你的宝贵时间,可酌情阅读

偶然发现

然后发现一些有意思的动态图片. 比如下面这张图. (需要浏览器支持, 如果你发现下面这张图不能动, 使用最新版的Edge/Chrome/Firefox打开此页面)
apng_demo

不需要F12, 直接下载查看原图详情, 发现后缀是png格式,并不是我们所熟悉的GIF,

我原以为是GIF格式的图片直接改后缀名, 为了验证, 我把下载的png改为gif, 拖进PS里, 有点意外的是并没有图层, 如果是GIF格式的图片必然有图层!

认识APNG(参考下面这篇文章,附JS检测原理)

工欲善其事必先利其器,先了解了原理,才能开始实践。

如何制作?

Ispaerta

下载地址: 提取码: hxeq

  • 拍一段产品视频,或者一些图片。
  • 用软件(推荐Adobe Premiere)导出为一张张的图片
  • 挑选一些类似于关键帧的图片。
  • 使用Ispaerta将图片合成为apng, 软件的使用非常简单, 一看就会, 中文界面.

gif2apng

下载地址:

  • PS制作好GIF
  • 使用软件

验证

用鼠标把图片拖拽到chrome谷歌浏览器即可.

2020-09更新:

【9月前后,常规的apng已被亚马逊检测,已封】

2021-02更新:【规避acTL方法】

百度了一番,毛方法都没找到,倒是一堆提供VIP服务的奸商,哈哈。唯一找到的一个有用的信息是规避JS检测字节码,大致的原理就是:amazon先用js把图片转换为字节码的流,在字节码第37位到40位(二进制从0开始) 是否为“acTL”。

简单的制作一张apng的图片:

常规的apng

使用软件查看其字节码(直接拖到软件)

软件下载地址:

声明:此教学不含任何功利性目的,回复后可见是为了防爬!很多文章你今天发了过几天就在别的地方出现了,所以回复一下(F5刷新页面)即可。

知识应该是深入浅出的分享,不应该讳莫如深的高深莫测。

此处内容需要评论回复后(审核通过)方可阅读。

字节码

根据根据apng介绍文章,观察不难发现:常规的apng的acTL的字节码61 63 54 4C永远会在第37-40位(从0开始数),详细的字节位:

此处内容需要评论回复后(审核通过)方可阅读。

修改此二进制文件需要非常专业的技术,不是我能掌握的,只能瞎JB乱改后观察。

但是我们可以多比对的别人修改绕过检测的文件和源文件可以发现【acTL这个字段有着固定且唯一的一段字节码】 看下面的图

此处内容需要评论回复后(审核通过)方可阅读。

左边为改过的,右边为正常的,聪明的你已经发现问题了。通过不正常的方式修改了位置,且能正常运行。

fcTL字节码:(可以不了解,这里不去动他)

  • 00 00 00 1a 表示本块内容的长度(0x1a,即26字节)对于 fcTL块来说是固定的
  • 66 63 54 4C 是 "fcTL" 四字母的ASCII码
  • 00 00 00 00 表示本帧的序号为0
  • 00 00 00 C8 表示本帧的宽度为 0x200 === 200 像素,高度也一样
  • 后面的 8字节00表示当前帧的位置是无偏移的
  • 00 00 00 00 表示当前帧的播放延时为 0x32 / 0x03E8 即 50 / 1000 === 50ms
  • 01 表示本帧的清除方式为 【清除为背景】
  • 00 表示本帧的混合方式为 【覆盖】

所以把acTL的4*4组十六进制字节码整段的调整位置即可

用刚才制作的图测试(自行选择下面2种方法,小白建议第二个tab)

此处内容需要评论回复后(审核通过)方可阅读。

此处内容需要评论回复后(审核通过)方可阅读。

验证是否可行(尝试上传亚马逊后台)

改过位置的图

【2021年4月更新:此方法对于现在的上传通道已失效,被亚马逊检测,做了图片库资源自动阻断

之前的上传接口依然有效,就是上传的图片路径是/images/S/aplus-media/sc依然是正常绕过的,就看你有没有途径去拿到这个上传接口。

对于正常卖家的上传后的图片路径/images/S/aplus-media-library-service-media/已经完美规避了此破解方法。已经绝无可能上传,如果你上传成功了,写信给姐夫让他给你当技术总监。

审查元素

对比下图片的路径

可以上传时的路径,封堵之前上传的

设置检测阻断的路径

错误示例:

The file uploaded was an animated PNG, which is not allowed under community standards. Accepted formats of images are: [image/jpeg, image/png, video/mp4]

推断现在亚马逊的检测机制就是:遍历整个文档的字节码:发现有acTL的特性就是直接阻断,已经完美的阻止了这个所谓的黑科技了,因为你要动态就必然存在acTL。只有删除特定字段后变为静态图后,才可以上传,事实上,实测把acTL改为bcTL就能上传了(第一位加一位)。

这好比你有丁丁,我就不让你进女厕,除非你把丁丁切掉。无论你怎么伪装,我只需要用要你命3000X光一照。

其他方法也大都大同小异,不管是增加无意义的0字节,还是挪动。无一例外,全部GG。

呵呵(法克),散了。玩了个寂寞。

个人猜想

亚马逊不鼓励但是也不反对A+动图的上传,毕竟也有能起到更好的展示产品的正反馈,且相比视频的点击率,apng的动图好像直接在你脸上拉shit一样简单粗暴的强制你看到

但是相应的负面效应来了,apng格式首先占用服务器资源、存储空间、带宽就比常规的jpg大很多,服务器的投入就不小了,加上浏览器渲染apng花费的时间更多,用户体验严重下降,你可能觉得你更好的展示你产品的卖点(其实更多的是噱头),但是站在SEO甚至亚马逊的角度来说无疑影响amazon整体形象和体验,他毕竟要跟美国其他购物网站竞争,如果打开页面就卡顿或者花费时间太长,慢慢的客户就流失了。再加上美国人确实不喜欢花里胡哨的网页,和卖家之间不公平竞争也有部分原因,因为你并不想落在别人后面,别人有的你也要有。

所以亚马逊看用这样的手段的越来越来多,眼看有过于泛滥的迹象,为了防止网站的风格变成澳门皇家赌场,在性感荷官开始发牌之前就开始着手封堵,刚开始可能就直接检测那几位字节,到后来直接遍历收尾

所以你看,你我都不是无辜者,在雪崩面前,没有一片雪花是无辜的

现阶段也有"懂得都懂"的讳莫如深的能上传的方法,厉害的大有人在,真大神总是低调的,不过动不动就是水很深,利益牵扯大,哈哈,估摸着境界、认知、交际圈啥的都是马爸爸等大佬级别吧,哎我等凡人格局未到,就看个热闹好了。

现阶段成功的方法有
  • 找服务商有VC账号的,帮你上传A+,但是完成后你就不能自己更改了(就是那种可以帮无品牌的卖家上A+的那种服务商,对我就是这么直接,不会像某些遮遮掩掩的,行业内就这么多东西,你不说我也会从别的途径知道,没必要,说实话,跳出这个行业你所掌握的东西在外行看来就是笑话和无意义的字节,对于某些看不惯我的人,你跳起来咬我屁股啊)
  • 能找到有老接口,也就是绕过资源库,比如批量上传
  • 抱大佬大腿
  • 动态图片格式有:GIF, WEBP, APNG, 其中gif和webp最好判断,所以只有png有漏洞可以钻,现在漏洞也补上了,就不要问还有什么方法了,除非如果你能让webp的动态图加上jpg的块,并能被识别为jpg且还能在浏览器中呈现动态,当我没说。

找服务商上传的图片路径是这样的:

通过VC账号上传

反正咱啥也不懂。但不管什么方法,终归都是殊途同归!平台总是查漏补缺不停完善改进的,不可能再去开历史的倒车。

手动狗头保命

还是老老实实搬砖,歪心思不要打了。

大致看一下亚马逊新的A+图片上传业务逻辑和处理机制

创建上传图片url,我使用的是原webp格式,手动改后缀为png

可以看到图片的上传接口为 /aplus/api/createUploadUrl

请求 URL: https://sellercentral.amazon.com/aplus/api/createUploadUrl
请求方法: POST
状态代码: 200 
远程地址: 23.48.230.6:443
引用站点策略: strict-origin-when-cross-origin
请求的对象, 谁调用,文件名
"library": "aplus",
"filename": "animated.png"
}

此时会有一个返回值,比如 9fccacfd-b332-47d2-9bc6-142ba0f16402.png

把图片上传至亚马逊图片服务器,可以看到后缀就是他自家的亚马逊云
请求 URL: https://aplus-media-library-service-media.s3.amazonaws.com/
请求方法: POST
状态代码: 204 No Content
远程地址: 52.216.163.75:443
引用站点策略: strict-origin-when-cross-origin
请求获取图片地址
请求 URL: https://m.media-amazon.com/images/S/aplus-media-library-service-media/9fccacfd-b332-47d2-9bc6-142ba0f16402.png
请求方法: GET
状态代码: 200 
远程地址: 18.65.152.148:443
引用站点策略: strict-origin-when-cross-origin

看一下请求头,这里也是100%成功的,你可以通过该url在线看到图片是可以访问的。点击访问

这个图片只能公共访问,但是!你只能从你的资源库添加图片至A+

:authority: m.media-amazon.com
:method: GET
:path: /images/S/aplus-media-library-service-media/9fccacfd-b332-47d2-9bc6-142ba0f16402.png
:scheme: https
将图片创建为你的资产库资源(到这里如果图片格式不符合,100%失败!)

调用创建你的资产库api接口,如果图片符合要求就写入数据库,如果不符合要求抛出错误。

请求 URL: https://sellercentral.amazon.com/aplus/api/createMediaMetadata
请求方法: POST
状态代码: 500 
远程地址: 23.48.230.6:443
引用站点策略: strict-origin-when-cross-origin
assetId: "/images/S/aplus-media-library-service-media/9fccacfd-b332-47d2-9bc6-142ba0f16402.png"
automaticTags: []
descriptions: []
humanTags: []
library: "aplus"
name: "animated.png"
type: "image"

然后喜闻乐见:报500错误

logType: "40000"
message: "Error while uploading an asset: Unexpected end of JSON input"

应该是在请求后端API接口时,使用JSON.parse()方法转对象,参数为空

为什么?因为我传的图片的格式是webp的,而允许的数组中的值或者返回的json里没有,所以传了个寂寞。

到这里,胆大心细的小朋友就想问了:那么能不能伪造一个post请求,我知道接口是什么了,也知道需要传的参数,到创建资源库的时候,我伪造一个请求不就行了吗?

理论上是可行的,如果没有签名,白名单等验证机制,是可以伪造的,就看你怕不怕秋后算账了,这只是一个推理,没有验证,不怕封店的可以试一下。

最后修改:2022 年 06 月 13 日
如果觉得我的文章对你有用,请随意赞赏