当前位置: 首页 > news >正文

Polar Reverse(中等)

JunkCode

就一处花指令,比较简单

瞬间看出是XOR算法,用厨子写出即可

RevMethod

看到这个函数蒙了,不知道哪个是真正的flag了。

再次参考WPPolar靶场reverse方向通关题解-CSDN博客

又是没看仔细,这个比的是不同数组的值,我们按照它的规则找出来即可

逆一下子

利用ResourceHack修改,让flag按钮可以被点击即可

点击flag出现,c68d-d262-5b91-2541-1ba7-1f3d-8103-41c4,将中间的连接号去除就是flag

可以为师

和上一题一样的思路

第二行在前,第一行在后拼接即可

左右为难

写出脚本提取迷宫即可,是16列

最终路线:sssssdddddwwaawwdddwddsssddwwddssdss

maze='00000000000000000@00000111000000010011110101110001001000010101000100111001110110010000100000001001111110000000$00000000000000000'
sum=0
for i in maze:print(i,end='')sum+=1if sum == 16:sum = 0print('\n')

混淆Code?(暂未解决)

第一处加密:

第二处:

Java_Tools

用jadx看

main类:

package main.java;import java.util.Scanner;/* loaded from: Java_project.jar:main/java/Test.class */
public class Test {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("Welcome to Polar_Ctf!,come to play!");System.out.println("Please Input : ");String name = in.next();char[] Strings = name.toCharArray();Tools.Add_1(Strings, 3);Tools.Re(Strings);Tools.Judge(Strings);}
}

先调用Add1,然后是Re,Judge就是判断

package main.java;import java.util.ArrayList;/* loaded from: Java_project.jar:main/java/Tools.class */
public class Tools {public static int j = 6;public static void Re(char[] str) {for (int i = 0; i < (str.length / 2) - 1; i++) {char temp = str[i];str[i] = str[(str.length - i) - 1];str[(str.length - i) - 1] = temp;}}public static void Xor(char[] str) {for (int i = 0; i < str.length; i++) {str[i] = (char) (str[i] ^ j);}}public static void Add_1(char[] str, int x) {for (int i = 0; i < str.length; i++) {str[i] = (char) (str[i] + x);}}public static void Judge(char[] str) {ArrayList<Character> Result = new ArrayList<>();ArrayList<Character> Flag = new ArrayList<>();for (char c : str) {Character i = Character.valueOf(c);Result.add(Character.valueOf(i.charValue()));}String sttr = new String(str);if ("$gourZroohK".contains(sttr)) {System.out.println("You Are Right!MD5!");} else {System.out.println("You Are Wrong! please try it again!");}char[] Strings = "$gourZroohK".toCharArray();for (char c2 : Strings) {Flag.add(Character.valueOf(c2));}if (Result.equals(Flag)) {System.out.println("You Are Right!MD5!");} else {System.out.println("You Are Wrong! please try it again!");}}
}

分析judge函数可知,$gourZroohK是密文。Add是每个字符ASCII+3.Re应该是反转数组的意思

我们先反转再-3即可。

a='$gourZroohK'
b=''
c=a[::-1]
for i in c:b+=chr(ord(i)-3)
print(b)

PY_RE

给了两个PY文件,能清晰地看到judge函数的逻辑,即可清晰地知道密文的值,接下来就是主要看加密函数

这个是主要的函数:
 

 for dict in Dict:if Input_Str[i] == str(dict):Input_Str[i] = Dict[dict]break

遍历字典的键,如果输入的数组有它,就把输入数组的换成键对应的值

简单来说,就是通过这样一个字典,实现了字符替换的加密,我们只需要根据字典,反带回去即可

根据思路,让豆包完善我的脚本如下:
 

# 构建字典:A-Z 对应 26-1
key = 'A'
value = 26
Dict = {}
for i in range(1, 27):Dict[key] = value  # 直接赋值更简洁,setdefault在此场景没必要key = chr(ord(key) + 1)value -= 1
print("原字典:", Dict)  # 输出 {'A':26, 'B':25, ..., 'Z':1}# 反转字典:26-1 对应 A-Z
mydict = {v: k for k, v in Dict.items()}  # 用字典推导式更简洁
print("反转字典:", mydict)  # 输出 {26:'A', 25:'B', ..., 1:'Z'}FLAG = ['H', 'E', 'L', 'L', 'O', '_', '_', 11, 2, 7, 19, 12, 13]
# 修正1:将前7个字符(除'_'外)转换为对应的数值(原代码用==是判断,而非赋值)
for i in range(7):if FLAG[i] != '_':  # 只转换字母,跳过'_'FLAG[i] = Dict[FLAG[i]]  # 'H'对应的值是19(因为H是第8个字母,26-7=19)flag = ''
for item in FLAG:# 修正2:循环逻辑错误,原代码会对每个未匹配项添加'_',导致重复if item in mydict:flag += mydict[item]else:flag += '_'  # 只在完全未匹配时添加一个'_'print("最终FLAG:", flag)  # 输出:HELLO_PYTHON

最后md5下即可

二层防御

先UPX脱壳

主函数很好看:
密文是allo_PWN n

int __fastcall main(int argc, const char **argv, const char **envp)
{_main();puts("Input :");gets(input);Check_Length();Strlen();Reverse(len);check();return 0;
}
__int64 __fastcall Reverse(int len)
{char v2; // [rsp+2Bh] [rbp-5h]int i; // [rsp+2Ch] [rbp-4h]for ( i = 1; len / 2 > i; ++i ){v2 = input[i];input[i] = input[len - i - 1];input[len - i - 1] = v2;}return Xor_8();
}
__int64 Xor_8(void)
{__int64 result; // raxint v1; // [rsp+Ch] [rbp-4h]v1 = 1;x1 = j;while ( 1 ){result = (len - 1);if ( result == v1 )break;input[v1] ^= x1;--input[v1++];}return result;
}

需要注意XOR_8函数的范围,首尾是没有的!

最后MD5一下即可

a='allo_PWN n'
b=''
for i in a[1:len(a)-1]:b+=chr((ord(i)+1)^8)
c='a'+b[::-1]+'n'
print(c)

猜猜我在哪

经过反编译,key取值只有01234五种情况,所以key可以用爆破的方式写了。以下是加密函数,加密后还需把o换成0.

--------------------待更新----------------------------

http://www.dtcms.com/a/528250.html

相关文章:

  • A2O MAY首张EP《PAPARAZZI ARRIVE》正式上线 全球宣传全面启动
  • MySQL常用内置函数整理:提高你的查询效率
  • MkFont,一款开源免费的字体设计工具
  • 怎么样才能搜索到自己做的网站jquery做的装修网站
  • 基于Chrome140的TK账号自动化——脚本撰写(二)
  • WPF之Style
  • zabbix实现监控Apache、Nginx、php-fpm应用的实操保姆级流程
  • 69.力扣LeetCode_x的平方根
  • linux第二次作业
  • (二)Gradle 依赖仓库及安全凭证配置
  • 医疗信创标杆实践:浙人医 LIS 系统异构多活容灾架构深度解析(附 KingbaseES 实战)
  • 廊坊怎么做网站免费访问国外网站的应用
  • 对网站建设好学吗vps 需刷新几次才能打开网站
  • 百日挑战之单词篇(第三天)
  • 【C++】list 常见使用和模拟实现
  • HTML HTML5基础(2)
  • macOS安装使用Oh My Tmux教程
  • SpringBoot+FFmpeg+ZLMediaKit 实现本地视频推流
  • Mac-终端
  • 中科大分子生物学Ⅲ复习题2025年
  • 关于lvgl-for linxu的dockerfile
  • 做ppt的网站叫什么名字sem和seo是什么职位
  • 临沂网站建设有哪些公司网页制作模板
  • UDP多线程在线咨询
  • 微信小程序原生如何使用画布生成名片
  • Postman介绍和安装,发送带参数的GET请求
  • 海西州wap网站建设公司网站布局怎么用dw做
  • Python入门经典题目
  • 佛山网站建设乐云seo在线制作wordpress媒体库略缩图
  • 网站的服务器怎么做的网站模板软件