首页 > 技术文章 > Bugku-CTF逆向篇之Easy_Re

0yst3r-2046 2020-05-25 17:11 原文

Easy_Re

 
 
本题要点: ExeinfoPE查壳、IDA静态调试、OD动态调试、jnz指令
 
 
下载这个exe文件~
 
 
cmd里面运行一下这个程序,随便输一下flag,错误,然后结束了......
 
 
emmm.....老办法,先去查查有没有壳吧~
 
 
我们可以看到这个程序是 Visual C++ 编写的,因此没有壳。
 
放到 IDA 里看看~
 
emmm.....没有main函数........
 
经笔者查阅资料,发现没有 main函数 也是正常的,因为:
-------------------------------------------------------------------------
我们平时接触VC++的时候,第一个接触到的恐怕是WinMain和main,对应于Win32子系统的Windows窗口系统和控制台两个部分,最多是一些书籍上谈到了对应多字节字符集的几个变种。
其实,这几个入口点函数是VC++带有的C运行库要求的入口点。
真正的vc程序的入口点函数是在使用VC++的C编译器编译程序时指定的。
-------------------------------------------------------------------------
 
 
那么这么多指令应该怎么看呢,还记得我们运行之后的提示吗?
 
 
那肯定程序里面存在这些字符串,我们直接搜索这些字符串,就能定位到程序运行的情况啦~
 
 
 
定位到了~
 
看一下前后的指令和解释,我们发现有一串比较长的数据字符串,
 
 
 
选中 3074656D30633165577B465443545544h 这个变量,然后在键盘上按  a  ,就可以显示字符串~
 
 
看到flag啦~
 
 
 
当然我们也可以放进 OD 里面看看~
 
方法1:
我们在插件里的 中文搜索引擎=》智能搜索
 
 
方法2:
 
中文搜索引擎=》选择   搜索ASCII
 
其实这里也能看到flag啦~
 
但是我们还是学一下怎么判断flag提交正确的指令吧~
 
  jnz指令 ( 判断是否是正确的标志)
 
双击定位为 flag get  的地方。
 
 
进去我们可以看到 jnz指令 , 在这里下一个断点(键盘上按f2)。如果它跳转会跳转到下面,显示flag不太对,不跳转就会显示出flag get。
 
在调试过程中,注意 寄存器窗口 的变化~
 
 
 
 
在键盘上按 f9 ,开始调试
 
 
在窗口随便输一些字符串
 
 
接着 f8 单步运行一下
 
 
直接跳在 flag不太对哟 这一句
 
看一下右边的寄存器窗口~
 
 

 

 

 
 flag:  DUTCTF{We1c0met0DUTCTF} 
 
 
 
完成~
 
 
 
 
 
 
参考资料:
 
https://blog.csdn.net/iteye_3759/article/details/81593120
https://blog.csdn.net/qq_38796701/article/details/80491298
 
 

推荐阅读