android加密参数定位方法

android加密参数定位方法作者正在编写一本爬虫逆向相关的书籍《书名还没有想好》。目前刚写了50页,上图是文章目录的一部分,想问一下大家现在对哪阶段的内容会更感兴趣,或者哪部分的内容会更有学习力,或者帮我想个书名。可在本文末留言告知,感谢大家。下面开始本文正文内容。在逆向一个Android程序时,如果只是盲目的分析需要阅读N多代码才能找到程序的关键点或Hook点,本文将分享一下如何快速的找到APP程序的加密参数位置,其实不论是找关键位置、找hook点,找加密参数、代码逻辑追踪,都是类似的处理方法。巧用搜索-静态分析

大家好,又见面了,我是你们的朋友全栈君。

作者正在编写一本爬虫逆向相关的书籍《书名还没有想好》。
在这里插入图片描述

目前刚写了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调试等等。

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


大家现在对哪阶段的内容会更感兴趣,望留言告知,感谢大家。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145527.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 打印星型图「建议收藏」

    打印星型图「建议收藏」打印星型图

  • h3c s2000交换机配置命令_华三两台交换机做dhcp

    h3c s2000交换机配置命令_华三两台交换机做dhcp
    一、 组网需求:
    Switch的端口Ethernet1/0/5与DHCP服务器端相连,端口Ethernet1/0/1,Ethernet1/0/2,Ethernet1/0/3分别与DHCPClientA、DHCPClientB、DHCPClientC相连。
    (1)在Switch上开启DHCPSnooping功能。
    (2)设置Switch上端口Ethernet1/0/5为DHCPSnooping信任端口。
    (3)在Switch

    2022年10月15日
  • vmware虚拟机安装windows10_虚拟机15安装教程win7

    vmware虚拟机安装windows10_虚拟机15安装教程win71.去下载win7原装镜像,推荐去官方网站下载:https://msdn.itellyou.cn/2.这里注意一点,防止下载的镜像可能出现差错,我们使用iHasher检验一下完整性,确定SHA1值跟我们下载的那个SHA1值一样就行3.打开vmware虚拟机,新建虚拟机4.这里我们选择自定义5.兼容性自己选择,可以向下兼容,点击下一步6.选择win7镜像,这里我们选稍后安装操作系统(…

  • mysql 主键自增语句_MySQL 自增主键[通俗易懂]

    mysql 主键自增语句_MySQL 自增主键[通俗易懂]以下仅考虑InnoDB存储引擎。自增主键有两个性质需要考虑:单调性每次插入一条数据,其ID都是比上一条插入的数据的ID大,就算上一条数据被删除。连续性插入成功时,其数据的ID和前一次插入成功时数据的ID相邻。自增主键的单调性为何会有单调性的问题?这主要跟自增主键最大值的获取方式,以及存放位置有关系。如果最大值是通过计算获取的,并且在某些情况下需要重新获取时,会因为最新的数据被删…

  • pvp还是pve_阿特拉斯PVP好玩还是pve

    pvp还是pve_阿特拉斯PVP好玩还是pve今天组内同事分享了PVE和PVP这两种游戏中常见的战斗模式,引起了我对这两种模式的兴趣。结合分享的内容以及网络上的资料,现在来谈谈这两种战斗模式的区别。首先我们来看看他们的定义:PVE:PlayerVSEnvironment,指的是玩家与系统之间的互动。通过字面意思其实很容易理解,PVE指的是玩家挑战系统程序所控制的NPC怪物和boss,从而…

    2022年10月23日
  • 微信公众号开发相关流程及功能介绍怎么写_微信公众号平台官网

    微信公众号开发相关流程及功能介绍怎么写_微信公众号平台官网进入的网址:https://mp.weixin.qq.com。测试号(网址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login),用户在开发之前可以通过测试号快速测试开发,但是测试号的接口能力有限,只限测试使用。1.1.1订阅号适用于个人和组织,群发消息1条/天,消息展示在订阅号列表里,有基础消息接口,可以自定义菜单,无微信支付功能。1.1.2服务号不适用于个人,群发消息4条/月,消息展示在会话表里,有基础消息接口,有高级接

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号