攻防世界 Reverse 梅津美治郎

梅津美治郎
在这里插入图片描述
拖进ida,分析main函数

strcpy(Str2, "r0b0RUlez!");
  dword_40AD94 = (int)&v9;
  dword_40ADA0 = (int)&v20;
  dword_40AD8C = (char *)v18;
  dword_40AD90 = (char *)v16;
  dword_40AD98 = (int)v14;
  lpProcName = (LPCSTR)v12;
  lpModuleName = (LPCSTR)v13;
  Buffer = (char *)v10;
  sub_401500(0);
  v3 = lpProcName;
  v4 = GetModuleHandleA(lpModuleName);
  v5 = (void (__stdcall *)(HMODULE, LPCSTR))GetProcAddress(v4, v3);
  v5((HMODULE)1, (LPCSTR)sub_40157F);
  puts(dword_40AD8C);
  scanf("%20s", Str1);
  if ( !strcmp(Str1, Str2) )
  {
    puts("You passed level1!");
    sub_4015EA(0);
  }
  return 0;
}

最后一个if语句是将Str1和Str2进行对比,str1是用户输入的字符串,str2是r0b0RUlez!可以得出level1的password是r0b0RUlez!

拖进od调试
输入假码,在寄存器可以看到假码,F8单步走
在这里插入图片描述
数据窗口中跟随数值
在这里插入图片描述
得到 75 31 6E 6E 66 32 6C 67
根据函数sub_401547写脚本

int __cdecl sub_401547(_BYTE *a1, _BYTE *a2)
{
  while ( *a2 != 2 )
  {
    if ( *a1 != (*a2 ^ 2) )
      return 1;
    ++a1;
    ++a2;
  }
  return 0;
}
a=[0x75,0x31,0x6E,0x6E,0x66,0x32,0x6C,0x67]
flag=''
for i in a:
    flag+=chr(i^2)
print(flag)

运行得`

w3lld0ne

最终flag{r0b0RUlez!_w3lld0ne}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值