Android逆向攻防-某redbook shield值破解

admin 2025年3月10日22:41:42评论26 views字数 3062阅读10分12秒阅读模式

作者:yueji0j1anke

首发于公号:剑客古月的安全屋

字数:1449

阅读时间:    15min

声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外

目录

  • 前言

  • 初步分析

  • unidbg补环境

  • 总结

0x00 前言

本期用unidbg补算法,着重讲补环境过程

受害者是 red shield值

版本 v6.8.3

Android逆向攻防-某redbook shield值破解

相关frida绕过不在这里讲解

0x01 初步分析

可以发现,shield值都带有固定前缀 XYAAAAAQAAAAEAAABTAAAA

Android逆向攻防-某redbook shield值破解

这里我用jadx反编译了一下,找不到shield生成关键点。。不出意外,肯定是在so文件中生成的

这里可以用字符串hook法

functionhook_shiled() {varsymbols=Module.enumerateSymbolsSync("libart.so");varaddrNewStringUTF=null;for (vari=0i<symbols.lengthi++) {varsymbol=symbols[i];if (symbol.name.indexOf("NewStringUTF">=0&&symbol.name.indexOf("CheckJNI"<0) {addrNewStringUTF=symbol.address;console.log("生成 NewStringUTF at "symbol.addresssymbol.name);break        }    }if (addrNewStringUTF!=null) {Interceptor.attach(addrNewStringUTF, {onEnterfunction (args) {varc_string=args[1];vardataString=c_string.readCString();if (dataString) {if (dataString.indexOf("XYAAAAA"!==-1) {console.log(dataString);console.log(Thread.backtrace(this.contextBacktracer.ACCURATE).map(DebugSymbol.fromAddress).join('n'+'n');console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));                    }                }            }        });    }}

最终定位到 

Android逆向攻防-某redbook shield值破解

libshield.so文件

对应的堆栈信息

Android逆向攻防-某redbook shield值破解

打开jadx,追到这里

Android逆向攻防-某redbook shield值破解

native方法,so层逻辑可能就在里面

这里为一个拦截器,使用的是目前主流okhttp框架,其可以在请求发出前或者响应到达后进行处理,比如addheaders()

而Interceptor.Chain,代表的是拦截器链中的当前请求和响应的上下文

Android逆向攻防-某redbook shield值破解

这里我们可以hook一下看看这里传入的参数是否带有shield值

 var request = chain.request(); console.log("url-> ", request.url().toString()); console.log("headers-> ", request.headers().toString());
Android逆向攻防-某redbook shield值破解

可以看到,没有相关shield值,那shield应该就是在该native方法中内部生成的了

(自信满满)

当然你也可以尝试hook下一个拦截器

var Builder = Java.use('okhttp3.OkHttpClient$Builder');Builder.addInterceptor.implementation = function (inter) {        console.log(JSON.stringify(inter) );        return this.addInterceptor(inter);    };

这里可以尝试去hook所有拦截器,找到下一个拦截器的header里面是否存在shield

0x02 unidbg补环境

Android逆向攻防-某redbook shield值破解

三个native方法

肯定会先涉及到初始化等操作,开补

1.initializeNative()

第一次运行我是这样的

Android逆向攻防-某redbook shield值破解

顺着这个就开始补环境

下面讲述关键点

sDeviceId
Android逆向攻防-某redbook shield值破解
functionhook_sDeviceId(){Java.perform(function() {letContextHolder=Java.use("com.xingin.shield.http.ContextHolder");console.log('sAppId=',ContextHolder.sAppId.value);console.log('sDeviceId=',ContextHolder.sDeviceId.value);console.log('sExperiment=',ContextHolder.sExperiment.value);    })}
Android逆向攻防-某redbook shield值破解

hook出来如下

sAppId= -319115519 sDeviceId= d954acxxxxxx Experiment= true

这是补initializeNative()的关键点

2.initialize(String str)

接下来补initialize()

Android逆向攻防-某redbook shield值破解

这里需要分析一下对应传入的参数是什么

Android逆向攻防-某redbook shield值破解

这里看偏移地址

hook一下native方法,记得延迟hook

发现传入的参数是 main

Android逆向攻防-某redbook shield值破解

继续开补

Android逆向攻防-某redbook shield值破解

这里存在获取xml文件的上下文相关,先补一个空,看看后续日志

Android逆向攻防-某redbook shield值破解

发现需要补getString方法了,读取s.xml文件的值,并获取

Android逆向攻防-某redbook shield值破解
Android逆向攻防-某redbook shield值破解

日志输出,那我们到对应xml文件中找main键

Android逆向攻防-某redbook shield值破解

发现不存在main键,但存在main_hmac键,那就顺带补上

Android逆向攻防-某redbook shield值破解

接下来补base64

Android逆向攻防-某redbook shield值破解

这里补完 initialize 就告一断落

3.Interceptor

Android逆向攻防-某redbook shield值破解

运行

Android逆向攻防-某redbook shield值破解

需要补okhttp,倒入依赖即可

<dependency>    <groupId>com.squareup.okhttp3</groupId>    <artifactId>okhttp</artifactId>    <version>3.4.2</version></dependency>

运行

Android逆向攻防-某redbook shield值破解

发现需要返回一个Request

那就补充一个全局变量,方便后续补环境

Android逆向攻防-某redbook shield值破解

接下来补okhttp的一些基本url属性

随后发现需要引入okio的依赖

 <dependency>      <groupId>com.squareup.okio</groupId>      <artifactId>okio</artifactId>      <version>2.8.0</version> </dependency>

然后常规补即可

Android逆向攻防-某redbook shield值破解

这里存在一些空指针错误,建议用try catch逻辑去进行补充

这是我导出shield的逻辑

Android逆向攻防-某redbook shield值破解

最后进行校验

Android逆向攻防-某redbook shield值破解

一致,补环境验签绕过成功

0x03 总结

本期值得总结的点

1.延迟hook

2.hook 字符串

3.如何补第三方依赖

后期将为大家带来纯算 算法分析

参考文章 https://hyb.life/archives/205

原文始发于微信公众号(剑客古月的安全屋):Android逆向攻防-某redbook shield值破解

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月10日22:41:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Android逆向攻防-某redbook shield值破解https://cn-sec.com/archives/3825186.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息