1.本次报告针对扫雷游戏,分析“初级”,“中级”,“高级”的棋盘内存地址范围

2.找出“雷数”,“笑脸”,“计时器”的内存地址

3.分析地雷存放的算法

4.利用思维导图分析“扫雷”游戏软件的工作原理

1.分析“初级”,“中级”,“高级”的棋盘内存地址范围

1.1内存地址范围:

根据一般步骤将进程导入CE,点击扫雷棋盘上到左上角第一个值(多次尝试,最好是位数字),然后在CE中进行内存扫描(由于不知道数字1在内存中的存放格式,所以需要进行模糊搜索),先选择未知初始值和字节选项;然后进行首次扫描,实验结果有很多,重置游戏点击笑脸后再点击棋盘第一个格子,如果数字与第一次扫描时的数字相同则选择未变动的值进行再次扫描,如果不同,则选择变动的值进行再次扫描,发现结果会变少,不断地重置游戏,重复上述步骤,直到找到对应的内存地址,将其放入地址栏点击进行查看,浏览其对应的内存地址范围;再通过点击最后一个格子找到相应的内存地址,与第一次扫描结果一起分析之后,即可得出结论。

1.1.2“初级”棋盘内存地址范围:

扫描类型 选择未知的初始值,点击初级棋盘上第一格,进行首次扫描

重置棋盘,点击第一格,如果与第一次扫描的值相同,扫描类型选择变动的数值 然后进行再次扫描

重置棋盘,点击第一格,如果与第一次扫描的值不同,扫描类型选择变动的数值 然后进行再次扫描

重复进行上述操作,直到出现基址

初级棋盘内存起始地址:01005361

同理可得:点击最后一个格子找到相应的内存地址初级棋盘内存最终地址:01005469

所以初级棋盘内存地址范围:01005361-01005469

1.1.3“中级”棋盘内存地址范围:中级棋盘内存起始地址:01005361中级棋盘内存最终地址:01005550

所以中级棋盘内存地址范围:01005361-01005550

1.1.3“高级”棋盘内存地址范围:高级棋盘内存起始地址:01005361高级棋盘内存最终地址:0100555E

所以高级棋盘内存地址范围:01005361-0100555E

2.2找出“雷数”,“笑脸”,“计时器”的内存地址

2.2.1关键值地址查找

扫雷游戏主要包括时间,地雷数以及笑脸等关键值。

接下来详细分析寻找地雷内存地址的具体过程,同2.1一样将游戏进程导入CE软件后,与其不同的是寻找地雷数是已知数值,通过精确查找例如高级棋盘的99地雷数,进行首次扫描会出现很多数值,难以判断,由于地雷数与标记棋子数是一样的数值,我们可以通过标记地雷数来确定扫描类型,首先我们随意标记一处棋子会发现地雷数也会少一,通过精确查找98数字,可以扫描出一部分地址,如此重复知道地址栏里只剩下一个地址,并且会观察到该数值与地雷数是一样的,由此便找出了地雷数所在的地址,将其放入下方地址栏后我们可以通过修改特征值来使自己获胜,例如可以修改为一,可以达到一击必胜的效果。

查找时间的地址范围,一开始是0,我们可以通过精确值查找来锁定时间的范围,第一次扫描之后,时间会一直改变通过选择变动的数值进行再次扫描,在此过程中不必点击任何动作,因为其他数值不变,只有时间不停的改变点击变动的值进行再次扫描可以快速定位地址,由此就找到了时间的内存地址。

2.2.2雷数的内存地址

扫描类型选择精确数值数值类型选择字节,先找初级棋盘的雷数,输入10进行首次扫描我们可以先插入一个旗子,旗子数就会变成9.进行再次扫描,该地址是旗子的地址01005194------------------------------------------------------------------------------------------------------------

首先我们先用初级棋盘精确搜索10,然后切换成中级棋盘精确搜索40,再次扫描,首先排除旗子的基址。然后将剩下两个地址改成1,之后重新开始游戏,如果可以直接过关,则该地址为雷数的基址。

所以雷数的内存地址是:010056A4

2.2.3笑脸的内存地址

首先通过扫描未知的初始值,如果没有遇上炸弹,就扫描未变动的数值再次扫描,如果遇上炸弹就扫描变动的数值再次扫描,如果游戏结束即笑脸,数值也会发生变化。  所以笑脸的内存地址是:01005160

2.2.4计时器的内存地址

首次扫描类型选择未知的初始值 然后开始游戏,时间逐渐增加,扫描类型切换为 变动的数值 进行多次扫描,发现计时器的基址所以计时器的内存地址是:01005794

2.3分析地雷存放的算法

扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷。

现在出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。

注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。

Input

第一行包含两个整数n和m,分别表示雷区的行数和列数。接下来n行,每行m个字符,‘*’表示相应格子中是地雷,‘?’表示相应格子中无地雷。字符之间无任何分隔符。

Output

n行,每行m个字符,描述整个雷区。若相应格中是地雷,则用‘*’表示,否则用相应的周围格地雷数表示。字符之间无任何分隔符。

Hint算法思想

借用两个数组,一个字符数组a存放起字符,一个int型数组b存放数字,起始初始化为0。判断a中哪个位置是否有雷,如果有将b中对应位置的相邻八个位置的数据加1。

由于输入时需要输入空格,所有提前输入一个字符t,刚好在后面位置与输入的空格 “抵消” 掉,当然少输入一个字符,最后还要在输入一个字符t

#include<stdio.h>

int b[101][101]={0};

char a[101][101],t;

int main()

{

int n,m;

int i,j,i1,i2,j1,j2;

scanf("%d %d",&n,&m);

scanf("%c",&t); //先输入一个字符,正好把后面敲的空格给填上

for(i=1;i<=n;i++)

{

for(j=1;j<=m;j++)

{

scanf("%c",&a[i][j]);

if(a[i][j]=='*')

{

//有*在b数组中对应相邻八个位置各加1

i1=i-1;

i2=i+1;

j1=j-1;

j2=j+1;

b[i1][j1]++;

b[i1][j2]++;

b[i1][j]++;

b[i2][j1]++;

b[i2][j2]++;

b[i2][j]++;

b[i][j1]++;

b[i][j2]++;

}

}

scanf("%c",&t); //由于空格的原因少输入一个字符,最后再补上

}

for(i=1;i<=n;i++)

{

for(j=1;j<=m;j++)

{

if(a[i][j]=='*')

printf("%c",a[i][j]);

else

printf("%d",b[i][j]);

}

putchar('\n');

}

return 0;

}

2.4利用思维导图分析“扫雷”游戏软件的工作原理(设计原理)

2.5分析结论

 在本次逆向分析报告中,我们通过CE软件逆向分析,从而定位了初级中级高级各个棋盘的地址内存范围,并且通过该软件成功定位并修改了关键数值以帮助自己在最短的时间内获胜,在最后一部分通过查阅相关资料以及搜索浏览相关文献分析扫雷游戏的C语言代码,最后完成其设计导图。

在此次过程当中查阅了大量的文献资料,对于逆向分析技术有了更深的领悟同时对于相关软件技术更深刻地掌握,最难的部分应该是最后一部分对于个人能力要求较高参考了很多资料才得以完成。这次独立写本次逆向分析报告在过程中克服了很多困难,同时增强了自己写报告的能力并且对于学习过的知识有了更深的掌握。

零基础学CE,手把手教程!!!(软件逆向进阶篇)相关推荐

  1. 零基础学前端系列教程 | 和前端谈恋爱的第006天——了解喜好

    温馨提示:被[]包裹的是专有名词,详细介绍见下文的恋爱宝典,你可以在目录中快速找到它们,有任何问题/建议,欢迎随时微信我,我是朝阳 13908056224! 这是姐姐传授给我的恋爱秘籍 -- 投其所好 ...

  2. python零基础入门教程视频下载-零基础学Python入门教程,视频资源下载

    课程名称 零基础学Python入门教程,视频资源下载 课程目录 第一章 :Python介绍和安装 01.Python语言的特点 02.Python的发展历史与版本 03.Python的安装 第二章 : ...

  3. 零基础学前端系列教程 | 和前端谈恋爱的第003天——电影海报

    温馨提示:被[]包裹的是专有名词,详细介绍见下文的恋爱宝典,你可以在目录中快速找到它们,有任何问题/建议,欢迎随时微信我,我是朝阳 13908056224! 约会邀请函已经做好了,但迟迟没有发出去 零 ...

  4. 零基础写Java知乎爬虫之进阶篇

    转载自 零基础写Java知乎爬虫之进阶篇 前面几篇文章,我们都是简单的实现了java爬虫抓取内容的问题,那么如果遇到复杂情况,我们还能继续那么做吗?答案当然是否定的,之前的仅仅是入门篇,都是些基础知识 ...

  5. 零基础学Arcgis系列教程

    教程地址:点击查看 零基础学Arcgis(七)|空间数据采集与管理(4)数据检查 (一)创建地理数据库拓扑 1.创建地理数- 零基础学Arcgis(六)|空间数据采集与管理(3)数据编辑 (一)使用要 ...

  6. 零基础学python-Python入门教程完整版(懂中文就能学会)

    提取码:sjfo 目录大纲: 本套教程15天 学前环境搭建 1-3 天内容为Linux基础命令 4-13 天内容为Python基础教程 14-15 天内容为 飞机大战项目演练 视频概括: 第一阶段(1 ...

  7. 零基础学图形操作机器视觉软件SGVision

     软件特点: 零基础,免编程设置即用 内置数百种算法,能满足各种机器视觉应用需求,适用于检测.识别.测量,定位等方面. 选择算法,设置参数即可实现快速的检测数值.结果.用时 系统框架: 测量 SGVi ...

  8. 零基础学Python入门教程非常详细(从小白到高级)

    目录:基础 第一章-第五章(5.1-5.4):简介.配置与基础知识 第六章:判断语句 第一章:Python的概述 1.1:什么是Python? Python它是一种直译式,面向对象,解释式的脚本语言. ...

  9. java 进阶 知乎_(二)零基础写Java知乎爬虫之进阶篇

    转自:https://www..com/shirui/p/5137238.html 说到爬虫,使用Java本身自带的URLConnection可以实现一些基本的抓取页面的功能,但是对于一些比较高级的功 ...

最新文章

  1. php图片生成缩略图_PHP实现生成图片缩略图函数
  2. P678-vect2.cpp
  3. 移除html,jsp中的元素
  4. 吓人!深夜悄悄上街扫地!
  5. python将mat文件转为png
  6. virtualbox ,centos 的多网卡如何设置
  7. Oracle 使用GSON库解析复杂json串
  8. linux awk搜索文本最后个字符串,[转载]linux下的文本处理命令sedawkgrep
  9. 计算机安全防范系统维护,安防系统维护与设备维修(全彩)
  10. iOS网络编程实践--蓝牙对等网络通信实例讲解
  11. ViewFlipper(翻转视图)使用详解
  12. Android Effect 解析
  13. Ubuntu 12.04 设置终端字体为文泉驿(转载)
  14. 古典密码及现代密码分组密码与流密码总结
  15. 基于深度学习的自然场景文字识别系统研究 faster-RCNN + CRNN (二)
  16. LibreOffice/Calc:单元格设置下拉菜单
  17. DNA序列编码中Hairpin的定义和计算
  18. 全能生态(ARET)令项目介绍
  19. 比较不错的资源搜索网站
  20. 软件设计的不同模型:瀑布式、快速原型法、迭代式(敏捷)

热门文章

  1. 24岁女生学java是否晚了?
  2. FFmpeg3最新的解码接口avcodec_send_packet和avcodec_receive_frame
  3. 分布式消息通信 ActiveMQ 原理 分析二
  4. 【PLA】【pocket算法】
  5. 用python画多个圆_Python用图例在网格上绘制多个圆
  6. OBIEE利用全局临时表开发复杂报表
  7. 看《狂飙》读人生,致敬2023!
  8. 做技术真的有出路吗?
  9. 强化学习中好奇心机制
  10. Linux CentOS7 笔记