吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6181|回复: 145
上一主题 下一主题
收起左侧

[Android 原创] 安卓某app_sign逆向分析过程

    [复制链接]
跳转到指定楼层
楼主
a976606645 发表于 2022-11-20 04:53 回帖奖励

开篇

安卓协议逆向之frida hook百例
在看到大佬的这篇文章后,想动手跟着分析一波,在下载目标APP时没有注意版本号的问题,下载了新版本的,记录下分析的过程。

准备工具

1. root设备
2. BlackDex
3. frida
4. IDA
5. jadx

目标

目标是搞到sign的算法 看sign的长相跟长度 先盲猜一波MD5

开工

直接用BlackDex打开目标APP 获取到dex
拖入jadx开始分析
搜索接口名字 查找调用

发现有两处调用的地方,双击进去探探情况

继续搜索一下定义的名称  查找调用

继续跟进 找到了关键点

分析so

解压apk  找到lib下的 libblackBox.so  在IDA中打开
在IDA方法窗口中搜索getInterfaceSign  无果
推测方法为动态注册  到JNI_OnLoad入口找找看

按下F5查看伪代码
看到VX+XXX这种格式的伪代码 鼠标点击定位到VX的位置 按Y键修复指针

进入查看
找到了动态注册的方法 分析上面JAVA层调用的getInterfaceSign方法 只有一个参数 最终确定so层的函数为sub_49268

继续跟进

鼠标点击定位到`a1`的位置 按`Y`键修复指针
一番寻找之后 发现所有的return里面 都有`a1`的参与
那现在目的就明确了 我们需要找到对`a1`有所改动的地方
但是没有发现直接对`a1`赋值的的语句
这说明`a1`是在某一个调用函数里面改变的值
接下来的重点就是调查里面的sub函数们
先着重调查了`a1`为参数的函数  没有找到有用的信息

在排查过程中  发现了这个函数 明文上没有a1参数的参与
但是把鼠标移动到v34上 弹出的提示信息中 有a1的存在 跟进一下

终于 在sub_F39A8发现了关键点 一个小写转大写的函数过程

这段代码中的sub_4BBE4就很可疑了,继续跟进

__int64 __fastcall sub_F39A8(__int64 a1, __int64 a2, const char *a3)
{
  __int64 v4; // x19

  if ( !a1 && !a3 )
    return 0xFFFFFFFFLL;
  v4 = 0LL;
  if ( sub_4BBE4() )
    return 0xFFFFFFFFLL;
  while ( (int)strlen(a3) > (int)v4 )
  {
    a3[v4] = toupper((unsigned __int8)a3[v4]);
    ++v4;
  }
  return 0LL;
}

在这里 发现了一个MD5关键函数
分析到这里 我们该验证一下了 已知该函数的偏移地址是:0x4BBE4

frida hook so

我这里使用的是安卓真机 安装了去root特征的系统
我不确定目标APP有无root检测
如测试时启动APP有闪退的情况 还需要自行过一下root检测

接下来编写frida的hook脚本
将IDA分析的函数偏移地址填写进脚本

Java.perform(function () {
    function get_func_addr(module, offset) {
        var base_addr = Module.findBaseAddress(module);
        console.log("base_addr: " + base_addr);
        console.log(hexdump(ptr(base_addr), {
            length: 16, header: true, ansi: true
        }))
        var func_addr = base_addr.add(offset);
        if (Process.arch == 'arm') return func_addr.add(1);  //如果是32位地址+1
        else return func_addr;
    }

    var func_addr = get_func_addr('libblackBox.so', 0x4BBE4);//参数:so名称  偏移地址
    console.log('func_addr: ' + func_addr);
    console.log(hexdump(ptr(func_addr), {
        length: 16, header: true, ansi: true
    }))

    Interceptor.attach(ptr(func_addr), {
        onEnter: function (args) {//产生调用时hook输入的参数
            console.log("onEnter");
            console.log(args[0].readCString())
        }, onLeave: function (retval) {
            console.log(retval)
        }
    });
});

编写好脚本后 使用adb shell命令 启动手机上的frida-server  注入脚本

frida -U -f com.cxxx.xxxxx --no-pause -l hook3.js

注入后出现问题了  app直接闪退

说明app识别到了frida的特征 自杀了属于是 我们需要过frida检测
在这里使用了大佬编译的去特征版本的strongR-frida
adb push到手机后 启动frida服务 重新注入 没有发生闪退情况
并且 可以看到sub_4BBE4()的参数被成功打印出来了

在app里面的账号登录页面  请求一下login接口试试情况



果然能看到明文信息



将明文复制出来 MD5加密一下 看看结果



验证成功!!

后记

这是我第一次尝试分析so 整个过程收获了许多
希望对你也有所帮助

免费评分

参与人数 41吾爱币 +41 热心值 +36 收起 理由
yixi + 1 + 1 我很赞同!
ohouyang + 1 我很赞同!
weimaomin + 1 + 1 我很赞同!
shamemist + 1 + 1 我很赞同!
liusan1990 + 1 + 1 谢谢@Thanks!
freeboy40 + 1 + 1 谢谢@Thanks!
mingyuetianya + 1 + 1 我很赞同!
52pj_zw + 1 谢谢@Thanks!
vw50 + 1 我很赞同!
ruier + 1 + 1 谢谢@Thanks!
linze02 + 1 + 1 我很赞同!
hzwsuki + 1 + 1 我很赞同!
Golive180 + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
kzdontknow + 1 热心回复!
Aerial + 1 + 1 太强了
Quincy379 + 1 + 1 我不会告诉你们这个app是卖车的
ADSL1980ADSL + 1 热心回复!
bvjdxh + 1 + 1 谢谢@Thanks!
ADADG + 1 + 1 用心讨论,共获提升!
lingyun011 + 1 + 1 热心回复!
qaz1023 + 1 + 1 谢谢@Thanks!
Cerem + 1 + 1 我很赞同!
berserkert + 1 + 1 我很赞同!
s757129 + 1 + 1 ggnb!
a781768544 + 1 + 1 我很赞同!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xiniu233 + 1 + 1 谢谢@Thanks!
Huibq120 + 1 + 1 我很赞同!
抱歉、 + 1 用心讨论,共获提升!
social666 + 1 + 1 谢谢@Thanks!
kosmos4134 + 1 + 1 谢谢@Thanks!
xiaoc996 + 2 + 1 用心讨论,共获提升!
allspark + 1 + 1 用心讨论,共获提升!
Byclemon + 1 用心讨论,共获提升!
woyucheng + 1 + 1 谢谢@Thanks!
ai474427793 + 1 + 1 用心讨论,共获提升!
lin2lin3lin5 + 1 + 1 谢谢@Thanks!
chyuyuguo2004 + 1 + 1 用心讨论,共获提升!
helian147 + 1 + 1 谢谢@Thanks!
18381831680 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

  • · 好帖|主题: 431, 订阅: 69

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
JackSon001 发表于 2022-11-22 16:17
so分析这块讲的有点快奥,根据返回长度能大概猜出大概的hash算法,然后通过hash查找插件找一下可疑函数,然后再hook,有可能是hash函数变种等等
推荐
liusan1990 发表于 2022-11-29 12:29
看来还是得要有面向对象的基础编程知识才能看到,学习中。 希望能够尽快达到楼主的水平。
沙发
constwm 发表于 2022-11-20 08:55
3#
xmnh 发表于 2022-11-20 09:00
路过学习
4#
lbg2222000 发表于 2022-11-20 09:07
谢谢分享
5#
maroo 发表于 2022-11-20 09:16
学习了,逆向最烦就是so了
6#
lyghost 发表于 2022-11-20 09:23
能不能分析分析那种子进程附加无法frida的
7#
正己 发表于 2022-11-20 09:26
给个精华,期待后续佳作,早日消除违规
8#
y2006y2006 发表于 2022-11-20 10:01
大老牛逼
9#
william888 发表于 2022-11-20 10:16
大佬牛逼啊
10#
wwb66668 发表于 2022-11-20 10:21
感谢楼主的分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2022-12-9 22:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表