checkit
java层没东西,so层vm:
1 | __int64 __fastcall Java_com_test_ezre_MainActivity_checkInput(_JNIEnv *a1, __int64 a2, __int64 a3) |
vm函数:
1 | unsigned __int8 *__fastcall exec(__int64 p_code, unsigned __int8 *a2) |
字节码与密文:
1 |
|
同构并爆破:
1 | def run_vm(code, cmp_data, input_str): |
NSSCTF{C0ngr@tulation!Y0N_s33m_7o_b3_gO0d_@t_vm!!}
crackme
文件中的magic被魔改,MEI被改成了swI,改回去之后发现仍然提取失败,加入调试打印发现zlib头部被替换成了swdd,通过对比找到魔改函数:
1 | __int64 __fastcall sub_1400011F0(FILE *Stream_1, __int64 a2, FILE *Stream_2, char *a4) |
发现是xor了个0xAA,修改pyinstxtractor:
1 | def extractFiles(self): |
解压后观察解包的pyc,找到密文d29b81e136efc517c2967b863f584baf4b82f710f8869f5a56185cb22a9a25fc,密钥NSSCTF,加密方式RC4,解密得到4984aa7eeb8c7fa0709832e364e03989
NSSCTF{4984aa7eeb8c7fa0709832e364e03989}
我是谁
mainactivity:
1 | package com.example.nss_4th.messages; |
关键函数:
1 | package com.example.nss_4th.ad; |
so层init_array:
1 | .init_array:000000000005FBC8 dq offset sub_27290 |
分别初始化了RC4的密钥和密文:
1 | int sub_27290() |
jnionload:
1 | __int64 __fastcall JNI_OnLoad(_JavaVM *a1) |
so层主逻辑:
1 | __int64 __fastcall Java_com_example_nss_14th_ad_PR_stringFromJNI(_JNIEnv *a1) |
同构:
1 | def rc4_decrypt(key: bytes, ciphertext: bytes) -> bytes: |
NSSCTF{Y3s!NSS_hAs_r34ched_iTs_4th_5nNiv4rsar9}