攻防世界 logmein(重温,重点在于怎么写出脚本)


title: 攻防世界 logmein(重点在于怎么写出脚本)
date: 2021年8月6日 16点08分
tags: 攻防世界
categories: 攻防世界

1、重温之前言

这道题之前,做过,但是所写的脚本是依照他人的,今日,想自己写脚本做出来这道题,便重温一遍,重点在于写脚本过程,以此记录自己学习之路,之前做这道题的时候,对于写脚本可是一点点思路也没有,今日再做,虽没一下成功,但是也算了勉勉强强可以接近写出脚本了。

前面的找到伪代码一系列过程,请移步我之前写的博客的第一题

攻防世界+BUUCTF几道reverse新手题(需要复写代码)_啥也不会的大白555的博客-CSDN博客

下面开始分析伪代码,

在这里插入图片描述

随着之前分析的几个reverse题,如今的这个伪代码的内容便是一眼并知了。

**关于v7 这里的小端序存储,一开始并没有想起来,导致写脚本的时候,出现了错误。**这是需要铭记的地方,下次一定要记住,在IDA中,需要自己手动来转为字符串的,一定要反转一下,字符的顺序。

关于大小端序的问题,请移步之前写的博客

BUUCTF SimpleRev(涉及大小端序存储的问题)_啥也不会的大白555的博客-CSDN博客

此是后话,继续分析。

如图所示,我们整理一下思路,输入的s 是flag,然后通过if语句中的那一串算法,将s加密。在算法中,v6,v7,v8已经告诉,我们则正向的写脚本跑一下就可得flag。

2、错误的脚本摸索 一

一开始写的代码如下

在这里插入图片描述

**我知道,把v8字符串写出来,把v6写出来,把v7写出来,然后根据循环,跑一下这个算法便可得到答案,但是出错了,学过c语言的应该都知道,这里的这个错误是说,我们在^(异或)的时候,两边的类型不一样。**我在想,之前抄其他大佬们写的脚本怎么没有这个问题呢。在百思不得其解的情况下,我打开了之前写的博客,查看它的脚本代码。如图:

3、再次参考大佬写的正确的脚本

在这里插入图片描述

4、发现问题所在,&v7前面还有一串字符

此处我忽略了一个问题,伪代码中的算法不仅仅是有v7,v6,v8,还有v7前面的一串东西,于是我天真的加了上去。

在这里插入图片描述

观察错误,发现它说这个_BYTE,第一次被使用,没有声明定义。

5、关于_BYTE的宏定义问题

于是我又去观察之前大佬写的。发现他前面写了一个宏定义#define BYTE unsigned char,我加了上去,发现成功了,且没有错误的地方,但是加密出来的flag不对。

为什么宏定义之后能成功,见下面复盘阶段的解释

6、此处就是v7字符串没有反序,引起的错误

在这里插入图片描述

这时我还以为,v7必须得用那一串数字,才可以,于是修改代码。

7、发现__int64 的不一样,要两个下划线

在这里插入图片描述

出现错误,百度一波_int64,发现就是一个无符号的64位整数,与int是一样的。

但是在c语言中,注意前面的那个_ ,在c语言中,要写两个_ _

在这里插入图片描述

成功得出结果。

8、再次复盘

(1)BYTE的问题

此处再次复盘这个过程,百度了一下BYTE。

标准C没有这个类型,byte表示一个字节,对应C的unsigned char,你可以自己按下面的样子定义一个即可:

typedef unsigned char byte;,也就是我们宏定义的#define _BYTE unsigned char

(2)算法的问题

在写脚本的时候,一定要将算法里面的东西都复制,不要自己去写,容易出错。

对于v7的类型,我也在伪代码的一开始找到了。

在这里插入图片描述

除此代码之外,还有另外一个代码,v7有__int64类型,变成了char 类型。

(3)还可以将v7变成字符串,但是记得字符串要反序

但是这里,一开始忘记了小端序存储,在这里,需要变换字符的顺序,所以加密失败了。

在这里插入图片描述

这里,我是后面查看了大佬的wp之后,才顿然醒悟。

换个顺序,就成功了。

在这里插入图片描述

也就是说v7不管是__int64类型的一串数字,还是char类型的字符串,算法都是能成功的。

9、总结

(1)关于头文件中,有#include <stdlib.h> 这个头文件的解释

那位大佬在脚本中加了一个system(“PAUSE”);在使用system的时候,需要加上这个头文件,这行代码的作用是,防止程序一下就退出。

脚本写在这里就结束,这次重温收获很大,

(2)第一是学到了在写脚本的时候,可以选择加入system(“PAUSE”);

这一行代码,防止代码快速闪退,但是得加上头文件#include <stdlib.h>

(3)BYTE在c语言中,对应unsigned char。需要自己宏定义#define BYTE unsigned char
(4)在脚本中写算法的时候,记得将所有的代码复制。
(5)在IDA中,手动转为字符的,都需要将字符的顺序反序一下,因为是小端序存储。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值