[FlareOn2]very_success

题目来源:[FlareOn2]very_success

确定是32位无壳程序
在这里插入图片描述
放入静态分析工具ida32里查看:
在这里插入图片描述
发现栈指针不平衡,"alt + k"手动调节一下,加个负号即可:
在这里插入图片描述
调节好之后查看伪代码:

BOOL __usercall sub_401000@<eax>(int a1@<ebp>)
{
  BOOL result; // eax
  HANDLE v2; // [esp-14h] [ebp-14h]
  HANDLE v3; // [esp-10h] [ebp-10h]
  DWORD v4; // [esp-Ch] [ebp-Ch] BYREF
  int v5; // [esp-8h] [ebp-8h]
  void *retaddr; // [esp+0h] [ebp+0h]

  v5 = a1;
  v2 = GetStdHandle(0xFFFFFFF6);
  v3 = GetStdHandle(0xFFFFFFF5);
  WriteFile(v3, aYouCrushedThat, 0x43u, &v4, 0);
  ReadFile(v2, &unk_402159, 0x32u, &v4, 0);
  if ( sub_401084(retaddr, &unk_402159, v4) )
    result = WriteFile(v3, aYouAreSuccess, 0x11u, &v4, 0);
  else
    result = WriteFile(v3, aYouAreFailure, 0x11u, &v4, 0);
  return result;
}

关于writefile函数和readfile函数,虽说无关紧要,但还是贴一下msdn文档了解一下:
在这里插入图片描述
在这里插入图片描述
查看关键函数:

int __usercall sub_401084@<eax>(int result@<eax>, int a2, char *a3, int a4)
{
  __int16 v4; // bx
  int v5; // ecx
  _BYTE *v7; // edi
  char v8; // al
  unsigned int v9; // kr00_4
  char v10; // al
  char v11; // cf
  __int16 v12; // ax
  bool v13; // zf
  _BYTE *v14; // edi
  int v15; // [esp+0h] [ebp-Ch]

  v4 = 0;
  v5 = 37;
  if ( a4 >= 37 )
  {
    v7 = (a2 + 36);
    while ( 1 )
    {
      LOWORD(result) = 455;
      v15 = result;
      v8 = *a3++;
      v9 = __readeflags();
      v10 = v15 ^ v8;
      __writeeflags(v9);
      
      v12 = (__ROL1__(1, v4 & 3) + v11 + v10);//关键操作,v11是进位标志位
      
      v4 += v12;
      v13 = *v7 == v12;    //*v7==v12,v7指针会从后往前依次读取a2的值
      v14 = v7 + 1;
      if ( !v13 )          //v13==1
        LOWORD(v5) = 0;
      result = v15;
      if ( !v5 )
        break;
      v7 = v14 - 2;
      if ( !--v5 )
        return result;
    }
  }
  return 0;
}

这个函数里面的v12 = (ROL1(1, v4 & 3) + v11 + v10);语句是加密的关键函数,而v13 = *v7 == v12是检查函数。可以看出要将加密后的字符串一个个加密一个个判断,然后跟倒置的a2做比对。
我静态分析没有看出每次v7的值是什么,所以选择od动态调试看一下。在ida里面tab查看v12 = (ROL1(1, v4 & 3) + v11 + v10);对应的汇编代码:
在这里插入图片描述
根据定义v7的伪代码我们也知道了v7的值所在的地址是放在di寄存器里面的
在这里插入图片描述
所以我们在加密语句处下断点,看寄存器di的值,再数据窗口跟随地址就可以得到每次v7的值。

由于我们动态调试随便输入的password,所以为了避免加密过程中会跳出循环,我直接把跳转语句“ jecxz short loc_4010D7 ”给nop掉,这样就可以统计v7的值,为后续写exp做准备。
在这里插入图片描述
但我们只是获得了32个数据,但最后5个忽略也无伤大雅,因为从提示我们推测最后的结果肯定是“ @flare-on.com ”结尾,这32个统计如下:
在这里插入图片描述

v7=[0xAA, 0xEC, 0xA4, 0xBA, 0xAF, 0xAE, 0xAA, 0x8A, 0xC0, 0xA7,
  0xB0, 0xBC, 0x9A, 0xBA, 0xA5, 0xA5, 0xBA, 0xAF, 0xB8, 0x9D,
  0xB8, 0xF9, 0xAE, 0x9D, 0xAB, 0xB4, 0xBC, 0xB6, 0xB3, 0x90,
  0x9A, 0xA8]

EXP

自己写的exp:

def rol(value, count):
    temp=((value>>(8-count))&0xFF)|((value<<count)& 0xFF)
    return temp
v7=[0xAA, 0xEC, 0xA4, 0xBA, 0xAF, 0xAE, 0xAA, 0x8A, 0xC0, 0xA7,0xB0, 0xBC, 0x9A, 0xBA, 0xA5, 0xA5, 0xBA, 0xAF, 0xB8, 0x9D,0xB8, 0xF9, 0xAE, 0x9D, 0xAB, 0xB4, 0xBC, 0xB6, 0xB3, 0x90,0x9A, 0xA8]
flag=''
v4=0
for i in range(len(v7)):
	flag+=chr((v7[len(v7)-i-1]-rol(1,v4&3)-1)^0xC7)
	v4+=v7[len(v7)-i-1]
print('flag{'+flag+'n.com}')

贴上别的博主的exp学习一下

sumv = 0
lenv = 37
rolv = 1
flag = 1
result = ''
  
values = [0xa8,0x9a,0x90,0xb3,0xb6,0xbc,0xb4,0xab,0x9d,0xae,0xf9,0xb8,0x9d,0xb8,0xaf,0xba,0xa5,0xa5,0xba,0x9a,0xbc,0xb0,0xa7,0xc0,0x8a,0xaa,0xae,0xaf,0xba,0xa4,0xec,0xaa,0xae,0xeb,0xad,0xaa,0xaf,]
for i in range(37):
    rolv = (1 << (sumv & 3)) % 256
    code = (455 ^ (values[i] - rolv - flag)% 256) %256
    result = result + chr(code)
    sumv = sumv + values[i]
print result

exp

v7=[0xAA, 0xEC, 0xA4, 0xBA, 0xAF, 0xAE, 0xAA, 0x8A, 0xC0, 0xA7,
  0xB0, 0xBC, 0x9A, 0xBA, 0xA5, 0xA5, 0xBA, 0xAF, 0xB8, 0x9D,
  0xB8, 0xF9, 0xAE, 0x9D, 0xAB, 0xB4, 0xBC, 0xB6, 0xB3, 0x90,
  0x9A, 0xA8]
v7=v7[::-1]
flag=""
v4=0
for i in range(len(v7)):
    tmp=(1<<(v4&0x3))
    flag+=chr((v7[i]-tmp-1)^0xc7)
    v4+=v7[i]
print(flag)
// An highlighted block
var foo = 'bar';

运行一下得到flag:
在这里插入图片描述

flag{a_Little_b1t_harder_plez@flare-on.com}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Cloudflare是一种网站加速和安全服务提供商,而WordPress是一种流行的内容管理系统。相互结合使用时,有时会遇到“err_too_many_redirects”错误。 这个错误通常发生在网站重定向设置出现问题时。当Cloudflare和WordPress同时配置了HTTPS,但是其重定向规则不匹配时,就会出现此错误。这可能是由于不正确的SSL设置、无限循环的重定向规则或其他参数设置不当导致的。 要解决这个问题,有几个步骤可以尝试: 首先,确保你的WordPress网站和Cloudflare都配置了正确的SSL设置,例如使用相同的SSL/TLS选项和相同的URL设置。确保WordPress设置中的网址与Cloudflare中的网址匹配。 其次,检查你的重定向规则是否设置正确。在WordPress设置中,打开“常规设置”并确保WordPress地址和站点地址正确。在Cloudflare中,检查“SSL/TLS”选项页面和“网页规则”页面,确保重定向规则设定正确。 还要检查Cloudflare中的缓存设置。如果启用了“全站缓存”,可以尝试禁用它,然后在WordPress设置中手动清除缓存。有时这可以解决“err_too_many_redirects”错误。 如果以上步骤没有解决问题,可以尝试禁用所有的插件和主题,然后逐个重新启用,以查找是否有某个插件或主题导致了重定向循环。 最后,如果仍然无法解决问题,建议查看WordPress和Cloudflare的官方文档和论坛,以获取更多关于此错误的详细解答和可能的解决方案。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Em0s_Er1t

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值