首先安装,看看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. SpringMVC配置文件详解:<context:annotation-config/>和<context:component-scan base-package=""/>和<mvc:annotation-driven />

    原文地址:https://www.cnblogs.com/lcngu/p/5080702.html Spring配置文件详解:<context:annotation-config/>和&l ...

  2. top命令参数详解

    简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...

  3. .NET Core 3时代!如何使用DevExpress WPF创建应用

    DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...

  4. php类相关知识----类常量,静态变量

    类常量 <?php class myuser { ;//定义的常量不带$符号,常量之前没有访问修饰符,常量之前没有修饰符号 public function monolog() { echo &q ...

  5. WCF概述

    Tips:概念性的东西仅助理解,可以略过 概述 1.SOA概述 1).从三个问题开始 SOA是什么——面向服务架构.一种编程模式.一种架构模式.它将应用程序分成不同功能(服务)单元,再通过服务之间的接 ...

  6. electron-vue 引入OpenLayer 报错 Unexpected token export

    electron-vue 引入OpenLayer 报错 Unexpected token export 解决办法: 在 .electron-vue/webpack.renderer.config.js ...

  7. ON_WM_MOUSEWHEEL无响应

    问题:ON_WM_MOUSEWHEEL消息无响应 转动滚轮会导致Windows在有输入焦点的窗口(不是鼠标光标下面的窗口)产生WM_MOUSEWHEEL消息.所以当子窗口没有焦点的时候将收不到消息WM ...

  8. jquery scroll()方法 语法

    jquery scroll()方法 语法 作用:当用户滚动指定的元素时,会发生 scroll 事件.scroll 事件适用于所有可滚动的元素和 window 对象(浏览器窗口).scroll() 方法 ...

  9. php大文件传输断点续传源码

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...

  10. JQuery动画之淡入淡出动画

    1. 淡入动画 1.1 不带参数的淡入动画 格式: $(selector).fadeIn(); 示例代码: <!doctype html> <html lang="en&q ...