首页
社区
课程
招聘
[原创]21kctf秋:签到题 身在何处
2021-11-15 19:00 1785

[原创]21kctf秋:签到题 身在何处

2021-11-15 19:00
1785

21kctf秋

签到题 身在何处

寻找Success字符串所在的函数

 

通过静态加动态分析,得到如下结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int __cdecl mmmm(HWND hDlg)
{
  int nNameNum; // ebx
  int code1; // ebx
  int nSeri; // eax
  int result; // eax
  signed int nSeriNum; // [esp+Ch] [ebp-260h]
  char str[200]; // [esp+10h] [ebp-25Ch] BYREF
  CHAR strName[200]; // [esp+D8h] [ebp-194h] BYREF
  CHAR strSeri[200]; // [esp+1A0h] [ebp-CCh] BYREF
 
  memset(strName, 0, sizeof(strName));
  memset(str, 0, sizeof(str));
  memset(strSeri, 0, sizeof(strSeri));
  nNameNum = GetDlgItemTextA(hDlg, 1000, strName, 201);
  if ( nNameNum
    && (nSeriNum = GetDlgItemTextA(hDlg, 1001, strSeri, 201),
        code1 = GetCode1(strName, nNameNum),
        strspn(strSeri, "0123456789") == strlen(strSeri))// 序列号是[0-9]组成
    && nSeriNum <= 10                           // 序列号长度 <= 10
    && (nSeri = Dec2Int((int)strSeri)) != 0
    && (Int2Hex(code1 ^ nSeri, (int)str, 16), GetCode1(str, 8) == 0x13B88C77) )
  {
    SetDlgItemTextA(hDlg, 1001, "Success!");
    result = 1;
  }
  else
  {
    SetDlgItemTextA(hDlg, 1001, "Wrong Serial!");
    result = 0;
  }
  return result;
}

Dec2Int() 是将字符串转成int

 

Int2Hex() 是将int转成16进制格式的字符串,且不带0x,以及字母为小写

 

相当于求解如下python脚本

1
2
3
4
5
6
name = 'KCTF'
# serial = ''
a = int(serial) ^ GetCode(name)
b = GetCode(hex(a)[:2])
if(b == 0x13B88C77)
    print('Success!')

因为已经给了一组正确的name/serial对,可以动态调试得到GetCode(hex(a)[:2]) == 0x13B88C77一组解为a = 0x13B88C77

 

然后动态调试得到GetCode('KCTF') = 0x5ee54f4c

 

于是可以得到:

1
serial = str(0x5ee54f4c ^ 0x52a1ed5a)

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回