MXWXZ 发表于 2019-2-12 22:23

【200CB】丧心病狂.NET CM,无壳无混淆,新手最好绕道……

本帖最后由 MXWXZ 于 2019-2-13 13:37 编辑

最近.NET的CM好多啊,难道看了源码就能搞定么?嘿嘿嘿,这可不一定看不看得到源码还不一定呢
于是乎就有了这个丧心病狂的CM……灵感来源于某次内赛……
既视感是酱的……

随你用什么办法,拿到flag就可以,电脑差一点的话可能时间比较久等一等吧……我这笔记本的U需要大概3秒钟。

本题没有奇怪的AES/RSA等目前无法暴力的加密算法,无壳无混淆(手动混淆23333)请放心食用~
第一个搞定的有200CB大奖哦~欢迎各位大牛尝试~

领奖帖:https://www.52pojie.cn/thread-864379-1-1.html
什么dnSPY报错了?好巧啊我也是:lol



=========我是可爱的分割线==========

鉴于大佬们已经搞定了,我就公开一下源码,本题设计目的就是为了卡反编译器和训练一下耐心的……主要由一个验证函数,两个调整函数构成,就是把输入的字符串不断调整,计算(都是可逆的)。为了卡掉反编译器特地没有用循环而是写了个生成器生成几万行代码233333,同时为了防止改写成循环后变的简单,里面添加了随机数……整个CM取名onion(洋葱)的目的就是这个了,一层层剥开就能看到flag23333

下面是源码(VS2017)

wwh1004 发表于 2019-2-13 13:52

反混淆的代码写多了,一看到crackme的时候,看IL代码那么有规律,还有很多条件跳转指令,马上就用我之前的控制流分析类库写了个反控制流混淆的工具,写完才发现好像走错路了....


https://static.52pojie.cn/static/image/hrline/4.gif

我的解法应该不是正常解法,算是走后门的办法。
既然是flag,那么肯定是ascii的可视字符,我去baidu搜了下可视字符范围,根据下图的突破口进行暴力计算。


flag的长度是41,这里会对每一个突破口进行暴力计算,然后发现有一个地方有3个解,其它地方都是一个解。

然后你对字符串会进行编码操作,这个编码其实不是加密,就是给字符的位置换顺序
可以直接生成一个indexMap


然后使用这个indexMap和之前解出的encodedFlag进行decode操作

然后就是答案了

这个思路估计没几个人看得懂...因为实在太碰运气了,还利用了小技巧,比如ascii可视字符范围。

Suppose 发表于 2019-2-13 19:51

MXWXZ 发表于 2019-2-13 13:19
别灰心只是手速慢了点
说说思路 呗看看和大佬的一不一样

没啥很好的思路 ,Dnspy不争气,只能撸IL咯,代码量虽然很变态,不过规律还是能找出来的,验证flag的方法进去就是一个长度判断,41位。然后发现有41个取flag的地方 都是用算法A来校验,然后每取一位字符都把右边剩余的字符串拿去做位置变换300次以及算法B校验取出的字符300次。。。慢的原因有两个,1是那个位置变换,因为拿去变换位置的字符串长度是递减的,某些长度300次之后没变化,有的就不一样了,这里卡了一会儿,然后就是那俩算法,我是用Ascii码表可见字符通过算法A来爆的,flag第28位那个s,不知道为什么我爆出来是个@,后来用算法B才弄出来,就这卡了很久

寂如流年的回忆 发表于 2019-2-13 00:09

OK 我绕道

CrazyNut 发表于 2019-2-13 00:10

卧槽= =是够丧心病狂的。。

leeairw 发表于 2019-2-13 03:14

变态至极!~佩服佩服,我闪~

qaz003 发表于 2019-2-13 03:42

我了个去……容我哭一会儿,顺手拖垃圾桶里了……

wwh1004 发表于 2019-2-13 08:28

ps122 发表于 2019-2-13 08:32

本帖最后由 ps122 于 2019-2-13 13:35 编辑

研究了一下,好像不对,爆破的算吗?


Suppose 发表于 2019-2-13 08:44


好像慢了一步。。。

Aaron0713 发表于 2019-2-13 08:51

一个方法里有 258724 条指令。。。丧心病狂

yhnobody 发表于 2019-2-13 09:01

大佬大佬,路过路过{:301_973:}
页: [1] 2
查看完整版本: 【200CB】丧心病狂.NET CM,无壳无混淆,新手最好绕道……