SimpleRev


说明这是一个win文件,没有加壳,而且是64位的

用IDA64打开

很容易找到main函数

F5查看代码

读程序,发现当输入的字符v4既不是d也不是D的时候会停止内层循环,反之会调用Decry()函数;过了内测循环之后是判断v4如果等于q或者Q就会直接结束,如果没有结束(继续运行的话),会输出:输入格式错误!

可以查看这个Decry()函数,如下

i++,表示先取i的值进行表达式计算或函数调用,最后加法再计算 i=i+1;

++i,表示先加法计算i=i+1,然后在进行表达式计算或函数调用。

C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。

C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

join函数,它的作用是以指定的字符连接成一个新的字符串。

加上注释,转变为可读性比较强的

__int64 Decry()
{char *v0; // rax@1char v2; // [sp+Fh] [bp-51h]@19int v3; // [sp+10h] [bp-50h]@1signed int v4; // [sp+14h] [bp-4Ch]@1signed int i; // [sp+18h] [bp-48h]@1signed int v6; // [sp+1Ch] [bp-44h]@1char src[8]; // [sp+20h] [bp-40h]@1__int64 v8; // [sp+28h] [bp-38h]@1int v9; // [sp+30h] [bp-30h]@1__int64 v10; // [sp+40h] [bp-20h]@1__int64 v11; // [sp+48h] [bp-18h]@1int v12; // [sp+50h] [bp-10h]@1__int64 v13; // [sp+58h] [bp-8h]@1v13 = *MK_FP(__FS__, 40LL);*(_QWORD *)src = 'SLCDN';v8 = 0LL;v9 = 0;v10 = 'wodah';v11 = 0LL;v12 = 0;LODWORD(v0) = join(key3, &v10);               // key3=='kills',v10='wodah'。连接key3,v10text = v0;strcpy(key, key1);                            // key1=='ADSFK',src=='SLCDN'。连接strcat(key, src);v3 = 0;v4 = 0;getchar();v6 = strlen(key);                             // 10for ( i = 0; i < v6; ++i ){if ( key[v4 % v6] > '@' && key[v4 % v6] <= 'Z' )key[i] = key[v4 % v6] + 32;               // 如果key里有大写字符,变成小写++v4;}printf("Please input your flag:", src);while ( 1 ){v2 = getchar();if ( v2 == '\n' )break;if ( v2 == ' ' ){++v3;}else{if ( v2 <= '`' || v2 > 'z' ){if ( v2 > '@' && v2 <= 'Z' )            // 如果是大写字符str2[v3] = (v2 - '\'' - key[v4++ % v6] + 'a') % 26 + 'a';}else                                      // 如果是小写字母{str2[v3] = (v2 - '\'' - key[v4++ % v6] + 'a') % 26 + 'a';// 都变成小写字符,并且按位减去key中字符-'a'}if ( !(v4 % v6) )putchar(' ');++v3;}}if ( !strcmp(text, str2) )//如果text==str2puts("Congratulation!\n");elseputs("Try again!\n");return *MK_FP(__FS__, 40LL) ^ v13;
}

了解过程就容易写程序了

#include <stdio.h>
int main()
{char key[] = "adsfkndcls";char text[] = "killshadow";int v = 10;for (int i = 0; i < 10; i++){for (int j = 65; j < 123; j++){if (j > 'Z' && j < 'a'){continue;}if ((j - 39 - key[v % 10] + 'a') % 26 + 'a' == text[i]){printf("%c",j);v++;break;}}}printf("\n");return 0;
}

运行得到

提交flag{KLDQCUDFZO}显示正确

Java逆向解密

程序员小张不小心弄丢了加密文件用的秘钥,已知还好小张曾经编写了一个秘钥验证算法,聪明的你能帮小张找到秘钥吗? 注意:得到的 flag 请包上 flag{} 提交

解压就得到一个.class文件,用Eclipse还打不开

搜了一下java反编译工具,jd-gui要下载,直接用的在线反编译网站:https://jdec.app/
得到

/* Decompiler 33ms, total 22066ms, lines 39 */
import java.util.ArrayList;
import java.util.Scanner;public class Reverse {public static void main(String[] args) {Scanner s = new Scanner(System.in);System.out.println("Please input the flag :");String str = s.next();System.out.println("Your input is :");System.out.println(str);char[] stringArr = str.toCharArray();Encrypt(stringArr);}public static void Encrypt(char[] arr) {ArrayList<Integer> Resultlist = new ArrayList();for(int i = 0; i < arr.length; ++i) {int result = arr[i] + 64 ^ 32;Resultlist.add(result);}int[] KEY = new int[]{180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65};ArrayList<Integer> KEYList = new ArrayList();for(int j = 0; j < KEY.length; ++j) {KEYList.add(KEY[j]);}System.out.println("Result:");if (Resultlist.equals(KEYList)) {System.out.println("Congratulations!");} else {System.err.println("Error!");}}
}

还是习惯用python敲

strs = [180, 136, 137, 147, 191, 137, 147, 191,148, 136, 133, 191, 134, 140, 129, 135, 191, 65]flag = ""
for i in range(0,len(strs)):flag += chr(strs[i] - ord('@') ^ 0x20)
print(flag)

运行得到

flag{This_is_the_flag_!}

2022-01-06相关推荐

  1. Z变换----2022/01/06

    题目描述 z字型变换 自己一开始的思考有所偏差,一直在考虑行和数的位置的关系,导致将问题复杂化,这里涉及到字符串特定的位置的字符的问题,过于复杂化了.但是还是记录一下自己的思考.以下为java代码实现 ...

  2. 525、Java工程师的进阶之路 -【 RocketMQ (二)】 2022.01.06

    目录 1. RocketMQ 设计目的 1.1. 发布/订阅 1.2. 消息优先级 1.3. 消息顺序 1.4. 消息过滤 1.5. 消息持久化 1.6. 消息可靠性 1.7. 消息实时性 1.8. ...

  3. 《安富莱嵌入式周报》第251期:2022.01.31--2022.02.06

    往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...

  4. 洛谷 刷题 深基部分题解(python版)-2022.01.29

    P5703 [深基2.例5]苹果采购(python3实现) https://blog.csdn.net/dllglvzhenfeng/article/details/122690555 P5703 [ ...

  5. 小学奥数 7657 连乘积末尾0的个数-2022.01.26

    http://noi.openjudge.cn/math/7657/ /* 小学奥数 7657 连乘积末尾0的个数-2022.01.26 http://noi.openjudge.cn/math/76 ...

  6. 1168:大整数加法--2022.01.22 AC

    /* 1168:大整数加法--2022.01.22 AC http://ybt.ssoier.cn:8088/problem_show.php?pid=1168c++中 cin.cin.get().c ...

  7. 1.5 编程基础之循环控制 11 整数的个数(2022.01.09)--python

    http://noi.openjudge.cn/ch0105/11/ """ 1.5 编程基础之循环控制 11 整数的个数(2022.01.09) http://noi. ...

  8. LeetCode 面试题 01.06. 字符串压缩 (双指针)

    面试题 01.06. 字符串压缩 题意: 压缩字符串,如:"aabbccc"压缩为"a2b2c3",如果压缩后的字符串长度大于等于原字符串,则返回原来的字符串. ...

  9. 《安富莱嵌入式周报》第249期:2022.01.17--2022.01.23

    往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...

  10. 开源社区Github在2022年06月09日公测了三个新的成就徽章

    开源社区Github在2022年06月09日公测了三个新的成就Achievements 徽章 今天登录GitHub突然惊喜的发现多了一个可爱的小鲨鱼徽章. 加上之前的三个徽章,现在一共有六个啦- 有两 ...

最新文章

  1. Python 刷英语六级段落匹配仅需 3 秒?
  2. 关于preg_match() / preg_replace()函数的一点小说明
  3. Python 计算程序运行时间
  4. 通过组策略禁止用户安装任何软件
  5. Redis常见配置redis.conf
  6. 使用dotnet template快速开发Microsoft Teams Outgoing Web Hook
  7. 一个深入学习Linux/C/C++的原创技术号
  8. Dart核心语言基础const关键字与final关键字的区别
  9. 创建带时间的事件java8_Java8时间API 生成带时区的时间
  10. 新浪股票数据接口获取
  11. 网上书城_前端动态加载类别and书籍显示
  12. 大数据学习第一章:初识大数据
  13. 高仿淘宝首页 - 刚把CSS和JS弄出成了外部,原本写的时候都在HTML一个文件里哈
  14. 用VC++5.0播放AVI文件的两种方法
  15. 客户端设置超时,max_fails失效----问题分析
  16. OpenCV最小二乘法圆拟合
  17. 使用__vmx_vmwrite遇到的问题
  18. ERP软件定制是把双刃剑
  19. wifi的sta + ap模式
  20. linux命令总结-ls

热门文章

  1. vue在js上处理后台返回的数组_vuejs 根据后台返回数组,渲染图片路径
  2. ML之sklearn:sklearn.metrics中常用的函数参数(比如confusion_matrix等 )解释及其用法说明之详细攻略
  3. AI:神经网络调参(数据、层数、batch大小,学习率+激活函数+正则化+分类/回归)并进行结果可视化
  4. Python语言学习之图表可视化:python语言中可视化工具包的简介、安装、使用方法、经典案例之详细攻略
  5. DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异
  6. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Canvas)
  7. WRF-Chem User Guide3.9.1.1 部分内容翻译
  8. 多线程学习笔记一之内置锁
  9. vue2移动端使用vee-validate进行表单验证
  10. Scanner类的基本总结