Osmanthus_tea
用了upx壳,去壳后用ida打开,有个tea加密
与标准的tea加密进行对比发现在v4的值和加密顺序上的进行了魔改,
这里对要对比的字符串进行了加密,用动调的方法可以直接得到加密后的值
编写脚本并运行
#include<stdio.h>
#include<stdint.h>
#include<string.h>
void decrypt(uint32_t* v,uint32_t* key)
{
uint32_t k0,k2,k3,k1;
uint32_t v0,v1;
v0=v[0],v1=v[1];
k0=key[0],k1=key[1],k2=key[2],k3=key[3];
uint32_t delta=0x20240516,sum=0x20240516*32;
for(int i=0;i<32;i++)
{
sum-=delta;
v0-=((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
v1-=((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
}
v[0]=v0,v[1]=v1;
}
int main()
{
char s[32]={ 0x2A, 0x30, 0x46, 0x30, 0xAD, 0x50, 0x2B, 0x79, 0xC6, 0x70,
0xA0, 0xB4, 0x72, 0xE0, 0xA7, 0xA0, 0x7F, 0x42, 0xB8, 0x25,
0x2E, 0x9D, 0x70, 0xFC, 0xC3, 0xAC, 0x71, 0xD7, 0xD9, 0x44,
0x1D, 0x95 };
uint32_t key[4]={0,5,0,4};
for(int i=0;i<32;i+=8)
{
decrypt((uint32_t*)&s[i],key);
}
printf("%s",s);
return 0;
}
真心or花心
一样要去壳,去壳后用ida打开
花指令
nop掉后对main函数按P重新声明,就可反汇编出主函数
编写出脚本并运行
#include<stdio.h>
#include<string.h>
int ischar(char x)
{
return x<127&&x>=32;
}
int main()
{
char s[]="%y:&4jx@>j^xxfL7,V7&;:.8h$iVq";
for(int i=strlen(s)-1;i>=0;i--)
{
s[i]=s[i]-(32+s[(i * i + 123) % 21]);
if(ischar(s[i])==0)
{
for(int j=1;j<=4;j++)
{
s[i]+=j*96;
if(ischar(s[i])==1) break;
}
}
}
printf("%s",s);
return 0;
}