180114 逆向-安卓绕过第三方模块(某易验证码)
2018-01-15 02:09
603 查看
1625-5 王子昂 总结《2018年1月14日》 【连续第471天总结】
A. 某易滑块验证码绕过
B.
因为某些原因,需要考虑绕过APK上的这玩意儿~
最先想到的是按键精灵模拟操作,稍微查了一下发现python貌似有现成的模块,但是对于原本为按键精灵的脚本来说不太方便
如果重写识别的话,还需要再研究一下原理~
最简单的方法就是直接对APK逆向,猜测流程如下
Created with Raphaël 2.1.0用户用户客户端客户端某易某易点击注册按钮发起验证码请求显示滑块验证码操作返回结果显示验证结果
虽然验证码的判断部分在服务器上处理的,
但无论某易的模块再怎么强大,判断再怎么无敌
作为第三方对客户端都一定有一个结果接收和转发的过程
也就是说,可以在客户端对返回结果的处理上下手
原理和爆破支付接口类似,第三方都有这个通病,客户端自身的逻辑处理不好跟某易无关╮(╯_╰)╭
应对方法大概只有加壳、混淆客户端来对抗Patch了吧
首先查看某易官方的文档,发现在安卓实现中有两种方法:
1. 直接集成(SDK/源码)
2. 调用SDK接口
本文中直接使用的后者
粗略浏览一遍例程,使用的函数名虽然很明显,但是其实是可以更改的
因此特征只有SDK接口那几个函数
我先查找了checkParams(校验参数)函数,感觉这种保证稳定性的函数基本不会缺少并且在使用前肯定会调用一次
找到两个调用
前者估计是集成的SDK,后者很明显是本身APK的代码(打码部分是APK的公司名)
直接从客户端自身的代码下手–柿子当然捡软的捏,某易代码的完善性怎么想都比这种小公司的高啊
果然发现了这里
很明显嘛,正确的时候调用了一个新的ShieldEvent,错误则直接return
那改smali把上边的if爆破掉好咯
if-nez直接注释掉就行
完成后重打包成APK安装,实践还是不行╮(╯_╰)╭
注意到这里有Log,用adb logcat查看
发现虽然这里的CaptchaListener返回验证成功了,但是Log显示还有一个myCaptcha在报错
最终我是单步调试跟到那个方法中的,直接搜这个字符串应该也能找到
这里调用了自身的类中的方法,可以看出来验证正确的时候是在这里通过captchaDialog对象的dismiss方法来关闭验证窗口
这样就理清业务逻辑了:
某易的SDK进行发送请求、显示验证码等等功能,当验证码判断正确的时候回到原APK中,并进行二次检查结果
所以刚才只爆破原APK中的二次检查是没有用的—因为SDK中判断未通过,压根不会回到原APK中
于是把两个判断都爆破掉,终于成功√
另外由于安装了Xposed框架,在查看logcat的时候也监听到了SDK发包的地址和内容。这样在对方后台的数据统计可能会增加大量的错误验证,导致引起怀疑
最好的方法显然是直接爆破掉调用SDK的部分,直接继续进行,这样不仅压根不显示验证码,而且也不会在后台留下痕迹,以后有空再研究吧~
C. 明日计划
看书~
A. 某易滑块验证码绕过
B.
因为某些原因,需要考虑绕过APK上的这玩意儿~
最先想到的是按键精灵模拟操作,稍微查了一下发现python貌似有现成的模块,但是对于原本为按键精灵的脚本来说不太方便
如果重写识别的话,还需要再研究一下原理~
最简单的方法就是直接对APK逆向,猜测流程如下
Created with Raphaël 2.1.0用户用户客户端客户端某易某易点击注册按钮发起验证码请求显示滑块验证码操作返回结果显示验证结果
虽然验证码的判断部分在服务器上处理的,
但无论某易的模块再怎么强大,判断再怎么无敌
作为第三方对客户端都一定有一个结果接收和转发的过程
也就是说,可以在客户端对返回结果的处理上下手
原理和爆破支付接口类似,第三方都有这个通病,客户端自身的逻辑处理不好跟某易无关╮(╯_╰)╭
应对方法大概只有加壳、混淆客户端来对抗Patch了吧
首先查看某易官方的文档,发现在安卓实现中有两种方法:
1. 直接集成(SDK/源码)
2. 调用SDK接口
本文中直接使用的后者
粗略浏览一遍例程,使用的函数名虽然很明显,但是其实是可以更改的
因此特征只有SDK接口那几个函数
我先查找了checkParams(校验参数)函数,感觉这种保证稳定性的函数基本不会缺少并且在使用前肯定会调用一次
找到两个调用
前者估计是集成的SDK,后者很明显是本身APK的代码(打码部分是APK的公司名)
直接从客户端自身的代码下手–柿子当然捡软的捏,某易代码的完善性怎么想都比这种小公司的高啊
果然发现了这里
很明显嘛,正确的时候调用了一个新的ShieldEvent,错误则直接return
那改smali把上边的if爆破掉好咯
if-nez直接注释掉就行
完成后重打包成APK安装,实践还是不行╮(╯_╰)╭
注意到这里有Log,用adb logcat查看
发现虽然这里的CaptchaListener返回验证成功了,但是Log显示还有一个myCaptcha在报错
最终我是单步调试跟到那个方法中的,直接搜这个字符串应该也能找到
这里调用了自身的类中的方法,可以看出来验证正确的时候是在这里通过captchaDialog对象的dismiss方法来关闭验证窗口
这样就理清业务逻辑了:
某易的SDK进行发送请求、显示验证码等等功能,当验证码判断正确的时候回到原APK中,并进行二次检查结果
所以刚才只爆破原APK中的二次检查是没有用的—因为SDK中判断未通过,压根不会回到原APK中
于是把两个判断都爆破掉,终于成功√
另外由于安装了Xposed框架,在查看logcat的时候也监听到了SDK发包的地址和内容。这样在对方后台的数据统计可能会增加大量的错误验证,导致引起怀疑
最好的方法显然是直接爆破掉调用SDK的部分,直接继续进行,这样不仅压根不显示验证码,而且也不会在后台留下痕迹,以后有空再研究吧~
C. 明日计划
看书~
相关文章推荐
- 180115 逆向-安卓绕过第三方模块(某易验证码)(2)
- selenium2java通过第三方登录绕过知乎登陆验证码
- 第三百八十三节,Django+Xadmin打造上线标准的在线教育平台—第三方模块django-simple-captcha验证码
- MTK安卓第三方内核模块编译
- Python学习常用第三方模块:PIL,生成验证码
- python基础-第三方模块PIL_绘图,验证码
- Python常用第三方模块PIL(anaconda下载)
- java功能模块--给手机发送验证码
- 【实战】用户模块,验证码程序
- 记一次第三方验证码踩过的坑
- 安卓逆向学习笔记(8)- 破解NDK层的签名校验
- 模块初识2-模块的默认保存路径Python36-32\\lib\\site-packages,Python36-32\,标准库和第三方库
- Android实战简易教程<三十九>(第三方短信验证平台Mob和验证码自动填入功能结合实例)
- 安卓第三方工具类 Toast弹窗:Toasty
- 模块(2)-安装第三方模块
- nginx安装第三方模块的方法
- 安卓项目中常用的第三方框架推荐
- 零基础自学用Python 3开发网络爬虫(五): 使用第三方模块快速抓取与解析
- 安卓集成SharedSDK第三方平台分享
- 泡菜模块和几个对文件处理的 第三方模块