吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17548|回复: 167
收起左侧

[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
1.jpg

开工

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

2.jpg

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

3.jpg

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

4.jpg

继续跟进 找到了关键点

5.jpg

6.jpg

7.jpg

8.jpg

分析so

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

9.jpg

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

10.jpg

11.jpg

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

12.jpg

继续跟进

13.jpg

14.jpg

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

15.jpg

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

16.png

17.png

18.jpg

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

19.jpg

这段代码中的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

20.jpg

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直接闪退

21.jpg

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

22.jpg

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

果然能看到明文信息

微信图片_20221120041005.png

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

微信图片_20221120041352.png

验证成功!!

后记

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

免费评分

参与人数 51吾爱币 +51 热心值 +43 收起 理由
whdfog + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
jy02942131 + 1 + 1 我很赞同!
birdnofeet + 1 用心讨论,共获提升!
DSUPER + 1 用心讨论,共获提升!
woaili1guo + 1 + 1 我很赞同!
korys878 + 1 我很赞同!
海云帆 + 1 + 1 谢谢@Thanks!
Windows14 + 1 + 1 用心讨论,共获提升!
Helsing9527 + 1 + 1 热心回复!
xhzy + 1 + 1 热心回复!
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 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

  • · 好帖|主题: 549, 订阅: 87

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

正己 发表于 2022-11-20 09:26
给个精华,期待后续佳作,早日消除违规
fcl201 发表于 2022-11-21 14:21
constwm 发表于 2022-11-20 08:55
xmnh 发表于 2022-11-20 09:00
路过学习
lbg2222000 发表于 2022-11-20 09:07
谢谢分享
maroo 发表于 2022-11-20 09:16
学习了,逆向最烦就是so了
lyghost 发表于 2022-11-20 09:23
能不能分析分析那种子进程附加无法frida的
y2006y2006 发表于 2022-11-20 10:01
大老牛逼
wwb66668 发表于 2022-11-20 10:21
感谢楼主的分享
lsrnb 发表于 2022-11-20 10:25
学到了啊,膜拜大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-22 07:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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