Xposed学习之《hook某国外app实现自动识别谷歌验证码》

声明

1.所谓的自动识别谷歌验证码并不是真正的利用人工智能去识别谷歌验证码,在本文章中只是对接某国外的验证码识别平台来达到自动识别的效果,其目的就是为了学习下xposed而已。

2.有哪里说的不对的地方还请大家多多指教,本博主邮箱 itdreamlmc@163.com

3.版权声明:本文为博主原创文章,未经博主允许不得私自转载。

前言

        本博主作为一个屌丝java程序猿在业余时间总是闲着无聊想逆向搞些app拿来发泄下,一方面是为了提高自己编程上的安全意识,另一方面也是出于爱好。这不,就在周六的时候一个朋友就发了我这个国外某网络电话的app,这个app有的时候登录会出现谷歌的  I am not a robot 验证码,类似国内12306的验证码,我朋友发我之后问我能不能自动识别这个验证码,不用麻烦的每次都取验证。之后我就 google 了一番,偶然发现了 https://2captcha.com/ 这个强大的验证码识别平台,居然可以自动识别谷歌的验证码。于是看了下官方的api文档,发现对接这个平台识别谷歌验证码只需要调用他们的接口给他们传一个k值,然后返回一个id,之后过几秒钟之后用id去请求另外一个接口获取识别结果,然后将识别结果填写到页面的textarea的 value中验证就行了。

那么问题来了

1.要做识别的是一个 app,我们要怎么拿到k值呢?

2.我们拿到三方平台的识别结果又怎么给他设置并显示到app端呢?

这个时候就想起了四哥的文章,利用xposed 可以hook任意app的某偶些方法实现。于是就开始了我的hook之旅..........

抓包分析

        还是老套路,拿到app之后,管他是什么鸟app,直接抓他网络请求数据包然后简单大体上分析分析这种验证码图片是怎么返回的?又是怎么验证的?然后去想想解决方案。

1.首先打开抓包神器Fiddler,然后打开模拟器设置好代理ip跟端口(注:需要配置好Fiddler的证书,因为 这个app的验证码是google验证码,自然所有的网络请求都是https的,如果你不设置fiddler证书,那么自然就抓不到他的请求数据包了)。然后打开app登录账号我们会看到如下请求数据跟验证码。(本来想着抓app的验证码了,结果可到好,今天死活也不出验证码了,我就找来下网页的验证码做个参考,验证码都是一样的)


app登录页


验证码
请求数据

我们抓到数据之后按照识别平台的要求需要找到一个k值,跟出现验证码的页面链接然后提供给他们,之后就可以了。分析下抓 到的请求数据,我们可以看到对接谷歌验证码的sdk都会有个链接,且里面有k值,如图所示。

k值图

打开 https://2captcha.com/2captcha-api 识别平台api文档,找到接口说明如图所示

请求识别接口

请求接口

http://2captcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8&method=userrecaptcha&googlekey=6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-&pageurl=http://mysite.com/page/with/recaptcha?appear=1&here=now

key:对接平台的token令牌,申请之后就可以看到

googlekey:就是上边所说的k值

pageurl:就是显示验证码的页面地址

拼接好参数之后,请求接口会给我们返回一个id,之后延迟几秒钟之后我们在访问接口

http://2captcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

key:对接平台的token令牌,申请之后就可以看到

id:请求接口一返回的ID

获取响应结果如图所示


响应结果

拿到结果之后我玩们在给页面的textAreay设置value值为这个,这样可以通过验证了。


设置值


Hook WebView搞定app自动识别

        上边说了一大堆废话,其实就是一个简单的思路分析。如果我要达到自动识别的效果,其实最终就是给验证码页面里这个textarea 属性设置上验证码的值就行了。那么问题来了,app都是自动去请求谷歌的验证码,我们要怎么拿到请求的连接,有怎么去自定义响应数据呢?刚看到这个app的时候,为以为这个验证码就应该是一个图片,也是应该是imageview显示的,之后分析了分析,发现不并不是。之后Google了一番,才知道显示这个验证码的页面就是一个webview,对于我一个搞后来java的程序猿来说,对安卓自然也不是很懂,然后又不想放弃,所有就想到了xposed这个吊炸天的框架,既然webview能显示内容,那么肯定是通过某个方法,获取url连接,然后请求网络资源,拿到输入流显示数据。所以说,只要我们知道webview的获取url跟响应数据的方法,那么我们就可以通过xposed去hook这个方法,然后就可以轻松的获取参数响应数据了。

        Google了下,就看了这篇文章 http://blog.csdn.net/qq_19431333/article/details/52351437 ,才发现webview请求网络资源的时候,都会调用 shouldInterceptRequest 这个方法,如果这个方法的输入流不为空,则直接获取输入流显示数据,如果这个输入流为空,那么webview 就通过url去请求真正的网络资源。既然是这个样子,那么我们是不是可以来hook这个方法,来判断url是不是我们想要的url,如果这个url有k值 那么我们就去获取这个k保存下来,如果这个url是验证码页面的url,我们拦截下,通过url获取网络资源,然后通过第一步保存的k值去请求三方平台,拿到识别结果才替换进去,给app响应自然就完成了识别。下边是具体实现。

shouldInterceptRequest方法


开启webview允许js调用,允许js弹窗

webView.post(new Runnable() {

@Override

public void run() {

WebSettings settings = webView.getSettings();

settings.setJavaScriptEnabled(true);

settings.setJavaScriptCanOpenWindowsAutomatically(true);

}

});

调用三方接口获取识别接口

调用三方

给textarea设置属性(这里是插入一段 js代码,获取textare document对象进行设置)

设置识别结果

String replace = string.replace(oldStr, "测试提交啊");String jsText = "mytoken='"+ globaToken+ "';"+ "function testCall(){alert('success');document.getElementById(\"g-recaptcha-response\").innerHTML=mytoken;}";replace = replace.replace("", jsText + "\n");WebResourceResponse webResourceResponse = new WebResourceResponse("text/html","utf-8", new ByteArrayInputStream(replace.getBytes()));param.setResult(webResourceResponse);

之后打包apk按照到手机上就可以了。

收工,讲的不好请多多关照。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,820评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,648评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,324评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,714评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,724评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,328评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,897评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,804评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,345评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,431评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,561评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,238评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,928评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,417评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,528评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,983评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,573评论 2 359

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,702评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,120评论 4 61
  • 有一位道行很高的禅师叫金代禅师,他特别喜欢兰花,就在寺院旁边一个庭院里栽植了几百盆品种各异的兰花,在讲经说法的闲暇...
    禹音阅读 340评论 0 0
  • 昨天看到一朋友的,空间,都别人的生活,都过成了诗,成了歌。看到这句话,我的心好痛。我的生活过成什么?如果真的...
    冷处偏佳_阅读 183评论 0 0
  • 爱南方 那清丽的艳阳 透出内心的坦荡 透出真实的美好与险象 爱南方 那简单的眼态 没有叠嶂山峦的恢弘 没有曲曲幽径...
    消失的脑洞阅读 159评论 0 0