背景:昨天帮一位邻居在小区微信群里了发了一段文字,结果到了晚上街道派出所的民警叔叔就找到我家里,对从小德智体美劳全面发展的我进行了悉心的法制教育。

 这件事想了想 ,会给我带来的问题,身为程序员,如何避免这样的问题。

怎么发现的:估计是有网监程序在各个群里做监控,对于和谐社会的言论关键字进行抓取分析之类的,如果有,再进行人工查阅,下派任务,对该发表人进行定点监听。

带来的问题:由此大约会给我带来两个问题,一个是当前的问题,我的微信估计近期会受到网监的监控,怎么去除我微信的唯一识别是一个点,于是我抓紧换了微信头像和昵称(据以前开发网监程序的朋友说,微信抓取是按昵称和头像来的),也不知道这样靠不靠谱。二是以后的问题,以后发表这种敏感信息的时候,怎样才能不会网监做出关键字识别。识别大约是根据关键字,如果有图片的话,再图片转文字,降噪分析等。

破解的方法:也就是说我们尽量不发表文字,发表图片的话,会带来识别的难度。如果图片里的文字,有特殊字符混淆在里面的话,也会增加识别难度。

正文:进入正题,开工~

1、以C# winform为例写该小程序

2、效果:

输出的图片:

可以直接在微信群里Ctrl+V:

 

3、代码示例:

using System;
using System.Windows.Forms;
using System.Configuration;
using System.Threading;
using System.Drawing;

namespace WordsToImg
{
    public partial class frmWordToImg : Form
    {
        private char[] _specialChars;
        public frmWordToImg()
        {
            InitializeComponent();
        }

        private void frmWordToImg_Load(object sender, EventArgs e)
        {
            var specialChars = ConfigurationManager.AppSettings["SpecialChars"];
            this._specialChars = specialChars.ToCharArray();
        }

        private void btnGenerator_Click(object sender, EventArgs e)
        {
            string text = txtWords.Text;
            var texts = text.ToCharArray();
            Random rd = new Random();

            string textNew = "";
            foreach (var item in texts)
            {
                var run = rd.Next(3);
                Thread.Sleep(1);
                textNew += item;
                for (int count = 0; count < run; count++)
                {
                    var random = rd.Next(_specialChars.Length);
                    textNew += _specialChars[random];
                    Thread.Sleep(1);
                }

            }

            var img = CreateImage(textNew, false, 9);
            Clipboard.SetImage(img);
        }

        /// <summary>
        /// 生成文字图片
        /// </summary>
        /// <param name="text"></param>
        /// <param name="isBold"></param>
        /// <param name="fontSize"></param>
        public Image CreateImage(string text, bool isBold, int fontSize)
        {
            int wid = 400;
            int high = 200;
            Font font;
            if (isBold)
            {
                font = new Font("Arial", fontSize, FontStyle.Bold);

            }
            else
            {
                font = new Font("Arial", fontSize, FontStyle.Regular);

            }
            //绘笔颜色
            SolidBrush brush = new SolidBrush(Color.Black);
            StringFormat format = new StringFormat(StringFormatFlags.NoClip);
            Bitmap image = new Bitmap(wid, high);
            Graphics g = Graphics.FromImage(image);
            SizeF sizef = g.MeasureString(text, font, PointF.Empty, format);//得到文本的宽高
            int width = (int)(sizef.Width + 1);
            int height = (int)(sizef.Height + 1);
            image.Dispose();
            image = new Bitmap(width, height);
            g = Graphics.FromImage(image);
            g.Clear(Color.White);//透明

            RectangleF rect = new RectangleF(0, 0, width, height);
            //绘制图片
            g.DrawString(text, font, brush, rect);
            //释放对象
            g.Dispose();
            return image;
        }


    }
}
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!--增加系统变量-->
  <appSettings>
    <!--混淆用的特殊字符-->
    <add key="SpecialChars" value="«¬®¯°±²³☎☏✄☪☣☢☠♨« »☑✔☐☒✘㍿☯☰☷♥♠♤❤♂♀★☆✡※卐" />
  </appSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

 

4、鉴于别有人拿着这个违法乱纪,工具就不挂出来了,代码很简单,有用的,自己拿代码编译一下~~

 

posted on 2018-11-10 10:09  倪宏志  阅读(768)  评论(0编辑  收藏  举报