不好用的CE

这题有好多种解法,我会一个个解释。

只用OD

只用CE

CE+OD

下载文件

点两下试试

无壳

1.只用OD

只用OD我只想出两种办法,虽然只是下断点的方式不同,但也代表了不同的思路。

一、 第一种是最直接的也是最笨的,在搜索字符串里的所有内容都下断点,这里幸好搜索的字符串不是很多,而且flag凑巧是直接存储在内存里的,所以可以使用。若没这么幸运的话就只能在提示的字符串 “点击一万次有flag” 处下断点,一点点的往上翻代码了。

二、 我们知道了这个程序使用VB写的,且会弹出一个对话框,对话框在VB理常用的函数为rtcMsgBox,可以用ODB的插件来自动下断点,

只用OD第一种办法:在每一处字符串下断点,这里我们就只在可疑字符串下断点了

即第3、4、5、6、7行

首先断在了最后一条,

看起来是在初始化变量,F9继续运行

跳出对话框,单击确定继续程序

点击后触发断点,

这三个可疑的字符串在一起,但是其上并没有大跳转,甚至根本没有跳转,那最后一个可疑字符串就更可疑了,继续F9运行程序,程序并没有断在最后一个字符串处,说明这个字符串很有可能就是达到条件(点击一万次)后才会出现的字符串,

这个字符串上面还有一个大跳转,那这个字符串就很有可能是flag了,或者flag相关的字符串,我们把这个大跳转nop掉,看看会出现什么

DeZmqMUhRcP8NgJgzLPdXa

这题最坑的地方也就是这个字符串就出现了,之前做这个题也是断在这里,直到最近出了Writeup才知道,这个看起来像base64的字符串其实是他的远亲,base58

我们都知道base64的范围是  数字(10)+大小写字母(26*2=52)+两个特殊字符(+,/)

而base58是剔除了容易被人误识别的数字0,L的小写,i的大写和o的大写,还有两个特殊字符(+,/)

得到flag

只用OD第二种方法,利用OD的插件,在rtcMsgBox下断点,F9运行程序,被断下

这个地方已经不属于程序的领空了,这里是VB调用的库的领空,在这个位置我们在栈里可以找到程序调用函数的地址,在其上回车以回到程序领空

然后我们就可以苦哈哈地慢慢往上翻代码了,这个下断点的方式适合在没有明确的提示字符串的时候使用,在有提示字符串的时候还是用字符串来查找比较方便。

CE+OD

打开程序,CE附加程序,

这里我们不知道这个变化的数字的类型,虽然看起来很像整型

所以我们设置扫描类型为未知的初始值,点击首次扫描

然后点击按钮,变化一下数值

再用CE搜索变化的数值

点击再次扫描

这样太慢了,我们可以用变动的数值和未变动的数值切换来不断搜索

最后剩了八个结果实在分辨不出来了

不过这就够了,我们也不需要知道那么细致,随便选一个,双击,拉到下面的界面里,右键他选择  找出是什么改写了这个地址

注意像这样的,地址特别大的,一定不是程序的代码,这个是程序调用的库的地址

像这样40打头的才是程序的代码,具体要看程序的PE头里定义的基地址,一般为400000。

然后我们就可以记住这个地址,用OD打开程序,到这个地址看看,CE也可以看,但是很多操作不方便

毕竟不是专门用来调试程序的应用。

我们用OD附加到进程上,

ctrl+g 到401D44看看

距离我们第一次找到的关键跳转也很近,

这之间有大量的棕色的浮点数运算,而关键跳转之后再无浮点运算,所以这可能就是算法部分,这次我们仔细分析下算法部分,

这里可以说是算法部分最重要的四条代码了,从0x4010A8存储的10000就能看出来,在我解释浮点助记符之前,我要先解释一下浮点运算:

在包含浮点运算的处理器里,有8个寄存器,分别是ST0-ST7,他们通过浮点助记符来进行浮点运算,他们的使用方法与栈很类似,存储的顺序从ST0开始到ST7,常用的浮点助记符有:

fld 相当于push

fstp 相当于pop

fadd 相当于add

fsub 相当于sub

fdiv 相当于div

fmul 相当于mul

fstsw 把状态寄存器存入寄存器里

fcomp 相当于cmp

再具体点的用法我会在用的时候解释,现在在最开始的浮点运算处下断点

因为代码跨度有点大,我就不一一截图了,只把关键代码写下来

fld qword ptr ds:[esi+0x34]

把从[esi+0x34]存入ST0

fadd qword ptr ds:[0x4010B0]

0x4010B0是200.0,即ST0+=200.0

fstp qword ptr ds:[esi+0x34]

即[esi+0x34] = ST0

fstsw ax

把状态寄存器存入ax,周围并没有可以影响到状态寄存器的代码,所以忽略就行

fld qword ptr ds:[esi+0x34]

即ST0=[esi+0x34]

fdiv qword ptr ds:[0x4010B0]

即ST0/=200.0

fstp qword ptr ss:[esp]

即[esp]=ST0,这里存储的就是实际的点击数了

fclex

查了一下是叫做浮点检查错误清除,不会影响结果所以忽略

fld qword ptr ds:[esi+0x34]

即ST0=[esi+0x34],

fdiv qword ptr ds:[0x4010B0]

即ST0/=200.0

fcomp qword ptr ds:[0x4010A8]

即ST0与10000比较

fstsw ax

把状态寄存器存入ax

test ah,0x40

比对状态寄存器,

je 401e97

关键跳转

然后怎么改就看个人喜欢了,可以像上次一样直接nop掉关键跳转,也可以修改0x4010B0里的值来达到点一次等于数次的效果,也可以直接修改0x4010A8里的值,让一万次变成1次。flag处理部分不再赘述。

后来我查了一下,test ah,0x40 比对的是状态寄存器的cf寄存器,即进位寄存器,所以他只会在从9999进位到10000时触发,

只用CE:

运行程序,用CE附加上

由于我们已经知道了数值的类型为双浮点(双浮点数占八个字节,有效数字16位,之前的200.0可以数一下有效数字就知道了,即使不知道类型为双浮点也可以一个个试,通常数据存储类型只有4字节,单浮点,双浮点类型,偶尔也有单字节的布尔类型),我们设置扫描类型为未知的初始值,数值类型为双浮点搜索,

然后用 变动的数值/未变动的数值切换搜索,很快就搜索到了一个很扎眼的数值,除了这个2200都是后面跟了很多个小数的双浮点数,然后用2200/11得到增量200,

双击把他加入下面的界面,设置大小为1999800

然后点击程序的按钮

就从11变成了100000,从而得到flag

当然,如果我们知道了增量为200,也可以直接搜索200*X

bugku 不好用的CE WriteUp相关推荐

  1. Bugku新平台论剑场writeup

    头像 用010editor打开搜索flag就是找到的flag:flag{bGxvdmV0aGVnaXJs}再经过base64解密flag{llovethegirl}后再来进行MD5加密得到 flag{ ...

  2. [BUGKU][CTF][MISC][2020] MISC writeup持续更新中

    CTF总结 ctf基本操作:https://blog.csdn.net/mafucan/article/details/106886421 zip: https://www.anquanke.com/ ...

  3. bugku ctf 杂项 啊哒 writeup || foremost的安装

    windows上使用foremost 做CTF题需要这工具来提取文件里的隐藏文件 foremost工具包下载地址: https://github.com/raddyfiy/foremost 1.在fo ...

  4. [BUGKU][CTF][Reverse][2020] Reverse writeup 1-7 暂时肝不动了

    Reverse 入门逆向 步骤: ida main函数 按R Reverse signin 关键字: 知识点:Android逆向分析.(常用工具:安卓模拟器.JEB.Cyberchef.Android ...

  5. [BUGKU][CTF][PWN][2020] PWN writeup

    准备UBUNTU pwndbg pwntools PWN1 关键字:nc 知识点:nc使用方法 https://www.cnblogs.com/nmap/p/6148306.html nc命令是一个功 ...

  6. BugkuCTF-Reverse题不好用的ce

    解题 方法一 下载程序,运行一下: 点确定,有会弹出一个新的窗口: 点击Command按钮,左上角的数字就会增加,大概是要我们点击一万次: PEiD查加壳: 并没有加壳,是MFC编程的小软件.所以我们 ...

  7. Bugku CRYPTO No Ciphertext RSA writeup by 树木

    前言 菜鸡树木出的新密码题,质量不高,大佬们不要喷呜呜呜 题目信息 题目名称:No Ciphertext RSA 题目作者:树木有点绿 描 述: The ciphertext is unknown! ...

  8. BUGKU misc--细心的大象--writeup

    题目打开 下载下来后是一张jpg图片,用010editor查看搜索jpg文件尾FFD9发现后面有Rar!标志,想必图片最后有个rar压缩包. 将包括Rar!在内的后面所有16进制拷贝,保存成rar文件 ...

  9. bugku上聪明的PHP

    1:打开环境,翻译看看意思,随便传一个参数如图,随意传参获取到smarty提示,有可能是模板注入 2:审计一下代码,preg_match后面就是代表这些被过滤了,环境地质+./template.htm ...

最新文章

  1. 面试的角度诠释Java工程师(一)
  2. strlen()函数 与 “\0“ 的关系 与 利用;strcmp()
  3. ppt android sdk,《0.AndroidSDK概述.ppt
  4. (三)数据结构之“栈”
  5. stotybord如何添加子视图_Revit软件技巧合集(建筑构件、视图处理、建筑表现、高级技巧)...
  6. php单独输出每个单词,PHP:在特定短语/单词之后搜索文本文件并输出
  7. 上市融资计划书PPT模板
  8. 悉尼科技大学量子计算_世界排名前12位的量子计算研究型大学
  9. java 资格证_程序员从业资格证
  10. DNS是如何进行域名解析的?
  11. 闲置服务器如何利用起来赚点零花钱
  12. 【国产MCU移植】移植RT-Thread到国产芯片HC32L196
  13. 浅谈webGl vr全景模式
  14. 2008年10月2号,星期四,晴。不患人之不己知,患不知人也。(孔子)
  15. Wide Deep模型的理解及实战(Tensorflow)
  16. 《冰封王座》世界魔兽界十大叱咤风云人物
  17. scala中的breakable{}实现continu 与break
  18. 供应链库存管理-柔性快反供应链
  19. MySQL中关于JSON你不得不知道的那些事!
  20. 【go语言】在线小词典

热门文章

  1. 【网络安全】——逻辑漏洞之短信轰炸漏洞
  2. 未授权和敏感文件泄露
  3. 屏蔽百度无孔不入的垃圾广告
  4. Win7实现快速启动栏并实现靠左边的终极操作方法(已解决)!
  5. 苹果跟android性价比,苹果和其他安卓机差距越来越小,买安卓更有性价比
  6. Android系统system用户权限和root权限的获取
  7. notion函数_用好这些实用模板,把 Notion 打造成全能助理
  8. SimpleFOC(三)—— AS5600角度读取
  9. 如何使用域组策略(AD GPO)分发软件安装以及卸载
  10. linux下pfam使用方法,使用pfam-scan进行预测