最近趁上课之余,刷了一下CTF(https://ctf.bugku.com/challenges)不好用的CE,言外之意就是说这道题用CE 不好做,这里先分享一下网上其他大佬的解题方式:https://blog.51cto.com/13992485/2429569
下面是我的解题方式:1、先打开程序,观察双击程序,出现一个对话框之后是主界面,点击command 可以是值增加1
这里我的思路: 1、爆破:写一个程序,模拟点击10000次 2、尝试修改值,直接修改到9999,再次操作这里,我果断选择第二个方式(其实第一个试了一下,比较内存了,CPU 也一下子就飚上去了)首先,查看有没有壳(一般都是无壳的,但是还是查看一下)如图:程序是VB 写的,无壳,nice
2、CE附加,尝试查看变量这里我尝试搜索精确数值,但是发现精确值收缩到最后是一个死胡同,因为有时候是可以查找到这些值,但更多时候,这些值可能只是那么几个值才产生变动,基本上从精确值这里切入比较难,而且即使找到了值,并且进行了修改,在这次显示值是修改了的,但是到了下一次时,值也会自动校正。所以我尝试搜索未知初始值,并且通过不断变动值,缩小搜索范围,最终查到以下数据:分别对这些数据进行改写查看,获得以下代码段
观察上面的数据,可以发现数据5和数据6是同一段代码,数据7和数据8也是同一段代码,所以我选择充这里作为切入点(其实其他代码也是可以的,只是我直觉这里应该比较好分析) 3、OD 附加(工具:dbg x32.exe),并跳转到选定目标地址:0x7294203F在此处下断点,并且跟进,同时查看堆栈和寄存器数值变化在此处下断,发现数值是在当前CALL 上层修改的,返回到上层代码:这里代码看了一下,发现也有很多下一个的数值,暂时没看出啥,所以返回到函数头部,再次断下,从头不看看哪里数值是比较可疑的查看EDI + 0x84 的数据在此处进行硬件写入断点,再次点击按钮与之前类似,这里的数据也是上层计算得出的,再次向上层回溯,这里省略部分,因为之后的操作和这里类似,上上层回溯,知道跳转到主模块地址处,即以0x0040开始的地址,一般在此处可能会进行值的判断,弹窗之类的在这里附近查看代码,也可以断下后调试,查看执行过程,我这里使用绘制功能直观展示它的执行流程尝试修改代码:修改后的效果:出现了一个对话框,这个字符串应该就是flag
高高兴兴去填写答案,打脸来的太快,答案是错误的,在分析一下字符串DeZmqMUhRcP8NgJgzLPdXa看起来图像Base64 加密的,试一下解密,呵呵,打脸虽迟但到然后冥思苦想,突然顿悟(其实是看了别的博客思路)居然是Base58,。。。。。OK,解码,获取flag 提交。
PS:如果你使用的OD, 那直接搜索字符串就可以找到这条数据,当然,dbg也是可以搜索到的,但是与之一起的还有N 多条其他字符串
PS2: 这里是我自己分析的这个程序的算法代码的位置,自己没太懂,求大佬讲解一下这里算法实现
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)