REVERSE-DAILY(5)-rev2
比较有意思的一道题目 提示是一个迷宫
链接: http://pan.baidu.com/s/1pLhINBt 密码:91bs
先运行程序,要求是输入字符串,错误会输出“Sorry you are wrong!”
先用ida载入,按程序运行流程首先会注意到_main_0函数,函数也与程序结构相符,但如果以此分析下去是错误的,
注意到ida中有如下结构:
v6 = ;
v5 = ;
v7 = / ;
printf("Please input your key:\n");
v7=0/0明显是错误的,会跳到SE处理程序,这一点可以在od中得到验证
如图下断点的话,程序在0x0040140d输出字符串“Please input......”,输入字符串后也不能停住,实际上是0/0出错后调到SE处理程序,根据上图可以看到0x004013ed处压入SE处理程序安装地址,最终程序跳到sub_401020函数运行。

分析sub_401020函数:
可以得到如下信息:
1.输入字符串长度为22
2.输入字符串每个字符为h,j,k,l中的一个
3.主结构是个大循环,依次逐位检查每一个输入字符
4.v4= "********* * ** * ** ** * ** ** * #* ** **** ** *********"
&v4=bp-c8
&v6=bp-88
&v5=bp-bf
初始时v3=&v5
5.主结构有四条分支,输入字符为h: v3--
j: v3+=8
k: v3-=8
l: v3++
6.对于v3 < &v4 || v3 > &v6判断条件,v4和v6分别是v4的上下界,这只是检查v3是否出界
7.对于 *v3 == 42是判断如果*v3为*则报错,
8.当字符为#时成功
所以思路即为由最初的v3通过运算到达#,这实际上就类似于走一个迷宫

迷宫如上图,第一个*即为v4起始点,最后一个空白格为v6检查点,第三行第一个空格为v3起始地址,
这样就容易得到了字符串:jjjjjlllllkkkkkhhhjjjl
REVERSE-DAILY(5)-rev2的更多相关文章
- HNU 13411 Reverse a Road II(最大流+BFS)经典
Reverse a Road II Time Limit: 10000ms, Special Time Limit:25000ms, Memory Limit:65536KB Total submit ...
- LeetCode 7. Reverse Integer
Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Have you ...
- 【uwp】浅谈China Daily 中划词翻译的实现
学习uwp开发也有一段时间了,最近上架了一个小应用(China Daily),现在准备将开发中所学到的一些东西拿出来跟大家分享交流一下. 先给出应用的下载链接:China Daily , 感兴趣的童鞋 ...
- js sort() reverse()
数组中存在的两个方法:sort()和reverse() 直接用sort(),如下: ,,,,,,,,,,,]; console.log(array.sort());ps:[0, 1, 2, 2, 29 ...
- [LeetCode] Reverse Vowels of a String 翻转字符串中的元音字母
Write a function that takes a string as input and reverse only the vowels of a string. Example 1:Giv ...
- [LeetCode] Reverse String 翻转字符串
Write a function that takes a string as input and returns the string reversed. Example: Given s = &q ...
- [LeetCode] Reverse Linked List 倒置链表
Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed either i ...
- [LeetCode] Reverse Bits 翻转位
Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...
- [LeetCode] Reverse Words in a String II 翻转字符串中的单词之二
Given an input string, reverse the string word by word. A word is defined as a sequence of non-space ...
- [LeetCode] Reverse Words in a String 翻转字符串中的单词
Given an input string, reverse the string word by word. For example, Given s = "the sky is blue ...
随机推荐
- spring使用Email邮件系统
1.提供邮件信息发送接收,附件绑定功能. 1.配置spring-email.xml文件 <context:property-placeholder location="classpat ...
- Jquery设置Cookie
jQuery代码: <script src="js/jquery-1.3.1.js" type="text/javascript"></scr ...
- 解决Strokeit在win8下的图标问题和开机启动问题
Strokeit目前和Windows 8有一点不兼容,就是运行之后,任务栏会有它的图标,看着很不爽,用兼容模式运行可解决这个问题,但是这样一来就不能开机自动运行了,本文主要解决这个问题. (参考资料 ...
- Reveal for mac延长30天试用的简单方法
在iOS逆向过程中经常使用Reveal来远程查看iOS平台应用的UI布局,但Reveal有30天使用限制,经常隔一段时间想使用的时候发现已经过期了,如图: 此时在OS X中打开命令行终端,输入以下命令 ...
- HTML标签-【fieldset】-fieldset
<fieldset style="width: 400px; height: auto; margin: 10px auto"> <legend>用户基本信 ...
- 记一次联想A820t救砖线刷
因为是看着教程刷的(有大神放出教程,只管伸手拿来就好啦)但是照着教程做的过程中出现了一些问题还是值得注意的,在这里总结一下,给新手提供一点建议 教程比较长,我放到博客的文件中,需要的自己下载一下.或者 ...
- Proxy Pattern(Java动态代理和cglib的实现)
代理模式:给某一个对象提供代理对象,由代理对象控制具体对象的引用. 代理,指的就是一个角色对表另一个角色采取行动,就生活中,一个红酒厂商,是不会直接把红酒零销给客户的,都是通过代理完成他的销售业务.而 ...
- Python future模块
今天看到了Pyhon中的模块__future__,查了一下资料,感觉这个module很有用. 从python2.1开始以后, 当一个新的语言特性首次出现在发行版中时候, 如果该新特性与以前旧版本pyt ...
- 用JS修改checkbox的选中状态
代码如下: <SCRIPT LANGUAGE="JavaScript"> <!-- function change() { var c=document.myfo ...
- python cmd下运行中文乱码 策略
如我运行一个脚本,执行后输出中文看不懂 然后呢在文件头加上 from __future__ import unicode_literals 注意:需要去掉所有字符串前的 u, 这样所有字符串均默认为u ...