adworld攻防世界 reverse asong

2023-11-01

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))
print(arr)

然后我们去得到中间实际上取到的值:

arr = [....]
v = 0 
while arr[v]:
    print(v,end=',')
    v = arr[v]
print(v)

就可以得到其中真实参与这个互换的数组:

rep_data = [0,22,20,19,14,17,4,30,29,28,27,36,34,33,32,31,37,35,26,25,5,24,15,23,16,13,12,8,21,11,10,18,3,2,6,9,7,1]

然后我们加密时就是这个数组, 后一个覆盖前一个,最后的首项再去覆盖最后一项,形成一个互换,

逆向互换:

tmp = brr[1]
for i in range(len(rep_data)-1, -1, -1):
    brr[rep_data[i]] = brr[rep_data[i-1]]
brr[0] = tmp 

index

由于cipher是flag在data中寻址,我们动调,导出data的数据, 然后使用index方法:

arr = []
flag = ''
# reverse for 
for i in range(len(brr)):
    arr.append(data.index(brr[i]))

sort

最后得到sort函数处理以后的flag, 去审查sort函数, 但是发现其中大小写字母转换出来是一个值, 即这个sort函数不会分辨大小写,那么我们大小写都求一下,

其中的流程还是比较简单,也是很多简单题目常见的套路:

s1 = ''
s2 = ''
for i in range(len(arr)):
	tmp = arr[i]
	if tmp == 46:
		s1 += '_'
		s2 += '_'
	if tmp == 48:
		s1 += '0'
		s2 += '0'
	if 10 <= tmp <= 36:
		s1 += chr(tmp + 55)
		s2 += chr(tmp + 87)
print(s1)
print(s2)

完整脚本:

s = open('out',mode='rb').read()
print(s)
rep_data = [0,22,20,19,14,17,4,30,29,28,27,36,34,33,32,31,37,35,26,25,5,24,15,23,16,13,12,8,21,11,10,18,3,2,6,9,7,1]

data = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 30, 15, 29, 169, 19, 38, 67, 60, 0, 20, 39, 28, 118, 165, 26, 0, 61, 51, 133, 45, 7, 34, 0, 62, 0, 0, 0, 0, 0, 0, 40, 71, 0, 0, 66, 245, 0, 0, 0, 97, 0]


arr = []
brr = []

len_flag = len(s)

# string to array
for i in range(len_flag):
	arr.append(s[i])

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


# reverse replace 
tmp = brr[1]
for i in range(len(rep_data)-1, -1, -1):
    brr[rep_data[i]] = brr[rep_data[i-1]]
brr[0] = tmp 


arr = []
flag = ''
# reverse for 
for i in range(len(brr)):
    arr.append(data.index(brr[i]))

s1 = ''
s2 = ''
for i in range(len(arr)):
	tmp = arr[i]
	if tmp == 46:
		s1 += '_'
		s2 += '_'
	if tmp == 48:
		s1 += '0'
		s2 += '0'
	if 10 <= tmp <= 36:
		s1 += chr(tmp + 55)
		s2 += chr(tmp + 87)
print(s1)
print(s2)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

adworld攻防世界 reverse asong 的相关文章

  • 抖音最新版抓包方案,修改so绕过ssl

    dy过ssl charles抓包 及xposed的justtrustme安装到手机上只能过系统的ssl 抖音写了一个非系统的ssl所以需要反编译so来处理 第一步 charles 我用的是magisk手机 先重charles把证书下载到pc
  • Js逆向练习制造Token与Id

    前言 闲来无聊 把 Pyhton3网络爬虫开发实战 第二版 看完了Js逆向部分 最后的实战部分感觉挺有挑战性的 正好崔佬也有详细的教程 平时的逆向都是野路子 刚好快回学校了有时间 那为什么不自己动手下呢 下面记录下过程 只会更加详细 观察页
  • 普通协议(HTTP)与安全协议(HTTPS)

    客户端与服务器端 CydiaSubstrate框架 Frida Native层HOOK Frida hook Java层 需要相关资料的朋友 可以 加入此处即可打包获取 一 HTTP协议简介 HTTP协议 超文本传输协议HyperText
  • 记一次在Tweak中引入Swift framework的过程

    最近想在一个插件里打通App和web端 实现通过web控制App 方案是选用socket io作为服务端和web前端 iOS端socket io是一个纯swift实现的库 目前Theos对swift的支持还不是很完善 但是可以完成一般的工作
  • Js 逆向:微博登录

    1 先分析参数 su sp是必要的 其中su是加密后的账号 很简单就是个bs64 不再说了 2 直接搜参数 这个时候要搜代表性的 特殊的 例如pwencode 很好只有一个 两种加密 一个是RSA 一个是sha 这里判断用的是RSA 3 直
  • 逆向工程核心原理——PE文件格式分析

    什么是PE文件 PE文件的全称是Portable Executable 意为可移植的可执行的文件 PE文件是指32位可执行文件 也称为PE32 64位的可执行文件称为PE 或PE32 是PE PE32 的一种扩展形式 请注意不是PE64 常
  • IDA调试小技巧

    IDA脚本 MakeNameEX IDA官方链接 实际运用 MakeNameEX MakeNameEx long ea string name long flags SN CHECK ea linear address name new n
  • 逆向工具常用操作

    IDA 加载文件 Windows 下 用IDA加载文件之后 会在文件同目录下生成几个文件 id0 二叉树数据库 id1 文件包含描述每个程序字节的标志 nam 包含IDA Name 窗口的数据库 til 本地数据库有关信息 常用快捷键 快捷
  • GoLang - colly爬虫框架

    大家好 我是TheWeiJun 很高兴又和大家见面了 国庆假期马上就要结束了 在国庆假期里小编看了下colly框架 故这篇文章中将提到colly的使用及分析 欢迎各位读者多多阅读与交流 特别声明 本公众号文章只作为学术研究 不作为其它不法用
  • 国家税务总局全国增值税发票查验平台网站js逆向分析及全逆向算法还原

    本文教程针对的是2021年7月2日时国税查验平台的js分析 其中版本号为V2 0 06 009 主要分析内容为key9和flwq39以及fplx这3个参数的算法 其中key9分为获取验证码阶段和查验阶段 算法有所区别 flwq39同理 教程
  • Hook原理--逆向开发

    今天我们将继续讲解逆向开发工程另一个重要内容 Hook原理讲解 Hook 可以中文译为 挂钩 或者 钩子 逆向开发中改变程序运行的一种技术 按照如下过程进行讲解 Hook概述 Hook技术方式 fishhook原理及实例 符号表查看函数名称
  • PE 文件结构解析

    PE 文件格式由一个线性的数据流组成 由一个DOS 头开始 接着是一个PE 文件头 这些之后是所偶的区块部 包含重分配信息 符号表信息以及字符串表数据 PE 文件结构 如下图所示 文件被划分为四大部分 包含 DOS 部分 PE 文件头 节表
  • 【自学】恶意代码分析

    恶意代码分析 绿盟 李东宏老师 恶意样本分析手册 理论篇 API函数篇 常用方法篇 特殊方法篇 通讯篇 溯源篇 文件封装篇 工具篇 上 下 反调试篇 上 下 虚拟机检测篇 上 下 逆向心法修炼 FLARE ONCHALLENGE4TH FL
  • CTF之逆向之阿里巴巴

    题目地址 http www shiyanbar com ctf 13 题目预览 解题过程 1 下载附件发现是exe文件 2 使用PEid和Detect It Easy查壳 和 开发语言 发现没有加壳 都是用C 开发的 3 C 和Java P
  • ubantu环境下IDA pro运行时碰到某些so找不到的问题

    最近帮组员解决IDA的问题 做个记录 问题 执行启动idea时出现报错 IDA Pro idaq64 报错如下 idaq64 error while loading shared libraries libgthread 2 0 so 0
  • 你参与的APP开发项目安全吗?

    Android将安全设计贯穿系统架构的各个层面 覆盖系统内核 虚拟机 应用程序框架层以及应用层各个环节 力求在开放的同时 也恰当保护用户的数据 应用程序和设备的安全 Android安全模型主要提供以下几种安全机制 进程沙箱隔离机制 应用程序
  • 某站弹幕Protobuf协议逆向分析

    一杯敬明天 一杯敬过往 大家好 我是TheWeiJun 时间过得好快 转眼间春节已过 此刻大家都已经开始复工了吧 首先祝大家新年快乐 2023年一路旺旺旺 小编也是心情激动 才有了前面的开场白 直入主题 今天给大家带来某站弹幕protobu
  • 爬虫如何快速定位到加密入口

    这里有多种定位加密入口方法 通过打全局xhr断点找到加密入口 可以将在 处点击添加xhr断点 可以针对某个值进行打xhr断点 直接通过关键字找到加密入口 在前面文章讲述过https blog csdn net zhp980121 artic
  • 逆向面试常见问题(陆续更新ing)

    资料大部分收集于网络 点击对应标题有原帖地址 PE 怎么判断PE是DLL 还是EXE 文件值属性 加载基址 怎么判断PE文件是32位还是64位 PE加载过程 基础 Windows下的调用约定 通用寄存器有哪些 段存器 怎么找到函数地址 调试
  • 某某星图sign参数解密分析

    大家好 我是TheWeiJun 欢迎来到我的公众号 今天给大家带来星图sign参数的解密分析 希望大家能够喜欢 如果你觉得我的文章内容有价值 记得点赞 关注 特别声明 本公众号文章只作为学术研究 不用于其他用途 逆向与爬虫的故事 公众号 专

随机推荐

  • win7 Embedded EWF与HORM特性(实战验证)

    前言 这两天在网上搜了很久 发现描述EWF特性的文章 大部分都是关于xp embedded的 真正运用在win7 embedded的少之又少 特别是中文描述的就更少了 于是 将自己这两天整理的结果供大家参考一下 先决条件 1 目标机 能够安
  • iOS动画—UIView动画以及CoreAnimation动画

    温故知新 一 UIView动画 1 1稍微简单点的动画 1 2稍微复杂的动画 二 CoreAnimation动画 CA动画的特点 只能添加到UIView的CALayer上面 必须需要引入
  • 树的创建、遍历及可视化

    许久不复习数据结构了 对于知识点都有些遗忘了 想着来写一些树的遍历 查找 发现连创建一棵树都快忘记了 不过幸好 还是可以看懂别人的代码 还算是有一些基础的 最终也写出来了 因为觉得这样太过于麻烦了 所以 我就在思考一个问题 如何简化这个过程
  • 自动化测试与自动化测试生命周期

    1 1 自动化测试的定义及概述1 1 1 软件测试的定义与分类 软件测试 2 就是在软件投入运行前 对软件需求分析 设计规格说明和编码的最终复查 是软件质量保证的关键步骤 定义1 软件测试是为了发现错误而在规定的条件下执行程序的过程 定义2
  • python常用库之colorama (python命令行界面打印怎么加颜色)

    文章目录 python常用库之colorama python命令行界面打印怎么加颜色 背景 colorama介绍 colorama使用 colorama打印红色闪烁 打印颜色组合 python常用库之colorama python命令行界面
  • JavaWeb基础5——HTTP,Tomcat&Servlet

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud SpringCloudAlibaba 黑马旅游 谷粒商城 目录 一 Web概述 1 1 Web和JavaWeb的
  • 实战演习(十)——通过LSTM训练天气污染程度预测模型

    我的公众号为 livandata 近期由于工作用到LSTM模型 借这个机会整理一下思路 在网上找了很多资料 受益匪浅 本文参考 https blog csdn net u012735708 article details 82769711
  • 盘点:大数据处理必备的十大工具

    摘要 随着互联网的愈来愈开放 电子商务平台和社交网络的盛行 导致数据在日益增长 给企业管理大量的数据带来了挑战的同时也带来了一些机遇 随着互联网的愈来愈开放 电子商务平台和社交网络的盛行 导致数据在日益增长 给企业管理大量的数据带来了挑战的
  • JupyterNotebook--基础--02--安装

    JupyterNotebook 基础 02 安装 1 安装 pip3 install jupyter pip3 install ipython 2 生成配置文件 用于后面写入ip 端口号 密码等 jupyter notebook gener
  • angularjs php登录验证,AngularJs用户登录时交互及验证步奏详解

    这次给大家带来AngularJs用户登录时交互及验证步奏详解 AngularJs用户登录时交互及验证的注意事项有哪些 下面就是实战案例 一起来看一下 1 静态页面搭建及ng的form表单验证实现 ng disabled loginForm
  • 为什么提高断路器分闸速度,能减少电弧重燃的可能性和提高灭弧能力?

    为什么提高断路器分闸速度 能减少电弧重燃的可能性和提高灭弧能力 答 提高断路器的分闸速度 即在相同的时间内触头间的距离增加较大 电场强度降低 与相应的灭弧室配合 使之在较短时间内建立强有力的灭弧能力 又能使熄弧后的间隙在较短时间内获得较高的
  • c++智能指针——原理与实现

    转子 https www cnblogs com wxquare p 4759020 html 1 智能指针的作用 C 程序设计中使用堆内存是非常频繁的操作 堆内存的申请和释放都由程序员自己管理 程序员自己管理堆内存可以提高了程序的效率 但
  • Mac系统完美安装PHP7详细教程

    使用第三方包homebrew来安装 非常迅速有效 安装教程 1 启动Apache 首先我们启动系统自带的Apache服务 打开Terminal 输入如下指令 开启Apache服务 sudo apachectl start 查看Apache版
  • DCN和DCNv2(可变性卷积)学习笔记(原理代码实现方式)

    DCN和DCNv2 可变性卷积 网上关于两篇文章的详细描述已经很多了 我这里具体的细节就不多讲了 只说一下其中实现起来比较困惑的点 黑体字会讲解 DCNv1解决的问题就是我们常规的图像增强 仿射变换 线性变换加平移 不能解决的多种形式目标变
  • Java的mkdir()与mkdirs()引发的悲剧---关于java的mkdir()方法无法创建文件目录问题

    昨晚深夜在做项目的文件上传 在上传之前要先判断指定的文件目录是否存在 如果不存在就先创建改目录 因为之前已经做过类似的功能了 所以就把判断文件目录以及创建的代码直接copy过来了 然而很郁闷的是 一模一样的代码 这回却遇到一个特别奇葩的问题
  • 【python】CliffWalking悬崖寻路问题

    强化学习 简介 gym库 CliffWalking SARSA Q learning 示例 SARSA Q learning 简介 机器学习 监督学习 非监督学习 强化学习 模仿人类和动物的试错机制进行学习 智能体与环境交互 根据当前的环境
  • 数据结构面试常见问题总结

    数据结构面试常见问题总结 写在前面 本文记录了一些数据结构面试常见问题 本意用于考研复试 以下面试题为网上整理的问题以及自己加入的一些问题 答案仅供参考 Q 数据结构三要素 A 逻辑结构 物理结构 数据运算 Q 数组与链表有什么区别 A 数
  • innovus中常用命令整理

    restoreDesign load 之前的db list property type 列举出相应的属性 get property 得到相应的object的属性 get pin 获取pin get port 获取port ecoRoute
  • 2023开学礼山东财经大学《乡村振兴战略下传统村落文化旅游设计》许少辉新财经图书馆

    2023开学礼山东财经大学 乡村振兴战略下传统村落文化旅游设计 许少辉新财经图书馆
  • adworld攻防世界 reverse asong

    asong 攻防世界 reverse 进阶区 asong 题目文件 https www jianguoyun com p DQ3g5b4QiNbmBxjX fQC 访问密码 AgV9Sh 主要是集中我们常见的处理方式的整合 注意一个对于ou