在测试某个app的时候,抓取数据包,发现某些参数存在被加密的状况,或者有签名校验的状况,这个时候若是咱们想直接去篡改数据包的内容每每是作不到的,那就来看看抓取的某个app登陆数据包,以下所示,password字段明显进行了加密:java
接下来,就开始经过JEB对apk进行反编译后动态调试定位关键加密函数。android
在Android系统中,若是须要调试Android应用程序,须要知足如下两个条件之一:app
对于上述的第一个能够调试android应用程序的条件,在android应用商店等下载的正式上架应用,一般不会遇到在AndroidMainfest中设置了android:debuggable="true"的状况,因此若是想要使用第一种方法,一般就须要对apk进行解包添加android:debuggable="true"再打包,随着加壳软件以及apk自己的校验等防御措施,再从新打包apk的过程每每容易出现异常,不容易成功,而第二种调试的条件在手机发布时或者官方的原版rom包中,ro.debuggable=0,也就是说默认不容许调试的,能够经过刷机的方式或者临时修改内存的方式进行修改:ro.debuggable=1函数
打开反编译工具JEB,直接将须要反编译的apk(未加壳)文件拖到JEB中便可进行反编译获得smali代码和java伪代码工具
等待一下子,反编译结束以下:测试
根据截取到的登陆数据包中的参数关键字(mobile_tel、op_station、mobile_uuid、terminal_os、terminal_platform、terminal_device、password、channel)在JEB的反编译文件Byecode中进行搜索,定位加密的关键函数的位置。网站
ctrl+F 开始进行搜索:ui
搜索到如下位置,不止一处位置相似与如下位置,将搜索到的此相似位置都打上断点编码
将可能的位置都打上断点事后,接着就开始进行调试了。加密
若是刚才下的全部断点当中存在正确的,则点击登陆事后jeb会直接停在正确断点位置,反正,没有任何效果,说明断点没有打在正确的地方,须要从新搜索。
在调试过程中,会提示程序没有响应,记得点击等待
发现password的值是由v0_2赋值而来
双击v0_2,跳转到以下位置处,说明v0_2的值在onClick()函数中获得:
继续在onClick()函数中找其余v0_2所在的位置
双击encrypt,跳转到加密函数所在位置
经过分析,基本能够肯定此处就为password字段加密的函数位置所在
接下来能够再经过下断点加以肯定,回到如下java源码位置,再按tab或者解析回到此位置对应的smali代码处并打下断点:
从新点击app应用的登陆,成功跳转到调用加密函数的断点位置,以下:
实现加密的函数以下:
实现解密的函数以下:
解密须要用到的相关密钥被硬编码以下:
将数据包中抓取到的加密字段进行url转码事后解密以下,获得加密以前的原始密码