1 . mobile 1 --TurtleShell
ida打开发现Cryptography函数,把一部分so代码动态修改,异或0x88
根据Cryptography函数修改程序,用ida重新加载,发现以下字符串
a=06DD98D9C41E8C40
b=10965E5C12267996
输入的字符串为32字节,第一部分和a比较,第二部分中的所有“4”改为“9”后倒置和b比较
因此flag为06DD98D9C41E8C4064476221C5E56401
注:classes-dex2jar.jar可以先解压apk文件中的classes.dex,然后用dex2jar工具转换为jar,用Java Decompiler打开
这些工具都能在apktools中找到
ida分析时,先用File->Load file->C Header,导入jni.h(安装jdk,在jdk目录里有),然后在Structures窗口里插入JNIInvokeInterface和JNINativeInterface(=*JavaVM),就可以把一些关键参数的类型定义为JavaVM
2. mobile 2 ----PoliceMan
分析程序,发现程序会接受短信,传入libSMSHackMe.so中的smsrecive程序
分析libSMSHackMe.so,在new_init()中找到了a1 a2 a3三个变量,通过change()置换
change置换有3个参数:第一个参数为待置换的字符串,第二个参数为左移置换位数,第三个参数为100(置换字母、数字)或101(只置换字母),但是只使用100
三次置换如下:
"F0882JJJKK9G1H",在JNI_OnLoad中,位数为5,置换后得A5337EEEFF4B6C
"8155D3DH247G39G56F90",在on_init中,位数为3,置换后得5822A0AE914D06D23C67
"7C642CE0G2BF9CDG7G4D",在on_init中,位数为1,置换后得6B531BD9F1AE8BCF6F3C
在JNI_OnLoad()中发现了registerNatives()
分析注册的函数,发现程序把来源作为RC4密钥,消息主体作为明文,转换为16进制,前20位、中间20位、后14位分别和三段加密文本比较
因此密文为6B531BD9F1AE8BCF6F3C5822A0AE914D06D23C67A5337EEEFF4B6C
题目名叫“警察”,因此猜测消息来源为110
以110为密钥解密,得到flag