JG指令_JZ指令

JG指令_JZ指令逆向之旅001_攻防世界game写在前面攻防世界的第一题game第一步:运行这个exe使用IDA反编译总结写在前面这是我的第一篇博客,从大二开始接触网络安全的知识,现在已经大四了.回首过去,课外的实践主要是在跟着导师做态势感知的项目,从写爬虫到搭网站再到写定位算法再到去参加信安作品赛。。。。在这个过程中,我的正向开发能力确实提高了。但逆向作为网安人必不可少的能力,我之前没有花时间钻研过。目前掌握的关于逆向的基础知识都是在课堂上学到的,例如栈溢出,堆溢出,UAF,pe文件格式,代码保护技术,汇编语言,编译

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

写在前面

这是我的第一篇博客,从大二开始接触网络安全的知识,现在已经大四了.回首过去,课外的实践主要是在跟着导师做态势感知的项目,从写爬虫到搭网站再到写定位算法再到去参加信安作品赛。。。。在这个过程中,我的正向开发能力确实提高了。但逆向作为网安人必不可少的能力,我之前没有花时间钻研过。目前掌握的关于逆向的基础知识都是在课堂上学到的,例如栈溢出,堆溢出,UAF,pe文件格式,代码保护技术,汇编语言,编译和反编译原理等等等等,比较琐碎,而且没有去实践过,总觉得缺点什么。
因此从现在开始,我决定做ctf里的逆向题目,利用动手实践的过程来对已经学到的知识进行更深刻的理解,以及学习更多的知识,了解更多计算机底层的技术。我决定每做一个题后,就在csdn上记录一下过程以及感想,总结。借此也督促我要持之以恒。
只要现在开始,都不算晚!希望我能坚持下去,一步一步的往前走,从入门到发现其中的乐趣。
同时也跟大家分享一下我的思路,欢迎大家与我交流,我们一起共同进步。我的邮箱是 18029261561@163.com

攻防世界的第一题game

攻防世界的逆向第一题:game
链接:(https://adworld.xctf.org.cn/task/answer?type=reverse&number=4&grade=0&id=5074&page=1)

Jetbrains全家桶1年46,售后保障稳定

第一步:运行这个exe

在这里插入图片描述

翻译:玩游戏,n是灯的序列号,m是灯的状态,如果第n个灯的m是1,它就亮,如果不是,它就灭。
起初所有的灯都关了,现在你可以输入n来改变它的状态,
但是你要注意一件事,如果你改变第N个灯的状态,(N-1)th和(N+1)th的状态也会改变,
当所有灯都亮起时,将出现flag。
现在,输入n,n的值域是[1,8]

使用IDA反编译

第一步找主函数,在函数名列表中使用crtl+f,输入main,找到_main0_函数,然后fn+F5反编译,查看反编译的代码,如下图所示:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
结合第一步中,这个程序说的“当所有灯都亮起时,将出现flag。”以及代码中的第79行至88行,推断出第88行的函数,应该就是会生成flag的函数,所以我把这个函数命名为gen_flag,然后分析这个函数,还是定位到这个函数后,用f5反编译生成伪代码,这个函数的代码描述了一个生成flag的算法,可以使用python脚本复现这个算法然后得到flag。

但我有点不想算,于是我就换了个方法,可以看到_main0_函数的第77行,有个字符串“CLS”。
然后我用od打开这个exe,然后右键,选择超级字符串参考->1ASCII,然后查找“CLS”,(使用的快捷键是ctrl+F),然后点击这个字符串,从而会定位到这个字符串,如下图所示:
在这里插入图片描述
cls所在代码的后面紧跟了8个JNZ指令,JNZ指令是 结果不为零则转移,正好对应了ida中_main0_函数的第79-86行:
在这里插入图片描述
我们的目的是想让程序执行是生成flag的函数,所以我们要修改if里面的判断条件,让这个判断条件特别容易实现,那么我们就可以很快得到flag了,因此我们将这个判断条件改为:

if (        byte_532E28[0] == 1
      && byte_532E28[1] == 1
      && byte_532E28[2] == 1
      && byte_532E28[3] != 1
      && byte_532E28[4] != 1
      && byte_532E28[5] != 1
      && byte_532E28[6] != 1
      && byte_532E28[7] != 1 )

这样的话,我们再玩这个游戏时,只要输入2,就可以让1,2,3号灯亮,4~8号灯不亮,就跟这个判断条件对上了,然后程序就会执行后面的生成flag的代码了。
怎么改呢? 原来的代码中用的是JNZ,对应的是“==”,现在我们要反过来,JNZ反过来就是JZ,

JNZ是结果不为零则转移,对应的机器码为 0F85 或者 75
JZ是结果为零则转移    ,对应的机器码为0F84 或者 74

在这给个链接,是我从 吾爱激活成功教程论坛上找的,指令与其对应的机器码的手册:
提取码是heii
所以接下来使用od修改后面5个JNZ指令,修改方法我大概说一下:
1.鼠标指要修改的那一行代码处,然后右键,然后选择“复制到可执行文件”->选择。
2.会弹出来一个不同颜色的框,然后找到你要修改的代码处,然后ctrl+E,
3.把5个JNZ指令改完后,鼠标右键,选择“保存文件”,然后重新命个名字,于是就得到了一个修改后的exe文件。

我们用ida打开这个修改后的文件,反编译一下看一看我们的修改成功了没有,如下图:我成功了
在这里插入图片描述

然后运行这个修改后的exe,然后输入2,就得到flag了,如下图所示:

在这里插入图片描述
ps:我主要是在想记录做题时整体的思路,但是考虑到可能会有跟我一样的小白会看到这篇文章,所以我也写了一些具体的操作方法。
不过有些地方我写的还是不清楚,所以有疑问的同学可以留言我,或者发邮件。我会尽快回复你,咱们一起进步。

如果你觉得这篇文章对你有用或者觉得还可以,那就帮我点个赞吧,谢谢啦!

总结

1.使用ida进行反编译后,总是惯性的想搞清楚每一行代码,于是看了每一个函数,这样效率太低了。所以我觉得正确的做法是先看主函数,搞清楚程序的整个实现框架和流程,先从全局去把握这个程序,然后结合我们对这个程序的了解,来分析出对我们最重要的代码,然后再详细的对这一步分代码进行分析。
2.这是我的第一个逆向题目,要坚持下去,持之以恒,别忘了一万小时定律!!! 坚信只要坚持下去,就会有好的结果。
3.要用心去找去体会其中的乐趣! 乐趣可以帮助我坚持下去!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215923.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • deepfakes怎么用_deepfakes-FaceSwap使用笔记

    deepfakes怎么用_deepfakes-FaceSwap使用笔记安装过程需要魔法上网,有些包国内下载太慢了conda环境在AnacondaPrompt里,查看所有环境,两个命令都行condaenvlistcondainfo–envs查看安装的包condalist更换环境,前面的conda不写好像也行condaactivatefaceswap提示nomodulenamedcv2进入相应的环境,安装缺少的包condainstallope…

    2022年5月9日
    43
  • python-视频声音根据语音识别自动转为带时间的srt字幕文件

    python-视频声音根据语音识别自动转为带时间的srt字幕文件

    2021年5月17日
    284
  • android toast位置_android studio toast不显示

    android toast位置_android studio toast不显示关键词:Android,Appium,Python,Toast1、什么是toast?toast是一个浮动的显示块,在Android中主要用于提示信息,超时后退出,常用于提示一些不是那么重要的信息;如果是重要的信息,会使用notification。toast比较难定位,一来因为它时间很短,一般3秒左右;二来toast元素一般不写在XML中,代码中直接去调用。Toast.makeText(getApp…

    2022年9月13日
    0
  • msf 漏洞扫描_漏洞扫描方案

    msf 漏洞扫描_漏洞扫描方案目录1msfconsole介绍1msfconsole介绍msfconsole简称msf是一款常用的安全测试工具,包含了常见的漏洞利用模块和生成各种木马,其提供了一个一体化的集中控制台,通过msfconsole,你可以访问和使用所有的metaslopit插件,payload,利用模块,post模块等等。msfconsole还有第三方程序的接口,比如nmap、sqlmap等,可以直接在msfconsole里面使用。kali可直接在命令使用:msfconsoleMsfconsole的系统

    2022年9月4日
    2
  • 费曼技巧学习

    费曼技巧学习关于费曼技巧现学现用的文章,还提到了两个小投入、大回报的学习方法:预习和自测。

    2022年5月3日
    39
  • Linux sleep命令[通俗易懂]

    Linux sleep命令[通俗易懂]Linuxsleep命令可以用来将目前动作延迟一段时间。使用权限:所有使用者。语法参数说明:–help:显示辅助讯息–version:显示版本编号number:时间长度,

    2022年7月1日
    20

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号