吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 568|回复: 5

[原创逆向图文] SekaiCTF 2025 Sekai Bank WriteUp

[复制链接]
StarrySky 发表于 2025-8-26 14:51 | 显示全部楼层 |阅读模式

本帖最后由 StarrySky 于 2025-8-26 15:01 编辑

参加了一下国际比赛以下是我的解题思路
打开NP管理器反编译APK
[Java] 纯文本查看 复制代码
 @POST("flag")
    Call<String> getFlag(@Body FlagRequest flagRequest)

找到获取Flag的方法com.sekai.bank.network.ApiService.getFlag
转到FlagRequest
[Java] 纯文本查看 复制代码
public class FlagRequest {
    private boolean unmask_flag;

    public FlagRequest(boolean z) {
        this.unmask_flag = z;
    }

    public boolean getUnmaskFlag() {
        return this.unmask_flag;
    }

    public void setUnmaskFlag(boolean z) {
        this.unmask_flag = z;
    }
}
从这里分析的值,我们可以伪造一个POST请求来得到Flag
抓包
先登录,通过ProxyPin抓包看看请求体
发现有一个X-Signature
继续打开NP管理器搜索X-Signature字符串
[Java] 纯文本查看 复制代码
public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        try {
            chain = chain.proceed(request.newBuilder().header("X-Signature", generateSignature(request)).build());
            return chain;
        } catch (Exception e) {
            Log.e("SekaiBank-API", "Failed to generate signature: " + e.getMessage());
            return chain.proceed(request);
        }
    }

可以看到一个generateSignature方法,定位进去看看
[Java] 纯文本查看 复制代码
private String generateSignature(Request request) throws IOException, GeneralSecurityException {
        Throwable e;
        String str = request.method() + "/api".concat(getEndpointPath(request)) + getRequestBodyAsString(request);
        SekaiApplication instance = SekaiApplication.getInstance();
        PackageManager packageManager = instance.getPackageManager();
        String packageName = instance.getPackageName();
        try {
            Signature[] apkContentsSigners;
            if (VERSION.SDK_INT >= 28) {
                PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 134217728);
                SigningInfo signingInfo = packageInfo.signingInfo;
                apkContentsSigners = signingInfo != null ? signingInfo.hasMultipleSigners() ? signingInfo.getApkContentsSigners() : signingInfo.getSigningCertificateHistory() : packageInfo.signatures;
            } else {
                apkContentsSigners = packageManager.getPackageInfo(packageName, 64).signatures;
            }
            if (apkContentsSigners == null || apkContentsSigners.length <= 0) {
                throw new GeneralSecurityException("No app signature found");
            }
            MessageDigest instance2 = MessageDigest.getInstance("SHA-256");
            for (Signature toByteArray : apkContentsSigners) {
                instance2.update(toByteArray.toByteArray());
            }
            return calculateHMAC(str, instance2.digest());
        } catch (NameNotFoundException e2) {
            e = e2;
            throw new GeneralSecurityException("Unable to extract app signature", e);
        } catch (NoSuchAlgorithmException e3) {
            e = e3;
            throw new GeneralSecurityException("Unable to extract app signature", e);
        }
    }

可以看到str字符串,是由getEndpointPath和getRequestBodyAsString拼接得到的
[Java] 纯文本查看 复制代码
String str = request.method() + "/api".concat(getEndpointPath(request)) + getRequestBodyAsString(request); SekaiApplication instance = SekaiApplication.getInstance();
分析完开始HOOK
这里的HOOK我采用的朋友开发的Luahook
calculateHMAC方法看看第一个参数str
fakename.png




参数是POST/api/auth/login{"password":"114514","username":"114514"}
那就简单了,直接HookgetEndpointPath和getRequestBodyAsString方法
[mw_shl_code=java,true]hook("com.sekai.bank.network.ApiClient$SignatureInterceptor",
lpparam.classLoader,
"getEndpointPath",
"okhttp3.Request",
function(it)

end,
function(it)
  it.result="/flag"
end)

hook("com.sekai.bank.network.ApiClient$SignatureInterceptor",
lpparam.classLoader,
"getRequestBodyAsString",
"okhttp3.Request",
function(it)
end,
function(it)
  it.result=[[{"unmask_flag":true}]]
end)

de]
接着我们直接登录,然后他就会自动计算X-Signature,然后拿ProxyPin
重写请求就行了
fakename.png

fakename.png
拿到flag
游客,如果您要查看本帖隐藏内容请回复










评分

参与人数 1HB +2 THX +1 收起 理由
美好映像 + 2 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lies 发表于 2025-8-26 16:07 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
JuStkK 发表于 2025-8-26 17:55 | 显示全部楼层

看看大哥的思路
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
tingwei3 发表于 2025-8-26 22:54 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
52bug 发表于 2025-8-27 00:32 | 显示全部楼层

学习
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
美好映像 发表于 2025-8-29 07:13 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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