elrond32
前置知识
int __cdecl main(int argc, char **argv)
* argc: 整数, 为传给main()的命令行参数个数。
* argv: 字符串数组。
argv[0] 为程序运行的全路径名;
argv[1] 为在DOS命令行中执行程序名后的第一个字符串;
argv[2] 为执行程序名后的第二个字符串;
...
argv[argc]为NULL。
所以说这题相当于是传了一个a2字符串

而这里是对函数进行操作

数据存放

所以如果汇编代码中是按照db(一个字节)来储存数据的话就需要4个db来进行表示,不足的就补0,如下

注意
这里看到这些数字要联想到ASCII码,r键转换

解题
先分析if部分的关键函数

看到都指向label,说明因该是对字符串进行多次同一类型 的操作

然后这里的话相当于是说对字符串进行位移,每次操作一个的意思,然后a2从0开始进行特定的变化

看到a2变化后是%11,而且case的情况只有11个,说明这里的a1应该只有11位或者只需要这么多
那么也可以手搓a2的变化范围进而得到a1的值
string a1=[105,115,101,110,103,97,114,100]
然后分析下一个函数


可以看到 v2 是从 unk_8048760 处复制了 33 个 int,查看 unk_8048760 的值发现是一长串数字,刚开始还把我迷惑了,我觉得这么长因该不会是有用的东西吧

后面才知道这是用0来填充了(一个 int 占 4 个字节,所以剩下 3 个的字节用 0 填充),将0去掉就可以得到准确的数据了
写出脚本得到,注意这里也只需要a1字符串的8个

key=[105,115,101,110,103,97,114,100]
v2=[0x0F,0x1F,0x04,0x09,0x1C,0x12,0x42,0x09,0x0C,0x44,0x0D,0x07,0x09,0x06,0x2D,0x37,0x59,0x1E,0x00,0x59,0x0F,0x08,0x1C,0x23,0x36,0x07,0x55,0x02,0x0C,0x08,0x41,0x0A,0x14]
flag=''
for i in range(33):
flag+=chr(v2[i]^key[(i%8)])
print(flag)
elrond32的更多相关文章
- 攻防世界 reverse elrond32
tinyctf-2014 elrond32 1 int __cdecl main(int a1, char **arg_input) 2 { 3 if ( a1 > 1 && c ...
随机推荐
- ABP 的ajax请求错误:400 Empty or invalid anti forgery header token.
ABP 的ajax请求错误 记录于2018-03-22 13:31:16 星期四 错误信息:400 Empty or invalid anti forgery header token. 我从网上找到 ...
- [爬虫]1.2.1 HTML标签和属性
HTML(HyperText Markup Language)是一种用于创建网页的标记语言.HTML文档由一系列的HTML标签构成,每个标签都有自己的意义和用途.HTML标签通常成对出现,由一个开始标 ...
- flex布局入门
一.简介 Flexible 单词意思是灵活的意思,flex布局又称为弹性布局或弹性盒子布局 Flex布局(Flexible Box Layout)是CSS3引入的一种布局模型,它旨在提供一种灵活且高效 ...
- C/C++八大排序
排序 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 按照难易程度排序,八大排序算法可以从简单到复杂 ...
- pycharm:插件translation 更新TTK失败
解决方案 1.修改C:\Windows\System32\drivers\etc 下hosts文件, 添加 203.208.40.66 translate.google.com 203.208.40. ...
- Django: 'block' tag with name 'header' appears more than once
错误原因 在同一文件中,重复引用标签多次 解决方案: 删掉重复的标签即可.
- 仅三天,我用 GPT-4 生成了性能全网第一的 Golang Worker Pool,轻松打败 GitHub 万星项目
目录 1. 我写了一个超牛的开源项目 1.1 你看看这性能 1.2 你看看这功能 1.3 你猜我这一百天都经历了啥 2. 你有多久没写并发程序了? 3. 问:一个 Worker Pool 程序需要包含 ...
- 缓存面试解析:穿透、击穿、雪崩,一致性、分布式锁、Redis过期,海量数据查找
为什么使用缓存 在程序内部使用缓存,比如使用map等数据结构作为内部缓存,可以快速获取对象.通过将经常使用的数据存储在缓存中,可以减少对数据库的频繁访问,从而提高系统的响应速度和性能.缓存可以将数据保 ...
- 【干货】华为云图数据库GES技术演进
本文分享自华为云社区<[干货]华为云图数据库GES技术演进>,作者: Chenyi. 1 背景 大规模图数据无处不在,图查询.分析和表示学习已成为大数据和AI的核心部分之一.特别是知识图谱 ...
- Linux查看磁盘空间,文件系统、挂载
Linux磁盘空间,文件系统.挂载 概述 在使用以下命令查看磁盘使用情况时 df -h du -sh 目标路径 作为初级开发者,Linux入门级选手,可能不禁要问Linux系统的文件系统跟window ...