LCTF (easyeasy-200)
首先安装,看看app是什么样的。

有点奇怪,没有点击确定的按钮。然后拖到JEB反编译。

要求输入的字符串的长度要在35-39之间(包括边界值),然后会调用Format().form函数。如下图。

可以看到,form函数是要返回字符串[5,38],这里可以判断出要输入字符串的长度必须要大于38,否则就会出错。结合上面的分析,那么长度可能会是38或者39了。
再往下,要求format后的字符串长度要大于等于32才会调用check函数。
接着进check函数追下去。



首先看它的构造函数, 这个函数莫名其妙。调用checkPipes,判断路径是否存在,若两个路径中存在任何一个就会被赋值为ture并返回。当两个路径都不存在时赋值为false。
接着再往下分析。调用native层函数并传入emulator,结果为真返回false,反之调用native层函数checkPasswd并传入pass。

这里推测是起迷惑作用的,反正管你emulator是什么,反正想拿到flag就必须得调用后面的checkPasswd。换句话说,checkPipes也没有分析的意义了。
那么接下来反编译app,用IDA打开下图所示的文件。(为什么选这个,我也忘了,反正选这个没错)

之后,我就在这里卡住了, checkPasswd 的 IDA反编译的代码十分晦涩,而且由于自己的畏难心理,导致静不下心来分析,所以上午只看了一会就放弃了。看了网上的WP。这些WP都很玄学,都是先找到那串base64(具体怎么找的也没说)然后解码,倒置,flag就get了。我想这样的话有什么意思,于是下午就自己硬怼了。然后我认为自己分析的还是有点东西的,而且网上对这个题的WP也不详细,于是写下自己的见解。

sub_8f7c,三个参数都与输入的str无关,这里我想了好久,一开始认为是加密函数,后来推测出这个函数作用就是为了申请内存,并且把第二参数地址传递给第一个参数。为什么原因有2.
1.如果跟进这个函数,会发现下图所示,有create

2.这个函数被多次调用,观察这些函数,就可以更加确认了。



sub_8F7C搞清楚后,接着往下分析,如下图,具体分析已在图中标明。

在分析sub_6ED0时,存在下图所示字符

所以从逻辑上看,sub_6ED0是把v7放入v17中的推论是站得住脚的。
接着往下。

encrypt代码很难懂。先把这个函数放一放,来看看secret这个变量存储的值到底是什么。
鉴于以往的经验,在IDA中双击这个值就能看到它的值。但是这里不一样,他是位于bss段的数据,并没有值。选中secret,按X,有一个520C函数也引用过这个值,点开会发下下图。

很熟悉,又见到8F7C这个函数了。上面我们分析过,这个函数的作用其实就是把第二参数传递给第一个参数。换句话说secret被赋值了这串base。
但是后面下面那个是怎么回事?
我们回头再去看encrypt加密函数就会恍然大悟了。如下图

看,1D09C中存储的是base64的那张表(对base64编码原理不清楚的可以去百度,这里就不赘述了,写了半下午好累╮(╯-╰)╭),这个encrypt就是个base64加密算法,实锤了。
到此为止。总结一下。
其实就是接受Java层的参数,倒置后base64加密,然后与内置的那串base作比较,一样返回ture,反之false。
那么为什么这个题做出来的人这么少呢?我觉着要是上面几个关键函数告诉你他是干什么用的,比如encrypt告诉你是个base64算法,我想肯定这个题难度会大大降低把。
问题的关键是不知道它的作用,只能自己去推理,面对这么多晦涩难懂的代码,去找出它的实际意义,我想这大概就是逆向的难处和魅力吧。
LCTF (easyeasy-200)的更多相关文章
- iis6 服务器做301跳转返回状态码200解决方法。
倘若你的配置和上图一样的话,在查询返回值是200的情况,你试着把你服务器上的安全狗或者防火墙,还有360网站卫士之类的安全软件停止试试,看是否能正常.
- AJAX回调函数,返回JSON格式,应该返回自定义状态STATUS,但是却返回200
返回200应该是方法已经执行通的意思,但是没返回自定义的status,仔细一看json格式拼错了...
- [HTTP Protocol] 200 OK (from cache)和304 Not Modified
含义 200 OK (from cache)直接从缓存中获取的内容并未请求服务器 304 Not Modified 请求服务器并和服务器比较 If-Modified-Since,若文件未改变,服务器返 ...
- 《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了
#京东满200—100单# 图书放血大卖了 <实战Java虚拟机>http://item.jd.com/11670385.html 参加京东满200减 100的大促,就在6.1这一天,仅此 ...
- $.ajax请求返回数据中status为200,回调的却是error?
$.ajax({ type:'get',//使用get方法访问后台 dataType:'json',//访问json格式的数据 url:'http://job.hainan.net/api/recru ...
- 常见HTTP状态码(200、301、302、500等)
HTTP状态码,它是用以表示网页服务器HTTP响应状态的3位数字代码.状态码的第一个数字代表了响应的五种状态之一. 1XX系列:指定客户端应相应的某些动作,代表请求已被接受,需要继续处理.由于 HTT ...
- http statusCode(状态码) 200、300、400、500序列
201-206都表示服务器成功处理了请求的状态代码,说明网页可以正常访问. 200(成功) 服务器已成功处理了请求.通常,这表示服务器提供了请求的网页. 201(已创建) ...
- 遭遇AutoMapper性能问题:映射200条数据比100条慢了近千倍
今天遇到了AutoMapper的一个性能问题,使用的是AutoMapper的Project特性,AutoMapper版本是3.3.0,代码如下: return await _repository .G ...
- 今天心情好,一起探讨下《送给大家的200兆SVN代码服务器》怎么管理我们的VS代码?
前几天给大家免费送了个200兆SVN代码服务器(今天心情好,给各位免费呈上200兆SVN代码服务器一枚,不谢!),还木有领取的速度戳链接哦! 好几位园友拿到SVN服务器都对其赞不绝口,我也用这个服务器 ...
- 写在MongoCola在Github上获得200个Star之后
MongoCola MongoCola是一个开源的MongoDB管理工具. 由于最初版本的设计失误,所以现在只能在Windows上使用,虽然可以在OSX上使用,但是非常别扭. 契机 MongoCola ...
随机推荐
- spring RestTemplate 出现 NoHttpResponseException 和 ConnectionTimeoutException
使用 httpclient.4.5.6 springboot 2.0.8RELEASE RetryExec.java CloseableHttpResponse execute() try { ret ...
- Laravel技巧集锦(16):使用DB::listen查找慢SQL
1.AppServiceProvider.php中 \DB::listen(function ($query){ $sql = $query->sql; $bindings = $query-& ...
- 1+X证书试题
2019年下半年Web前端开发中级理论考试 (考试时间9:00-11:30 共150分钟) 1. 本试卷共3道大题,满分100分. 一.单选题(每小题2分,共30小题,共60分) 1.在Bootstr ...
- 多个linux主机利用samba服务实现共享文件
工具:两台centos7虚拟机(其他版本也都支持) 安装包:samba(还有其他依赖包) samba-client 首先实现samba服务器配置 1.先安装samba包,系统自动会下载其他依赖包 2. ...
- 题解 【NOIP2016】组合数问题
[NOIP2016]组合数问题 Description Input 第一行有两个整数t, k,其中t代表该测试点总共有多少组测试数据,k的意义见[问题描述]. 接下来t行每行两个整数n, m,其中n, ...
- ip 转发(调度器的路由转发)
临时开启 [root@proxy ~]# echo > /proc/sys/net/ipv4/ip_forward 永久开启 [root@proxy ~]# vim /etc/sysctl.co ...
- 基于node.js的websocket 前后端交互小功能
一.node var ws = require("nodejs-websocket"); console.log("开始建立连接...") var server ...
- sql 为空不做查询条件
select * from usertable where 1=1 and (name=@name or @name='') and (page=@page or @page='')
- ubuntu安装扩展在phpinfo显示不出来的解决办法
在Ubuntu中使用apt-get安装了php扩展(比如redis.memcache.memcached等),在终端输入php -m是显示已加载,但是在phpinfo中无法显示,这个时候需要重启一下p ...
- JavaWeb-SpringBoot(抖音)_二、服务器间通讯
JavaWeb-SpringBoot(抖音)_一.抖音项目制作 传送门 JavaWeb-SpringBoot(抖音)_二.服务器间通讯 传送门 JavaWeb-SpringBoot(抖音)_三.抖音项 ...