0x00 场景

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

接下来,就开始通过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伪代码

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

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

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

ctrl+F 开始进行搜索:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实现加密的函数如下:

实现解密的函数如下:

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

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

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

JEB动态调试解密数据包加密字段的更多相关文章

  1. 【转】安卓逆向实践5——IDA动态调试so源码

    之前的安卓逆向都是在Java层上面的,但是当前大多数App,为了安全或者效率问题,会把一些重要功能放到native层,所以这里通过例子记录一下使用IDA对so文件进行调试的过程并对要点进行总结. 一. ...

  2. 转:使用IDA动态调试WanaCrypt0r中的tasksche.exe

    逆向分析——使用IDA动态调试WanaCrypt0r中的tasksche.exe 转:http://www.4hou.com/technology/4832.html 2017年5月19日发布 导语: ...

  3. 动态调试smali代码学习记录

    预备知识 DDMS Dalvik Debug Monitor Serivce,Dalvik调试监控服务,为Android SDK提供的一款拥有监控Dalvik虚拟机的调试软件,启动文件位于<An ...

  4. 动态调试Android程序

    最近好几天来一直在看动态调试.首先是这一篇(http://www.52pojie.cn/forum.php?mod=viewthread&tid=293648)里面介绍了多种IDA动态调试的情 ...

  5. Java 动态调试技术原理及实践

    本文转载自Java 动态调试技术原理及实践 导语 断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径.但断点调试会在断点位置停顿,使得整个应用停止响应. ...

  6. 安卓动态调试七种武器之离别钩 – Hooking(下)

    0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试 ...

  7. 安卓动态调试七种武器之孔雀翎 – Ida Pro

    安卓动态调试七种武器之孔雀翎 – Ida Pro 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是 ...

  8. 安卓动态调试七种武器之长生剑 - Smali Instrumentation

    安卓动态调试七种武器之长生剑 - Smali Instrumentation 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是 ...

  9. mybatis动态调用表名和字段名

    以后慢慢启用个人博客:http://www.yuanrengu.com/index.php/mybatis1021.html 一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用 ...

随机推荐

  1. Hacking/Penetrating tester bookmark collection

    Blogs http://carnal0wnage.blogspot.com/ http://www.mcgrewsecurity.com/ http://www.gnucitizen.org/blo ...

  2. 矩阵的运算:Python语言实现

    一.矩阵的加减法 import numpy as np #这里是矩阵的加法 ar1=np.arange(10).reshape(10,1) ar1 ar2=np.arange(10).reshape( ...

  3. Android6.0 源码修改之Setting列表配置项动态添加和静态添加

    写在前面 最近客户有个需求,要求增加操作Setting列表配置项的功能,是不是一脸懵,没关系,一图胜千言,接下来就上图.诺,就是这么个意思.   原来的列表配置项     增加了单个配置项     增 ...

  4. kotlinx.android.synthetic.** 坑点

    Kotlin通过添加 apply plugin: 'kotlin-android-extensions' 可以直接使用layout id 名称获取当前view对象,详细使用如下: //layout & ...

  5. GitHub最强技术面试手册:Tech Interview Handbook

    摘要: 求职还是需要认真准备的. 原文:超实用技术面试手册,从工作申请.面试考题再到优势谈判,GitHub获30000星 作者:量子位 技术人员求职面试,单刷leetcode上的大厂题库可能还不够. ...

  6. swoole2——Worker与TaskWorker进程

    1.swoole 的进程模型 swoole是一个多进程模型的框架,当启动一个进程swoole应用时,一共会创建2+n+m个线程,n为worker进程数,m为TaskWorker进程数,1个master ...

  7. git submodule git 子模块管理相关操作

    Git 子模块操作相关的一些命令备忘: # 当使用git clone下来的工程中带有submodule时,初始的时候 submodule的内容并不会自动下载下来的,需执行如下命令: git submo ...

  8. 线性代数笔记24——微分方程和exp(At)

    原文:https://mp.weixin.qq.com/s/COpYKxQDMhqJRuMK2raMKQ 微分方程指含有未知函数及其导数的关系式,解微分方程就是找出未知函数.未知函数是一元函数的,叫常 ...

  9. 纯CSS实现自动轮播,CSS变量的定义与使用,计算属性的使用

    先来看一下实现的效果: 实现原理: HTML中使用ul>li存放图片 CSS使用CSS3的animation来完成动画 <!-- HTML --> <section class ...

  10. LG3825/BZOJ4945/LOJ2305 「NOI2017」游戏 dfs+2-SAT

    问题描述 LG3825 BZOJ4945 LOJ2305 题解 发现对于每个地图,如果没有\(A,B,C\)地图不可以使用\(a,b,c\),就是一个\(\mathrm{3-SAT}\)问题. 有了这 ...