2020-09-15

墨迹天气安卓版签名验证简单分析

作者:好中文的样子 所属分类 - 安全 - 黑科技

最近有小伙伴跟我反馈墨迹天气安卓版本加强了签名验证,小伙伴们怎么都无法解决,于是个人亲自去看了看墨迹天气安卓版APP的所谓加强签名校验。目前分析的版本为安卓8.4.8版本,从墨迹天气网站下载,也是目前的最新版。不得不说墨迹天气的官网做的是比较漂亮的,也看不出来这种UI好看且看起来无害的软件,会有各位破解大佬头疼的签名验证啊。据一位破解大佬称,想去除这个软件内置广告的时候,遇到了新版软件闪退或者自动退出的问题,猜想是更改了旧版的签名检测逻辑。

墨迹天气

通过简单解包查看,我们可以发现墨迹天气安卓版是无壳的,甚至没用好Proguard,基本上打开等于明文。这说明这种软件,是不可能有太高级的安全防护的,但是朋友们说的用所谓一键去签名检验软件闪退的情况,也确实是存在的。朋友使用的是某逆向工具箱里的一键去除签名检测,而没有使用我们的SK超强去除任何安卓/iOS软件自校验+HOOK,毕竟SK系列软件/SK软件工具箱商业版价格不菲,不是一般人能承担得起的。

但是凭我们多年逆向经验的直觉,这种防护如此差的软件,防护绝对是不可能在纯C层实现的(毕竟嫌麻烦嘛),必定和Java层有交互,而且软件有个特点,更改签名以后,联网了才会崩溃。于是,100%确定软件必定是联网以后,上传信息,按照回传的所有信息进行检测,检测不通过就exit。

查看朋友发给我的已去签名验证样品,发现该样品仅仅替换了系统自带的IPackageManager(用于签名检测的简单PMS HOOK),嗯,这种替换可以被花式检测并定向秒杀,不过对于大多数正规软件足够了。带着疑惑,我使用了我们自己的SK一键去签名,发现墨迹天气没闪退啊,完全木有问题,也就是说这种检验在我们的理解范围以内。至于朋友说的软件签名验证全部C层,动脑想想,这种软件可能嘛?全部so都没上任何反调试或者反逆向的点,在so也是单纯把Java的操作放进C层(JNI),简称,脱裤子放屁。

墨迹天气官方宣传示意图

言归正传,在猜想到墨迹天气开发者的软件开发水平不高,安全意识一般,抗爆破能力必定不好。最重要的一点是软件是联网验证的逻辑,所以必定是软件打开以后,联网上报相关信息,不对的话就调用主动退出的代码。而且这种网络层面的传输,我赌五毛,绝对是在Java层里面,事实也是在Java层。软件作者不可能水平高到C层集成一个网络库,再通过TCP之类的调用的。其实,不一定是软件作者水平不高,这种网络传输谁会挂TCP层,那不是没事找事嘛。我们做软件的,主要精力在User Interface上,而不应该是这些小细节。

经过简单分析,跟入墨迹天气的所有关于联网的逻辑,很容易找到其中一个很特别的函数,这个函数名字叫nativeEncodeParams,跟进去,哦豁,知道是什么问题了。这个函数在Native层,也就欺负一些不会C语言的新手了,但是对于我们来说是完全明文的检测。为了不为难大家,我们直接放出调用链(见图),不需要大家手动一个一个分析,也不需要大家去研究那个无聊的Native函数。那个无聊的Native函数没混淆,检测逻辑没必要去看,上世纪用烂的东西,只是恰巧在Native层,躲过了很多Java层的轰炸而已。另,这个检测逻辑,跟网上流传的烂大街代码一模一样,猜想作者是Ctrl+C超算工程师,直接Copy某SDN或者某书网站上扒下来的源码。

墨迹天气签名检测逻辑

其实这个没混淆的Native函数非常好分析,同时Java层的函数Proguard也没用对地方,这种检测逻辑可以说是几万年之前就有的了,所以我们并不需要在乎这种一两个无法使用通用去除签名检验的软件。如果仅仅是去掉各种广告,简简单单在POST_JSON上加个判断,相关检测直接返回,不调用即可。

至此,分析结束,对于墨迹天气的签名检测分析也告一段落,希望这款软件的作者再接再厉,继续加强软件自检验逻辑。

麦科技原创 转载请说明出处。

小彩蛋:墨迹天气HOOK了printStackTrace、exit日志等,让一些DEBUG或者CRASH内容不输出,这个也是分析so时发现的,比较有趣,在此记录一下。