zl20110000 发表于 2021-8-14 18:34

csdn 去除csdn博客上传图片水印

本帖最后由 zl20110000 于 2021-8-14 22:51 编辑

### 1.分析

- 1.1 关键词搜索定位js




- 1.2 从这里就可以看出生成水印的url(这里有一个`.gif`判断,这里先埋个伏笔,等会找到位置后,可以利用这个规则修改生成的url)



- 1.3 排查执行方法栈,发现函数`onImageUpload`,继续搜索,




- 1.4 注意这个暴露出来的全局方法`window.csdn.uploadSource`,定位这个函数的js文件,可以通过断点,或者直接搜索`uploadSource`,定位的js文件,源码表示这是一个立即执行的函数表达式,在里面对window.csdn.uploadSource赋值。其实看到这里,基本流程都已经很清晰了。




- 1.5 生成水印分为两种,1.上传图片,通过参数决定上传图片是否加上水印,这里可以通过,将watermark参数置空 2.还一种就是之前旧版的生成url链接的形式,这种直接去掉后面的参数就可以了


- 1.6 回到之前的流程中,有一个`setWatermark`方法,这里有判断加水印的规则





### 2.注入js

[加条件断点](https://www.52pojie.cn/thread-1485179-1-1.html)

重新定义 `window.csdn.uploadSource` 方法


还记得上面说的`.gif`伏笔吗,这里可以修改返回的url值,就可以避免生成的url附加水印参数



### 3.虽然来52很久了,但是没发过贴,不清楚可不可以贴写好的油猴脚本。如果有违规,我立马删掉
~~~js
// ==UserScript==
// @name         csdn去除水印
// @namespace    https://greasyfork.org/scripts/465212
// @version      0.1
// @descriptioncsdn去除水印
// @author       zl20110000
// @match       *://editor.csdn.net/*
// @icon         https://g.csdnimg.cn/static/logo/favicon32.ico
// ==/UserScript==



(function() {
"use strict";
! function (e, t) {
    function a(e) {
      return Object.prototype.toString.call(e).match(/\/)
    }

    function r(e) {
      function r(e) {
            return new Promise(function (a, r) {
                t.ajax({
                  url: "https://imgservice.csdn.net/direct/v1.0/image/upload",
                  type: "get",
                  contentType: "application/json",
                  dataType: "json",
                  data: {
                        watermark: o,
                        type: l,
                        rtype: p
                  },
                  headers: {
                        "x-image-app": s,
                        "x-image-dir": c,
                        "x-image-suffix": e.name.split(".")
                  },
                  xhrFields: {
                        withCredentials: !0
                  },
                  success: function (t) {
                        if (200 === t.code && t.data) {
                            var i = t.data,
                              c = new FormData,
                              s = {
                                    key: "" + i.filePath,
                                    policy: i.policy,
                                    OSSAccessKeyId: i.accessId,
                                    success_action_status: 200,
                                    signature: i.signature,
                                    callback: i.callbackUrl,
                                    file: e
                              };
                            for (var o in s) Object.hasOwnProperty.call(s, o) && c.set(o, s);
                            n(c, i.host, a, r)
                        } else r(t)
                  },
                  error: function (e) {
                        r(e)
                  }
                })
            })
      }

      function n(e, a, r, n) {
            t.ajax({
                url: a,
                type: "post",
                contentType: !1,
                processData: !1,
                dataType: "json",
                mimeType: "multipart/form-data",
                data: e,
                xhrFields: {
                  withCredentials: !0
                },
                success: function (e) {
                  console.log(e);
                  if (200 === e.code && e.data && e.data.imageUrl) {
                        e.data.imageUrl+="?_.gif"
                  }
                  console.log(e);
                  r(e)
                },
                error: function (e) {
                  n(e)
                }
            })
      }
      var i, c = e.dir,
            s = e.app,
            o = "",
            l = e.type,
            p = e.rtype;
      console.log(e);
      return i = "FileList" !== a(e.file) && "Array" !== a(e.file) ? : Array.prototype.slice.call(e.file),
            function (e) {
                return Promise.all(e.map(function (e) {
                  return r(e)
                }))
            }(i)
    }
    e.csdn = e.csdn || {}, e.csdn.uploadSource = r
    console.log("替换完成",e.csdn.uploadSource);
}(window, jQuery);
})();
~~~


xilidexiao 发表于 2021-8-14 21:58

随意csdn文章已存在的水印图片 能逆回原图吗

星空下的流星 发表于 2021-8-14 22:21


以前无意中觉得   
.png不是图片了吗?
要不 “png 后面的东西删了,留个 ) 会怎么样”。结果,水印就没了,哈哈哈

zl20110000 发表于 2021-8-14 22:45

xilidexiao 发表于 2021-8-14 21:58
随意csdn文章已存在的水印图片 能逆回原图吗

看1.5说明。服务端就已经加上水印了,其实,你上传的这些图片都是处理后的图片,以前图片里面可以加入一些自己的信息,比如很早之前的种子图片。现在csdn都会去除掉,有些图片还会被压缩。所有基本不可能逆向原图

zl20110000 发表于 2021-8-15 09:52



// ==UserScript==
// @name         csdn去除水印
// @namespace    https://greasyfork.org/scripts/465212
// @version      0.1
// @descriptioncsdn去除水印
// @author       zl20110000
// @match       *://editor.csdn.net/*
// @icon         https://g.csdnimg.cn/static/logo/favicon32.ico
// ==/UserScript==



(function() {
"use strict";
! function (e, t) {
    function a(e) {
      return Object.prototype.toString.call(e).match(/\/)
    }

    function r(e) {
      function r(e) {
            return new Promise(function (a, r) {
                t.ajax({
                  url: "https://imgservice.csdn.net/direct/v1.0/image/upload",
                  type: "get",
                  contentType: "application/json",
                  dataType: "json",
                  data: {
                        watermark: o,
                        type: l,
                        rtype: p
                  },
                  headers: {
                        "x-image-app": s,
                        "x-image-dir": c,
                        "x-image-suffix": e.name.split(".")
                  },
                  xhrFields: {
                        withCredentials: !0
                  },
                  success: function (t) {
                        if (200 === t.code && t.data) {
                            var i = t.data,
                              c = new FormData,
                              s = {
                                    key: "" + i.filePath,
                                    policy: i.policy,
                                    OSSAccessKeyId: i.accessId,
                                    success_action_status: 200,
                                    signature: i.signature,
                                    callback: i.callbackUrl,
                                    file: e
                              };
                            for (var o in s) Object.hasOwnProperty.call(s, o) && c.set(o, s);
                            n(c, i.host, a, r)
                        } else r(t)
                  },
                  error: function (e) {
                        r(e)
                  }
                })
            })
      }

      function n(e, a, r, n) {
            t.ajax({
                url: a,
                type: "post",
                contentType: !1,
                processData: !1,
                dataType: "json",
                mimeType: "multipart/form-data",
                data: e,
                xhrFields: {
                  withCredentials: !0
                },
                success: function (e) {
                  console.log(e);
                  if (200 === e.code && e.data && e.data.imageUrl) {
                        e.data.imageUrl+="?_.gif"
                  }
                  console.log(e);
                  r(e)
                },
                error: function (e) {
                  n(e)
                }
            })
      }
      var i, c = e.dir,
            s = e.app,
            o = "",
            l = e.type,
            p = e.rtype;
      console.log(e);
      return i = "FileList" !== a(e.file) && "Array" !== a(e.file) ? : Array.prototype.slice.call(e.file),
            function (e) {
                return Promise.all(e.map(function (e) {
                  return r(e)
                }))
            }(i)
    }
    e.csdn = e.csdn || {}, e.csdn.uploadSource = r
    console.log("替换完成",e.csdn.uploadSource);
}(window, jQuery);
})();

涛之雨 发表于 2021-8-19 00:02

这怎么还md和bbcode混排的{:301_1008:}
图片因为bbs的特有属性(其实是bug)推荐通过附件或者图片功能上传,
然后其他用md的就可以了

libaogui2022 发表于 2022-12-7 20:11

感谢分享
页: [1]
查看完整版本: csdn 去除csdn博客上传图片水印