Script for clean the duplicate files for DSM

2020年已经过去大半了,更新一下博客,刷一下存在感。

去年收了一个暴风影音播客云二期,安装了破解版的黑群晖。每三个月更新一次Let’s Encrypt证书。

但它的Android客户端很奇怪,每次更新证书之后就无法再登录了,需要把App缓存清掉,重新登录,导致的后果就是需要重新设置备份文件目录。然后就每次重新开始备份手机上的视频照片,关键不是增量的,需要全部重新备份。

ssh进入系统后就可以看到重复的文件,文件名加了后缀_1, 例如 VID_20200913_170932_1.mp4, 文件太多超过2W个, 不能手动去删除,于是顺手就写了一个脚本去自动删除。

原理很简单,先找到那些不含_1后缀的文件,然后查看是否存在_1后缀的文件,文件存在的话就直接删掉,310G变到202G了,清理了100G+的空间。

#!/bin/sh
count=0
remove=0
for file in `ls|grep -v "_1\." `
do
	((count++))
	#echo -n "${count} "
	name=`echo ${file}|cut -d "." -f1`
	ext=`echo ${file}|cut -d "." -f2`
	dup_file=${name}_1.${ext}
	echo -n  "total:${count}, 

2019年终总结

09总结|2010年终总结|2011年终总结|2012年终总结|2013年终总结|2014年终总结|2015年终总结|2016年终总结|2017年终总结|2018年终总结|2019年终总结

今年还是要写点什么,数下来已经算是第十一个年头了。

说到年底,今年应该是最近最热的一个冬天了,按照往年的习惯已经早就是寒气逼人了,而今年却有点冬天未过而春天已来的感觉,暖暖的冬日,晒着阳光,微风拂面,颇有春日暖阳的感觉。

工作十一年了,现在算起来已经是第五家公司了,也算是目前呆得最久的一家公司了。常言道,“铁打的营盘,流水的兵”, 一次又一次地重复着,而最近刚好也在经历着已往类似的情形。还记得9年前离职从苏州来到上海,当时有感慨,“相濡以沫,不如相忘于江湖”,十年过去了,兄弟姐妹们也都散落东西,有联系的,没联系的,后来就都断断续续的联系少了,时光匆匆流去,你还记得谁。

感慨完毕,书归正文,2019年还是有几件小事情可以拧出来说一下。…

Google IO的仪式感

今天又是一年一度的Google IO大会,已经坚持了好多年在线观看Keynote。其实每一年都会有些不一样的感受,今年也不例外。

更像是仪式,每一种东西都需要一个仪式感来让她显得很特别。而看Google IO大会现在更像是一种仪式感。其实说真的,现在网络这么发达,第二天一早基本上打看网站就有人把所有的Highlights总结的清清楚楚了,大概花个5分钟的时候浏览一下,也就有了最近几天饭后的谈资。

而现在这更像是一种习惯。以前看到的是激情,而现在看到的更多的是一种云淡风清。十年移动互联网的一线从业经验,看到了各种风起云涌,”眼见他起高楼,眼见他宴宾客,眼见他楼塌了”,一切都在不经意间地做着各种转换,豪气一点可以说”我自横刀向天笑”,低调一点就是”任尔东西南北风”,南来北往,好不热闹。

最近大环境也不是太好,各种裁员横扫了大江南北,顿时有种秋风萧瑟的意味,就好像老上海街角的法国梧桐叶,在沙沙声中带走了时光,也带走了往夕的热闹,当然现在是春天却是别有一番风味了。

长江后浪推前浪,前浪死在沙滩上。这句话用在技术人身上是再合适不过了。一年又一年的新技术层出不穷,当然也成就了”傻子太多,骗子不够用”的笑话,人傻钱多却又不失为一种犀利。

末尾了,只是不知道今年又是哪一番新的气象。

以上码于Google IO 2019大会开场前一个小时。…

Android bypass SSL Pinning

很多Android App现在出于安全考虑都会加上SSL Pinning,有时在Charles Debug过程中会不是太方便,当然可以加一个设置一键关掉这个功能。

最近刚好看了一些关于Frida的资料,发现这个东西用来做代码注入很方便,而且平台通吃,Android/iOS/Linux/Mac。

找到下面这个JavaScript脚本,可以在不侵入原Apk的情况下,去掉SSL Pinning, 通过Charles启用SSL Proxy,在手机设置好Charle代理,直接明文抓到所有请求。

Java.perform(function() {
    var array_list = Java.use("java.util.ArrayList");
    var ApiClient = Java.use('com.android.org.conscrypt.TrustManagerImpl');
    ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) {
        // console.log('Bypassing SSL Pinning');
        var k = array_list.$new();
        return k;
    }
}, 

Wordfence Premium

编辑wp-contentplugins/wordfence/lib/wordfenceClass.php, 添加下面的这段配置

wfConfig::set('isPaid', 1);
            wfConfig::set('keyType', wfAPI::KEY_TYPE_PAID_CURRENT);
            !!wfConfig::set('isPaid', 1);
            !!wfConfig::set('keyType', wfAPI::KEY_TYPE_PAID_CURRENT);

改好之后为

	// Sync the WAF data with the database.
		$updateCountries = false;
		if (!WFWAF_SUBDIRECTORY_INSTALL && $waf = wfWAF::getInstance()) {
			$homeurl = wfUtils::wpHomeURL();
			$siteurl = wfUtils::wpSiteURL();
            // Add by Jianqing, 2019/04/02
            

Android P(9.0/API Level 28) 升级不完全教程

自从去年Google强制升级target API到26之后,Google就开始计划着下一波的升级,而这次是要升级到9, 也就是target API level 28,而且日期也已经定了 “November 1, 2019″。

以前每次API升级都是小打小闹,并不会有那种大规模的改动,而这次改动就有点大了。当然这次强制target API升级对国内开发者的影响会小一些,因为毕竟不用发布到Google Play,而国内应用市场这么多,各个要求也都参差不齐,所以短期还是安全的。

这次改动其实动的最大的就是非官方API的调用,也包含”Java Reflection”,基本上可以说国内要用到的那些动态APP升级方案都基本被伤了,网上搜了一下,也找到一些厅淫技巧,可以绕过去官方的这个限制,正所谓道高一尺,魔高一丈,但总的来说这样做是不推荐的,因为不知道系统又做个升级,就把这些方案给干掉。官文给了黑名单列表和灰名单列表,黑名单是一定要修复的,灰名单只是一个过渡阶段,后面看Google的心情什么时候在系统层面强制执行,那就必须都修复。2019年的Google IO大会在即,就看这次Google有什么表示。

具体我们需要做什么/take away

把官方相关的文档都看过了,下面这些是我认为比较重要的地方

  • Migration to androidx/JetPack
  • Network TLS enabled by default, so need double check https is enable by default.
  • Non SDK APIs call scanning,