Jarvis OJ - Baby's Crack - Writeup
Jarvis OJ - Baby's Crack - Writeup
M4x原创,欢迎转载,转载请表明出处
这是我第一次用爆破的方法做reverse,值得记录一下
题目:
分析:
下载后解压有exe和flag.enc两个文件,初步推测flag.enc是用exe加密后的文件,我们只需要分析exe的加密算法,还原flag.enc的明文即可
exe无壳,拖到IDA中用F5大法,找到关键代码:
// local variable allocation has failed, the output may be wrong!
int __cdecl main(int argc, const char **argv, const char **envp)
{
int result; // eax@16
char Dest; // [sp+20h] [bp-80h]@16
FILE *v5; // [sp+88h] [bp-18h]@5
FILE *File; // [sp+90h] [bp-10h]@4
char v7; // [sp+9Fh] [bp-1h]@6
int v8; // [sp+B0h] [bp+10h]@1
const char **v9; // [sp+B8h] [bp+18h]@1 v8 = argc;
v9 = argv;
_main(*(_QWORD *)&argc, argv, envp);
if ( v8 <= )
{
printf("Usage: %s [FileName]\n", *v9);
printf("FileName是待加密的文件");
exit();
}
File = fopen(v9[], "rb+");
if ( File )
{
v5 = fopen("tmp", "wb+");
while ( feof(File) == )
{
v7 = fgetc(File);
if ( v7 != - && v7 )
{
if ( v7 > && v7 <= )
{
v7 += ;
}
else if ( v7 <= )
{
v7 += v7 % ;
}
else
{
v7 -= v7 % ;
}
fputc(v7, v5);
}
}
fclose(v5);
fclose(File);
sprintf(&Dest, "del %s", v9[]);
system(&Dest);
sprintf(&Dest, "ren tmp %s", v9[]);
system(&Dest);
result = ;
}
else
{
printf("无法打开文件%s\n", v9[]);
result = -;
}
return result;
}代码的逻辑很简单,exe读取文件中的每一个字符,经过加密存储到flag.enc中,加密的方式有三种:
if ( v7 != - && v7 )
{
if ( v7 > && v7 <= )
{
v7 += ;
}
else if ( v7 <= )
{
v7 += v7 % ;
}
else
{
v7 -= v7 % ;
}
fputc(v7, v5);
}刚开始是想跟进加密的算法推出明文,但后来发现flag.enc中的字符只有52位,而三种加密的算法又很简单,因此完全可以爆破
附上爆破脚本
#coding:utf-8
import string #将密文转化为ascii码值便于处理,当然没有这一步也是可以的
cipher = 'jeihjiiklwjnk{ljj{kflghhj{ilk{k{kij{ihlgkfkhkwhhjgly'
l = map(ord, cipher)
#l = [106, 101, 105, 104, 106, 105, 105, 107, 108, 119, 106, 110, 107, 123, 108, 106, 106, 123, 107, 102, 108, 103, 104, 104, 106, 123, 105, 108, 107, 123, 107, 123, 107, 105, 106, 123, 105, 104, 108, 103, 107, 102, 107, 104, 107, 119, 104, 104, 106, 103, 108, 121] #爆破的范围为所有可打印字符
dic = string.printable #三种加密方式
f1 = lambda x: chr(x - 53)
def f2(x):
for i in dic:
if ord(i) + ord(i) % 11 == x:
return chr(i) def f3(x):
for i in dic:
if ord(i) - ord(i) % 61 == x:
return chr(i) #爆破函数,逐位对密文进行爆破
def crack():
ans = ''
for i in l:
try:
ans += f1(i)
except:
pass try:
ans += f2(i)
except:
pass try:
ans += f3(i)
except:
pass return ans #爆破出的明文是16进制的,还要进行解码
# print crack()
print crack().decode('hex')
运行得到flag
Jarvis OJ - Baby's Crack - Writeup的更多相关文章
- Jarvis OJ - [XMAN]level1 - Writeup
Jarvis OJ - [XMAN]level1 - Writeup M4x原创,转载请表明出处http://www.cnblogs.com/WangAoBo/p/7594173.html 题目: 分 ...
- Jarvis OJ - class10 -Writeup
Jarvis OJ - class10 -Writeup 转载请注明出处:http://www.cnblogs.com/WangAoBo/p/7552266.html 题目: Jarivs OJ的一道 ...
- Jarvis OJ - 栈系列部分pwn - Writeup
最近做了Jarvis OJ的一部分pwn题,收获颇丰,现在这里简单记录一下exp,分析过程和思路以后再补上 Tell Me Something 此题与level0类似,请参考level0的writeu ...
- Jarvis OJ - 软件密码破解-1 -Writeup
Jarvis OJ - 软件密码破解-1 -Writeup 转载请标明出处http://www.cnblogs.com/WangAoBo/p/7243801.html 记录这道题主要是想记录一下动态调 ...
- Jarvis OJ - DD-Hello -Writeup
Jarvis OJ - DD-Hello -Writeup 转载请注明出处http://www.cnblogs.com/WangAoBo/p/7239216.html 题目: 分析: 第一次做这道题时 ...
- Jarvis OJ - 爬楼梯 -Writeup
Jarvis OJ - 爬楼梯 -Writeup 本来是想逆一下算法的,后来在学长的指导下发现可以直接修改关键函数,这个题做完有种四两拨千斤的感觉,记录在这里 转载请标明出处:http://www.c ...
- Jarvis OJ部分逆向
Jarvis OJ部分逆向题解 很久没有写博客了,前天上Jarvis OJ刷了几道逆向,保持了一下感觉.都是简单题目,写个writeup记录一下. easycrackme int __cdecl ma ...
- jarvis OJ WEB题目writeup
0x00前言 发现一个很好的ctf平台,题目感觉很有趣,学习了一波并记录一下 https://www.jarvisoj.com 0x01 Port51 题目要求是用51端口去访问该网页,注意下,要用具 ...
- Jarvis OJ - [XMAN]level3 - Writeup——ret2libc尝试
这次除了elf程序还附带一个动态链接库 先看一下,很一般的保护 思路分析 在ida中查看,可以确定通过read函数输入buf进行溢出,但是并没有看到合适的目标函数 但是用ida打开附带的链接库,可以看 ...
随机推荐
- 1315E Double Elimination DP 01枚举状态和倍增思想
E. Double Elimination DP 01枚举状态和倍增思想 题意 参考DOTA2双败赛制,一共有\(2^n\)个队打n轮 其中你有k喜欢的队伍,由你掌控比赛的输赢请问比赛中包含你喜欢的队 ...
- Vue tinymce富文本编辑器
tinymce 官方为 vue 项目提供了一个组件 tinymce-vue 一.安装tinymce-vue npm install @tinymce/tinymce-vue -S 二.下载tinymc ...
- 1级搭建类110-Oracle 18c SI FS(Windows Server 2019)公开
Oracle 18c 单实例文件系统在Windows Server 2019上的安装 在线查看
- 0级搭建类001-RedHat Enterprise Linux 8 安装(RHEL 8) 公开
项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...
- 常用网络命令 在windows下
1.增加一条临时静态路由 格式:route add <目的网络地址> mask <目的网络子网掩码> <网关> 实例:route add 0.0.0.0 mask ...
- 【vue 权威指南】 学习笔记 二
1.指令 1.1内部指令 基础指令:v-show , v-else , v-model , v-repeat , v-for , v-text , v-el , v-html , v-on , v-b ...
- HDU 4544 湫湫系列故事——消灭兔子 (优先队列)
湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子 ...
- VS 2017——解决运行C++程序后出现(进程xxxx)已退出,返回代码为:0的问题
工具-选项-调试-常规,“调试停止时自动关闭控制台”选项打钩.
- Nginx 配置Websocket
Nginx反向代理配置websocket nginx.org 官网推荐如下的配置,也可以直接看官网:http://nginx.org/en/docs/http/websocket.html http ...
- LED Holiday Light -holiday Light Inspection Implementation Recommendations
China LED Holiday Light Factory & Ninghai County Haohua Electronic Appliance Co., Ltd. pointed o ...