比较有意思的一道题目  提示是一个迷宫

链接: 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

最新文章

  1. selenium自动化-java-封断言类2
  2. debian8 Apache 更改根目录
  3. Linux命令速查手册,超详细Linux命令教程
  4. Android系统中默认值的意义列表
  5. BZOJ4182 : Shopping
  6. WCF入门教程四[WCF的配置文件]
  7. 【英语】Bingo口语笔记(63) - 一个单词的多种发音
  8. 对frameset、frame、iframe的js操作
  9. HDU-4699 Editor 数据结构维护
  10. cocos2dx 资源合并.
  11. 怎么都没人提 google 加密搜索呢? google如何稳定打开
  12. js函数收藏:获取cookie值
  13. Hive 1、什么是Hive,Hive有什么用
  14. bzoj 2623 所罗门的咒语
  15. Java Arrays Tutorial (3)
  16. idea 远程调试
  17. DX11 Without DirectX SDK--02 渲染一个三角形
  18. jQuery(六)、事件
  19. mysql数据表的基本操作:表结构操作,字段操作
  20. Maven Archetype简介以及搭建

热门文章

  1. easy ui datagrid 让某行复选框不能选中
  2. CSS设置DIV背景色渐变
  3. 学习记录之APPCan
  4. outline使用方法,outline与border的区别:
  5. mpu
  6. Command Pattern 命令模式
  7. php基础_函数和类
  8. 主板BIOSCOMS故障解决三例
  9. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
  10. IIC总线解析