android加密参数定位实现方法
作者:考古学家lx 发布时间:2022-05-03 08:28:55
在逆向一个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调试等等。
不再细说了,本文简单总结一下。
来源:https://blog.csdn.net/weixin_43582101/article/details/115355563
猜你喜欢
- 将方形的图像映射到正方形上似乎并没有什么难度,所以接下来要做的是把图像映射到球面上。而球的参数方程为x=rcosϕcos&theta
- 如下所示:import java.security.MessageDigest;import java.security.NoSuchAlg
- 问题发现今天发生了一件事,令我非常郁闷,就是我在使用一个SDK时,当我调用他的方法时,提示我方法中的参数var1, var2如下:// 方法
- 我就废话不多说了,大家还是直接看代码吧!public static String mapToTxt(Map<String,String
- SpringBoot@DeleteMapping(/xxx/{id})请求报405在学习SpringBoot2.x实现 restful 的d
- 花了2天时间,彻底搞清C#中cookie的内容,搞清以下内容将让你对所有网站的cookie都尽在掌握之中.cookieCollection是
- 本文实例讲述了Java调用Shell命令的方法。分享给大家供大家参考。具体如下:近日项目中有这样一个需求:系统中的外币资金调度完成以后,要将
- 基础配置新建module:cloudalibaba-config-nacos-client3377pom文件版本号已经由父工程控制<?
- 小伙伴们,最近比较忙,没什么时间写,今天给大家分享的是JAVA如何导出EXCEL表格,因为最近有做这样一个功能,所以分享出来,如有不对之处,
- 准备过程:在电脑桌面 右键点击 “此电脑”的“属性”选项选择“高级系统设置”选项点击下面的“环境变量”选项配置过程:点击“系统变量”下面的”
- 去年就已经学了这个技术了,一直没去写,现在抽个时间写了个俄罗斯方块游戏。只有简单的新游戏,暂停,继续,积分功能。简单的实现了俄罗斯的经典功能
- 前言今天遇到一个需求,需要对word模板进行替换制定的变量在网上找了很多方案,做了很多的demo,下面就把我觉得比较简单的一种分享给大家本次
- Android 判断SIM卡属于哪个移动运营商第一种方法:获取手机的IMSI码,并判断是中国移动\中国联通\中国电信TelephonyMan
- 目录ProxyFactory的工作原理JdkDynamicAopProxy创建代理对象过程JdkDynamicAopProxy创建代理对象执
- 目录Web服务器技术讲解PHP:JSP/ServletWeb服务器IISTomcatJAVA jdk中的内容TomcatTomcat根目录下
- MapperScan添加动态配置(占位符)在对Mybatis自动扫描配置中,使用注解配置时,@MapperScan中的配置,通常配置如下:@
- Java 中的内部类这是一个 Java 内部类的简单实现:public class OutterJava { pr
- 一般我们用它来自动帮我们注册APT文件(全称是Annotation Process Tool,或者叫注解处理器,AbstractProces
- 今天我们来看一下在C#中对象序列化XML的方法。不得不说,在这个Json横行的年代,XML虽然式微,但也的确是一股子清流。(个人感觉)不多说
- session对象用于在会话范围内,记录每个客户端的访问状态,以便于跟踪每个客户端的操作状态,在会话存储的信息,在浏览器发出后续请求时可以获