首先安装,看看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)的更多相关文章

  1. iis6 服务器做301跳转返回状态码200解决方法。

    倘若你的配置和上图一样的话,在查询返回值是200的情况,你试着把你服务器上的安全狗或者防火墙,还有360网站卫士之类的安全软件停止试试,看是否能正常.

  2. AJAX回调函数,返回JSON格式,应该返回自定义状态STATUS,但是却返回200

    返回200应该是方法已经执行通的意思,但是没返回自定义的status,仔细一看json格式拼错了...

  3. [HTTP Protocol] 200 OK (from cache)和304 Not Modified

    含义 200 OK (from cache)直接从缓存中获取的内容并未请求服务器 304 Not Modified 请求服务器并和服务器比较 If-Modified-Since,若文件未改变,服务器返 ...

  4. 《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了

    #京东满200—100单# 图书放血大卖了 <实战Java虚拟机>http://item.jd.com/11670385.html 参加京东满200减 100的大促,就在6.1这一天,仅此 ...

  5. $.ajax请求返回数据中status为200,回调的却是error?

    $.ajax({ type:'get',//使用get方法访问后台 dataType:'json',//访问json格式的数据 url:'http://job.hainan.net/api/recru ...

  6. 常见HTTP状态码(200、301、302、500等)

    HTTP状态码,它是用以表示网页服务器HTTP响应状态的3位数字代码.状态码的第一个数字代表了响应的五种状态之一. 1XX系列:指定客户端应相应的某些动作,代表请求已被接受,需要继续处理.由于 HTT ...

  7. http statusCode(状态码) 200、300、400、500序列

    201-206都表示服务器成功处理了请求的状态代码,说明网页可以正常访问.        200(成功)  服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.        201(已创建) ...

  8. 遭遇AutoMapper性能问题:映射200条数据比100条慢了近千倍

    今天遇到了AutoMapper的一个性能问题,使用的是AutoMapper的Project特性,AutoMapper版本是3.3.0,代码如下: return await _repository .G ...

  9. 今天心情好,一起探讨下《送给大家的200兆SVN代码服务器》怎么管理我们的VS代码?

    前几天给大家免费送了个200兆SVN代码服务器(今天心情好,给各位免费呈上200兆SVN代码服务器一枚,不谢!),还木有领取的速度戳链接哦! 好几位园友拿到SVN服务器都对其赞不绝口,我也用这个服务器 ...

  10. 写在MongoCola在Github上获得200个Star之后

    MongoCola MongoCola是一个开源的MongoDB管理工具. 由于最初版本的设计失误,所以现在只能在Windows上使用,虽然可以在OSX上使用,但是非常别扭. 契机 MongoCola ...

随机推荐

  1. 不使用C库函数(Sprintf)将void* 指针转换为十六进制字符串

    #include <stdio.h> #include <stdint.h> #include <stdlib.h> void hexDump(void *ptr, ...

  2. macOS Mojave 10.14上安装iTunes12.6

    将一下内容保存为iTunes.scpt,并运行 set question to display dialog "确定是否删除 iTunes ?" buttons {"Ye ...

  3. 【Winform-自定义控件】一个自定义的进度条

    0.选择基类 public class MySlider : Control 1.设置控件的Style 在构造函数里添加: public MySlider() { //1.设置控件Style this ...

  4. Python 特点

    优点 简单 -- Python 是一种代表简单主义思想的语言.阅读一个良好的 Python 程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python 的这种伪代码本质是它最大的优点之一.它 ...

  5. Windows:打印为PDF(PDF转换器)

    造冰箱的大熊猫@cnblogs 2019/4/17 文中图片可通过点击鼠标右键查看大图 Windows下实现PDF打印的几个办法: 1.Foxit Reader(福昕PDF浏览器) 安装Foxit R ...

  6. Codeforces 1167 E Range Deleting 双指针+思维

    题意 给一个数列\(a​\),定义\(f(l,r)​\)为删除\(a​\)中所有满足\(l<=a_i<=r​\)的数后的数列,问有多少对\((l,r)​\),使\(f(l,r)​\)是一个 ...

  7. TensorFlow使用记录 (十四): Multi-task to MNIST + Fashion MNIST

    前言 后面工作中有个较重要的 task 是将 YOLOV3 目标检测和 LanNet 车道线检测和到一个网络中训练,特别的是,这两部分数据来自于不同的数据源.这和我之前在 caffe 环境下训练检测整 ...

  8. python如何实现一个类似重载的功能

    def post(): print("this is post") print("想不到吧") class Http(): @classmethod def g ...

  9. Solr 5.2.1 部署并索引Mysql数据库

    1.Solr简介 Solr是一个高性能,采用Java5开发,SolrSolr基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查 ...

  10. PHP ob_get_level嵌套输出缓冲

    PHP的输出缓存是可以嵌套的.用ob_get_level()就可以输出嵌套级别. 测试发现在cli和浏览器下输出结果不一样(PHP5.4). ob_level1.png手册说明如下: ob_get_l ...