逆向XposedHook模块分析Hook检测过Vpn抓包原理!

偶然发现一款名为过Vpn检测的Xposed模块,对于喜欢玩逆向的我来说肯定是要测试一番,使用VirtualXposed运行该模块,发现的确可以过掉软件的vpn检测,然而我测试的是我自己开发的小软件,哎呀,不行啊,我得分析一波,防防它。

经过反编译定位得到关键代码:


image.png

以及:


image.png

可以看到作者使用第三方加密库(我猜的)对字符串进行加密了,那么不慌,动动脑筋就可以想到凡是加密字符串的到最后都会有一个解密过程,只要拿到解密过后的字符串就可以了。本来Xposed就有提供一个打印日志的功能,那么直接在Hook模块里面加入打印函数打印出解密后的字符串就可以了。

使用smail代码:
invoke-static {v0}, Lde/robv/android/xposed/XposedBridge;->log(Ljava/lang/String;)V
分别插入字符串解密后的位置,这里需要注意存器的位置

image.png
image.png

然后打包,签名,安装,测试,结果输出log:
上面的三个字符串对应的分别是:
PzUwTBY7MTIDdjAgMUJKPh0oWV0nMidOXQ==
java.net.NetworkInterface

MjEyY1k4MQ==
getName

JzkoSEwKMCdZWWQ=
rmnet_data1

那么现在就很清楚了,原来判断是否启用Vpn是判断java.net.NetworkInterface.getName()是否等于“tun0”或“ppp0”,而使用hook模块以后直接hook函数getName的返回值为“rmnet_data1”,所以程序判断为不是启用vpn,即可达到过vpn检测目的。

解决方法:
1、判断网络时加个判断,判断是否等于“rmnet_data1”
2、程序启动时判断手机安装列表是否存在安装包包名为以上Hook模块(一些软件防抓包会用到这个思路)
3、直接检测是否安装启用xposed框架(这类应用遇到好多个了)

你可能感兴趣的:(逆向XposedHook模块分析Hook检测过Vpn抓包原理!)