-
-
[看雪CTF2016]第二十三题分析
-
发表于: 2016-12-16 15:54 2253
-
根据输入的sn生成字符点阵, 与字库中的点阵相比较, 保存索引, 对索引进行处理验证
根据sn(长度为18)生成字符点阵8*14, 用奇偶数表示
根据字符点阵获取索引值,保存到索引数组
打印字库, 结果为: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
索引数组必须为1D11121C2C1C360E1B120A15311E160B0E1B
根据sn(长度为18)生成字符点阵8*14, 用奇偶数表示
.text:004011C5 push eax ; flags .text:004011C6 mov eax, [ebp+var_90] .text:004011CC add eax, esi .text:004011CE or eax, 80000000h .text:004011D3 push eax ; lprect .text:004011D4 push [ebp+hdc] ; hdc .text:004011DA call ds:GetBoundsRect ; hooked => GetPixel
根据字符点阵获取索引值,保存到索引数组
.text:004010A0 字库, 62个8*14的点阵 .data:004121C0
打印字库, 结果为: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
void test2() { unsigned char buf[] = { //4121C0 }; for (DWORD k1 = 0; k1 < 62; k1++) { for (DWORD k2 = 0; k2 < 14; k2++) { for (DWORD k3 = 0; k3 < 8; k3++) { BYTE v = *(buf + k1 * 14 * 8 + k2 * 8 + k3); printf("%c", (v & 1) ? ' ' : '*'); } printf("\n"); } printf("\n"); } }
索引数组必须为1D11121C2C1C360E1B120A15311E160B0E1B
int __thiscall sub_4017B0(_BYTE *p) { unsigned int v1; // ebx@1 unsigned int v2; // ebx@1 int v3; // ebx@1 v1 = g_buf[(unsigned __int8)~LOBYTE(g_buf[(unsigned __int8)~*p]) ^ (unsigned __int8)p[1]] ^ ((g_buf[(unsigned __int8)~*p] ^ 0xFFFu) >> 8); v2 = g_buf[(unsigned __int8)v1 ^ (unsigned __int8)p[2]] ^ (v1 >> 8); v3 = g_buf[(unsigned __int8)v2 ^ (unsigned __int8)p[3]] ^ (v2 >> 8); if ( *((_DWORD *)p + 1) == 0xE361C2C && *((_DWORD *)p + 2) == 0x150A121B && *((_DWORD *)p + 3) == 0xB161E31 && *((_DWORD *)p + 4) == 0x1B0E ) { v3 = ~v3; } return v3; }
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
- KCTF2022春季赛 第三题 石像病毒 8859
- KCTF2022春季赛 第二题 末日邀请 16181
- KCTF2021秋季赛 第二题 迷失丛林 18810
- KCTF2020秋季赛 第十题 终焉之战 8869
- KCTF2020秋季赛 第九题 命悬一线 6464
看原图
赞赏
雪币:
留言: