首页 > 其他分享 >reverse_1

reverse_1

时间:2023-05-01 09:33:19浏览次数:45  
标签:reverse -- Str2 Str1 flag IDA sub

依旧先查壳(看几位)

没壳64位

考虑IDA或者OD都行(看个人习惯,OD需要很大的功底)建议先从IDA开始

拖入IDA看看

发现没有想要的东西 --> shift+F12 -->(可以ctrl+F) --> 也可一个个找关键字flag

发现right flag --> 点进去

在数据段上(不能操作)没有任何作用 --> ctrl+x(查看是谁调用了这段数据)(这里注意,一定要选中这行数据,要不然显示不出来)

发现有一个调用了它,点击OK进入

来到主函数这边的“流程图”了

这里可以选择两种

一种看着汇编代码直接弄就好了

一种摁F5查看伪代码

__int64 sub_1400118C0()
{
  char *v0; // rdi
  __int64 i; // rcx
  size_t v2; // rax
  size_t v3; // rax
  char v5[36]; // [rsp+0h] [rbp-20h] BYREF
  int j; // [rsp+24h] [rbp+4h]
  char Str1[224]; // [rsp+48h] [rbp+28h] BYREF
  unsigned __int64 v8; // [rsp+128h] [rbp+108h]

  v0 = v5;
  for ( i = 82i64; i; --i )
  {
    *(_DWORD *)v0 = -858993460;
    v0 += 4;
  }
  for ( j = 0; ; ++j )
  {
    v8 = j;
    v2 = j_strlen(Str2);
    if ( v8 > v2 )
      break;
    if ( Str2[j] == 111 )
      Str2[j] = 48;
  }
  sub_1400111D1("input the flag:");
  sub_14001128F("%20s", Str1);
  v3 = j_strlen(Str2);
  if ( !strncmp(Str1, Str2, v3) )
    sub_1400111D1("this is the right flag!\n");
  else
    sub_1400111D1("wrong flag\n");
  sub_14001113B(v5, &unk_140019D00);
  return 0i64;
}

首先先看正确的flag怎么出来的

有个判断

strncmp --> 通过参数的传递比较是否相同,相同返回 0。

这里写的是用 Str1 和 Str2 比较 v3 个字符,相同就输出字符串“this is the right flag!\n”

问题来了, Str1 和 Str2 我们都不知道昂,怎么比较?--> 依次双击 Str1 和 Str2

Str1在空的数据段,应该是要我们自己写

Str2 以字节定义了一段字符串‘{hello_world}’和一个数据 0 (没用,这个数据)

答案就出来了,使 Str1 和 Str2 相同就行,但是还没完,再仔细看看代码,Str2比较前还有处理

111和48是啥 --> ASCII码 --> 可以自己查,也可以选中这个数据,然后摁“R”,在IDA中可以自动转化

明显是要我们将Str2中的所有'o'转化'0'

所以flag{hell0_w0rld}收工

标签:reverse,--,Str2,Str1,flag,IDA,sub
From: https://www.cnblogs.com/TFOREVERY/p/17366176.html

相关文章

  • XI Samara Regional Intercollegiate Programming Contest Problem E. Substring Re
    Twostringssandtofthesamelengtharegiven.Determinewhetheritispossibletomaketfromsusingexactlyonereverseofsomeitssubstring.InputThefirstlinecontainsthestrings,andthesecond—thestringt.Bothstringshavethesamel......
  • Comparator.reverseOrder() 和 reversed()的区别
    摘要:Comparator.reverseOrder()和reversed()的区别是前者以某字段进行倒序排列,而reversed是针对已排序数据进行处理,常常用于比较器的末尾。  在使用Streamsorted进行排序的时候,常常需要按照摸个属性进行降序排列,有时候reverseOrder()和reversed()都可以实现目标,那他们的区......
  • Minimum Reverse Operations
    MinimumReverseOperationsYouaregivenaninteger n andaninteger p intherange [0,n-1].Representinga0-indexed array arr oflength n whereallpositionsaresetto$0$'s,exceptposition p whichissetto 1 .Youarealsogivenaninte......
  • sort,sorted,reverse,reversed的区别
    python中sort,sorted,reverse,reversed的区别简单的说以上四个内置函数都是排序。对于sort和reverse都是list列表的内置函数,一般不传参数,没有返回值,会改变原列表的值。而sorted和reversed是python内置函数,需要传参数,参数可以是字符串,列表,字典,元组,不管传的参数是什么sorted返回的......
  • How to Configure Nginx reverse proxy the domain
    未测试过,自己记录待用http{resolver8.8.8.8;upstreamexample{serverhttp://example.comresolve[use_last]...;keepalive1024;}第二种负载均衡upstreammytarget{serveraaa.tar.com:443max_fails=3fail_timeout=60s;serverbbb.tar.com:443backup;}server......
  • reverse/base64变体类型
    例:【BUU】特殊的BASE64进入main函数后发现rightflag明显是base64加密的结果(补=)随后发现右base64encode函数进入后发现是传统的base64加密方式,猜测是密码表的变体利用shitf+f12查看字符串发现有类似密码表的字符串利用脚本进行解密importbase64outab="ABCDEFGHIJKLMNOP......
  • string_reverse
      defstring_reverse():s="abcdrfg"foriinrange(len(s)-1,-1,-1):print(s[i],end="")gfrdcba  defstring_reverse():......
  • algrothm_reverse(algrothm+round)【反转链表】
    ......
  • reverse单题
    题意:初始化数组a为[1,2...,n],对该区间进行反转操作后,对子区间[l,mid],[mid+1,r]中的元素个数大于2的区间进行同样的操作,直到最后所有子区间元素个数都为1,给出一个查找区间[......
  • [BUUCTF]Reverse-刮开有奖
      是32位的,拖入ida严刑拷打 【还可以点进DialogBoxParamA函数,这是一个从对话框模板资源创建模式对话框。在显示对话框之前,函数会将应用程序定义的值作为WM_INITDIA......