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

0x00 场景

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

007VEB6Sgy1g5khplv7p3j30el045q3i.jpg

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

0x01 对APP进行调试的前提

在Android系统中,如果需要调试Android应用程序,需要满足以下两个条件之一:

  • 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伪代码

007VEB6Sgy1g5khx94y60j30da072wfc.jpg

等待一会儿,反编译结束如下:

007VEB6Sgy1g5khyhyhjaj30dm06ign1.jpg

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

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

ctrl+F 开始进行搜索:

007VEB6Sgy1g5ki1r8nscj30fg04swgj.jpg

搜索到以下位置,不止一处位置类似与以下位置,将搜索到的此类似位置都打上断点

007VEB6Sgy1g5ki2ygqgfj30fg05s40r.jpg

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

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

1、所有的断点都下好过后,点击调试按钮,附上设备程序,开始调试,如下:

007VEB6Sgy1g5ki5fe8afj30fg09swhp.jpg

2、当将手机上运行的应用附上JEB过后,操作app至登录界面,点击登录

如果刚才下的所有断点当中存在正确的,则点击登录过后jeb会直接停在正确断点位置,反正,没有任何效果,说明断点没有打在正确的地方,需要重新搜索。

007VEB6Sgy1g5kiaf85r3j30fg07vmzl.jpg

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

007VEB6Sgy1g5kibsf1yyj3087040mx6.jpg

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

007VEB6Sgy1g5kie5psvuj30a405jdhk.jpg

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

007VEB6Sgy1g5kiez6axbj30d8042gma.jpg

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

007VEB6Sgy1g5kig73ajrj30cx06cmx8.jpg

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

007VEB6Sgy1g5kih3nrsbj30bt06iab4.jpg

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

007VEB6Sgy1g5kihmoal7j30d404b0tg.jpg

通过分析,基本可以确定此处就为password字段加密的函数位置所在

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

007VEB6Sgy1g5kija4ejqj30d704m3z9.jpg

007VEB6Sgy1g5kijnlyfaj30d901baa6.jpg

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

007VEB6Sgy1g5kil89fjnj30da01m3yp.jpg

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

实现加密的函数如下:

007VEB6Sgy1g5kirn54hpj30dt04iab1.jpg

实现解密的函数如下:

007VEB6Sgy1g5kisv96ppj30dx05p757.jpg

解密需要用到的相关密钥被硬编码如下:

007VEB6Sgy1g5kimwhi5wj30b700qdfu.jpg

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

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

007VEB6Sgy1g5kj55jle0j309d0420ss.jpg

转载于:https://www.cnblogs.com/ldhbetter/p/11286083.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值