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)
blank

相关推荐

  • Tomcat全攻略

    Tomcat全攻略

    2021年12月15日
  • 如何查看/统计当前AD域控制器的活动用户

    如何查看/统计当前AD域控制器的活动用户

  • [Android Studio 权威教程]断点调试和高级调试

    [Android Studio 权威教程]断点调试和高级调试有人说Android的调试是最坑的,那我只能说是你不会用而已,我可以说AndroidStudio的调试是我见过最棒的。好了开始写一个简单的调试程序,我们先来一个for循环for(inti=0;i<10;i++){//获取当前i的值intselector=i;//打log查看当前i的值(此步多余,实际开发请忽略)Logger.e("fo

  • 微信小程序超级大坑之40029(invalid code)

    微信小程序超级大坑之40029(invalid code)在小程序新建的时候就应该输入你正式的AppID,如果使用修改的AppID,则无法使用。jscode2session会返回{"errcode":40029,"errmsg":"invalidcode,hints:[req_id:m3yw8a0472th20]"}不能通过修改project.config.json中的AppID来实现:必须重新创建新的小程序项目。…

  • python做语音信号处理

    python做语音信号处理作者:凌逆战时间:2019年11月1日博客园地址:https://www.cnblogs.com/LXP-Never/p/10078200.html音频信号的读写、播放及录音标准的python已经支持WAV格式的书写,而实时的声音输入输出需要安装pyAudiio(http://people.csail.mit.edu/hubert/pyaudio)。最后我们还将使用pyMedia(…

  • 如何完全删除sql2012_如何完全删除mysql

    如何完全删除sql2012_如何完全删除mysql更新文章:由于楼主是在2017年写的内容,当时理解问题不深,可能就是稀里糊涂地解决掉了这个问题,把一些没有与SQL相关的东西都删除了,但那时并不影响到其他程序的运行状况。现如今更新下文章,为避免误导大家进行误删一些东西而存在其他问题的隐患。—感谢一位小伙伴的提醒。—更改时间:2019年3月19日工作忙,没能及时回复大家,请谅解!!卸载方法多种,但是通常会有卸载数据库不干净的情况。虽…

发表回复

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

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