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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库设计-简化字典表[通俗易懂]

    开发工具与关键技术:工具:SQLServer2014ManagementStudio作者:范子超 撰写时间:2019-03-29  在进行数据库设计时,我们经常会遇到各种各样的业务需求,从而设计出各种各样的表。而想要做好一个数据库,不但需要前期对各种业务需求的深度理解,还需要在后期项目完善的过程中对数据库更新修改从而使得数据库设计的越发完美。  对于那些涉及到业务的表或许不太好入…

    2022年4月9日
    144
  • 全面理解Java内存模型(JMM)及volatile关键字[通俗易懂]

    全面理解Java内存模型(JMM)及volatile关键字[通俗易懂]【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)http://blog.csdn.net/javazejian/article/details/72772461出自【zejian的博客】关联文章:深入理解Java类型信息(Class对象)与反射机制深入理解Java枚举类型(enum)深入理解Java注解类型(@Annotation)深…

    2022年6月7日
    53
  • 解决spark日志清理问题

    解决spark日志清理问题

    2021年11月27日
    178
  • 2020最新阿里美团Java面经

    小弟是97年出生,专科18年毕业,专升本在读。工作时间总计2年半2019年12月30号投了几个简历,收到了杭州阿里和北京美团的面邀阿里,31号电面,2020年元旦中午1点在线编程。最后挂了,面试官大哥说等我工作满三年再捞我北京美团2020年1月2号现场面,技术面过了,最后因为学历是大专遗憾离场接下来的面经将合并两场面试的问题,如果有都问到的会在问题后面标记(double)多线程死锁的条…

    2022年4月12日
    45
  • 深入理解JVM内存分配策略

    深入理解JVM内存分配策略理解JVM内存分配策略三大原则+担保机制JVM分配内存机制有三大原则和担保机制具体如下所示:优先分配到eden区 大对象,直接进入到老年代 长期存活的对象分配到老年代 空间分配担保对象优先在Eden上分配如何验证对象优先在Eden上分配呢,我们进行如下实验。打印内存分配信息首先代码如下所示:publicclassA{publicst…

    2022年5月14日
    43
  • PhpSpreadsheet_phpquery手册

    PhpSpreadsheet_phpquery手册phpexcel导出PhpSpreadsheet详解引入正确的文件并实例化usePhpOffice\PhpSpreadsheet\Spreadsheet;$spreadsheet=newSpreadsheet();$worksheet=$spreadsheet->getActiveSheet();赋值//给A2赋值hello$worksheet->…

    2022年9月17日
    3

发表回复

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

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