[re]符号执行一把梭:2020网鼎杯青龙组re_signal_wp

这道题是2020网鼎杯青龙组的一道逆向提signal,一道虚拟机逆向题目,题目本身不难,可以直接分析也可以符号执行秒掉。

题目分析

正常windows逆向,开局直接输flag,也不多bibi:

逆向分析程序:

程序开始将全局变量区的opcode作为参数给vm_operad函数,看名字也能看出是一个虚拟机分析的题目,先把opcode提取出来:

\x0A \x04 \x10 \x08 \x03 \x05 \x01 \x04 \x20 \x08 \x05 \x03 \x01 \x03 \x02 \x08
\x0B \x01 \x0C \x08 \x04 \x04 \x01 \x05 \x03 \x08 \x03 \x21 \x01 \x0B \x08 \x0B
\x01 \x04 \x09 \x08 \x03 \x20 \x01 \x02 \x51 \x08 \x04 \x24 \x01 \x0C \x08 \x0B
\x01 \x05 \x02 \x08 \x02 \x25 \x01 \x02 \x36 \x08 \x04 \x41 \x01 \x02 \x20 \x08
\x05 \x01 \x01 \x05 \x03 \x08 \x02 \x25 \x01 \x04 \x09 \x08 \x03 \x20 \x01 \x02
\x41 \x08 \x0C \x01 \x07 \x22 \x07 \x3F \x07 \x34 \x07 \x32 \x07 \x72 \x07 \x33
\x07 \x18 \x07 \xA7 \x07 \x31 \x07 \xF1 \x07 \x28 \x07 \x84 \x07 \xC1 \x07 \x1E
\x07 \x7A

然后查看行为,顺便给变量改个名:

一般vm的题目就是一个大的switch,根据分析把操作整理出来,有的操作,如加法,需要一个立即数参与,然后数组下标有好几个变量,我这里通用i表示了(实际做题不用这么细致。。):

01    :result[i]=temp
02 imm:temp=input[i]+imm
03 imm:temp=input[i]-imm
04 imm:temp=input[i]^imm
05 imm:temp=input[i]*imm
06    :i++
07 imm:result[i]==imm
08    :imput[i]=temp
0A    :input 输入字符串
0B    :temp=input[i]--
0C    :temp=input[i]++

可以看到opcode最后也是一堆0x7,说明是最后校验flag.

手动解题

flag不长可以直接手动恢复:

input[0]^0x10-0x05=0x22    input[0]='7'
input[1]^0x20*0x03=0x3f    input[1]='5'
input[2]-0x02-0x01=0x34    input[2]='7'
input[3]+1^0x04=0x32       input[3]='5'
input[4]*3-0x21=0x72       input[4]='1'
input[5]-2=0x33            input[5]='5'
input[6]^0x09-0x20=0x18    input[6]='1'
input[7]+0x51^0x24=0xA7    input[7]='2'
input[8]=0x31              input[8]='1'
input[9]*2+0x25=0xf1       input[9]='f'
input[10]+0x36^0x41=0x28   input[10]='3'
input[11]+0x20=0x84        input[11]='d'
input[12]*3+0x25=0xC1      input[12]='4'
input[13]^0x09-0x20=0x1E   input[13]='7'
input[14]+0x42=0x7A        input[14]='8'

所以最后flag是:flag{757515121f3d478}

符号执行自动秒题

队里师傅是用angr直接跑的,这种题目确实可以用符号执行约束求解来解答。这里使用angr来进行符号执行。

我比较懒,需要用到啥新环境第一个想到的肯定是docker(自己配环境是万万不可能的),于是找了一下,有angr的docker:

附上dockerhub链接:https://hub.docker.com/r/angr/angr

docker pull angr/angr
docker run -it -v /mnt/hgfs/share:/mnt/ angr/angr
#/mnt/hgfs/share 目录是我题目所在的目录,直接挂载在docker里的/tmp目录

然后进入docker 后,在/mnt/目录下就是你的代码和程序。

这道题根本不用什么angr的高端操作,直接一把梭即可:

import angrp = angr.Project('./signal.exe')   #指定angr跑的程序
state = p.factory.entry_state()    #新建一个SimState的对象,得到一个初始化到二进制入口函数的SimState对象。
simgr = p.factory.simgr(state)   #创建simulation manager,angr的主要入口simgr.explore(find=0x004017A5 ,avoid=0x004016E6)  #争取跑到输出成功的地址,避免跑到输出wrong的地址
flag = simgr.found[0].posix.dumps(0)[:15]     #得到flag
print(flag)

一把梭跑出flag:

这道题比较简单甚至不用约束直接求解即可,更多关于angr的进阶知识可以看先知社区的“深入浅出angr”系列

https://xz.aliyun.com/t/3990

[re]符号执行一把梭:2020网鼎杯青龙组re_signal_wp相关推荐

  1. 2020网鼎杯青龙组部分题目writeup

    2020网鼎杯青龙组部分题目writeup 0x00 Crypto之boom 0x00 Crypto之boom 下载下来是个exe文件,拖到cmd运行(切记一定不要双击,用cmd打开,双击运行后最后程 ...

  2. 2020网鼎杯青龙组部分题目WP

    0x00 Crypto之boom 下载下来是个exe文件,拖到cmd运行(切记一定不要双击,用cmd打开) 找个md5网站解密,得到明文 输入后得到一个方程组,解方程组(找个就不用说了,初中知识) 输 ...

  3. [pwn]星号格式化串:2020网鼎杯白虎组pwn quantum_entanglement wp

    [pwn]星号格式化串:2020网鼎杯白虎组pwn quantum_entanglement wp 文章目录 [pwn]星号格式化串:2020网鼎杯白虎组pwn quantum_entanglemen ...

  4. 2020网鼎杯玄武组re baby_vm复盘

    baby_vm 0x00 前言 这是一道来自2020网鼎杯玄武组的逆向题,题目的重难点在分析vm流程.这届比赛我没有参加,看到 一些博客都在分析这道题目,于是在闲暇时间复盘学习一下. 0x01分析 首 ...

  5. 2022网鼎杯青龙组wp

    本次网鼎杯的Crypto部分其实还是比较简单的,解出的人数也较多.感觉405题略难一些,花了比较多的时间,恰巧最后几小时给出的162所用到的求解方式之前遇到过,有幸作为一个CTF新手把这次的比赛密码学 ...

  6. 【CTF WriteUp】网鼎杯 青龙组 Misc题解复现(整理,WP非原创)

    (原本还打算四场Crypto全刷的,结果第四场被教做人了,算了整理点别的当补偿了) (另:求白虎组 Misc-boot 的 WP) Misc 虚幻2 图片在RGB信道各有一张图,提出来 R: G: B ...

  7. 2020网鼎杯玄武组部分题writeup(签到/vulcrack/java/js_on)

    签到题 思路 浏览器F12,调取ajax,输入队伍token,获取flag 过程 (1)浏览器进入F12查看js,看到game_manage.js这个js,看名字像是控制游戏的 (2)进入js,通过搜 ...

  8. 2020第二届网鼎杯 青龙组部分writeup

    目录 Reverse jocker signal bang Reverse jocker 前面是一个假的flag,直接跳过omg函数 下面这段代码把0x401500-0x4015ba都亦或了0x41( ...

  9. 网鼎杯青龙组 web题-AreUSerialz

    //复现地址:https://buuoj.cn/challenges //开启环境后获得源码一份. <?phpinclude("flag.php");highlight_fi ...

最新文章

  1. MongoDB(3)--有关NoSQL及MongoDB的一些概念
  2. python源程序执行的方式是什么执行-python调用可执行文件的方法
  3. Windows远程连接的实现
  4. Java设计模式(十四):MVC设计模式
  5. 云计算是怎样入侵统一通信领域的
  6. MySQL:基本命令
  7. JS面向对象的实现和原理
  8. 从 Oracle 到 PostgreSQL :从 Uptime 到数据库实例运行时间
  9. poj2406(kmp循环节)
  10. soapui 测试webservice
  11. 如何查看teamviewer计算机id,TeamViewer如何设置固定ID密码?查看方法说明
  12. linux 批量解压war,图文处理war包解压【搞定方式】
  13. python气象卫星云图解析_02_中央气象台
  14. unity 使用LineRenderer实现飘带飞舞的效果
  15. K8S taint(污点)和tolerations(污点容忍)
  16. Xcode cannot launch because the device is locked.
  17. Linux nohup用法
  18. Revit-常见问题汇总
  19. python二维码识别读取_python+opencv检测图片中二维码
  20. Springboot -Shiro整合JWT(注解形式)

热门文章

  1. Windows 10操作系统配置L2TP方法
  2. AjaxFileUpload组件结合Struts2异步图片上传
  3. 程序员能纯靠技术渡过中年危机吗?
  4. Visual FoxPro 6.0常用命令
  5. Ubuntu下Apache重启错误:Could not reliably determin解决
  6. vue项目的导出功能
  7. 【工具】GIT简单使用
  8. 周末imac机重装win7,装得我抓狂
  9. Twitter爬虫Python库Tweepy 附中英文官方文档
  10. 【汇智学堂】-div+css布局十二(商品列表图文展示)