动态调试——[SWPU2019]ReverseMe
文章目录
- 声明
- 题目
- 分析
声明
1)该文章部分借鉴于[BUUCTF]Reverse——[SWPU2019]ReverseMe。
2)博主是萌新上路,文中如有不当之处,请各位大佬指出,共同进步,谢谢。
题目
题目链接:ReverseMe
分析
1)查壳,
2)无壳,扔进ida,
int __cdecl main(int argc, const char **argv, const char **envp)
{int v3; // ecxint *v4; // eaxint v5; // ecxint *v6; // eaxint v8; // [esp+0h] [ebp-C4h]char v9[16]; // [esp+84h] [ebp-40h] BYREFv4 = sub_CD2DA0(v3, "Please input your flag: ");sub_CD3050((int)v4);sub_CD37B0(v8);strcpy(v9, "SWPU_2019_CTF");v6 = sub_CD2DA0(v5, "Try again!\r\n");sub_CD3050((int)v6);sub_CDADBE("pause");return 0;
}
3)点开各个函数,有好多复杂的函数,静态分析有难度,进行动调,在程序入口的头部下断点,即0x00CD2810
,
4)F8单步往下直到输入,即运行到call sub_CF37B0
,
5)先随便输入继续往下看,输入结束后将 ebp-0x90
处的值跟32比较,更改 ZF 标志位,0xCF28C7
处的 jz 会根据这边的情况进行跳转,如果 ZF 标志位为0,则跳转,否则就会输出 Try again,退出程序。ebp-0x90
处放的是我们输入的字符串的长度,因此我们输入的字符串的长度必须是32,
补充:汇编语言的标志位 ZF:零标志位。相关指令执行后结果为0那么 ZF=1,结果不为0则 ZF=0;
6)输入32位字符串重新动调,这是第一个对输入的字符串进行操作的地方,
7)查看一下异或之后的结果,值存在 ecx 中,
8)继续往下,发现此处在往 eax 中存值,
9)接着往下,eax 与 edx 进行比较,如果不一样则跳转结束,
eax 的值:
edx的值:
10)整理一下,edx 是由 ecx 在 call sub_CD25C0
中异或产生的,因此通过 edx 异或 ecx 可以得出这一组数 temp[]
,那么程序运行思路就是:输入 --> 与 SWPU_2019_CTF
异或 --> 再与 temp[]
异或 --> 最后与 eax 进行比较。
PayLoad:
ecx = [0x62, 0x66, 0x61, 0x64, 0x6e, 0x03, 0x01, 0x00, 0x08, 0x6e, 0x72, 0x65, 0x77, 0x62, 0x66, 0x61, 0x64, 0x6e, 0x03, 0x01, 0x00, 0x08, 0x6e, 0x72, 0x65, 0x77, 0x62, 0x66, 0x61, 0x64, 0x6e, 0x03]edx = [0xE4, 0x6A, 0x5F, 0xAE, 0xF6, 0xD4, 0xAF, 0x19,0xEA, 0x19, 0x19, 0xC3, 0x1D, 0xC3, 0x11, 0xD1, 0x0D, 0xFF, 0x34, 0x04, 0x7A, 0xF1, 0x15, 0x42, 0x26, 0x2D, 0x29, 0x76, 0xE7, 0x19, 0xBA, 0x2B]eax = [0xB3, 0x37, 0x0F, 0xF8, 0xBC, 0xBC, 0xAE, 0x5D,0xBA, 0x5A, 0x4D, 0x86, 0x44, 0x97, 0x62, 0xD3,0x4F, 0xBA, 0x24, 0x16, 0x0B, 0x9F, 0x72, 0x1A,0x65, 0x68, 0x6D, 0x26, 0xBA, 0x6B, 0xC8, 0x67]temp = [0]*32str = "SWPU_2019_CTF"flag=""for i in range(32):temp[i] = int(hex(edx[i]^ecx[i]),16)^eax[i]flag += chr(temp[i]^ord(str[i%len(str)]))print(flag)
# flag{Y0uaretheB3st!#@_VirtualCC}
动态调试——[SWPU2019]ReverseMe相关推荐
- 安卓APP动态调试-IDA实用攻略
0x00 前言 随着智能手机的普及,移动APP已经贯穿到人们生活的各个领域.越来越多的人甚至已经对这些APP应用产生了依赖,包括手机QQ.游戏.导航地图.微博.微信.手机支付等等,尤其2015年春节期 ...
- 如何动态调试Python的第三方库
如何动态调试Python的第三方库 2017年01月21日 22:53:57 阅读数:1834 注意:本文方法仅限于调试安装时附带py源码的库,如sklearn. 引入 用sklearn中的sklea ...
- IDA动态调试技术及Dump内存
IDA动态调试技术及Dump内存 来源 https://blog.csdn.net/u010019468/article/details/78491815 最近研究SO文件调试和dump内存时,为了完 ...
- CLR探索系列:Windbg+SOS动态调试分析托管代码
http://blog.csdn.net/garyye/article/details/4788070 在使用VS进行托管应用程序的调试的时候,有的时候总感觉有些力不从心.譬如查看一个托管堆或者计 ...
- vc2010中开始执行不调试灰的_反编译动态调试smali全过程
点击上方蓝字关注我,每天进步一点点 大家都知道我们在逆向分析的时候,很多时候主要在分析逻辑.网络抓包.数据来源流向分析.页面逻辑跳转分析.动态调试等.由于很多代码都会混淆,很多时候我们直接通过代码可能 ...
- 修改so_新手向总结:IDA动态调试So的一些坑
本文为看雪论坛优秀文章 看雪论坛作者ID:nisodaisuki 目录 动态调试步骤 复制`android_server`到设备中,并执行. 用`pm`确定要调试apk的包名 用`am`启动被调试应用 ...
- Java 动态调试技术原理及实践
调试是发现和减少计算机程序或电子仪器设备中程序错误的一个过程.最常用的断点调试技术会在断点位置停顿,导致应用停止响应.本文将介绍一种Java动态调试技术,希望能对大家有帮助.同时也欢迎读者朋友们一起交 ...
- AndroidStudio动态调试smali
本文部分参考至吾爱破解https://www.52pojie.cn/thread-658865-1-1.html 1.环境与工具 AndroidStudio V3.2beta1 smaliidea-- ...
- 2020-10-25(动态调试SMC代码)
今日总结 这是昨天的动态调试图,那一段加密的代码,rax和rdx 里面记录了一个关于flag的数组. 刘佬跟我说,只需要ida静态调试的时候插入一个python脚本,在600B0B的地址 执行一次异或 ...
最新文章
- BBI综述:在微生物组研究中使用宏转录组
- php mysql技术笔试题_PHP面试笔试题--选择题部分(最新整理)
- pytorch 多进程队列
- C++矩阵运算库推荐
- UIScrollView的代理方法(delegate)
- JIRA中vm后缀文件语法说明
- C#中不常见的运算符功能汇总
- Ubuntu 16.04安装教程及虚拟机设置
- selenium webdriver python 元素操作
- 信息抽取--新词提取
- matlab cell向量匹配向量,根据2个cell格式数据中的某二列进行匹配并合并
- Mysql命令行下实现数据的导入
- Linux 操作系统启动流程以及trouble shooting
- 如何开发一款高大上的android应用的必备知识
- 【微信小程序系列:三】前端实现微信支付与代扣签约
- matlab2014如何获得hostid,hostid.c/获取主机标识
- 扫地机器人市场:米家、科沃斯激烈肉搏
- Date对象的getMonth()对象的错误使用导致页面1月份时报错
- 3、RDA8910(4GCAT1)CSDK二次开发:GPIO输入详解
- MOS管的导通电阻RDS(on)与阈值电压VGS(th)温度特性详解
热门文章
- geoserver osm 导入_[原]导入OpenStreetMap海图数据,并在GeoServer上发布
- 曲师大校徽 透明背景 多颜色可选 多样式可选
- 秒杀设计 mysql_如何设计秒杀系统?
- 离职通知邮件主题写什么好_辞职发邮件标题怎么写
- element table 表格 修改背景为透明并去除边框
- matlab feedforward,premnmx(mapminmax) newff (feedforwardnet) tramnmx 如何使用
- Cesium中笛卡尔坐标系到底是什么鬼
- 如何获取自己QQ里面的所有qq好友号码
- C# 使用System.Drawing.Bitmap报错
- hi3559AV100调试记录