[原创]CTF2017 第八题 loudy-CrackMe 解题报告
CTF2017 第八题 loudy-CrackMe
初步分析
- 拖入 IDA,发现有3个 TLS 回调,其中有1个回调启动了6个线程,但只有3个线程是解密函数,都类似如下代码
void thread1(LPVOID lpThreadParameter)
{
while ( 1 )
{
tmp[] = {0x8Bu, 0xC0u, 0x8Bu, 0xFFu, 0x8Bu, 0xDBu};
WaitForSingleObject(hMutex, 0xFFFFFFFF);
if ( func1_flag == 1 )
{
flOldProtect = 0;
VirtualProtect(&loc_401EC0, 0x2Eu, 0x40u, &flOldProtect);
v1 = 1;
do
{
*((_BYTE *)&loc_401EC0 + v1 - 1) ^= byte_4064F0[v1 - 1];
*((_BYTE *)&loc_401EC0 + v1) ^= byte_4064F0[v1];
v1 += 2;
}
while ( v1 - 1 < 46 );
// 将 401EC0 开始的 0x2E 个字节逐字节与 4064F0 开始的数组异或
VirtualProtect(&loc_401EC0, 0x2Eu, flOldProtect, &flOldProtect);
VirtualProtect(dword_4068E4, 6u, 0x40u, &flOldProtect);
v2 = 0;
v3 = (_BYTE *)dword_4068E4 - tmp;
do
{
v4 = tmp[v2];
v5 = &tmp[v2];
v6 = *(&tmp[v2++] + v3);
v5[v3] = v4;
*v5 = v6;
}
while ( v2 < 6 );
// 直接将 tmp 数组写入 4068E4 指针所指向的地址
VirtualProtect(dword_4068E4, 6u, flOldProtect, &flOldProtect);
func1_flag = 0;
}
ReleaseMutex(hMutex);
Sleep(50u);
}
}
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
