Bugku,Reverse:Easy_Re

此题目与攻防世界re1相同

1.解题过程:

(1)

下载附件打开,输入测试

首先查壳

无壳(刚开始我以为是有壳,然后脱壳,发现没有壳,下图是我进行脱壳时的程序)

按照流程32位直接拖入IDA查看

shift+f12查找字符串,没有特别的东西

f5反汇编查看伪代码

(2)分析:

所以查看寄存器

其中有一段数据

按下a键转换为字符串

即为flag

(3)出现的问题

①在末尾转换字符串时使用r键会出现

00413E44 合并到了 00413E34 中,并且a键同时将字符串进行倒置处理

2.第二种方法

可以从栈入手分析(尝试中

movq由于是传送数值并未做出改变

所以v5中的值未变的原因应该是

qword_413E44 寄存器数值接入了 xmmword_413E34 寄存器的数值

3.知识点:

(1)IDA常用快捷键:

         f5:一键反汇编

         shift+f12:可以打开string窗口,一键找出所有的字符串

         a:将数据直接转化为字符串

(2)伪代码中涉及到的函数:

         ①strcmp():

         C 库函数 int strcmp(const char *str1,  const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较

         如果 str1 小于 str2,则表示返回值 小于 0。

         如果 str1 大于 str2,则表示返回值 大于 0。

         如果 str1 等于 str2,则表示返回值 等于 0。

(3)涉及到的SSE指令:

         ①_mm_storeu_si128( __m128i *p, __m128i a);

          作用:将__m128i 变量a的值存储到p所指定的变量中

         ②_mm_loadu_si128(__m128i *p);

          作用:返回值代表寄存器的变量中的相同值

(4)汇编语言:

         ① CS(Code Segment):代码段寄存器;
              DS(Data Segment) :数据段寄存器;
              SS(Stack Segment):堆栈段寄存器;
              ES(Extra Segment) :附加段寄存器。

         ②movqu xmm1, xmm2/m128

             作用:将xmm2寄存器 或者 128位内存地址的内容拷贝到xmm1寄存器中

             movq,传送指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Part 03

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

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

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

打赏作者

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

抵扣说明:

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

余额充值