Android监控服务器进程

相信很多同学遇到过在服务器上跑的程序被掐了或者莫名奇妙挂了的情况,特别是长时间运行的程序,如deep learning的训练,白白浪费一天可不好玩。因此我想了各种姿势监控我的程序,比如进程一旦消失就发邮件通知等等,感觉姿势不够美妙,于是最近鼓捣了一下,发现了神器。


Termux

Termux简直太吊了,简直就是一个五脏俱全的debian,你敢信他有apt?也就是可以安装ssh、python、git…..,所有的包可以看github。帅爆了,当时我就把那个弱鸡QPython删了。既然有了python,那能做的事就多了去了。当然也可以使用pip,只是像numpy的库依赖C库的包装不了。一言不合我就在安卓上装了个Flask。来看个Termux跑在Nexus 5上的截图,依次是当计算器的Python,跑了Flask的Python和Flask的网页。

termux flask flask2

 

帅的不能自理。是不是觉得配色有点难看,没事,可以付2.49刀买个Termux:Style,虽然我觉得改个配色应该很简单。这个开发者太有节操了,要钱的都是无关紧要的,不要钱的像Termux,Termux:API都很要紧,为了表示感谢,我买了个Termux:Widget(当然后面也能用到)。ssh就用 apt install openssh 就行了,然后跟普通Linux操作一样设置无密码登录就行了。Easy!备份手机能就变得很方便了,使用神器rsync,就一句命令如 rsync -aXvh --delete -P /sdcard/ "ssh -p port" user@ip:backup ,而且由于是增量备份,只有第一次备份可能需要花一点时间。总之,Termux真是相见恨晚。


定时SSH执行远程命令

回到正事,我要监控服务器,必须能跟服务器通信啊。我不想开个端口,比如HTTP比较容易,但增加一个端口就增加了风险,因此选择SSH来执行远程命令是坠吼的。我经常用的Serverauditor好是好,但是不能命令行运行啊,那不是坑爹吗。或者用CyanogenMod(2016/12/24 网站关闭卧槽!),更像Linux一点,直接内置ssh,但我还是想用原生android的。另外更重要的是要定时啊,类似cron的功能,这个得借助另一个神器Tasker完成。Tasker就强大了,有JuiceSSH的Tasker插件,tm的,太贵了。还可以用connectbot,然后让tasker发起intent,参考此处彼处。我觉得还是Termux靠谱,这时Termux:Widget就派上用场了,通过Tasker调用Secure Settings来执行Termux:Widget中的脚本。好像有点复杂,可以看看作者怎么说(关于发送短信到电脑)。整个Tasker流程如下,关键是执行Shell脚本那步,我是设定每60分钟执行一次,错误就发送通知,还播放雷姆声音提示哦!

tasker

还有很多tasker能做的事情,比如用雷姆声音提醒喝水,记录自己的轨迹(wifi信息),转发短信,自动回复微信等,非常帅!花点钱是值得的。如果你有一个女朋友,可以发送短信给她让她提醒你,用termux-api就能从命令行发送短信了,详见termux-api

 

 

最近高产似母猪啊,要把之前没更的全补回来。

微信聊天记录分析

解密聊天记录数据库


2017年2月12日更新:微信6.5.*可能已经更改读取方式,具体还没了解。

微信6.2.5使用sqlcipher进行AES加密,因此我们要得到密钥,根据编译的信息,可以得知微信使用 key=md5(IMEI+uin) | cut -c -7 , 即取md5的前7位做为密钥。解密微信聊天数据库就是简单的一行代码,(注意sqlcipher新版本(3.x)默认不向下兼容,需要使用,cipher_use_hmac 是兼容1.1.x,kdf_iter 是兼容2.1.x的)。

IMEI很容易获取,uin在shared_prefs/多个文件中存在,如com.tencent.mm_preferences.xml,auth_info_key_prefs.xml, system_config_prefs.xml。理论上是在system_config_prefs.xml文件中的default_uin,注意有可能是负的,之前我没有意识到这个问题,导致一直解码不成功,直到看了这个博客。ps. 负数是因为溢出 int32(2639833126) = -1655134170 。

解密曾经登录过的帐号(多个用户的微信)


网上的解密聊天记录都是以登录帐号为基础的,直到我阴差阳错发现这个牛逼的微信聊天记录导出应用。重点不是在他能导出,而是他能导出之前登录过的帐号的聊天记录。仔细的思考一下,一旦有过登录,微信就会生成一个32位长的用户文件目录如 da60995c77c8cd8b47f69cc38e7a52cc ,一看就知道是个md5的hash。根据测试,在不同的机子上这个文件夹名是不变的,也就是说只跟微信ID(wx_user_name, uin…)有关,所以是跟微信哪个id是一一映射的? 感觉还是跟uin有关。

分析那个应用的包网络通信,发现他跟服务器通信只用了文件目录名如 da60995c77c8cd8b47f69cc38e7a52cc ,所以可以肯定能够通过目录名逆推uin。我尝试了不同的组合 wx_uin,wechat_uin... ,都不对。看来只能反编译。

反编译

直觉上来说,反编译微信的难度太大。还是反编译那个聊天记录导出应用好了。写应用的那哥们还是比较专业的,都做了加密和混淆,而且貌似是手动的,导致里面的字符串都难以识别。经过努力,还是破解了那哥们的加密方式,看得懂应用源码中的字符串就事半功倍,不到1小时就发现原来

TM就是前面加了”mm”。注意 uin=-1655134170 是负的。。至此,就能够逆推uin,也就是说你手机丢了,别人还是能够破解你的微信聊天记录,因为uin是int啊,找md5不要太快!所以多用户的微信当某一用户退出后能通过这种方法破解得到uin,然后破解聊天记录文件。爽歪歪。。

聊天记录整理


这方面已经很人做了,比如github上的wechat-dump,效果还是可以的,稍微有点问题,日后再改

日后改了一些东西,最重要的是微信的头像文件不再单一保存,而是用 avatar.index 来索引,保存在一个大文件中avatar.block.0000x。经测试,可以得知用户头像以avatar.index中的数值为起始位置,找到avatar.block.0000x相应连续的96×96×3×4个连续字节就算用户头像的bitmap(png.bm)。具体见代码

 

 

国庆期间,别人在玩,我在写代码。这波不亏

 

参考


在Genymotion中使用微信

由于手机焊飞了,需要临时有个代替的微信,但是平板在实验室太不方便,就想能不能在电脑上运行微信。网页版的微信不过瘾啊。这折腾了我整整一天。

Genymotion

Genymotion 号称是最快的android模拟器,因为他用的是x86的架构,直接在virtual box上运行,总之安装了就行了。然后得安装一个镜像。这一步我就傻逼了。如果要用微信这些,必须得用Android 4.3以下的,因为4.4用了不同的虚拟机ART (我用的是4.2.2的,好像4.3的微信也会闪退)。为什么这样会有问题呢,因为Genymotion是X86的,他在2.0版本移除了ARM和GAPPs,他要运行apk的话要有一个指令翻译的东西。否则就会出现INSTALL_FAILED_CPU_ABI_INCOMPATIBLE或者安装之后闪退。

ARM 支持

要正常使用这些APK,就要有ARM的指令翻译。根据这个Gist,我们可以安装一个叫ARM Translation的包,如果有需要的话再安装一些google的软件。而这个东西,只支持4.3之前的版本,之后的版本会有bug,作者自己也说了

Xprivacy

有时候微信会检测是否是模拟器登陆,导致帐号被封。根据网友的经验,使用Xprivacy禁用微信的一些请求后可以防止被封。可以自行安装xposedxprivacy,好像xposed也很好玩。

 

Wechat

我用的是5.3.1版本的(原链接失效,我放了一份在百度云,密码是 gfd3),去掉了更新提示,但保留原签名,就不会出现下面这种警告信息。

当前设备安装了非官方客户端。为了帐号安全,请不要使用非官方软件。访问http://weixin.qq.com/下载安装微信官方最新版本。如继续使用非官方软件,通过当前设备登录的所有帐号都可能被封号。

然后用Xprivacy去掉微信的一些权限,反正我用到现在都没有被封号。但是每天凌晨都提醒我

你的微信登录环境存在异常。为了帐号安全,请不要通过模拟器等途径登录微信。如继续在异常环境下使用微信,通过当前设备登录的所有帐号都可能被封号。


 

看看现在的模拟器安卓,是非常不卡的。

genymotion