金盾信安2024_RE
原创2024年12月2日大约 3 分钟
金盾信安2024_RE
这俩题目都记录一下操作。
babyre
直接动调,理清逻辑,就是先用前半段经过一个函数生成v21, v20就是转成十六进制。发现有内存保护。
第一个address函数断在内存保护清零。然后修复address函数。
修复完后发现。发现对v20异或了。
loc_5A11A0可能是函数,但是双击进去,编译不了伪代码,我就修改eip指针跳过反调试,在最后一个内存保护函数那里下断点,因为他是加密完后,把函数全部弄成0。所以下断点不让他清除。运行到最后一个内存保护后,才可以进去修复函数。
修复好后,发现是一个tea加密。
int __cdecl sub_5A11A0(unsigned int *a1, _DWORD *a2)
{
int result; // eax
unsigned int i; // [esp+14h] [ebp-10h]
int v4; // [esp+18h] [ebp-Ch]
unsigned int v5; // [esp+1Ch] [ebp-8h]
unsigned int v6; // [esp+20h] [ebp-4h]
v6 = *a1;
v5 = a1[1];
v4 = 0;
for ( i = 0; i < 0x20; ++i )
{
v4 -= 0x61C88647;
v6 += (a2[1] + (v5 >> 5)) ^ (v4 + v5) ^ (*a2 + 16 * v5);
v5 += (a2[3] + (v6 >> 5)) ^ (v4 + v6) ^ (a2[2] + 16 * v6);
}
*a1 = v6;
result = 4;
a1[1] = v5;
return result;
}
然后我们输入的后半段,先经过凯撒 移位3,然后还是跟前半段一样的函数,生成v19。最后动调看出是v17和v18连在一起与v6对比。
解密代码
发现数据是倒过来的。所以写代码时加个逆序。或者一行一行提取。
eazyre
一进来发现是main函数汇编,但是左边都是红色,汇编出问题了。 发现jnz是无用跳转。
把jnz nop掉 db 0c7h,还有下面的 call。然后选中全部main函数,按C,强迫。
然后对着90h按C,强迫,确定。然后再main函数开头按P,
然后f5编译一下,就成功了。
这里双击进去也发现有问题。
按U展开,把75 nop掉之后,按C。
然后开头按P,变成函数。f5能编译了
这个函数双金进去也有问题,直接tab查看。
发现sub4010640有个push ebp,但是结束的时候没有pop。
但是下面那个函数的结尾,会有pop ebp,但是开头却没有push ebp。推测这俩函数本来是一体的。
把跳转直接去掉,让他们成为一体。
在这里设置会返回点。
就成功反编译了。