攻防世界逆向高手题之dmd-50

继续开启全栈梦想之逆向之旅~
这题是攻防世界逆向高手题的dmd-50

下载附件,照例扔入exeinfope中查看信息:

64位ELF文件,无壳,照例扔入IDA64位中查看伪代码,有main函数看main函数:

看到一堆变量,一堆系统函数,我知道系统函数通常不是考点,可这系统函数多到我都差点找不到主要代码:

突然看见字符串Enter the valid key!\n 猜测题型是与用户输入相关的判断型flag。
代码分析:

  v43 = __readfsqword(0x28u);           //一个内存段偏移,无用std::operator<<<std::char_traits<char>>(&std::cout, "Enter the valid key!\n", envp);std::operator>><char,std::char_traits<char>>(&edata, v42);std::allocator<char>::allocator(&v38);std::string::string(v39, v42, &v38);                 // v42 输入复制给 v39。这里借鉴了别人的博客,这里犯下第一个错误,因为系统函数太多了,我也就只注意到了下面的md5,没去查这个函数用法,结果这个函数是赋值函数,也是关键md5((MD5 *)v40, (const std::string *)v39);           //一个md5加密函数, 把 v39 进行 MD5 后保存在 v40,我记得C语言没有md5函数的,这里可能是调用了外部的库函数v41 = std::string::c_str((std::string *)v40);std::string::~string((std::string *)v40);std::string::~string((std::string *)v39);std::allocator<char>::~allocator(&v38);

继续分析判断语句:

  if ( *(_WORD *)v41 == 0x3837     //这里犯下第二个错误,这里本来是14390的整数的,这里类型是16位WORD,后面都是8位的BYTE,也就是这里应该分出一个*(_BYTE *)v41和*(_BYTE *)(v41 + 1)的,可是我不会分,想起数在内存中是小端的十六进制数,就改为了十六进制,那么前面(_BYTE *)v41就是0x37,后面*(_BYTE *)(v41 + 1)就是0x38了。&& *(_BYTE *)(v41 + 2) == 0x30&& *(_BYTE *)(v41 + 3) == 0x34&& *(_BYTE *)(v41 + 4) == 0x33&& *(_BYTE *)(v41 + 5) == 0x38&& *(_BYTE *)(v41 + 6) == 0x64&& *(_BYTE *)(v41 + 7) == 0x35&& *(_BYTE *)(v41 + 8) == 0x62&& *(_BYTE *)(v41 + 9) == 0x36&& *(_BYTE *)(v41 + 10) == 0x65&& *(_BYTE *)(v41 + 11) == 0x32&& *(_BYTE *)(v41 + 12) == 0x39&& *(_BYTE *)(v41 + 13) == 0x64&& *(_BYTE *)(v41 + 14) == 0x62&& *(_BYTE *)(v41 + 15) == 0x30&& *(_BYTE *)(v41 + 16) == 0x38&& *(_BYTE *)(v41 + 17) == 0x39&& *(_BYTE *)(v41 + 18) == 0x38&& *(_BYTE *)(v41 + 19) == 0x62&& *(_BYTE *)(v41 + 20) == 0x63&& *(_BYTE *)(v41 + 21) == 0x34&& *(_BYTE *)(v41 + 22) == 0x66&& *(_BYTE *)(v41 + 23) == 0x30&& *(_BYTE *)(v41 + 24) == 0x32&& *(_BYTE *)(v41 + 25) == 0x32&& *(_BYTE *)(v41 + 26) == 0x35&& *(_BYTE *)(v41 + 27) == 0x39&& *(_BYTE *)(v41 + 28) == 0x33&& *(_BYTE *)(v41 + 29) == 0x35&& *(_BYTE *)(v41 + 30) == 0x63&& *(_BYTE *)(v41 + 31) == 0x30 )

后面判断后的结果按照以前经验转成ASCII字符,发现都是成功失败类的字符串,那这里的系统函数作用应该只是简单的赋值和输出吧,就不用深究了:

所以思路清晰了,对用户输入进行md5加密后一位一位比较,那么我们用md5后的值在在线工具中反向解密即可。
脚本:

key1=[0x37,0x38,0x30,0x34,0x33,0x38,0x64,0x35,0x62,0x36,0x65,0x32,0x39,0x64,0x62,0x30,0x38,0x39,0x38,0x62,0x63,0x34,0x66,0x30,0x32,0x32,0x35,0x39,0x33,0x35,0x63,0x30]
md=""
for i in key1:md+=chr(i)
print(len(md))
print(md)

md5结果:

在线解密网址:

https://www.cmd5.com/

额,我们不需要两次解密,一次就可以了,所以对grape再加密一次:

结果:b781cbb29054db12f88f08c6e161c199




PS:我在修改14390整数时突然发现我的IDA7.5有撤销功能!!(狂喜.jpg),快捷键一样是Ctrl+Z:

看见没,这里有个undo,是撤销!!太棒了!,不知道是那一版本IDA开始新增的功能!



总结:

1:
这里犯下第一个错误,因为系统函数太多了,我也就只注意到了下面的md5,没去查这个函数用法,结果这个函数是赋值函数,也是关键。

2:
这里犯下第二个错误,这里本来是14390的整数的,这里类型是16位WORD,后面都是8位的BYTE,也就是这里应该分出一个*(_BYTE
)v41和(_BYTE *)(v41 + 1)的,可是我不会分,想起数在内存中是小端的十六进制数,就改为了十六进制,那么前面(_BYTE )v41就是0x37,后面(_BYTE *)(v41 + 1)就是0x38了。

解毕!敬礼!

攻防世界逆向高手题之dmd-50相关推荐

  1. 攻防世界逆向高手题之reverse-for-the-holy-grail-350

    攻防世界逆向高手题之reverse-for-the-holy-grail-350 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向高手题的reverse-for-the-holy-grail-350 ...

  2. 攻防世界逆向高手题之re2-cpp-is-awesome

    攻防世界逆向高手题之re2-cpp-is-awesome 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向高手题的re2-cpp-is-awesome 下载附件,照例扔入exeinfope中查看信息: ...

  3. 攻防世界逆向高手题之re5-packed-movement

    攻防世界逆向高手题之re5-packed-movement 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向高手题的re5-packed-movement 下载附件,照例扔入exeinfope中查看信 ...

  4. 攻防世界逆向高手题之Guess-the-Number

    攻防世界逆向高手题之Guess-the-Number 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向高手题的Guess-the-Number 下载了一个jar文件,根据题目描述猜个数字然后找到fla ...

  5. 攻防世界逆向高手题的key

    攻防世界逆向高手题之key 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向高手题的key . . (这里积累第一个经验) 这道题,嗯~搞了好久,主要是我的IDA是7.5版本的,其他博客上的大多都是7 ...

  6. 攻防世界逆向高手题之EasyRE

    攻防世界逆向高手题之EasyRE 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向高手题的EasyRE 下载附件,照例扔入exeinfope中查看信息: 64位ELF文件,无壳,照例扔入IDA64中查 ...

  7. 攻防世界逆向高手题之handcrafted-pyc

    攻防世界逆向高手题之handcrafted-pyc 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向高手题的handcrafted-pyc . . 下载附件,照例扔入exeinfope中查看信息: . ...

  8. 攻防世界crypto高手题之best_rsa

    攻防世界crypto高手题之best_rsa 继续开启全栈梦想之逆向之旅~ 这题是攻防世界crypto高手题的best_rsa . . 下载题目,是一个明文和密钥的4个附件: . . 其实一开始我并不 ...

  9. 攻防世界crypto高手题之sherlock

    攻防世界crypto高手题之sherlock 继续开启全栈梦想之逆向之旅~ 这题是攻防世界crypto高手题的sherlock . . (这里积累第一个经验) 下载附件,是一个txt文档,内容是一篇小 ...

最新文章

  1. 什么是拜占庭将军问题
  2. 深入理解RocketMQ:Consumer消费消息原理
  3. 大家看看这个参数inctype你是否使用过?我做了以下测试,欢迎拍砖!
  4. SQL Server R2 地图报表制作(五)
  5. java bean 工厂模式_通过annotation(注解)实现BeanFactory工厂模式(三)
  6. Postgres 9.2.4的升级方案与步骤
  7. java图片上传及图片回显1
  8. 机器学习到底能替人干哪些工作?《科学》列出了8条评估标准
  9. 为自己编写的windows应用程序制作安装包
  10. 第12课:HA下的Spark集群工作机制解密
  11. V-5-4 配置Horizon View Server
  12. [公告]新增项目交流区
  13. 金蝶eas怎么引出凭证_金蝶专业版如何引入引出凭证
  14. ping命令显示时间
  15. 金蝶K/3 ERP 基于Citrix Access Gateway 的SSL ××× 部署方案
  16. xcode9创建git分支
  17. 微信公众平台针对欺诈等违规行为处理结果公示
  18. 工业4.0 资产管理壳学习笔记( 6)-管理壳细节
  19. express 4.x API 及简单示例
  20. Linux虚拟机系统安装步骤

热门文章

  1. 看完了 vue-cli 源码,总结了这几个点
  2. 浅谈量子量化股票交易的基本原理
  3. 做DSP最应该懂得157个问题
  4. 3G网络实际使用测试情况
  5. 最大堆和最小堆(数据结构)
  6. Java新手小白入门篇 Java项目的构建
  7. centos7查看oracle监听端口,CentOS 7开放及查看防火墙firewall的端口
  8. 对梯度幅值进行非极大值抑制
  9. 认认真真推荐几个Python、统计学、算法、机器学习...等方向的公众号
  10. wps在线预览接口_文档在线预览的实现