首页 > 其他分享 >[攻防世界][Reverse]xxxorrr

[攻防世界][Reverse]xxxorrr

时间:2022-12-30 21:01:48浏览次数:46  
标签:__ 攻防 Reverse s2 s1 xxxorrr main rsp sub

将目标文件拖入IDA

反汇编main函数
__int64 __fastcall main(int a1, char **a2, char **a3)
{
  int i; // [rsp+Ch] [rbp-34h]
  char s[40]; // [rsp+10h] [rbp-30h] BYREF
  unsigned __int64 v6; // [rsp+38h] [rbp-8h]

  v6 = __readfsqword(0x28u);
  sub_A90((void (__fastcall *)(void *))sub_916);
  fgets(s, 35, stdin);
  for ( i = 0; i <= 33; ++i )
    s1[i] ^= s[i];
  return 0LL;
}
这里有一个sub_A90sub_916,怀疑是main执行完后的回调,看一下sub_916
unsigned __int64 sub_916()
{
  unsigned __int64 v1; // [rsp+8h] [rbp-8h]

  v1 = __readfsqword(0x28u);
  if ( !strcmp(s1, s2) )
    puts("Congratulations!");
  else
    puts("Wrong!");
  return __readfsqword(0x28u) ^ v1;
}
从这里可以看出确实是;这里有在对比 s1s2, 二者一样就ok
从main中可以看出s1对输入的字符串做了一个异或操作,那就是异或后再比较
找到s1 和 s2对应的字符串的值
    s1 = 'qasxcytgsasxcvrefghnrfghnjedfgbhn'
    s2 = [0x56, 0x4e, 0x57, 0x58, 0x51, 0x51, 0x09, 0x46,
          0x17, 0x46, 0x54,
          0x5A, 0x59, 0x59, 0x1F, 0x48, 0x32, 0x5B, 0x6B,
          0x7C, 0x75, 0x6E, 0x7E, 0x6E, 0x2F, 0x77, 0x4F,
          0x7A, 0x71, 0x43, 0x2B, 0x26, 0x89, 0xFE, 0x00]
发现sub_84A也有去操作s1,应该是在main函数执行之前执行的
unsigned __int64 sub_84A()
{
  int i; // [rsp+Ch] [rbp-14h]
  unsigned __int64 v2; // [rsp+18h] [rbp-8h]

  v2 = __readfsqword(0x28u);
  for ( i = 0; i <= 33; ++i )
    s1[i] ^= 2 * i + 65;
  return __readfsqword(0x28u) ^ v2;
}

可以反推出执行后的值,反推python代码为

def decode():
    s1 = 'qasxcytgsasxcvrefghnrfghnjedfgbhn'
    s2 = [0x56, 0x4e, 0x57, 0x58, 0x51, 0x51, 0x09, 0x46,
          0x17, 0x46, 0x54,
          0x5A, 0x59, 0x59, 0x1F, 0x48, 0x32, 0x5B, 0x6B,
          0x7C, 0x75, 0x6E, 0x7E, 0x6E, 0x2F, 0x77, 0x4F,
          0x7A, 0x71, 0x43, 0x2B, 0x26, 0x89, 0xFE, 0x00]

    t_s1 = []
    for i in range(33):
        t_s1.append(ord(s1[i]) ^ (2*i + 65))


    for j in range(33):
        t_val = t_s1[j] ^ s2[j]
        print(chr(t_val), end="")
    print("====")

    flag = ''
    for x in range(33):
        flag += chr(ord(s1[x])^ (2 * x + 65)^s2[x])

    print(flag)

if __name__ == '__main__':
    print('hello')
    decode()

得到 flag{c0n5truct0r5_functi0n_in_41f}

标签:__,攻防,Reverse,s2,s1,xxxorrr,main,rsp,sub
From: https://www.cnblogs.com/gradyblog/p/17015802.html

相关文章

  • [CTF] 攻防世界-ics-06
    题目描述云平台报表中心收集了设备管理基础服务的数据,但是数据被删除了,只有一处留下了入侵者的痕迹。解题过程(其实没解出来)初看-入题一进去就看到这个界面,属实有点懵,......
  • [CTF] 攻防世界-simple_js
    题目描述:小宁发现了一个网页,但却一直输不对密码。(Flag格式为Cyberpeace{xxxxxxxxx})直接看源码,只有个js脚本,flag就是破解它functiondechiffre(pass_enc){var......
  • [CTF] 攻防世界-xff_referer
    X-Forwarded-For:,,https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/X-Forwarded-For大致理解:就是你有代理服务器,它只能看到你最后代理的那个IP,但是用这......
  • [CTF] 攻防世界-command_execution
    题目:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。个人WP(官方的不好或者不全)随便输入个东西试试是ping的命令,加上题目说没有waf,猜测......
  • [CTF] 攻防世界-simple_php
    题目<?phpshow_source(__FILE__);include("config.php");$a=@$_GET['a'];$b=@$_GET['b'];if($a==0 and $a){    echo $flag1;}if(is_numeric($b)){   ......
  • apache 里的 ProxyPassReverse 指令
    该指令允许Apachehttpd调整HTTP重定向响应(HTTPredirectresponse)Location、Content-Location和URI标头中的URL。当Apachehttpd用作反向代理(或网关)以避免......
  • [攻防世界][Reverse]666
    下载附件,是一个可执行的ELF文件666,拖进IDA中查看main函数反汇编得到int__cdeclmain(intargc,constchar**argv,constchar**envp){chars[240];//[rsp+0h]......
  • [攻防世界][江苏工匠杯]easyphp
    打开靶机url,上来就代码审计<?phphighlight_file(__FILE__);$key1=0;$key2=0;$a=$_GET['a'];$b=$_GET['b'];if(isset($a)&&intval($a)>6000000&&str......
  • [攻防世界][江苏工匠杯]unseping
    打开靶机对应的url上来就是代码审计<?phphighlight_file(__FILE__);classease{private$method;private$args;function__construct($method,......
  • [攻防世界][Web]ics-06
    打开靶机对应的url,展开是一个网站的样子,其实啥也么有所有tab都点一遍,发现只有报表中心有内容,url为http://61.147.171.105:49797/index.php?id=1猜测这里是题眼,使用burp......