BUUCTF [ACTF2020新生赛]rome


前言

c语言32windows程序逆向


提示:以下是本篇文章正文内容,下面案例可供参考

一、对exe文件进行查壳

发现是32为的exe无壳程序,使用IDA对程序进行打开反编译。

二、反编译分析

1.整体逻辑分析

主函数有两个可执行函数,首先进入第一个_main函数,init是c语言程序进行初始化的程序,对我们分析主要函数没有什么影响。

 进入func()可执行函数,显而易见的发现这个函数就是我们的主要加密函数。

 首先执行对v12数组进行赋值,将’Qsw3sj_lz4_Ujw@l‘字符串copy到数组v12之中,然后执行scanf函数。这段是我们的输入的部分(动态调试会出现的)。

这个判断实际上是 ACTF{}这个flag的包裹 (ida中使用r快捷键可以将ascii转化为对应的字符串)

 这一段代码是一大段的对变量的判断,再判断之后对v1数组进行赋值。将v12[17]的数据赋值为0。

第一个while循环,有两个判断,执行判断后将会使v12[17]的值+1,第一个是对大写字母的加密算法第二个是对小写字字母的加密算法。 执行加密后对加密后的输入进行于原本程序设定的字符串进行比较。

2部分分析

*((_BYTE *)v1 + i) = (*((char *)v1 + i) - 51) % 26 + 65 这段代码的逆运算是

*((_BYTE *)v1 + i) -65+n(这里的n指的是一个未知数)*26+51= *((char *)v1 + i) 但是我们不知道n这里具体的值 如果进行例举的话很麻烦 所以这里对脚本的构造使用爆破 对密码进行破解

 

为什么使用v12的字符串作为加密后的正确密文,这里我是猜测的,不会平白无故给一个字符串的。

在脚本构建时,我最开始时使用的ascii范围是(65,127),但是后来去看了别人的blog发现flag中是含有数字的所以将爆破的范围改为了(0,127)。

 flag{Cae3ar_th4_Gre@t}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值