JEB动态调试解密数据包加密字段

0x00 场景

在测试某个app的时候,抓取数据包,发现某些参数存在被加密的状况,或者有签名校验的状况,这个时候若是咱们想直接去篡改数据包的内容每每是作不到的,那就来看看抓取的某个app登陆数据包,以下所示,password字段明显进行了加密:java

接下来,就开始经过JEB对apk进行反编译后动态调试定位关键加密函数。android

0x01 对APP进行调试的前提

在Android系统中,若是须要调试Android应用程序,须要知足如下两个条件之一:app

  • apk配置文件AndroidManifest.xml中显示的声明了android:debuggable="true"。
  • 在安卓系统的根目录下的default.prop文件中ro.debuggable=1

对于上述的第一个能够调试android应用程序的条件,在android应用商店等下载的正式上架应用,一般不会遇到在AndroidMainfest中设置了android:debuggable="true"的状况,因此若是想要使用第一种方法,一般就须要对apk进行解包添加android:debuggable="true"再打包,随着加壳软件以及apk自己的校验等防御措施,再从新打包apk的过程每每容易出现异常,不容易成功,而第二种调试的条件在手机发布时或者官方的原版rom包中,ro.debuggable=0,也就是说默认不容许调试的,能够经过刷机的方式或者临时修改内存的方式进行修改:ro.debuggable=1函数

0x02 反编译apk文件

打开反编译工具JEB,直接将须要反编译的apk(未加壳)文件拖到JEB中便可进行反编译获得smali代码和java伪代码工具

等待一下子,反编译结束以下:测试

0x03 经过关键字搜索打断点

根据截取到的登陆数据包中的参数关键字(mobile_tel、op_station、mobile_uuid、terminal_os、terminal_platform、terminal_device、password、channel)在JEB的反编译文件Byecode中进行搜索,定位加密的关键函数的位置。网站

ctrl+F 开始进行搜索:ui

搜索到如下位置,不止一处位置相似与如下位置,将搜索到的此相似位置都打上断点编码

将可能的位置都打上断点事后,接着就开始进行调试了。加密

0x04 经过JEB调试找到加密函数位置

一、全部的断点都下好事后,点击调试按钮,附上设备程序,开始调试,以下:

二、当将手机上运行的应用附上JEB事后,操做app至登陆界面,点击登陆

若是刚才下的全部断点当中存在正确的,则点击登陆事后jeb会直接停在正确断点位置,反正,没有任何效果,说明断点没有打在正确的地方,须要从新搜索。

在调试过程中,会提示程序没有响应,记得点击等待

三、在断点处单击右键选择解析或者按tab键,跳转到当前断点位置的反编译的java源码处

发现password的值是由v0_2赋值而来

双击v0_2,跳转到以下位置处,说明v0_2的值在onClick()函数中获得:

继续在onClick()函数中找其余v0_2所在的位置

双击encrypt,跳转到加密函数所在位置

经过分析,基本能够肯定此处就为password字段加密的函数位置所在

接下来能够再经过下断点加以肯定,回到如下java源码位置,再按tab或者解析回到此位置对应的smali代码处并打下断点:

从新点击app应用的登陆,成功跳转到调用加密函数的断点位置,以下:

四、双击加密函数encrypt,进入加密函数所在位置,分析加密函数以便解密:

实现加密的函数以下:

实现解密的函数以下:

解密须要用到的相关密钥被硬编码以下:

五、最后根据加密函数中的填充模式,加密模式、密钥,数据块,偏移量信息经过在线网站解密

将数据包中抓取到的加密字段进行url转码事后解密以下,获得加密以前的原始密码

相关文章
相关标签/搜索