吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4669|回复: 9
收起左侧

[原创] 【Reversing.kr】CSHOP

[复制链接]
whklhh 发表于 2017-10-3 15:41
Reversing.kr是韩国的一个逆向题目网站
有分国度的排行榜,还是挺有意思的
本题即来自于第十三关CSHOP
http://reversing.kr/challenge.php可以下载到文件

这次只有一个文件,没有可怕的ReadMe了

打开是个空荡荡的窗体,没有可操作的地方

心惊胆战地查壳,发现没有,是.NET程序

用.NET Reflector进行反编译
可以看到程序生成了很多个命名猎奇的Label:



在Form1_load中将它们初始化为空白标签



在CLick事件中对它们赋值



试着输了一下这些字符,当然是错的(。

那么很明显,只要”点击”这个按钮就能得到flag了

从初始化代码中可以发现按钮的大小被设置为0了

[C++] 纯文本查看 复制代码
this.ƒƒƒƒ.Size = new Size(0, 0);


不过只要它存在,我们就还是能抓到它的

最先想到的方法是
1.上次改按钮可用设置的Spy++



点击子窗口列表,很容易找到了Button:



发现在状态中,窗口可见是激活的
不过还有个最大化的选项,勾上
就得到了一个占满屏幕的按钮,点击,然后把最大化取消,就成功实现了Click事件:


这种方法的原理和直接去OD中修改内存是相同的,因为GUI程序的某个控件都拥有ID和属性,通过操作这些可以修改控件
Spy++可以通过句柄更加方便一些

2.第二种方法

复盘的时候看到代码中有:
[C++] 纯文本查看 复制代码
    this.ƒƒƒƒ.TabIndex = 0;


平常使用中,当无鼠标的时候,可以用TAB键切换选中按钮,空格/回车确认,被选中的单位会有虚线和按压效果标明
小时候台式机没有触摸板都是这么玩儿的

TabIndex这个属性就意味着TAB键的切换顺序,0表示第一个,即默认选中
所以,打开程序后直接按空格/回车就可以直接触发按钮啦

3.第三种方法
强行分析代码

Click的赋值顺序估计是打乱的,但是为了使flag可读,Label的Point属性一定可以看出来
观察发现在初始化函数中,Label们的y坐标是相等的,x坐标依次排列
因此只需要按照x坐标的大小顺序输出Click中的赋值即可
本程序的x坐标是依次增大,因此只需要直接复制赋值顺序即可
再用Click中的赋值建立一个字典,依次输出即可

过程中发现Label的命名区分为lbl*,*为不可见字符
脚本为:


[Python] 纯文本查看 复制代码
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”是正确的

这次的程序虽然难度很小,不过很有意思~




免费评分

参与人数 4吾爱币 +9 热心值 +4 收起 理由
抱书人人 + 1 + 1 谢谢@Thanks!
a5606495 + 1 + 1 谢谢@Thanks!
夏雨微凉 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Sound + 6 + 1 已经处理,感谢您对吾爱破解论坛的支持!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

夏雨微凉 发表于 2017-10-3 18:40
感谢分享   膜拜大神
gongyong728125 发表于 2017-10-4 09:37
抱书人人 发表于 2017-10-6 10:48
srwam 发表于 2017-10-7 00:26
学习一下
gunxsword 发表于 2017-10-13 13:14
我昨天也玩了这个,用DNSPY,直接在他的代码中,有一个赋值顺序,通过比对,就直接得到结果了!
 楼主| whklhh 发表于 2017-10-13 13:34
gunxsword 发表于 2017-10-13 13:14
我昨天也玩了这个,用DNSPY,直接在他的代码中,有一个赋值顺序,通过比对,就直接得到结果了!

就是我所说的第三种方法呀,变量名被混淆了怎么解决的?
gunxsword 发表于 2017-10-13 17:22
whklhh 发表于 2017-10-13 13:34
就是我所说的第三种方法呀,变量名被混淆了怎么解决的?

不用解决啊,就通过最后的A,D,11,19,还有前面的字符来比对的,呵呵!
头像被屏蔽
爱蜂玩爱疯玩 发表于 2017-11-21 15:32
提示: 作者被禁止或删除 内容自动屏蔽
heiio 发表于 2019-7-30 14:25
学习到了,感谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-29 16:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表