【bugku】【RE】file WriteUp
FILE
查壳后显示无壳,拖进IDA:
运行程序时传递的第一个参数为一个文件名,并打开该文件。下面点进去encode函数分析一下:
for循环中每三个为一组,进行Base64的操作,接下来两个if分别判断Base64后的尾部是加一个“=”还是两个“=”还是不加“=”。具体Base64编码方式可以参考我的这篇博客:https://www.cnblogs.com/reddest/p/9554948.html。所以encode()是对传入的字符串进行Base64编码。回到主函数看看encode()被用在哪里了:
圈出来的部分就是判断输入的数据是否是正确的KEY了,并且可以发现并没有用到encode()的返回值v11和v12,所以encode()就是个摆在那里打扰分析思路的。老夫40米巨剑何在。
根据异或的可逆性,v14[k] = k ^ flllag[k] ^ v13[k]。现在我们只缺v13数组中是哪些元素了,分析sub_400EB9():
sub_400EB9()的返回值根据sub_400E6A()来定,跟进分析sub_400E6A():
这里把传入的某个元素判断是否符合某个区间,然后分别返回不同的值。该函数传进来的是sttr_home[]字符串中的元素,主函数中双击该字符串:
获取了sttr_home的元素后写个脚本跑出v13[],脚本如下:
#include <cstdio>
char str[110] = "664e06226625425d562e766e042d422c072c45692d125c7e6552606954646643";
int jdg(int id){
if(str[id] >= '' && str[id] <= '')
return str[id] - '';
if(str[id] >= 'A' && str[id] <= 'F')
return str[id] - '';
if(str[id] < 'a' && str[id] > 'f')
return 0xFFFFFFFFLL;
return str[id] - 'W';
}
int calc(int x, int y){
return 16 * jdg(x) + jdg(y);
}
int main(){
for(int i = 0;i < 64;i += 2){
printf("%d, ", calc(i, i + 1));
}
return 0;
}
接着写出根据v14[k] = k ^ flllag[k] ^ v13[k]写出相应脚本跑出KEY,并把KEY存到文件中,代码如下:
接着用gcc编译并运行后,把a.txt作为参数传给file运行:
把a.txt的MD5在线计算一下:
把MD5加上flag{}就OKK啦!
【bugku】【RE】file WriteUp的更多相关文章
- 【ZBar】ios错误ignoring file xxx missing required architecture x86_64 in file
解决方法: 1.在Project target里"Architectures"设置为:Standard (armv7,armv7s)或者 Standard (armv7,arm6 ...
- 01 语言基础+高级:1-8 File类与IO流_day09【字节流、字符流】
day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 能够说出IO流的分类和功能 能够使用字节输出流写出数据到文件 能够使用字节输入流读取数据到程序 ...
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
- 【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用
四个主要操作类:JsonConverter .JsonHelper .JsonSplit .AjaxResult 一.JsonConverter: 自定义查询对象转换动态类.object动态类转换j ...
- 【C#公共帮助类】FTPClientHelper帮助类,实现文件上传,目录操作,下载等动作
关于本文档的说明 本文档使用Socket通信方式来实现ftp文件的上传下载等命令的执行 欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利. 本人自从几年前走上编程之路,一直致力于收集 ...
- 【图像处理】【SEED-VPM】5.uImage的烧写 & NFS烧写文件系统
基于 TFTP 烧写 uImage 当用户对 SEED-VPM6467 下的内核驱动源码进行调整或者添加新的设备驱动后,需要对内核进行重新编译配置,编译生成内核镜像后,可以通过 tftp 下载到 SE ...
- Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】
<Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...
- 【SQL篇章--CREATE TABLE】
[SQL篇章][SQL语句梳理 :--基于MySQL5.6][已梳理:CREATE TABLE][会坚持完善] SQL : 1. Data Definition Statements: 1.3 CRE ...
- Python之路【第七篇续】:I/O多路复用
回顾原生Socket 一.Socket起源: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作. socket就是该模式的 ...
- 【java 上传+下载】
一.先说说上传 第一步:pom.xml文件 加上 上传文件依赖架包 <dependency> <groupId>commons-fileupload</groupId&g ...
随机推荐
- splay:优雅的区间暴力!
万年不更的blog主更新啦!主要是最近实在忙,好不容易才从划水做题的时间中抽出一段时间来写这篇blog 首先声明:这篇blog写的肯定会很基础...因为身为一个蒟蒻深知在茫茫大海中找到一个自己完全能够 ...
- 如何用CMD开启3389与查看3389端口
开启 REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections / ...
- vue路由-动态路由和嵌套路由
一.动态路由 我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件.例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染.那么,我们可以在 vue-route ...
- java===java基础学习(4)---字符串操作
java中的字符串操作和python中的大致相同,需要熟悉的就是具体操作形式. 关于具体api的使用,详见:java===字符串常用API介绍(转) package testbotoo; public ...
- Python 如何将字符串转为字典
在工作中遇到一个小问题,需要将一个 python 的字符串转为字典,比如字符串: user_info = '{"name" : "john", "ge ...
- 设计模式之笔记--桥接模式(Bridge)
桥接模式(Bridge) 定义 桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化. 类图 描述 Abstraction:定义抽象部分的接口,通常在这个接口里面要维护一个实 ...
- jQuery使用blur()方法触发两次的解决方法
在项目中的textarea在是去焦点时对文本内容进行验证,这时候使用了blur方法,但是实现时blur的回调函数执行了两次,这里我也不知道为什么,然后就尝试先解除blur事件绑定,然后再绑定blur事 ...
- django “如何”系列10:如何管理静态文件
django开发者最关心的是web应用中的动态部分-视图函数和模板.但是明显,web应用还有其他需要注意的部分:静态文件(图片,css,javascript等等),那些都是渲染一个完整的页面需要的东西 ...
- mysql数据库设置远程连接权限
原文 问题现象 mysql 安装完毕,本机登录正常,在远程输入正确账号密码登录连接时报错如下 问题原因 远程IP没有登录权限,root用户默认只能在localhost也就是只能在本机登录,需要设置允许 ...
- Ext 目录
adapter:负责将里面提供第三方底层库(包括Ext自带的底层库)映射为Ext所支持的底层库. build: 压缩后的ext全部源码(里面分类存放). docs: API帮助文档. exmaples ...