Reversing.kr Replace
- 程序运行:
只能输入数字序列,不能输入字母和字符
- 查壳,无壳,标准c++程序:
我在想,能不能爆破,嘿嘿嘿,但是我不会写相应的脚本。
- IDA打开,String,找到 "Correct!"
- 查看调用的函数,找到获取输入内容的函数GETDlgItemInt,获取后转为int类型
- OD动态调试,找到IDA中对应的0040509C这个地址,之后发现这个地址似乎不存在,我也不知道为什么,找了一会儿 ,才找到这个函数调用的指令位置(0040105A),赶紧下个断点:
找到了 correct! 的位置
- 在correct 之前找到一个,想着输入一个:强制跳转指令(jmp 00404690),把它nop(90)掉,但是依照这个函数传递的参数来看,它不会直接打印出flag,而是要满足条件,它会提示你,输入正确,而这个正确的输入就是flag
- 运行一下,输入 124,点击Check按钮,运行到文本获取函数的调用位置(0040105A)
之后单步步入(F7),进入Replace.0040466F,它实际上的操作是一个赋值的过程,之后就return掉了,这的没什么影响,程序也不会停止。但是有个疑问,为什么跳转的命令一样,实际上跳转到的地址却不一样。后来才知道,原来是call指令前面的mov指令改变了0x40466F的偏移地址的数据,之所以下面的会访问另一个地址,是因为下面的call指令也改变了偏移地址0x40466F的数据,第三个没有改变。第一次对于Replace.0040466F的调用是与下面的对于这个地址的调用产生了不同的汇编指令,这个是对偏移地址的赋值,而下面的是对于寄存器的里面存储的地址进行操作。
第二次:
但是向下运行,之后还有两个Replace.0040466F,它们运行会直接结束程序。
F7 进去之后,发现,这个函数是对eax的赋值,即赋值为0x90,之后程序结束,为什么?
看看大佬博客,直接结束程序的原因是eax存储的地址访问不到
这次输入的是124,对应地址是60160647
- 在经过两次Replace.0040466F的调用之后,又回到了,两个强制jmp的地方,第一个jmp是跳下去,第二个jmp是跳过setDlgItemTextA函数(打印出correct的函数),然后下面的jmp又跳了回来,从而执行第二个jmp,但是还是会跳过correct。
重新运行
- 这次输入0,看看eax的值会是多少,601605CB
124,对应地址是60160647 十进制....1607
0 ,对应地址是601605CB 十进制.....1483
之间正好错开124,所以这里有个基本数据601605CB,它加上输入框中的数据,就构成了eax的值。
- 可以很好的利用一下0040466F处函数的nop指令(0x90),其思想为:
因为eax里的地址可以被赋值,而Replace.0040466F处的jmp指令如果跳转为0x90,那这里的指令就会被nop替换掉,就直接会向下进行执行相应的 显示 correct 操作。所以,看到跳转函数之前有两个Replace.0040466F,第一个用来将eax的值赋值为 00401071 ,第二个就用来将这个eax中的00401071 赋值为 0x90
列个式子(x代表输入):
601605CB + x = 00401070
等于00401070的缘故是因为下面还有个 inc eax显然x是个负数,所以需要构造一个数,使得结果溢出,即 x = 100401070 - 601605CB 。
算出来,x应该是A02A0AA5,转一下10进制:2687109797,好奇怪,为什么是2687109798,难道inc 指令没起效果? - 看一眼原因:
第一个call Replace.0040466F 之后,eax 为 00401071
inc eax之后,eax为00401072,之后就调用了第二个Replace.0040466F
回想一下刚才的这里存在的jmp short Replace.00401084现在它转化为了两个字节,即两个指令:nop nop(字节是内存的最小单位),不知道是不是因为jmp 遇上nop之后会自动转化为nop。
这里得出原因,我们要修改的就是内存 00401072 的值,cpu会自动识别其是不是指令 ,然后进行优化
知识点
- BOOLSetDlgltemText(HWND hDlg,int nlDDlgltem,LPCTSTR IpString);
设置对话框中控件的文本和标题
hDlg:指定含有控件的对话框。
nlDDlgltem:标识带有将被设置的标题和文本的控件。
IpString:指向一个以NULL结尾的字符串指针,该字符串指针包含了将被复制到控件的文本。 - UINT GetDlgItemInt(
HWNDhDlg, // 窗口句柄
int nIDDlgItem, // 控件标识符(名称)
BOOL *lpTranslated, // 布尔变量的指针
BOOLbSigned // 有符号或无符号值
);
该函数通过剥离文本开头的任何额外的空格,然后转换十进制数字来翻译检索到的文本。 该功能在到达文本末尾或遇到非数字字符时停止转换。
例子:int a = GetDlgItemInt(hwndDlg,IDC_a,NULL,TRUE);
注释:用GetDlgItemInt函数获取hwndDlg窗口中的IDC_a控件中输入的数值并赋给变量a。 - BOOL EndDialog(HWND hDlg,int nResult);
清除一个模态对话框,并使系统中止对对话框的任何处理的函数
hDlg:表示要被清除的对话框窗口。
NResult:指定从创建对话框函数返回到应用程序的值。
Reversing.kr Replace相关推荐
- Reversing.Kr replace题解
第一次尝试做题,参考了众多大神的讲解,终于把这题解出来了. 我们先运行一下replace.exe,出现下面的框,什么都不输或输错点击check会异外终止.这题估计就是要让Wrong变成correct或 ...
- 170925 逆向-Reversing.kr(Replace)
1625-5 王子昂 总结<2017年9月25日> [连续第358天总结] A. Reversing.kr-Replace B. Replace 先查一波壳,还好没有 运行,是一个GUI程 ...
- 170929 逆向-Reversing.kr(Ransomware)
1625-5 王子昂 总结<2017年9月29日> [连续第362天总结] A. Reversing.kr-Ransomware B. Ransomware readme提示解密文件,运行 ...
- 171003 逆向-Reversing.kr(CSHOP)
1625-5 王子昂 总结<2017年10月3日> [连续第368天总结] A. Reversing.kr-CSHOP B. CSHOP 这次只有一个文件,没有可怕的ReadMe了 打开是 ...
- 171002 逆向-Reversing.kr(AutoHotKey)
1625-5 王子昂 总结<2017年10月2日> [连续第367天总结] A. Reversing.kr-AutoHotKey B. AutoHotKey 解压出来一个ReadMe一个e ...
- 171013 逆向-Reversing.kr(AutoHotKey2)
1625-5 王子昂 总结<2017年10月13日> [连续第378天总结] A. reversing.kr B. AutoHotKey2 解压出来又来了ReadMe 不过这次比较简单,翻 ...
- 171019 逆向-Reversing.kr(MetroApp)
1625-5 王子昂 总结<2017年10月19日> [连续第384天总结] A. reversing.kr B. MetroApp 这次的逆向处理了很多麻烦,学到了不少关于MetroAp ...
- reversing.kr学习之路-ransomeware
ransomeware - writeup 题目来源 http://reversing.kr 题目知识点:upx + 花指令 + 堆栈不平衡 + exe特征码提取key 前言 文章只是记录一下自己在r ...
- 170926 逆向-Reversing.kr(ImagePrc)
1625-5 王子昂 总结<2017年9月26日> [连续第359天总结] A. Reversing.kr-ImagePrc B. ImagePrc 首先查壳,运行发现是一个光秃秃的窗口, ...
最新文章
- <%=(String)request.getAttribute(““) %>的作用是什么
- CTR模型越来越深,如何让它变轻?
- PHP的xdebug五个按钮的说明
- Shell编程之条件语句(if语句,case分支语句)
- Linux进程 excel族函数的用法
- trafficserver records.config参数说明
- 使用MyBatis框架连接MySQL数据库查询记录,全部步骤
- 窗体之间传递值的几种方法
- 深度学习:NLP之词嵌入(Word Embedding)
- linux常用命令行编辑快捷键
- 如何查看手机的android版本信息,怎么查看手机型号、配置、版本【图文教程】...
- 网络安全实验3 漏洞扫描
- 计算机boot指令,BCDBoot 命令行选项
- ICCV 2021 | Transformer结合自监督学习!Facebook开源DINO
- CTeX 中文 beamer 模板
- halcon学习实战系列—如何更便捷,更高效的计算同心度
- [H265/HEVC] 波前并行处理WPP
- HTML+CSS静态网页作业:NBA勒布朗詹姆斯篮球明星带js(5页)
- STM32CubeMX(09)MG90S舵机驱动实验
- Haproxy(一)基础介绍