[ACTF新生赛2020]usualCrypt

附件

步骤:

  1. 例行检查,无壳,32位程序

  2. 32位ida载入,直接看main函数

    逻辑很简单,一开始让我们输入一个字符串,然后该字符串经过sub_401080()函数加密,加密后得到byte_40E0E4里面的数据zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9

  3. 看一下sub_401080函数

    头部有一个sub_401000函数,中间看运算特征码可以判断是base64加密,尾部一个sub_401030函数

  4. 先从sub_401000函数函数开始看起

    将两个数组里的数据进行了交换,看地址两个数组是连在一起的,其实也可以连在一起当成一个数组看,从下标为6开始到下标为15,往后偏移了10(0xA)位,也就是QRSTUVWXYGHIJKLMNOP相互交换了一下

    所以原始用来加密的base64密码表是ABCDEFQRSTUVWXYGHIJKLMNOPZabcdefghijklmnopqrstuvwxyz0123456789+/

  5. 再看一下sub_401030函数,对字符串进行了大小写的转换

  6. 程序理清楚了,我们可以反向推导,
    第一步首先要对进行byte_40E0E4数组进行大小写转换,也就是我们输入的数据进行了base64加密后的状态
    第二步是还原经 base64(更改密钥表后)加密字符的原含义,还原规则即sub_401000()的交换
    第三步最后得到了真实的nbase64n加密字符串,解密即可得到我们输入的字符串,一般都是flag

import base64

flag = ''
dict = {}
offset = 10 string = 'zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9'.swapcase() #sub_401030()
print ('转换后的字符串:'+string) myb = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' for i in range(len(myb)):
dict[myb[i]] = myb[i] for i in range(6, 15): #sub_401000()
dict[myb[i]] , dict[myb[i+offset]] = dict[myb[i+offset]] , dict[myb[i]] # 恢复base64密钥表 print ('**********')
for i in dict:
print (i,dict[i])
print ('**********') for i in range(len(string)):
flag += dict[myb[i]] flag = base64.b64decode(flag) print(flag)

[BUUCTF]REVERSE——[ACTF新生赛2020]usualCrypt的更多相关文章

  1. [BUUCTF]REVERSE——[ACTF新生赛2020]Oruga

    [ACTF新生赛2020]Oruga 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索字符串,根据提示来到关键函数 14行~18行就是让字符串的前5位是 actf{ ,sub_78A( ...

  2. [BUUCTF]REVERSE——[ACTF新生赛2020]rome

    [ACTF新生赛2020]rome 附件 步骤 无壳,32位程序 32位ida载入,根据提示字符串"You are correct!",找到关键函数func v15 = 'Q'; ...

  3. [BUUCTF]REVERSE——[ACTF新生赛2020]easyre

    [ACTF新生赛2020]easyre 附件 步骤 查壳,32位程序,upx壳儿 脱完壳儿,扔进ida 分析 一开始给我们定义了一个数组, v4=[42,70,39,34,78,44,34,40,73 ...

  4. BUUCTF(九) [ACTF2020 新生赛]Exec 1

    baidu.com & ls .. baidu.com & ls ../.. baidu.com & ls ../../.. 发现flag 查看 baidu.com & ...

  5. SCNU ACM 2016新生赛初赛 解题报告

    新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...

  6. SCNU 2015ACM新生赛决赛【F. Oyk闯机关】解题报告

            题目大意:一个$N$$\times$$N$的阵列,每个格子有$X_{ij}$个调和之音,若每次只能选择走右边或下边,从左上角出发走到右下角,问最多能收集到多少个调和之音?       ...

  7. Codeforces 801 A.Vicious Keyboard & Jxnu Group Programming Ladder Tournament 2017江西师大新生赛 L1-2.叶神的字符串

    A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. [ACTF2020 新生赛]BackupFile && [ACTF2020 新生赛]Upload &&[GYCTF2020]Blacklist

    [ACTF2020 新生赛]BackupFile 尝试找到源代码,加上题目是备份文件,猜测备份文件里面有网站的源代码,御剑扫描一下,就扫到index.php 访问index.php.bak 下载源代码 ...

  9. SCNU ACM 2016新生赛决赛 解题报告

    新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...

随机推荐

  1. 力扣 - 剑指 Offer 46. 把数字翻译成字符串

    题目 剑指 Offer 46. 把数字翻译成字符串 思路1(递归,自顶向下) 这题和青蛙跳台阶很类似,青蛙跳台阶说的是青蛙每次可以跳一层或者两层,跳到第 n 层有多少种解法,而这题说的是讲数字翻译成字 ...

  2. 快读模板 + #define 压缩for

    快读是一个很重要的模板 #define 压缩for是为了代码的简洁 这里贴一下模板 #define f(i , a , b) for(int i=(a) ; i <= (b) ; i++) us ...

  3. P3571 [POI2014]SUP-Supercomputer

    *X. P3571 [POI2014]SUP-Supercomputer 题意简述:一棵以 \(1\) 为根的树.\(q\) 次询问,每次给出 \(k\),求至少要多少次同时访问不超过 \(k\) 次 ...

  4. 【豆科基因组】绿豆Mungbean, Vigna radiata苏绿基因组预印

    目录 一.来源 二.结果 测序组装 组装评价 编码基因预测 基因功能注释 非编码RNA注释 假基因预测 重复序列注释 进化分析和分歧时间估计 全基因组复制 LTR插入时间估计 正选择基因 一.来源 H ...

  5. eggNOG 5.0数据库介绍

    目录 1. eggNOG简介 2. eggNOG-Mapper注释原理 3. eggNOG 5.0数据资源 4. eggNOG-Mapper使用 5. NOG.KOG.COG.KEGG.GO区别? 1 ...

  6. web性能测试工具——http_load

    http_load是一款基于Linux平台的web服务器性能测试工具,用于测试web服务器的吞吐量与负载,web页面的性能. http_load是基于linux.unix平台的一种性能测工具 它以并行 ...

  7. selenium+chrome抓取数据,运行js

    某些特殊的网站需要用selenium来抓取数据,比如用js加密的,破解难度大的 selenium支持linux和win,前提是必须安装python3,环境配置好 抓取代码: #!/usr/bin/en ...

  8. 42-Remove Nth Node From End of List

    Remove Nth Node From End of List My Submissions QuestionEditorial Solution Total Accepted: 106592 To ...

  9. day05 django框架之路由层

    day05 django框架之路由层 今日内容概要 简易版django请求声明周期流程图(重要) 路由匹配 无名有名分组 反向解析 无名有名解析 路由分发 名称空间 伪静态 虚拟环境 简易版djang ...

  10. Flink(五) 【消费kafka】

    目录 0.目的 1.本地测试 2.线上测试 提交作业 0.目的 测试flink消费kafka的几种消费策略 kafkaSource.setStartFromEarliest() //从起始位置 kaf ...