2020-09-07

Reverse2

用IDA打开所下载的文件
主函数F5
在这里插入图片描述
在这里插入图片描述
双击flag
在这里插入图片描述

可以看到这个字符串
在这里插入图片描述

这里有替换,换成ascll码
在这里插入图片描述

Get flag:flag{hack1ng_fo1_fun}

新年快乐

用ida打开发现才两个函数,可能加了壳,所以查波壳
在这里插入图片描述
是upx壳
使用upx静态脱壳机
在这里插入图片描述

拖进ida直接分析主函数
在这里插入图片描述

Get flag:flag{HappyNewYear!}

内涵的软件

在这里插入图片描述

ida看看
在这里插入图片描述

Get flag:flag{49d3c93df25caad81232130f3d2ebfad}

guessgame

在这里插入图片描述
Exeinfo pe
在这里插入图片描述

64位,拖进ida
Shift + f12
在这里插入图片描述

Get flag:flag {S1mple_ReV3r5e_W1th_0D_0r_IDA}

helloword

Ida
Shift f12
在这里插入图片描述

Get flag:flag{S1mple_ReV3r5e_W1th_0D_0r_IDA}

Xor

IDA,主函数f5
在这里插入图片描述

if ( strlen(v6) != 33 ) 判断v6的长度是否为33(从上面的程序中可以看出,v6就是我们的输入)
for ( i = 1; i < 33; ++i ) 进行循环异或,从v6的第二位开始将v6的每一位与前一位异或
v6[i] ^= v6[i - 1];

if ( !strncmp(v6, global, 0x21uLL) ) //比较v6与global段处存放的前33位(也就是0x21)是否相同,是如果相同的话输出success
双击globa查看内容
在这里插入图片描述

写脚本
在这里插入图片描述

运行
在这里插入图片描述

Get flag:flag{QianQiuWanDai_YiTongJiangHu}

Reverse3

Ida
在这里插入图片描述

最后与str2比较,双击查看str2
在这里插入图片描述

得到str2的字符串e3nifIH9b_C@n@dH
在这里插入图片描述

这里24行经过了加密,对sub_4110BE shift+f12
在这里插入图片描述
在这里插入图片描述

可以看出使用的是base64加密,解密即可
在这里插入图片描述
在这里插入图片描述

Get flag:flag{i_l0ve_you}

不一样的flag

在这里插入图片描述

无壳,ida
在这里插入图片描述

若最后等与#得到flag
在这里插入图片描述

发现一串可疑字符,将其按5x5排列(可能因为刚好能被5整除吧)
*1111
01000
01010
00010
1111 #
Get flag:flag{222441144222}

<think> 我们有一个需求:查询余额高于10000的所有用户的名字和余额。除了使用公共表达式(CTE)之外,我们还可以使用多种方法。 根据引用[1]中提到的银行用户表结构(假设表名为“银行用户表”,有“姓名”和“余额”字段),我们可以编写SQL语句。 常见的其他方法包括: 1. 直接使用SELECT语句的WHERE子句进行过滤。 2. 使用子查询(虽然公共表达式也是子查询的一种,但这里指其他形式的子查询,比如在FROM子句中的子查询)。 3. 使用视图(但视图并不是一次性的查询,这里我们主要讨论一次性的查询语句)。 4. 使用临时表(但同样,我们主要讨论查询语句,临时表需要创建和删除,不太适合作为单一查询)。 因此,最直接的方法就是使用简单的SELECT语句。 根据引用[2]和引用[3],我们可以写出基本的SELECT语句,注意引用[3]中使用了别名,引用[5]中使用了ORDER BY排序(虽然这里不需要排序,但我们可以选择是否排序)。 因此,我们可以这样写: 方法1:直接查询 ```sql SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000; ``` 但是,我们也可以使用子查询(虽然在这个简单需求中子查询没有必要,但为了展示多种写法): 方法2:使用FROM子句中的子查询 ```sql SELECT 姓名, 余额 FROM ( SELECT 姓名, 余额 FROM 银行用户表 ) AS 用户余额表 WHERE 余额 > 10000; ``` 方法3:我们还可以使用内联视图(实际上就是方法2)。 另外,如果我们需要对结果进行排序(例如按余额降序排列),可以加上ORDER BY子句(引用[5]): ```sql SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000 ORDER BY 余额 DESC; ``` 注意:引用[4]提到了索引的问题。如果我们在“余额”列上建立索引,那么查询效率会更高。否则,数据库可能进行全表扫描。 因此,除了公共表达式(CTE)之外,我们可以使用上述的直接查询或子查询的方式。其中,直接查询是最简单和高效的。 下面给出一个完整的例子(假设表名为`银行用户表`): ```sql -- 方法1:简单查询 SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000; -- 方法2:使用子查询(虽然在这里没有优势) SELECT 姓名, 余额 FROM ( SELECT 姓名, 余额 FROM 银行用户表 ) AS 子查询表 WHERE 余额 > 10000; -- 如果需要排序(降序) SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000 ORDER BY 余额 DESC; ``` 总结:对于这个需求,最简单的就是直接使用WHERE子句过滤。公共表达式(CTE)通常用于更复杂的查询,比如需要递归或多次引用同一个子查询结果集时。在简单查询中,直接查询即可。 注意:如果表名或字段名是英文的,那么应该使用英文,比如表名可能是`bank_account`,字段名为`name`和`balance`。但根据引用[1]中的表名和字段名,我们使用了中文。如果实际表结构是英文的,则需要修改。 另外,引用[2]提到,关键字和字段名不区分大小写,但数据严格区分大小写。不过在我们这个查询中,余额是数值,不存在大小写问题。 因此,根据用户需求,我们给出了不使用公共表达式的其他写法。 相关问题: 1. 如果余额字段包含小数,那么查询条件中是否需要考虑浮点数精度问题? 2. 当数据量很大时,如何优化这个查询? 3. 在银行系统中,查询账户余额时需要注意哪些事务隔离级别? </think>根据您的需求,我提供了三种不使用公共表达式(CTE)的SQL写法来查询余额高于10000的用户信息: ### 方法1:基础WHERE过滤(最简洁) ```sql SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000; ``` **说明**: 直接使用`WHERE`子句过滤条件,这是最高效的写法。当`余额`列有索引时,数据库会使用索引扫描(Index Scan),否则执行全表扫描(Table Scan)[^4]。 --- ### 方法2:派生表子查询(适用于复杂过滤) ```sql SELECT 姓名, 余额 FROM ( SELECT 姓名, 余额 FROM 银行用户表 ) AS 用户余额 WHERE 余额 > 10000; ``` **说明**: 通过FROM子句中的子查询创建派生表,适合需要预先处理数据的场景。注意使用`AS`为派生表命名是必须的[^2]。 --- ### 方法3:视图查询(可复用方案) ```sql -- 第一步:创建视图 CREATE VIEW 高余额用户视图 AS SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000; -- 第二步:查询视图 SELECT * FROM 高余额用户视图; ``` **说明**: 视图将查询逻辑持久化,适合需要多次使用的场景。查询视图时等同于执行视图定义的SQL语句[^2]。 --- ### 性能说明 1. **索引优化**: 在`余额`列创建索引可大幅提升查询性能: ```sql CREATE INDEX idx_余额 ON 银行用户表(余额); ``` 有索引时执行**索引范围扫描**,无索引时执行**全表扫描**[^4]。 2. **结果排序**: 如需按余额降序排列,添加: ```sql ORDER BY 余额 DESC; -- DESC表示降序[^5] ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值