攻防easyre-153

攻防easyre-153

先拖入exeinfope查壳,发现是简单的 upx壳

所以用upx.exe脱壳:upx-d

脱壳之后拖入ida,f5看main函数

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int pipedes[2]; // [esp+18h] [ebp-38h] BYREF
  __pid_t v5; // [esp+20h] [ebp-30h]
  int v6; // [esp+24h] [ebp-2Ch] BYREF
  char buf[30]; // [esp+2Eh] [ebp-22h] BYREF
  unsigned int v8; // [esp+4Ch] [ebp-4h]

  v8 = __readgsdword(0x14u);
  pipe(pipedes);	//创建管道,用于父进程和子进程的通信
  v5 = fork();		//创建子进程,与父进程同时运行fork后面的所有代码,在父进程中v5的值是 子进程的进程号(pid),在子进程汇总v5的值是0,如果出现错误,v5的值为负数。
  if ( !v5 )
  {
    puts("\nOMG!!!! I forgot kid's id");
    write(pipedes[1], "69800876143568214356928753", 29u);
    puts("Ready to exit     ");
    exit(0);
  }
  read(pipedes[0], buf, 29u);			//将pipedes的内容(69...53)复制到buf缓冲区
  __isoc99_scanf("%d", &v6);
  if ( v6 == v5 )
  {
    if ( (unsigned __int8)*(_DWORD *)((char *)lol + 3) == 204 )
    {
      puts(":D");
      exit(1);
    }
    printf("\nYou got the key\n ");
    lol(buf);							//在这里调用lol函数
  }
  wait(0);
  return 0;
}

打开lol函数:

int __cdecl lol()
{
  return printf("flag_is_not_here");
}

发现没什么,但打开汇编:

在这里插入图片描述

发现跳转的地方

mov     [ebp+var_C], 0
cmp     [ebp+var_C], 1
jnz     short loc_80486D3

这里会发生永恒跳转

所以将jnz改为jz(hex窗口中将该部分的75改为74)

保留更改:

int __cdecl lol(_BYTE *a1)
{
  char v2[7]; // [esp+15h] [ebp-13h] BYREF
  int v3; // [esp+1Ch] [ebp-Ch]

  v2[0] = 2 * a1[1];
  v2[1] = a1[4] + a1[5];
  v2[2] = a1[8] + a1[9];
  v2[3] = 2 * a1[12];
  v2[4] = a1[18] + a1[17];
  v2[5] = a1[10] + a1[21];
  v2[6] = a1[9] + a1[25];
  v3 = 0;
  return printf("%s", v2);
}

于是用c语言按照该逻辑解密:

#include <stdio.h>
int main()
{
	char a1[] = "69800876143568214356928753";
	char v2[7]; // [esp+15h] [ebp-13h] BYREF
  int v3; // [esp+1Ch] [ebp-Ch]

  v2[0] = 2 * (int)a1[1];
  v2[1] = a1[4] + a1[5];
  v2[2] = a1[8] + a1[9];
  v2[3] = 2 * a1[12];
  v2[4] = a1[18] + a1[17];
  v2[5] = a1[10] + a1[21];
  v2[6] = a1[9] + a1[25];
  v3 = 0;	
	printf("%s",v2);
	return 0;
}

最后得到flag:rhelheg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zsc_02

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

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

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

打赏作者

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

抵扣说明:

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

余额充值