1.拿到文件,发现是一个app,直接ida查看有没有so文件,有so文件,打开:
找到主函数,通过分析,找到关键函数,打开:
里面是一个典型的tea加密,只不过delta的值变了,所以用findcrypto也查不出来是tea加密,其中的key值也是假的,程序通过TracerPid进行反调试,详情请参考:TracerPid反调试 - 简书,然后通过对key值的交叉引用,找到了TracerPid所在的函数:
对付这种反调试的方法是把TracerPid的值改为0,于是打开39行sub_3EF18函数:
找到了真正的key值,结合刚才的加密函数:
#include <stdio.h>
#include <stdint.h>
void TeaDecode(uint32_t* v, uint32_t* k) {
uint32_t delta=0x458BCD42;
uint32_t v0=v[0], v1=v[1], sum=delta*32, i;
uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];
for (i=0; i<32; i++) {
v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
sum -= delta;
}
v[0]=v0; v[1]=v1;
}
int main()
{
uint32_t enc[]={4121530355,2719511459, 0};
uint32_t key[] = {9, 7, 8, 6};
TeaDecode(enc, key);
puts(enc); //GKcTFg0
return 0;
}
得到的值进行MD5加密:
最终得到flag
flag{77bca47fe645ca1bd1ac93733171c9c4}