博客

闪电盒子产品分析

我很早之前就想有关互联网的产品,分析他们产品的怎么运作,怎么吸引用户,怎么盈利,技术核心点等等,但总因为各种事情停下来去写,这点确实还改正,如果每天抽取一点时间去学习新的东西,应该进步很大,以前不喜欢写博客,现在稍微好了一点,主要自己小时候语文太差了。

闪电盒子:

一个可以双开的软件,作者是以前droidplugin(android)开源的作者,这个产品核心技术也是droidplugin框架,后面就没有更新维护,不过核心代码分享出来也是非常不错了,当初也花了一段时间去学习。市面上双开软件很多,连无限多开都有,所以这点并不是该成品的优势。他们以红包方式,使用它的软件,企图用户只有他们系统的软件,尽可能不用系统的APP,这样子就可以长期霸占用户使用时间,然后通过流量变现,前期大量渠道推广。目前里面各种棋牌和交友类的广告,通过插入到新闻页面引流和程序启动APP。

用户人群:开始因为我被他们产品点子惊呆了,感觉他们希望在系统上再做一个系统,后面慢慢发现,他们只是通过红包去留住的用户的一个变种(跟做任务领取红包的升级版,你使用APP也是得红包),这样子导致他们用户群里是一些贪小便宜的一些用户,那么群体没有那么大,虽然他们说可以省电,但感觉这个点没有太大作用,因为现在的系统省电已经的足够好,我还提出过,要他们做一个vxp(一个可以在非ROOT使用 XPOSED 插件的功能,xposed 有很多微信和QQ的插件),那么可以对很多APP做很大的定制,这样子就是完成系统里面做子系统的意义,那么用户群里大了很多,你们要知道。微信的一键转发一年能卖多少钱(貌似几个亿)。。

流量:渠道花钱推广, 用户裂变(邀请好友,得奖励)。

变现:广告

有点:用一样的产品,但可以领取红包,留住用户。

缺点:产品竞争力不强,很容易模仿,因为技术大家都有。不能够成为一个平台,赚钱可以,但做大,做强很难,需要更多功能去吸引用户,不光靠红包。而且这套技术在后面android 版本兼容性堪忧,android 已经对这些HOOK技术做反HOOK,在别人平台活着,就看google爸爸心情了。。。

 

tip: 图片就不贴了,懒


最近发现大量这样的产品(多开+xposed技术,这个开源的人weisu,貌似现在也在靠这个创业,毕竟用户量被他做起来),有的是微商在卖,直接结合微信的一键转发在卖,别人也做到月活200W,然后应用商店好多这样的产品好多是免费的(X分身,比翼多开,貌似360也有一个这个版本的多开),他们都靠广告赚钱,也有会员(只能去广告)。但貌似看月活也是很恐怖。。。。

写PC微信辅助感悟1

最近只要有空就写PC辅助功能,今天一天基本完成发送图片,发送文件,添加好友(包括单向和群好友之类的hook点),成就感还是蛮高的,于是记录一下最近心得。

1:辅助本质:找函数和找数据

2:找函数,对于网络程序,一般是投递网络事件这个点,以前是send这个点,但是现在如果同步发送网络请求程序,估计都很low。如果tx写这么low b程序的话估计会被喷死,所以一般都是一个通用的网络库(肯定是异步与ui主线程分开),所以一定有一个通用的投递网络请求地方,微信就有一个,因为微信他们有打日志习惯。

SceneCenter::doScene 微信给这个函数起这个名字,所以后面写功能都会这个函数打断点然后就通过堆栈回溯,找到合适的hook点。

3: 一般windows 程序都是有事件循环,我们自己开发时候,总会有个mainwnd(微信就有一个,我们自己开发也差不多,无论你用mfc还是别的,微信用的duilib),如果找到这个合适点,那么很多功能就好写了,找到起点,这个点就是一个很好的hook点,因为我们开发程序,也喜欢这么写,一个大的事件循环,那所有的功能,统一通过事件来做,微信也差不多这么样子,这个也是最近我才想到这一点,一下子就加快功能开发,因为Hook点查找,要找到合适,就是要找到容易构建参数的地方,最好不要太多对象,不然我们要找到对象指针是从哪里传递的,又要分析好久,如果是全局对象,那么还好说,如果是局部变量,你又去找合适函数,怎么构建。那么这样递归下去,就搞的非常难搞了,所以找到主要事件循环起点,那个点一般参数都比较简单,就是常见的类型,一般不是对象,也有对象的存在。

4:根据第三种,那么事件循环,一般是一个窗口类,那么肯定有对应的ecx 指针对象,那么肯定这个不是全局变量,或者不是那么好找,我们怎么获取呢,事件循环,那么一定很频繁调用,我们只要在事件函数找一个点hook,获取ecx就可以了,然后保存在自己地方,那么就简单了。

5:数据查找,这个我目前没有找到非常方便方法,只能根据数据关系,慢慢查找。

总结:

其实写辅助,更加要求对程序开发能力,你这样子才能想出他们代码大概是怎么写的,所以程序员的基本功要牢。

http://www.xiaoyutang.net/wordpress/wp-admin/post-new.php

 

 

补充:

函数调用压入堆栈,不是每个都会用掉,可以调用时候,修改成0x0进行判断验证(前提通过代码分析是否有访问,然后再去验证)

服务器网络波动的坑

因为自己做防封系统,所以用户入口全部经过我的服务器,一天几十W IP 流量,但会出现网络连接和网络流量和数据库连接数彪起来,然后数据流量降下问题,我想了好久不知道问题在哪里。开始认为SQL 问题,后面发现这种情况出现的时候, 数据库根本就没有很多SQL语句执行,那么SQL语句就没有问题了。那么服务器代码写的有问题,哪里卡住导致,网络堆积起来,后面分析代码也没有问题。。。过几周,我在想是不是网络波动,因为为了免备案用的香港服务器,然后直接连接内地数据库。

因为以前别人都是用外部直接连接,没有内部连接。所以这个功能一直都是外部连接,当初我不做这个服务器开发, 我写完核心代码就没有管了。我后来直接香港服务器Nginx 代理内地服务器,这样子测试,测试一周基本非常稳定,这样就解决了备案的问题,又保证了服务器稳定性问题。

 

总结:

数据库数据传递比较多,一旦网络波动就数据库连接失败,或者数据传递慢,这样子导致服务器并发处理不过来。虽然香港服务器对内地服务器还是有波动,原因改成代理了,数据库数据不用传递到香港了,直接内网传递,速度不知道快了多少,服务器稳定提高了。

 

PC 微信删除群里面好友分析记录

背景:

花2天时间弄出来了,花了2天分析,怎么构建参数。找到函数位置比较顺利,但是构建参数,总是崩溃。这个就比较蛋疼了,做这个辅助软件,最怕就是参数够着,比找数据结构还恶心一点,所以我简单记录一下,等过一段时间再更新一下,上图片,现在用的家里的PC电脑,笔记本忘记带充电线,没法重新过一遍流程,只是把思路记录一下而已。

过程:

一般我们要找到合适的函数,我们需要通过特征值,找到有关的函数,然后回溯。所以最好找到底,否者你回溯没有任何意义,反过来找容易很多,顺着找分支过多,很那区分哪个是有用的。所以我一般希望回溯,通过堆栈参数,进行分析。然后尽可能找到好构建参数地点。

因为我前面做一些微信的辅助功能,所以找出所有cgi-bin字符串,通过英文找到有关删除群好友,然后就很顺利找到一个合适构建点,这个点肯定是参数什么群,删除什么人。所以我只要构建参数,我开始简单构建这2个参数,但发现堆栈破坏,明显构建参数不对,但找了半天没有找出来。后面想一定函数访问别的参数,所以跟函数里面,一个一个看,看他到底访问哪些地址,果然有几个地方,我没有构建对,导致访问野地址,导致崩溃了。。。。

待续。。。。。。。。。。。

 

 

centos 内存占用不符合实际情况

自己使用了好几台2核4G,总是出现内存总是被占用的很满,因为我只是启动一个tomcat,然后几个机器人人,所以每次使用内存的时候都小心翼翼的。因为java一旦内存不够就启动不了tomcat,或者直接进程挂掉

 

输入top,按shift+m,按内存占用百分比排序,发现应用也没占多少内存,那是什么占用的呢?
其实是CentOS为了提高效率,把部分使用过的文件缓存到了内存里。这样的话如果不需要这样的文件性能,可以直接释放来缓解内存压力。
sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息。
在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。sync命令则可用来强制将内存缓冲区中的数据立即写入磁盘中。用户通常不需执行sync命令,系统会自动执行update或bdflush操作,将缓冲区的数据写 入磁盘。只有在update或bdflush无法执行或用户需要非正常关机时,才需手动执行sync命令。
sync
echo 3 > /proc/sys/vm/drop_caches
我感觉sync没有什么用,就是同步缓存到文件,如果内存缓存很大,运行第二个命令,说明来不急刷新到磁盘就被清理掉了

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

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

过程讲述:

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

 

因为我第一次做微信公众号的网页的分享,所以百度加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)