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

re入门3

polarctf逆一下子
image
image
可以为师
先运行一下发现
image
帮助里面有个关于的按键,但是禁用,无法点击,使用resource hacker修改资源
image
给inactive删除即可
左右为难
image
运行之后很明显是一个wasd的迷宫题目
很简单恢复一下迷宫
################

S#####...######

.##....#.#...##

.##.####.#.#.##

.##...##...#..#

.####.#######.#

......#######G#

################
sssssdddddwwaawwdddwddsssddwwddssdss最后md5加密提交即可
混淆Code?
`int __fastcall main(int argc, const char **argv, const char **envp)
{
int j; // [rsp+28h] [rbp-58h]
int i; // [rsp+2Ch] [rbp-54h]

_main();
puts("Input 😊;
gets(str);
Check_Length();
Strlen();
for ( i = 0; i < strlen(str); ++i )
{
for ( j = 0; j < strlen(str); ++j )
{
if ( (j & 1) != 0 )
flag[100 * j + i] = i + 98;
else
flag[100 * i + j] = j + 97;
}
}
if ( !tick )
X();
check();
return 0;
}主函数中出现此代码,有一个混淆,这里面有两个循环j&1是用来判断奇数偶数相当于j%2,其混淆意味更明显,这是通过二进制的最低位(LSB)0或1和1进行按位与的运算,如果是1也就是基数,最后结果就是1,如果是0,最后结果就是0,也就是如果等于是基数就进行flag[100 * j + i] = i + 98;,偶数就进行下面操作 这个混淆是没有用的,为什么呢,因为flag只被写过但是没有被读过,如果还不太明白的话就往下看,跟进x和check函数__int64 X(void)
{
__int64 result; // rax
int i; // [rsp+Ch] [rbp-4h]

for ( i = 0; ; ++i )
{
result = (unsigned int)(x - 1);
if ( (int)result <= i )
break;
str[i] ^= j++;
}
return result;
} __int64 check(void)
{
int *v0; // rdx
__int64 v2; // [rsp+0h] [rbp-80h] BYREF
_WORD v3[8]; // [rsp+20h] [rbp-60h] BYREF
int v4; // [rsp+80h] [rbp+0h]
int v5; // [rsp+84h] [rbp+4h] BYREF
int i; // [rsp+8Ch] [rbp+Ch]

strcpy((char *)v3, "lfgc-yb}v!");
HIBYTE(v3[6]) = 0;
v3[7] = 0;
memset(&v2 + 6, 0, 0x50uLL);
v4 = 0;
v0 = &v5;
for ( i = 0; i < x; ++i )
{
v0 = (int *)i;
if ( *((_BYTE *)v3 + i) != str[i] )
{
printf("Error!");
return 0LL;
}
}
printf(aRight, v0);
return 1LL;
}在check中找到加密后的密文,长度12已知,在x中进行了一个异或的操作,这里面的j是未知的,可以通过爆破得到j的值, 当然也可以直接猜测输入为hello之类的可读明文进行还原,最终得到j为8 爆破脚本target = b"lfgc-yb}v!"
for j in range(256):
s = bytes([target[i] ^ (j + i) for i in range(len(target)-1)]) + b"!"
if all(32 <= c <= 126 for c in s):
print(j, s)
当然也可以直接用enter查看j的值 ![image](https://img2024.cnblogs.com/blog/3695877/202512/3695877-20251219125052148-1442971814.png) 然后还原出明文为hello world!最终md5提交即可 Java_Tools 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.m0Re(Strings);
Tools.Judge(Strings);
}
}主函数中调用了Add1,m0Re,Judge三个函数, 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 m0Re(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 Judge(char[] str) {
ArrayList Result = new ArrayList<>();
ArrayList 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));Judge
}
if (Result.equals(Flag)) {
System.out.println("You Are Right!MD5!");
} else {
System.out.println("You Are Wrong! please try it again!");
}
}
}在Add1里面进行了每个+3的操作,在m0Re中进行了不完全的交换,交换按顺序交换到前四位和最后四位,发现中间是rZr,其实也相当于全部逆序,最后在Judge判断函数中找到了密文,所以来一个简单的脚本a="$gourZroohK"
b=a[::-1]
f=""
for i in b:
f+=chr(ord(i)-3)
print(f)HelloWorld!md5后提交 PY_RE 有两个py文件,查看代码import Test
Dict = {}
key = 'A'
value = 26
for i in range(1,27):
Dict.setdefault(key, value)
key = chr(ord(key) + 1)
value = value - 1
print("=Py_Reverse==")

def main():
Input_Str = input("Please Input Str:\n")
Input_Str = list(Input_Str)
Test.EnData1(Input_Str,Dict)
Test.Judge(Input_Str)
main()
setdefault(k, v) 的作用如果 k 不存在: Dict[k] = v 如果 k 已存在: 什么都不做 也就是说这里把字典变成Dict[A]=26,Dict[B]=25.....,共循环26次 创建完字典之后,调用了EnData1和Judgedef EnData1(Input_Str,Dict):
for i in range(int(len(Input_Str)/2),len(Input_Str)):
for dict in Dict:
if Input_Str[i] == str(dict):
Input_Str[i] = Dict[dict]
break
def Judge(Input_Str):
FLAG = ['H', 'E', 'L', 'L', 'O', '', '', 11, 2, 7, 19, 12, 13]
if str(Input_Str) == str(FLAG):
print("YES!")
else:
print("NO!")
all_data = []
def EnData(Input_Str,Dict):
for i in range(int(len(Input_Str)/2),len(Input_Str)):
flag = 0
for dict in Dict:
if Input_Str[i] == dict:
all_data.append(Dict[dict])
flag = 1
if flag == 0:
all_data.append(Input_Str[i])很明显EnData1替换了字符串后半部分内容,Judge中发现了密文,很简单恢复出明文后md5提交即可 二层防御 upx直接脱壳int __fastcall main(int argc, const char **argv, const char **envp)
{
_main();
puts("Input 😊;
gets(str);
Check_Length();
Strlen();
sub122(x);
check();
return 0;
}跟进sub122和check__int64 __fastcall sub122(int a1)
{
char v2; // [rsp+2Bh] [rbp-5h]
int i; // [rsp+2Ch] [rbp-4h]

for ( i = 1; a1 / 2 > i; ++i )
{
v2 = str[i];
str[i] = str[a1 - i - 1];
str[a1 - i - 1] = v2;
}
return sub133();
}这里面做了一个不完全的交换,因为最后在check中找到flag密文为allo_PWN n所以a1=10,也就是从0开始的话是1和8,2和7,3和7...做交换__int64 sub133(void)
{
__int64 result; // rax
int v1; // [rsp+Ch] [rbp-4h]

v1 = 1;
x1 = j;
while ( 1 )
{
result = (unsigned int)(x - 1);
if ( (_DWORD)result == v1 )
break;
str[v1] ^= x1;
--str[v1++];
}
return result;
}这里面是个异或的操作,j的值为8,从1到6进行循环__int64 check(void)
{
int i; // [rsp+2Ch] [rbp-4h]

for ( i = 0; i < x; ++i )
{
if ( flag1[i] != str[i] )
{
printf("Error!");
return 0LL;
}
}
printf(aRight);
return 1LL;
}`
使用ai很快得到a)GPYhxeen
md5提交
猜猜我在哪
这个也是代码审计吧,凯撒加密,key取值01234,直接爆破
易位

http://www.jsqmd.com/news/144945/

相关文章:

  • 青岛哪里可以开病例证明病假条
  • Logistic回归全流程代码,包含:导入数据 数据划分 基线表生成 LASSO回归 批量单因...
  • 扫码必备,二维码制作模板与案例详解
  • 超详细!提示工程架构师的数据安全策略
  • 2025最新!自考党必看!10个AI论文工具测评,哪款最能帮你写好毕业论文?
  • 数据采集与融合项目实践
  • Go之路 - 8.go的接口
  • 广州哪里可以开病例证明病假条
  • 构建智能代理的核心工具:Microsoft Agent Framework 介绍
  • 力扣1005 K次取反后最大化的数组和 java实现
  • 高频注入法的永磁同步电机无传感器控制 高频电压信号注入法 无速度传感器 matlab 仿真 不含文档
  • 实用指南:鸿蒙原生系列之监听布局和送显事件
  • 超微SYS-821GE-TNHR深度测评:8卡 NVIDIA H200 风冷 AI 服务器
  • zzlangchainlanggraph的一些学习资源
  • 屹晶微 EG27710 600V耐压、高性能、快速开关的半桥驱动芯片技术解析
  • 郑州哪里可以开病例证明病假条
  • 成都医疗机构最认可哪家数智技术医药批发商?
  • 基于SpringBoot+Vue的体育赛事交流平台毕业设计
  • Vision pro 项目分享:Pcd板线路检测(与halcon比较)
  • 北京哪里可以开病例证明病假条
  • Java毕设选题推荐:基于spring boot的高校宿舍管理系统设计基于springboot的高校学生宿舍管理系统设计【附源码、mysql、文档、调试+代码讲解+全bao等】
  • fdsafs
  • 南京哪里可以开病例证明病假条
  • 【计算机毕业设计案例】基于spring boot的高校宿舍管理系统设计基于spring boot + vue 的宿舍管理系统(程序+文档+讲解+定制)
  • 2026 3D打印机买家指南:TCT亚洲 3D打印展首批百款展品曝光,涵盖工业级金属3D 打印到桌面级3D打印机!持续更新中~
  • 云服务器选型指南
  • 基于SpringBoot+Vue的前后端分离在线学习平台的设计与实现毕业设计
  • AI能力进化还在狂飙!Epoch数据洞察打破人们对AI进化减缓的预期
  • 东莞哪里可以开病例证明病假条
  • 供应链计划系统架构实战(三):全球平台数据与实现难点分析