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


相关推荐

  • matlab si单位,ansys中的单位问题

    matlab si单位,ansys中的单位问题关于ansys中的单位问题ansys中没有单位的概念,只要统一就行了。所以,很多人在使用时,不知道该统一用什么单位,用错单位造成分析结果严重失真!今综合相关资料,整理如下:一、在ansys经典中,的确没有单位区别,关键要看你的模型以什么样的单位去建,当然,对应的材料属性(杨氏模量,密度等)也要以你所建模型的单位去对应,着重需要注意的是在把模型由cad软件导入ansys中时,注意单位的对应就可以,当…

    2022年5月14日
    39
  • 串口服务器调试助手使用教程,comassistant串口调试助手使用说明.pdf

    串口服务器调试助手使用教程,comassistant串口调试助手使用说明.pdf作者:温子祺wenziqi@wenziqi@单片机多功能调试助手简介单片机多功能调试助手简介单单片片机机多多功功能能调调试试助助手手简简介介1111简介图1单片机多功能调试助手单片机多功能调试助手一款集串口/USB/网络调试、进制转换、字模与数码管字型码制作、常用校验值计算、UNICODE码转换、位图输出C文件等众多功能于一身的综合型调试软件,最值得庆幸的是该软件会一直保持更新,并支持在…

    2022年6月12日
    30
  • linux密码记录木马,注意 “QQ大盗”木马注入 QQ 进程记录QQ账号与密码[通俗易懂]

    linux密码记录木马,注意 “QQ大盗”木马注入 QQ 进程记录QQ账号与密码[通俗易懂]“QQ大盗”变种AC(Win32.PSWTroj.QQPass.ac)是一个盗取QQ账号和密码的木马病毒。“网游追击者”变种CD(Win32.Troj.LipGame.cd)是一个盗取多个网络游戏账号的木马病毒。一、“QQ大盗”变种AC(Win32.PSWTroj.QQPass.ac)威胁级别:★该病毒是一个盗号木马,它会潜伏在受感染的电脑系统里,监视并伺机注入到QQ进程里,创建信息勾子,记录用…

    2022年7月20日
    38
  • 2020手机的像素密度ppi排行_5g手机排行榜最新2020年11月5g手机性价比排行榜

    2020手机的像素密度ppi排行_5g手机排行榜最新2020年11月5g手机性价比排行榜注:本文转载自网络,不代表本平台立场,仅供读者参考,著作权属归原创者所有。我们分享此文出于传播更多资讯之目的。如有侵权,请在后台留言联系我们进行删除,谢谢!相信对很多朋友们来说,一款好用的5G智能手机是非常值得入手的,小编为大家带来最新的20年11月值得购买的性价比5G手机榜单,相信会给您更好的手机选购指导,为你带来更好的智能生活体验,有喜欢的朋友们一起来看看吧。1、一加8Pro性能一…

    2022年5月8日
    165
  • amazement的用法_release的用法

    amazement的用法_release的用法Mutex中提供了WiteOne,ReleaseMutex两个实例方法~WiteOne的作用是”阻塞当前线程,提供对该线程的原子操作”也就是说当一个线程遇到WiteOne的时候,如果在WiteOne里面没有线程在操作,则此线程进去操作而里面有线程的时候,所有到此的线程均需要排队等候里面的线程执行完毕~而控制这样操作的结束标记就是使用ReleaseMutex方法!就好比WiteO…

    2022年4月19日
    50
  • 获取impala下所有的数据库建表语句

    获取impala下所有的数据库建表语句本博文介绍三种方法,推荐使用第三种,前两种都是尝试。方法一:现在的导出还是有缺陷的,导出的文件中还是存在其他不必要的信息#!/bin/bash##获取数据库databases=$(hive-e”showdatabases;exit;”)fordatabasein$databases;do#获取hive建表语句tables=$(hive-e”use$database;showtables;”)for…

    2022年9月7日
    0

发表回复

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

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