这题是一个 Android JNI 逆向题,入口在MainActivity.java。Java 层几乎没有逻辑,只是把输入框内容传给 native 函数checkflag(),所以重点在libnative-lib.so。
先用 MCP 对libnative-lib.so做分析,定位到Java_com_example_rectf_MainActivity_checkflag。反编译后可以看出程序先检查输入长度必须是 24。随后把前 16 字节拆成 4 组,每组 4 字节,做固定的乘加运算,再和内存中的 16 个常量比较。把这个过程逆过来即可得到前半段:
e0a0d966076ff437
后 8 字节会进入sub_7260()。这部分本质上是一个 TEA 变种加密,密钥直接写死为:
qihahaininananam
目标密文常量是两个 32 位整数:
207990490
-1379955279
对这段 TEA 逻辑逆运算后,得到后半段:
58af2715
最终拼接得到正确输入:
e0a0d966076ff43758af2715