bugku love (逆向详细步骤分析)

我们下载 后打开    用IDA打开把

接着   我们直接   shift + F12   切出字符串窗口   搜索flag   

也可以直接    ctrl + F 搜索

找到这个 main函数中的 flag 

之后  对着函数位置   按 F5 进行反编译 得到  可读界面

__int64 __cdecl main_0()
{
  size_t v0; // eax
  const char *v1; // eax
  size_t v2; // eax
  int v3; // edx
  __int64 v4; // ST08_8
  char v6; // [esp+0h] [ebp-188h]
  char v7; // [esp+0h] [ebp-188h]
  signed int j; // [esp+DCh] [ebp-ACh]
  signed int i; // [esp+E8h] [ebp-A0h]
  signed int v10; // [esp+E8h] [ebp-A0h]
  char Dest[108]; // [esp+F4h] [ebp-94h]
  char Str; // [esp+160h] [ebp-28h]
  char v13; // [esp+17Ch] [ebp-Ch]

  for ( i = 0; i < 100; ++i )
  {
    if ( (unsigned int)i >= 0x64 )
      j____report_rangecheckfailure();
    Dest[i] = 0;
  }
  sub_41132F((int)"please enter the flag:", v6);
  sub_411375("%20s", &Str);
  v0 = j_strlen(&Str);
  v1 = (const char *)sub_4110BE(&Str, v0, &v13);
  strncpy(Dest, v1, 0x28u);
  v10 = j_strlen(Dest);
  for ( j = 0; j < v10; ++j )
    Dest[j] += j;
  v2 = j_strlen(Dest);
  if ( !strncmp(Dest, Str2, v2) )
    sub_41132F((int)"rigth flag!\n", v7);
  else
    sub_41132F((int)"wrong flag!\n", v7);
  HIDWORD(v4) = v3;
  LODWORD(v4) = 0;
  return v4;
}

发现需要比较的  str2 字符串

那我们找到他看看

扫描二维码关注公众号,回复: 11002314 查看本文章

那么就是对他进行分析了   

e3nifIH9b_C@n@dH

j=0   ++j   从0开始 +0   +1  +3  依次增多

所以  我们需要对字符串的ascii码 值进行  -0    -1   -2  依次增多

那我们用c语言对他来完成吧  !!!    

ASCII码 依次 -i=0   i++

#include<stdio.h>
#include<string.h>
int main(){
 int i;
 char a[100];
 printf("请输入字符串:\n");
 scanf("%s",a);
 printf("解密得:\n");
 for(i=0;i<strlen(a);i++){
 a[i]=a[i]-i;
 printf("%c",a[i]);
 }
}

得到  

e2lfbDB2ZV95b3V9

发现是 base64加密的   

直接解密得到 

{i_l0ve_you}

也可以直接写个python脚本来实现

import base64
a='e3nifIH9b_C@n@dH'
flag=''
for i in range(len(a)):
    flag+=chr(ord(a[i])-i)
print(base64.b64decode(flag))
发布了218 篇原创文章 · 获赞 309 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/qq_42777804/article/details/99972701