171003 逆向-Reversing.kr(CSHOP)
来源:互联网 发布:mac视频播放器下载 编辑:程序博客网 时间:2024/06/05 03:39
1625-5 王子昂 总结《2017年10月3日》 【连续第368天总结】
A. Reversing.kr-CSHOP
B.
CSHOP
这次只有一个文件,没有可怕的ReadMe了
打开是个空荡荡的窗体,没有可操作的地方
心惊胆战地查壳,发现没有,是.NET程序
用.NET Reflector进行反编译
可以看到程序生成了很多个命名猎奇的Label:
在Form1_load中将它们初始化为空白标签
在CLick事件中对它们赋值
试着输了一下这些字符,当然是错的(。
那么很明显,只要”点击”这个按钮就能得到flag了
从初始化代码中可以发现按钮的大小被设置为0了
this.ƒƒƒƒ.Size = new Size(0, 0);
不过只要它存在,我们就还是能抓到它的
最先想到的方法是
1.上次改按钮可用设置的Spy++
点击子窗口列表,很容易找到了Button:
发现在状态中,窗口可见是激活的
不过还有个最大化的选项,勾上
就得到了一个占满屏幕的按钮,点击,然后把最大化取消,就成功实现了Click事件:
这种方法的原理和直接去OD中修改内存是相同的,因为GUI程序的某个控件都拥有ID和属性,通过操作这些可以修改控件
Spy++可以通过句柄更加方便一些
2.第二种方法
复盘的时候看到代码中有:
this.ƒƒƒƒ.TabIndex = 0;
平常使用中,当无鼠标的时候,可以用TAB键切换选中按钮,空格/回车确认,被选中的单位会有虚线和按压效果标明
小时候台式机没有触摸板都是这么玩儿的
TabIndex这个属性就意味着TAB键的切换顺序,0表示第一个,即默认选中
所以,打开程序后直接按空格/回车就可以直接触发按钮啦
3.然后想到还可以强行分析代码
Click的赋值顺序估计是打乱的,但是为了使flag可读,Label的Point属性一定可以看出来
观察发现在初始化函数中,Label们的y坐标是相等的,x坐标依次排列
因此只需要按照x坐标的大小顺序输出Click中的赋值即可
本程序的x坐标是依次增大,因此只需要直接复制赋值顺序即可
再用Click中的赋值建立一个字典,依次输出即可
过程中发现Label的命名区分为lbl*
,*
的值为不可见字符
脚本为:
s = """lbl,lbl,lbl,lbl,lbl,lblT,lbl,lbl,lbl,lbl"""s1 = s.split(',')s = {"lbl":"W","lbl\n":"5","lbl\n":"4","lbl":"R","lbl":"E","lbl":"6","lbl":"M","lblT":"I","lbl\n":"P","lbl":"S","lblT":"P","lbl":"6","lbl":"S"}print("flag:", end=' ')for i in s1: print(s[i], end='')print()print("排列顺序:", s1)print("赋值字典", s)
脚本输出为PPW6RP6SES
错误的原因是
大部分不可见字符都可以正常复制和识别,但是前两个值都被.NET Reflector识别为’\n’了,而赋值处有三个’\n’,导致混淆
9种排序(大概率只有6种,即不重复)都试一下也是可以接受的
5、4、P都可能是\n的赋值,参考之前的结果可知“P4”是正确的
这次的程序虽然难度很小,不过很有意思~
C. 明日计划
Reversing.kr
- 171003 逆向-Reversing.kr(CSHOP)
- 170923 逆向-Reversing.kr(MusicPlayer)
- 170925 逆向-Reversing.kr(Replace)
- 170926 逆向-Reversing.kr(ImagePrc)
- 170927 逆向-Reversing.kr(Position)
- 170928 逆向-Reversing.kr(Direct3D_FPS)
- 170929 逆向-Reversing.kr(Ransomware)
- 170930 逆向-Reversing.kr(Twist)
- 171001 逆向-Reversing.kr(WindowsKernel)
- 171002 逆向-Reversing.kr(AutoHotKey)
- 171010 逆向-Reversing.kr(PEPassword)
- 171011 逆向-Reversing.kr(HateIntel)
- 171013 逆向-Reversing.kr(AutoHotKey2)
- 171014 逆向-Reversing.kr(x64 Lotto)
- 171017 逆向-Reversing.kr(CSharp)
- 171018 逆向-Reversing.kr(Flash Encrypt)
- 171019 逆向-Reversing.kr(MetroApp)
- 171020 逆向-Reversing.kr(Multiplicative)
- tarjan 缩点
- 为什么java程序要public static void main(String[ ] args)方法
- 逆波兰表达式递归求值
- Servlet之文件上传与下载
- 无线视频传输任务的进展与问题
- 171003 逆向-Reversing.kr(CSHOP)
- ES6(五: Array扩展)
- 四、Java基础类库
- java将图片灰度化
- hdu4990——多解矩阵快速幂
- 理解Hadoop源码 --- WordCount
- Opencv选取目标颜色最大轮廓并框出
- Android 体系架构
- POJ 2752-Seek the Name, Seek the Fame(KMP的next数组运用)