adworld攻防世界 reverse asong

这篇博客详细介绍了adworld攻防世界进阶区的asong题目,涉及到程序分析和逆向工程。主要内容包括程序流程、关键函数如`copy`、`j_sort`、`set_cipher`的解析,以及解密过程,特别是`re_or`和`re_replace`的逆向操作。最后给出了完整解题脚本。
摘要由CSDN通过智能技术生成

asong

攻防世界 reverse  进阶区 asong

题目文件:

https://www.jianguoyun.com/p/DQ3g5b4QiNbmBxjX_fQC (访问密码:AgV9Sh)

主要是集中我们常见的处理方式的整合, 注意一个对于out文件要open 然后read读入,另外python3要使用rb 模式,因为会出现不可打印字符,直接复制会出错,而r模式会报错。

程序分析

首先看到是压缩包里面是一个64-elf, 两个文件, 其中一个out还是乱码,

然后查看下程序。配合动调基本可以确定流程,

然后这里是标注好了的:

main

main函数是这样子, 一开始申请两块空间,一块在后面用于放数据,另一块保存flag:

其中的函数reada, 就是读取flag,

copy

然后copy中,是判断flag格式并且保留中间的部分, 复制到申请的flag内存块中,

j_sort

然后j_sort函数, 读取那个’that_girl’ 的文件,然后在函数sort中处理, 最后根据处理结果得到data中的对应位置自增一个, 这个是类似与计数的一个效果:

sort

然后其中的sort函数, 一个逆向中也比较常见的按字符进行转换的流程:

经北风师傅提醒,发现那个"?"的位置是算错了,还好逆flag计算的时候没用到,

set_cipher

然后后面就是set_cipher函数, 是由我们处理好了的data和flag生成一个cipher:

流程主要是, 先吧flag和那个txt文档一样在sort中处理,然后取出来对应的数值,形成一个cipher,

其实这是吧这个flag中字符转化为, 这个字符在txt文件中出现的次数,是大致这个意思,

然后后面经过replace和or两个处理,最后写入到out文件中,所以我们的out文件中的数据应该是最后的cipher,

replace

然后是转换函数, 就是个互相换位置,这个过程中生成的呼唤的数据还是有点意思,

or

这个也是比较常见的一个位运算配合按位或的操作,

逆向

加密流程了解了, 我们逆向去解密,

最开始先从out文件读入最后的cipher,

s = open('out',mode='rb').read()

re_or

还是一些简单题目会常用的位操作, 这个位置用ipython多调几次还是比较好理解, 主要有前后两位之间的按位或操作:

temp = arr[len(arr)-1] & 0x7
for i in range(len(arr)):
	brr.append((temp << 5) | (arr[i] >> 3))
	temp = arr[i] & 0x7

re_replace

首先我们ida-python导出这个rep_data

addr = 0x6020a0
arr = []
for i in range(38):
    arr.append(Dword(addr+4*i
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值