Babyre
1. shift + f2交叉引用后 shift+f7观察程序的段,发现有一个TLS段
2.在函数一栏搜索TLS发现TLS函数
3.先分析Tls0,这个函数是一个反调试函数,以及在修改key,主函数是xtea等一会分析
4.Tls1函数也有一个反调试,并且对密文进行了修改,异或i
5.主函数就主要三个函数,具体作用已经写在注释里面
6.xtea函数分析,进行了一些魔改,比如循环次数变成了 4 * 33次,sum的初始值不是0,以及 异或了 v3也就是sum
7.代表分析完毕开始解密,总之就是获取改变后的key和密文初始key是这样
8.先过反调试把cl修改为不等于4就行,然后直接在函数ret的地方下断点让程序修改掉key的值再查看就行
9.注意我这个里en_data1已经修改了
#include <stdio.h>
#include <stdint.h>
int delat = 0x77BF7F99;
void TEA_dercypt(uint32_t* v, uint32_t* key)
{
uint32_t a1 = v[0];
uint32_t a2 = v[1];
uint32_t sum = 0x90508D47;
sum += (-delat * (4 * 33));
//printf("%x\n", sum);
//printf("%x %x\n",v[0],v[1]);
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 33; j++)
{
sum += 0x77BF7F99;
a2 -= (((a1 << 5) ^ (a1 >> 4)) + a1) ^ (sum + key[(sum >> 11) & 3]);
a1 -= (((a2 << 5) ^ (a2 >> 4)) + a2) ^ (sum + key[sum & 3]) ^ sum;
}
}
v[0] = a1;
v[1] = a2;
return;
}
int main()
{
uint8_t en_data1[32] = { 224, 242, 35, 149, 147, 194, 216, 142, 147, 195, 104, 134, 188, 80, 242, 221, 153, 68, 14, 81, 68, 189, 96, 140, 242, 171, 220, 52, 96, 210, 15, 193 };
//uint32_t en_data[8] = { 3716265510, 1489281390, 3716265510, 1489281390, 3716265510, 1489281390, 3716265510, 1489281390 };
uint32_t key[4] = { 0x62, 0x6f, 0x6d, 0x62 };
uint32_t temp[2] = { 0 };
uint32_t* en_data = (uint32_t*)en_data1;
for (int i = 0; i < 8; i+=2)
{
temp[0] = en_data[i];
temp[1] = en_data[i + 1];
TEA_dercypt(temp, key);
printf("%c%c%c%c%c%c%c%c", *((char*)&temp[0] + 0), *((char*)&temp[0] + 1), *((char*)&temp[0] + 2), *((char*)&temp[0] + 3), *((char*)&temp[1] + 0), *((char*)&temp[1] + 1), *((char*)&temp[1] + 2), *((char*)&temp[1] + 3));
}
return 0;
}