发现程序调用了checkFlag函数对flag进行检验
发现check函数是一个native函数,所以去so文件里面寻找对应的函数。
02Flagchecker_checknative函数分析在IDA中搜索check函数,可以搜索到一个
发现了check函数
还原参数类型找到函数后,我们要先把第一个参数变量类型设置成JNIEnv*
这样的话对于识别一些函数会方便很多,在分析so文件的时候都推荐这样来做
基本框架分析修改之后再观察代码信息
发现这个函数从输入中获取信息,并把长度信息保存在v6[0]的位置,传入sub_D函数进行解密,解密后的内容使用memcmp进行比对。这是一种比较常见的情况,告诉你函数操作结束后的内容,要求你逆向出函数操作来得到输入信息
分析sub_D函数一眼可以看出是一个变种的TEA的解密函数,运算轮数为16轮,所以sum的值从0xEB90开始
使用Invertsign快速识别常量
对于0x61C这个常量,如果你做题做的不够多,可能一眼看不出来这个就是0x9EB9的补码
这个时候就可以尝试在数据上右键,Invertsign一下再看看数据
转换之后就可以看到熟悉的TEA常数了(可以借助百度来快速的分析算法)
编写TEA解密代码并解密
voidtea_decrypt(uint32_t*v,intlen){for(intidx=0;idxlen2;idx+=2){uint32_tv0=v[idx],v1=v[idx+1],sum=0xEB90,i;uint32_tdelta=0x9eb9;_DWORDv12[4];memcpy(v12,"