因SHA-256算法导致无法上传渠道包的问题
来源:互联网 发布:广元广电网络节目表 编辑:程序博客网 时间:2024/06/06 19:34
负责运营渠道的童鞋发给我这个问题时,感到不知所措,我们的Android客户端并没有使用过SHA加密算法,360从哪里判断安装包(参与360的活动,需要上传安装包)使用了此算法呢?查了下资料,涉及SHA-256算法的Java类主要有3个:
javax.crypto.Cipher;javax.crypto.SecretKey;javax.crypto.spec.SecretKeySpec;
找了下这3个类的关联引用,发现没有被引用过。想来想去,没什么好办法,恰好最近研究了阿里开源项目Dexposed,可以hook Java层任何类、函数,何不用这个工具追踪谁用了这三个类呢?
因为公司的产品包含淘宝客,使用了阿里提供的百川sdk,XPosed早于Dexposed,被阿里所采用(个人比较好奇,阿里自己用Xposed,却开源Dexposed项目),所以通过使用百川sdk中的Xposed工具同样能起到hook效果。其实这种hook更像是在虚拟机执行字节码的前后从底层去拦截。
Xposed的主要工具类是XposedBridge,通过方法hookAllMethods可以hook指定类的所有方法,并在方法执行前、过程中、执行后得到回调。因为要加载so库文件,所以又去翻了翻sdk中加载so库文件的工具类,不一会儿就找到了工具类com.alibaba.sdk.android.hotpatch.a.a.c,看来是被混淆了。现在万事具备,开始找找是谁调用了Cipher、SecretKey、SecretKeySpec这三个类,我分别在SecretKey的getEncoded、SecretKeySpec的构造函数、Cipher的getInstance加了hook,这3处也是方法的实现SHA-256算法的必经之地,最后在用XposedBridge hook前,调用加载so文件的接口函数。
XposedBridge.hookAllMethods(SecretKey.class, "getEncoded", new XC_MethodHook() { @Override public void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); throw new RuntimeException("SecretKey is used"); } }); XposedBridge.hookAllConstructors(SecretKeySpec.class, new XC_MethodHook() { @Override public void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); throw new RuntimeException("SecretKeySpec is used"); } }); XposedBridge.hookAllMethods(Cipher.class, "getInstance", new XC_MethodHook() { @Override public void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); throw new RuntimeException("Cipher is used"); } });
接着,程序跑起来...
应用刚启动,首先遇到了一个RuntimeException异常,查看日志,果然是有代码调用了相关类。最后排查出baidu定位sdk、新浪分享sdk都使用了此算法,这下麻烦大了,因为定位和分享是必须功能,但要解决问题就应该删掉这两个组件,这个时候面临两难选择,以后有时间再研究下解决方案,目前只有先去问问产品吧。
- 因SHA-256算法导致无法上传渠道包的问题
- 解决防火墙因存储空间被过多的更新包占用导致无法升级的问题
- 记一次因软件安装包问题导致的错误
- 因编码问题导致的flash上传中文文件名有的上传不成功
- 安装Tomcat时候提示因无法写入服务而导致无法安装问题的解决方法
- Windows下Oracle因主机名或IP变动,导致EM无法启动的问题。
- Django中因south导致Syncdb命令无法建立表的问题
- 解决开机时因静电导致鼠标、显示屏和键盘无法工作的问题
- Django中因south导致Syncdb命令无法建立表的问题
- 因修改账户名而有可能导致Android Studio无法启动的问题
- 解决运行ASP.NET MVC项目时,因版本不一致导致无法运行的问题
- 使用JMX监控WebLogic因classpath中jar包顺序导致的一些诡异问题
- 因编码格式问题导致的错误
- 因信号量问题导致ORA-27154无法启动数据库
- WePhone手机软件已下架 疑因资金问题导致无法使用
- Android 7.0 Nougat 无法安装渠道包问题
- 终极的代码混淆脚本,解决所有因代码混淆无法打签名包的问题
- SHA-256,SHA-512 和 AES128 算法的调用
- 数据库基础(sql基本指令)
- 为什么很多第三方接口,都改成了基于http,直接传递json数据的方式来代替webservice?
- 第三周项目3-求集合并集
- Window Mysql免安装配置
- 实现c语言中的可变参数函数
- 因SHA-256算法导致无法上传渠道包的问题
- 第三周项目1—顺序表的基本运算
- android 之对话框
- innerText 与 innerHtml的区别 (二)
- 安卓中常用的数据存储方式之普通文件存取
- css里一点很简单的常识
- JNI官方教程
- Caffe源码 比较好的一个网址
- IT笔试输入输出处理总结