吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3929|回复: 28
收起左侧

[CTF] 学破解第194天,《攻防世界reverse练习区easyre-153》学习

  [复制链接]
小菜鸟一枚 发表于 2022-4-19 20:27

前言:

  坛友们,年轻就是资本,和我一起逆天改命吧,我的学习过程全部记录及学习资源:https://www.52pojie.cn/thread-1582287-1-1.html

立帖为证!--------记录学习的点点滴滴

0x1 收集信息

  1.首先,还是查壳,然后看一看文件格式,可以看到是32位,带UPX壳,这OD工具也只能windows平台用,咋脱壳呢?

https://s1.ax1x.com/2022/04/19/LBscFO.png

  2.还是和昨天一样将文件复制到kali中,然后将ida目录下的linux_server也复制过来,防止一会远程调试,先备用。

https://s1.ax1x.com/2022/04/19/LByPtU.png

  3.运行一下程序,没反应???

  4.熟悉一下kali,似乎没有类似的脱壳工具?

https://s1.ax1x.com/2022/04/19/LByQhD.png

  5.除了明面上的目录工具,还有很多命令行工具藏在bin目录下,例如java,python,C/C++编译器gcc和g++。

https://s1.ax1x.com/2022/04/19/LBcFy9.png

  6.有了工具先输入 upx -d ctf进行脱壳,如下图提示,脱壳完成,UPX是压缩壳,所以脱完壳,程序体积会变大。

https://s1.ax1x.com/2022/04/19/LBgNH1.png

  7.现在运行程序,可以看到输出了,看这提示,似乎让我找到正确的ID,输入123456然后程序就退出了。

┌──(kali㉿kali)-[~]
└─$ ./ctf

OMG!!!! I forgot kid's id
Ready to exit     
123456

┌──(kali㉿kali)-[~]
└─$ 

0x2 静态分析

  1.收集完信息,就开始分析了,将脱壳后的程序复制回win7电脑,将程序拖进ida,找到main函数,F5可以看到伪代码:

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();
  if ( !v5 )
  {
    puts("\nOMG!!!! I forgot kid's id");
    write(pipedes[1], "69800876143568214356928753", 0x1Du);
    puts("Ready to exit     ");
    exit(0);
  }
  read(pipedes[0], buf, 0x1Du);
  __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);
  }
  wait(0);
  return 0;
}

  2.有了昨天的经验,这个就好理解了,fock子进程,防止动态调试,"69800876143568214356928753"字符串写到文件,然后退出,接着读文件,然后根据提示可以锁定关键代码在这里。

  if ( v6 == v5 )
  {
    if ( (unsigned __int8)*(_DWORD *)((char *)lol + 3) == 204 )
    {
      puts(":D");
      exit(1);
    }
    printf("\nYou got the key\n ");
    lol(buf);
  }

  3. (unsigned __int8)(_DWORD )((char *)lol + 3) == 204,这段代码到底干什么的?lol是一个函数地址,打印的一段字符串?这显然是不可能的,难道自己比自己,而且这里有些此地无银三百两的感觉。

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

  4.看一看这个函数的执行流程图,明显很多反汇编代码,还有分支语句,为什么F5识别不出来呢?

https://s1.ax1x.com/2022/04/19/LBhZTA.png

  5.看看这三行代码,赋值为0再和1比较,这不是jmp吗?然后就被IDA F5给优化掉了,不会走另外一个流程。

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

  6.edit->patch program->assemble,也可以选第一个或者第二个硬编码修改,这里注意,因为这里指令占6个大小,所以我得nop 6次才可以,再来F5反编译看看:

int __cdecl lol(_BYTE *a1)
{
  int result; // eax
  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];
  if ( v3 == 1 )
    result = printf("%s", v2);
  else
    result = printf("flag_is_not_here");
  return result;
}

  7.现在逻辑清楚了,我输入的字符串存到v6,然后判断v6是不是和v5的pid相等,v5就是fock函数的返回值,如果相等就执行上面刚刚反编译出来的函数,不知道是不是这么理解,直接把这段代码拷贝过来,因为kali自带编辑器,百度一下用法:

touch main.c  新建一个文件

单击左上角自带的text editor工具,打开刚刚创建的文件

开始编写代码,最后保存

gcc main.c -o main  编译程序

./main  运行程序

  8.kali工具是真的齐全,成功得到flag:rhelheg。

https://s1.ax1x.com/2022/04/19/LBLD8H.png

0x3 总结

  1.看不懂就百度,顺便学一学新工具,新环境的用法。

免费评分

参与人数 12吾爱币 +17 热心值 +12 收起 理由
an9el + 1 + 1 我很赞同!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
117935 + 1 + 1 谢谢@Thanks!
Tunx + 1 + 1 热心回复!
xiong930626 + 1 + 1 谢谢@Thanks!
阿橙C + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
唐小样儿 + 1 + 1 我很赞同!
l986475227 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
achong345 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
CodingZhang + 1 + 1 用心讨论,共获提升!
qq06314488 + 1 + 1 我很赞同!
xzl9552547 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

云深丶不知处 发表于 2022-4-19 21:42
好的谢谢了,感谢分享
头像被屏蔽
xiadongming 发表于 2022-4-19 21:49
exiaowe 发表于 2022-4-19 21:52
aonima 发表于 2022-4-19 22:23
kali上的工具确实非常多,不过大部分用不上
notifier 发表于 2022-4-19 22:55
谢谢分享,很有启发!
yimeixiaokeai 发表于 2022-4-20 06:26
学到了,感谢楼主分享
achong345 发表于 2022-4-20 07:16
感觉学这个要非常感兴趣,还要非常有耐心,我看了2两天就学不下去了~~
wzwzaozao 发表于 2022-4-20 08:08
感谢楼主分享
头像被屏蔽
daisypojie 发表于 2022-4-20 08:18
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表