作者正在编写一本爬虫逆向相关的书籍《书名还没有想好》。

目前刚写了50页,上图是文章目录的一部分,

想问一下大家现在对哪阶段的内容会更感兴趣,

或者哪部分的内容会更有学习力,或者帮我想个书名。

可在本文末留言告知,感谢大家。


下面开始本文正文内容。

在逆向一个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(stackAdd[1].getMethodName())}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加密参数定位方法相关推荐

  1. 当你写爬虫遇到APP的请求有加密参数时该怎么办?【初级篇-秒杀模式】

    文章转载自公众号小周码字 看完了初级篇的常规模式之后,你是不是发现了一个很严重的问题:如果每个APP都需要这么反编译看代码仿写的话,那么当想要大批量爬不同的APP的时候,光是找加密参数的生成部分就已经 ...

  2. Android Native程序crash的一些定位方法简介

    Android Native程序crash的一些定位方法简介 经常,避免不了,我们的代码会崩溃.如果crash在native代码上,Android会和其他Linux一样,生成一份core dump,将 ...

  3. App控件定位:Android 控件介绍及元素定位方法

    本文将分享Android相关基础知识和Android APP控件定位工具的使用方法. 目录 Android基础知识 Android布局 Android四大组件 1.activity 2.Service ...

  4. Python selenium Browsermob-Proxy获取网页加密请求参数的方法及过程

    一.问题 爬虫在获取页面数据时可能会遇到许多页面异步加载.js加密.动态Cookie等问题,我们在做爬虫开发的时候经常用到浏览器的开发者工具,分析网页元素,查看资源加载(Network)等.Selen ...

  5. android sqlcipher github,Android应用开发Android 数据库加密 SQLCipher使用方法

    Android 数据库加密 SQLCipher使用方法 最近在做数据库加密,遇到了些问题,特此记录 greendao 支持数据库加密 网址https://greenrobot.org/greendao ...

  6. Android app UI自动化测试 常用的元素定位方法

    本文简要介绍了移动端Android APP进行UI自动化测试时,常用到的元素定位方法 目录 前言 一.通过resource-id定位 二.通过class name定位 三.通过accessibilit ...

  7. android 文件加密解决方法,一种Android平台的文件快速加密以及解密方法与流程

    本发明属于数据安全领域,具体涉及一种Android平台的文件快速加密以及解密方法. 背景技术: 目前移动办公系统极大地提升了企.事业单位的工作效率,而带装有办公应用的智能设备中会存储一些较高机密性的文 ...

  8. Android --- 动态获取定位权限时: Fragment 中 onRequestPermissionsResult 方法不执行

    今天我在写百度地图 API 定位功能的时候遇到了这样一个问题,需要在打开 APP 首页的时候动态获取定位权限,然后我的代码是这样写的(在 Fragment 中) @Nullablepublic Vie ...

  9. android 摄像头调参,摄像头参数调整方法和装置、电子设备和存储介质与流程

    技术特征: 1.一种摄像头参数调整数调整方法,包括: 对参考摄像头采集的第一图像进行检测,获取第一检测结果: 对待调参摄像头采集的第二图像进行检测,获取第二检测结果,其中,所述第一图像与所述第二图像是 ...

最新文章

  1. 如何修改markdown中图片的大小
  2. 百度 Java 后端三轮面试题,这些你会吗?
  3. C++——《算法分析与设计》实验报告——贪心算法与回溯法
  4. Java中JVM、JRE和JDK三者有什么区别和联系?
  5. 【Liunx】Linux 系统启动过程
  6. mybatis date类型映射_Mybatis中类型映射处理器详解
  7. 存储系统的实现-探析存储的机制和原理
  8. IDEA Tomcat控制台中文乱码
  9. OOP编程思想(封装 继承 多态)
  10. 系统防御工程v0.2
  11. JavaScript编程精解(笔记1)
  12. 前端性能优化的七种方法
  13. 我要自学网python视频教程百度云_180G全套Python视频教程集合
  14. 第八十三章 Caché 函数大全 $ZDATE 函数
  15. 被chatGPT割了一块钱韭菜
  16. Oracle的授权方式
  17. Day69(贪心算法)
  18. Ubuntu开机黑屏且左上角闪烁光标,登录页面键盘鼠标无响应的解决方法
  19. python long类型_python获取当前时间戳Long类型
  20. 开关电源芯片都分为那些类型?

热门文章

  1. 对数据集进行k匿名(k-Anonymity)处理(python)——以adult数据集为例
  2. Python探索性数据分析
  3. 【图数据库】GalaxyBase 查询优化之索引
  4. Origin | 一个X对应多个Y的折线图
  5. 反垃圾邮件的一些相关链接
  6. sublime 下 解决Vintage模式下,normal 模式下中文输入的问题。
  7. Arrays.stream()
  8. R语言ggplot2可视化:使用patchwork包(直接使用加号+)将一个ggplot2可视化结果和数据表格横向组合起来形成最终结果图
  9. html隐藏超链接下划线
  10. 大众点评的大数据实践转