android加密参数定位实现方法

 更新时间:2021年04月01日 08:35:55   作者:考古学家lx  
这篇文章主要介绍了android加密参数定位方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

在逆向一个Android程序时,如果只是盲目的分析需要阅读N多代码才能找到程序的关键点或Hook点,本文将分享一下如何快速的找到APP程序的加密参数位置,其实不论是找关键位置、找hook点,找加密参数、代码逻辑追踪,都是类似的处理方法。

巧用搜索-静态分析

一般静态分析找加密参数的流程都是先查壳(脱壳)、反编译、查找程序的入口方法、分析程序的执行流程。
假设已经使用Android killer反编译了未加壳的app,直接使用工程搜索检索需要查找的参数名,根据AK的反馈信息进行对比,找到其对应的参数位置。也可以根据应用执行流程逐行向下分析代码,比较累。

objection定位

objection是基于Frida的动态分析工具包,可以免root动态调式apk,同时支持iOS和Android。安装方法可以到github查看。Github:https://github.com/sensepost/objection
在通过搜索之后如果有几个不确定的位置,则正好可以使用Objection,Objection就是专业的定位小能手,从定位流程上来说也只有三步。

1、注入目标进程

objection -g com.xxx.xxx explore 

2、跟踪类

android hooking watch class 'com.xxx.xxx.lx.ApiSign'

3、查看入参和返回值

android hooking watch class_method 'com.xxx.xxx.lx.ApiSign.a' --dump-args --dump-return

然后通过参数和返回值与请求接口中的协议进行对比就可以却确定究竟是在哪一个位置了。

frida-hook

frida、xposed这类hook工具也是动态分析的一种。假设某App的接口有 signature 签名,并且该参数值看上去非常像是Base64,并且长度为定长且少于20位。这个时候如果通过工具全局搜索没有找到,则可以通过frida凭感觉Hook下App中所有操作Base64的位置。
Frida代码如下:

var Base64Class = Java.use("android.util.Base64");
Base64Class.encodeToString.overload("[B", "int").implementation = function(a,b){
 var resault = this.encodeToString(a,b);
 console.log(">>> Base64 " + resault);
 if(resault.length <= 20){
  var stackAdd = threadinstance.currentThread().getStackTrace();
  console.log("resault stackAdd is:" + Where(stack));
 }
 return rc;
}

通过这种方式大概率能打印出签名计算的位置,这也属于巧计的一种,大家一定不要忘记这种定位方式。

log注入

代码注入也属于动态分析,流程是先修改apk的smali代码,既是在某关键函数前加入 android/util/Log 输出,配合LogCat 查看程序执行时的log数据。

关于android/util/Log的 Log extends Object 一共有5个方法:Log.v() Log.d() Log.i() Log.w() and Log.e()

一般使用Log.v() 日志输出函数就可以了,不做案例了,详细内容会往书中写。

动态调试

其实定位的方法只有两种静态分析和动态分析,动态调试也属于动态分析,和上面的方法异曲同工。

动态调试这里可以理解为堆栈调试,有时候需要利用到不同的工具和方法,

比如 JEB调试、smali调试、IDA调试等等。

不再细说了,本文简单总结一下。

到此这篇关于android加密参数定位方法的文章就介绍到这了,更多相关android加密参数定位方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android视频悬浮窗口实现的示例代码

    Android视频悬浮窗口实现的示例代码

    这篇文章主要介绍了Android视频悬浮窗口实现的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Android Socket 线程连接openwrt与arduino单片机串口双向通信的实例解析

    Android Socket 线程连接openwrt与arduino单片机串口双向通信的实例解析

    这篇文章主要介绍了Android Socket 线程连接openwrt与arduino单片机串口双向通信的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • Android实现动画效果详解

    Android实现动画效果详解

    这篇文章主要介绍了Android实现动画效果详解,目前Android平台提供了Tween动画和Frame动画,实现这两类动画有两种方式:一种使用XML文件(文件放在res/anim),一种直接代码搞定,需要的朋友可以参考下
    2015-07-07
  • TabLayout标题文字不显示的解决操作

    TabLayout标题文字不显示的解决操作

    这篇文章主要介绍了TabLayout标题文字不显示的解决操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 基于Flutter实现多边形和多角星组件

    基于Flutter实现多边形和多角星组件

    开发中,免不了会用到多边形、多角星等图案,比较常用的多边形比如雷达图、多角星比如评价星级的五角星等,本文章就使用Flutter绘制封装一个这样的组件,需要的可以参考一下
    2022-05-05
  • 理解Android的手势识别提高APP的用户体验

    理解Android的手势识别提高APP的用户体验

    对于触摸屏,其原生的消息无非按下、抬起、移动这几种,我们只需要简单重载onTouch或者设置触摸侦听器setOnTouchListener即可进行处理
    2013-06-06
  • 图解 Kotlin SharedFlow 缓存系统及示例详解

    图解 Kotlin SharedFlow 缓存系统及示例详解

    这篇文章主要为大家介绍了图解 Kotlin SharedFlow 缓存系统及示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • RecycleView实现各种尺寸图片展示

    RecycleView实现各种尺寸图片展示

    这篇文章主要为大家详细介绍了RecycleView实现各种尺寸图片展示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Android framework ATMS启动流程

    Android framework ATMS启动流程

    这篇文章主要为大家介绍了Android framework ATMS启动流程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 怎样删除android的gallery中的图片实例说明

    怎样删除android的gallery中的图片实例说明

    长按gallery中的图片进行删除该图片的操作,具体实现如下,感兴趣的朋友可以参考下哈
    2013-06-06

最新评论