天津逆向re3.exe详解

拖进IDA里进行分析

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

打开后是这么一个程序,直接找到main函数f5反编译即可,这里要注意程序第一次反编译出的代码会有点问题,需要点进引用的那些其他sub函数里面,然后再退到main函数按f5即可变成这样的代码
这个时候我们可以看到输入先到buffer里面然后直接比较输入第一位是否是16进制,如果不是16进制程序将会直接退出且没有任何输出。
下面将buffer传进了v6里面,然后调用了一个他写的函数sub_7FF7645F10E0,里面有个内置函数写出了是vsscanf,%02X是以16进制格式存储,经过动态调试以后,可以确信这个函数的作用是将v6我们输入的每两位作为一个16进制数放到v21中。下面将v21再放进了v17中,然后
do
++v8; // v8 = 16
while ( *((_BYTE *)v21 + v8) );
v9 = v8 >> 3;
这个一段代码的作用其实就是将v9=2来放到下面的循环中,让下面的循环循环两次

动态调试

我们通过上面的sub_7FF7645F10E0是将我们的输入的每两位作为一个16进制数存储到v21中以及他循环了0x10次可以知道,我们的正确输入应该是一个长度为32位的16进制数组成的一个东西,所以我们调试的时候可以随便输入长度为32位的16进制数进去就好了。
我们的断点可以下在循环前面
在这里插入图片描述
下在这里就可以了,我们需要知道这些变量到底是什么值,他到底又在下面干了什么
在这里插入图片描述
下面嵌套的循环看到了-= 0x61C88647,这个格式看上去大概也是tea加密算法
我们动调起来,随便输入32位的16进制数来让他断下来,我们去查看v11和v13到底变成了什么
在这里插入图片描述
按f8步过v11,然后查看他的值

在这里插入图片描述
0xB5AD4752?
是不是我们的输入倒过来了?
也是我们的输入的前八位,我们再往下查看v13是什么
在这里插入图片描述
v13是后面的八位倒了过来,而下面就要调用tea来进行加密了,我们知道v9是2,那也就是说将我们输入的32位两次循环分成了4份,然后倒过来了,也就是因为程序是小端格式传递的数据
那到这样我们大概可以理清程序的逻辑,下面的比较v16有四个写死的值,就是tea加密过后的数据。
在这里插入图片描述
在这里插入图片描述

解密加密算法

我们接下来可以准备一下解密这个tea了,先来看看这个tea
在这里插入图片描述
关于tea加密的介绍网上有着很多,就不说了,这里v12的初始值为0,每次加密都-了一个0x61c88647,所以我们逆算法的时候需要
-32*61c88647然后再依次加上0x61c88647,然后这个tea算法的前半段也与正常的并不一样,按照程序的算法进行更改,比较好修改,而TEA加密需要4个key,查看网上的tea算法实现也不难发现四个key分别为0x12 0x34 0x56 0x78。

在这里插入图片描述
下面的value分成四份分别写入v16变量的初始四个值即可
key写0x12 0x34 0x56 0x78即可
然后放到上面的两个函数中解密
在这里插入图片描述
可以看到解出来的四个数0x16bef035 0xa72af04c 0x9da09cc5 0x78bbd7e5,我们去掉0x后将他拼在一起,应该就是flag
16bef035a72af04c9da09cc578bbd7e5
尝试输入程序
在这里插入图片描述
还是报了错误,这个时候我们想到,在前面的调试中,我们的输入是以小端格式经过sub_7FF7645F10E0存储到v21中的,小端格式需要将字符串反过来再输入进去,所以我们将flag分成的四份各自反过来再放进去
在这里插入图片描述
成功搞定flag,输出Yes, You are a hero!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值