博客

微信公众号分享网页注意实现

最近自己要做微信分享的防封,就研究一下市面做的分享防封原理,基本分流防封是一个做法。

过程讲述:

通过一个微信公众号分享一个入口,记住这个分享内容网页的内容最好一点违规的都没有,标题和图片可以带有诱导性的,然后在自己这个页面写好跳转代码,跳转到你要展示的代码里面,这里的跳转不要立即跳转可以加定时器,然后多少秒跳转,这个这个地方就可以加分流防封逻辑。之后后面对接,就要看用户了,比喻小说登录授权的应该是应该要用单独跳转的安全域名,只要用安全域名展示内容,否者可能出现封的情况。

 

因为我第一次做微信公众号的网页的分享,所以百度加google,但看的懵懵懂懂的,所以自己决定写一篇入门篇。

基本概念:

微信公众号:

js安全域名:一个备案的域名在公众号里面要设置,设置要求能够通过这个域名访问一个txt文件,我们可以用nginx 的root关键字访问这个txt就可以了

location /wxdomain {
root f:
}

那么你访问 http://域名/wxdomain/xxxx.txt  你这个txt 放在f: /wxdomain。

基本能马上验证,这个域名作用使你能够,你调用微信公众号网页API,否者你无权调用,切记切记。

IP白名单:设置才有资格获取一个微信公众号的token

acces_token:这个token,通过一个API 获取的到,具体看开发文档,具体这个这个API只能指定的IP白名单才能调用,不是任何机器能调用的,过期时间2个小时。建议用redis保存

     ticket: 用token作为参数,通过API获取的一个值,用于生成校验值的。见开发文档,过期时间2个小时。建议用redis保存

网页页面开发:

       注意设置的值格式,别填写了,然后跳转的域名只能指定安全域名,但jssdk demo竟然可以分享豆瓣的。貌似以前裂变人,用了一个另外一个可以分享任意地址,具体,第一个开发建议开启debug,如果微信打开就是各种弹框,起码你知道问题在哪里。

服务器:

用它的demo给的类就差不多了,主要检验的url,应该是你的请求的域名的全部路径,文档说#之前,我的不可能出现#,就不考虑这种情况。

 

服务器的demo 和 jssdkdemo 都在jssdk开发文档页面,你进入公众号的里面开发者里面就能找到

如果出现android可以分享,苹果不能分享是你的分享的地址没有带HTTP

 

 

项目感悟-2018年8月17日 19:59:16

自己做微信检测和微信域名防封项目一段时间了,产品目前越来越成熟,用户慢慢变多,认识很多玩互联网的人。渐渐明白技术很重要,也不重要,有些人一点技术不懂,但有自己套路,一样一个月赚10多W或者更多,但他们的局限也明显,不懂技术或者不认识懂技术的人,导致他们很多思路没法实现。

我自己认为做技术应该多动脑子,用自己的技术顺便赚点钱,然后赚钱同时又会对自己技术有要求,然后不断提升技术,然后又不断赚钱,这样良性循环下去。

 

广告时间:

微信域名检测和防封系统:

www.weixin136.com

www.weimice.com

PC 微信群好友刷新过程

最近在做微信群好友列表读取,难点就是好友信息可能存在数据库里面,这样子好友特殊树就没有存放数据,导致我无法获取好友的昵称。群里拉新人,新人数据会存放好友特殊树里面,第一次进群通知,那么我是可以做到。但如果微信好友(非好友,群里面非好友)已经缓存数据库,那么这个数据。我无法获取,只能刷新群的好友列表,目前我还没有找到这个合适的地方。我看别人的做的时候也有这样的刷新的处理。


我发现一个简单就是删除账号下面的miscmsg.db这个,每次就能刷新了。

mysql的show processlist命令大作用(转载)

mysql的show processlist命令大作用

 

不知道谁是原创是谁了。

这个是用分析是不是数据库问题,一个比较重要命令

1.当连接数据库时,报错“too many connections”,就可使用此命令查看有哪些线程正在执行

2.主要列解释
– command 列,显示当前连接的执行的命令,一般就是休眠( sleep ),查询( query ),连接( connect )
– time: 执行时间,单位秒
– state: 当前连接的sql语句的状态,很重要的列,state只是语句执行中的某一个状态,

这个命令中最关键的就是state列,mysql列出的状态主要有以下几种:

Checking table
正在检查数据表(这是自动的)。

Closing tables
正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。

Connect Out
复制从服务器正在连接主服务器。

Copying to tmp table on disk
由于临时结果集大于tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。

Creating tmp table
正在创建临时表以存放部分查询结果。

deleting from main table
服务器正在执行多表删除中的第一部分,刚删除第一个表。

deleting from reference tables
服务器正在执行多表删除中的第二部分,正在删除其他表的记录。

Flushing tables
正在执行FLUSH TABLES,等待其他线程关闭数据表。

Killed
发送了一个kill请求给某线程,那么这个线程将会检查kill标志位,同时会放弃下一个kill请求。MySQL会在每次的主循环中检查kill标志位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么kill请求会在锁释放时马上生效。

Locked
被其他查询锁住了。

Sending data
正在处理SELECT查询的记录,同时正在把结果发送给客户端。

Sorting for group
正在为GROUP BY做排序。

Sorting for order
正在为ORDER BY做排序。

Opening tables
这个过程应该会很快,除非受到其他因素的干扰。例如,在执ALTER TABLE或LOCK TABLE语句行完以前,数据表无法被其他线程打开。正尝试打开一个表。

Removing duplicates
正在执行一个SELECT DISTINCT方式的查询,但是MySQL无法在前一个阶段优化掉那些重复的记录。因此,MySQL需要再次去掉重复的记录,然后再把结果发送给客户端。

Reopen table
获得了对一个表的锁,但是必须在表结构修改之后才能获得这个锁。已经释放锁,关闭数据表,正尝试重新打开数据表。

Repair by sorting
修复指令正在排序以创建索引。

Repair with keycache
修复指令正在利用索引缓存一个一个地创建新索引。它会比Repair by sorting慢些。

Searching rows for update
正在讲符合条件的记录找出来以备更新。它必须在UPDATE要修改相关的记录之前就完成了。

Sleeping
正在等待客户端发送新请求.

System lock
正在等待取得一个外部的系统锁。如果当前没有运行多个mysqld服务器同时请求同一个表,那么可以通过增加–skip-external-locking参数来禁止外部系统锁。

Upgrading lock
INSERT DELAYED正在尝试取得一个锁表以插入新记录。

Updating
正在搜索匹配的记录,并且修改它们。

User Lock
正在等待GET_LOCK()。

Waiting for tables
该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线程关闭这个表。以下几种情况下会产生这个通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE,或OPTIMIZE TABLE。

waiting for handler insert
INSERT DELAYED已经处理完了所有待处理的插入操作,正在等待新的请求。
大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。
还有其他的状态没在上面中列出来,不过它们大部分只是在查看服务器是否有存在错误是才用得着。

PS:
命令: show processlist;
如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接。
show processlist;只列出前100条,如果想全列出请使用show full processlist;

钉钉自动打卡(无需root)

钉钉自动打卡工具,按照指定时间,模拟人工进行签到和签退,不是模拟定位,因为这种方式,目前市面所有沙箱都会被钉钉检测出来,所以采用自动模拟人工打卡,解决忘记打卡,或者某个特殊时刻。完美支持android 7.0以上(包括7.0) ,7.0 只能支持极速打卡版本。

##前提条件: 1:android 7.0 或者以上 2:手机不能设置密码。(不然屏幕锁屏之后,无法解锁) 3:小米手机要设置权限开启 锁屏显示。(其他手机如果有类似的权限,进行对应的设置,如果不知道,可以开启所有权限)

##使用说明: 1:开启辅助服务,找到钉钉盒子开启即可 —> 点击设置辅助服务 image

2:设置时间 —->点击设置时间 可以设置任意时间,可以添加多次,方便自己的忘记打卡。 可以设置签到和签退时间,没有先手顺序,都是根据时间点进行运行 image image

3:点击开始 点击开始,然后关闭屏幕就可以了,不需要一直亮屏幕。(建议保留钉钉盒子在前台,就是点击开始锁屏就可以了,就不要操作了)

点击下载(https://dingdinghezi.github.io/apk/app.apk)

PC微信多开工具代码-消息钩子+ZwQuerySystemInformation(8.20更新)

目录

  1. 效果图
  2. 分析借鉴别人的文章—>https://www.52pojie.cn/thread-608108-1-1.html
  3. 知识点分享
  4. 其他实现多开的方式
  5. 源代码下载
  6. 后续

 

2:分析思路

虽然我看的别人思路,但看时候其实自己也想了一些。

  • windows单例实现方法,CreateEvent CreateMutex FindWindow(不是很好,有可能出现多个,鼠标点的快的话) , 主流就这几个吧。作为单例标准:我认为是跟进程有关资源,当进程结束掉,就会释放资源。这是非常关键的,一旦不具备这样条件,程序异常退出,用户是打不开程序,因为资源还占用。所以写文件或者注册表这种方式是不合适的。根据这个条件那么命名管道,Socket Bind 理论上也可以作为单例方法,只是大家用的不多而已. 我们顺推就可以分析这些作为句柄。试着用工具ProcessXp关闭是否能多开
  • 上面方式算是黑盒,所以不一定能百分百分析,可以通过OD 给ExitProcess 通过堆栈分析到他们的单例代码?这样子无能用什么方法,都能分析出来。(前期需要有这个分析能力和经验)(IDA静态分析也可以)

 

3: 知识点

  • 前提选择关闭句柄的方式(引用为0情况下就会释放),开始我 注入 微信 CreateMutex 打开然后CloseHandle 能关闭句柄 ,发现都不可以,因为用CreateMutex引用计算就加1了,所以CloseHandle 也没有意义。
  • 我们要找到一个能拿到句柄,又不会引用计算增加,于是就用找到ZwQuerySystemInformation 函数,这个微软一个没有公开的函数,我把网上封装了一下,修改部分代码能够在我的win10 64系统上跑起来。貌似这个这个函数返回的句柄值,不知道这个跟原始句柄值是不是一样的,那么直接CloseHandle() 一下是不是可以(和微信同一个进程情况下,我没有测试)
  • 关闭句柄,用的DuplicateHandle  DUPLICATE_CLOSE_SOURCE 来关闭句柄。

4: 其他方式多开

  • IDA 找到合适代码,直接修改那端代码(可能会增加封号风险,因为改了文件,如果有检验就GG)
  • HOOK CreateMutex ,返回NULL 或者修改名字(每次随机生成),这种时机要对,必须在微信CreateMutex之前处理。
  • 其他待定

5: 自己源代码地址:https://github.com/xvsdf100/PCWeChatMore

执行程序下载:

https://github.com/xvsdf100/PCWeChatMore/releases/tag/1.1

 

6: 后续

有时间把多开合并到一个窗口里面再加上快速发言,然后加一个按钮升级来推广PC HOOK 微信机器人是不是很爽(虽然只开发了一半就没有写了(实现发送和接收和群的功能))

更新:增加tab功能,可以方便管理微信,暂时没有增加置顶菜单

小鱼博客:www.xiaoyutang.net

 

 

 

android沙箱之路1-核心技术点

##classloader 的hook
没有hook classloader 没法生成对应的实体
##这个过程过掉android 对Activity 在 AndroidMainifest.xml 没有注册Activity验证
1:hook ActivityManager 服务,当ta StartActivity替换插件的Activity
2:hook ActivityThread mHandler 替换成我们要启动插件
##资源hook
如果我们没有HOOK Context,那么资源也要hook
##Context Hook
这个必须分析整个Context 构造的过程
1:Activity Context
2: Service Context (基本和Activity Context)
3:App Context
这个是重点,因为android Context 特别重要,很多数据获取都和这个有关系,那么插件里面代码用到一些数据,如果没有hook到就会崩溃
##文件路径HOOK
因为插件改变了路径,如果还是原来路径就会有问题
##APK包的解析
因为我们要知道APK的所有的入口和包名。
本质不管Activity service都java 里面的类,我们只要反射生成对应的就和我们自己代码差不多少。
所以我们可以用调用APK的包的代码,我们可用DexClassLoader加载代码
这篇文章应该持续更新,慢慢在自己下班时间写一个android 沙箱工具。MyDroidPlugin 准备这个名字来命名自己的工程, 感谢DroidPlugin 开源能够引流整个技术,带来很多很多有意思的产品,虽然android 不这么认为,但起码多开程序带来很多方便。

获取第二天凌晨12点的时间戳

/**
* 获取明天的凌晨12点时间戳
* @return
*/
public static long getTomorrowBegin() {
long now = System.currentTimeMillis() / 1000l;
long daySecond = 60 * 60 * 24;
long dayTime = now – (now + 8 * 3600) % daySecond + 1*daySecond;
return dayTime;
}

daySecond 一天的秒数, 加8原因  1970-1-1 08:00:00 多了8个小时,所以必须多减掉8个小时,开始也没有明白,后面new Date(0) 得出时间就是1970-1-1 08:00:00

解决远程连接阿里云redis方案

为了本地调试远程工程,减少本地代码修改,写了一个端口转发

https://github.com/xvsdf100/pport-forwarding-

命令: java -jar PortNatTools.jar 本地监听端口 目标地址 目标端口 nohup java -jar ./PortNatTools.jar 本地监听端口 目标地址 目标端口 & (长期后台运行命令)

转发redis操作(windows):

1:修改host ip地址 你自己的.redis.rds.aliyuncs.com 这样本地都不用改代码就可以执行运行了

2: 在一个阿里云使用我的转发工具。

nohup java -jar ./PortNatTools.jar 6379 dst_ip dst_port

如果需要修改协议内容,需要一个协议过滤层

centos 安装java环境

因为新的环境的服务器里面没有java环境,所以需要重新搭建java环境

1:查看yum 仓库里面java的安装包

yum list java*

 

2:安装某一个版本

yum  -y install  java-1.8.0-openjdk.x86_64

直接复制一个版本就可以了,建议复制1.8 目前最高这个版本就是这个,版本越高运行的兼容性越好。