.Net编写的无壳困难CrackMe,破解有奖励,可以使用任何方法破解
本帖最后由 JemmyloveJenny 于 2019-2-11 16:41 编辑看到这些天大家都在破解春节红包的那几个CrackMe,于是我也想编一个高难度的CrackMe玩一下!
自认为这个CrackMe的思路很新颖,验证方式也很独特。
CrackMe用C#.Net编写,没有加壳,仅仅对程序进行了混淆,大概就是IDA看F5逆向的难度。大部分代码都在Form_Input中。
程序中保留了所有注册码生成算法调用的函数,以方便大家爆破或Keygen。
将CrackMe解压到同一文件夹下即可开始破解
CrackMe的既视感是这样滴,一个用户名框,一个注册码框,对于输入没有限制。
注册成功会出现下图;不成功可能会出现“注册码错误”、“未知错误”、“Failed to load Core”三种错误
"注册码错误"就表示你注册码错误
“未知错误”字如其名,我也不知道出错原因,可以回帖写出你的注册码我来看看。
"Failed to load Core"错误,请确保CrackMe文件夹下存在Core_Real.dat和Core_Trial.dat
注册成功窗口也就是核心代码窗口,实际上是一个类似于Google Authenticator的TOTP验证器。注册成功后只要点击复制验证码,把结果提交到本帖即可,我可以对结果进行验证。
TOTP验证器产生数字的Secret由一段固定Secret和一段与用户名有关的Secret合成。合成后的Secret参数会传入到TOTP.dll中实现……所以你懂的
我给出一组试用版的用户名和注册码
用户名:Trial,注册码:KKKWWGNQWMANKXA3HC。
试用版和正式版几乎没有差别,仅仅是TOTP的Secret参数不同而已。我给出的试用版注册码也有可能泄露一些其他参数,因此设置了两个版本。试用版给出注册码,让大家可以体验到CM的注册流程;正式版不给注册码,保证正式版破解的难度。
然后说一下奖励:
1.爆破任意版本奖励20CB(奖励比较高,因为理论上说,这个CM很难爆破……反正我看源码也爆不了)
2.自己创造出一组注册码,试用版奖励10CB,正式版奖励30CB(注册成功后将复制的验证码回复到本帖,标明注册版本!)编写出Keygen另外奖励20CB。
3.逆向出任意版本TOTP验证器中(合成Secret、固定Secret、用户名)三者关系,奖励10CB;提取出试用版固定Secret参数,奖励5CB;正式版固定Secret参数10CB
4.逆向出CM的核心代码保护流程以及原理,奖励5CB。
最后是 附件啦
本帖最后由 JemmyloveJenny 于 2019-2-11 13:10 编辑
emmm还想给一点提示
注册码的解码函数我在上一个CM里用过, https://www.52pojie.cn/forum.php ... 619169&pid=16444143 被大神破解了
程序里是带有编码函数的,不必要自己重新编写。
里面有些RSA的幺蛾子……虽然Modulus只有90bit很好分解,但是为了方便大家,我还是把密钥对放出来:
Modulus="AhzSIFmr3hdGCJmP"
public_Exponent="AQAB"
private_Exponent="FJbPUnqdx3AVwbk="
Base64解密后就是数字本身了 本帖最后由 MXWXZ 于 2019-2-11 22:49 编辑
偷懒用了楼上的clean版的程序,看的舒服一点:lol
整理一下思路:首先那两个按键最终响应函数都是一样的,区别就是使用的文件不同(Core_Real和Core_Trial)
下面看看主函数,都有注释
注册码有两层函数,首先看一下第一层:
这个就是做一下运算,都是可逆的没啥,第二层:
这其实就是RSA的核心算法了,具体的可以去查资料,跟函数可以得到e=65537 n=653812236310615020475554191
yafu一下秒出:
p = 28192692348517
q = 23190840669923
d = 24890695783982426326679993
解密文件的函数:
C#不太熟并不知道CryptoStream咋用,反正应该就是AES解密文件了,密钥就是上面的sha值
下面就是一些显示的东西没啥了,如果密钥正确就解密成功,里面dump下来就是一个窗口的数据,没有什么混淆啥的基本等于脱光了给你看了
接着就是爱咋搞咋搞了。
呼,连看带记差不多一个小时,思路挺不错,直接把功能程序给加密了,应用的话可以搞个联网认证啥的而且丝毫不虚爆破(更丧心病狂一点,不附带功能数据验证成功后再各种加密发送……你连功能程序都没有爆破个球),但是问题也有,关键就在这个Key上,一旦泄露一个注册码就为所欲为了。
至于正式版的破解,有几个思路待验证,吃个夜宵先~
不存在的,AES256除非给码否则无解…… 本帖最后由 csftech 于 2019-2-11 16:12 编辑
[试用版]
CrackMe3.exe,直接 de4dot 就 OK 了,虽然要下一点参数,不过那个应该很多人都知道就不说了 (dr~~~)。
题目是 CM,我先直接 dump 解密后的 Core_Trial.dat,它是个 .Net Assembly (无混淆)
验证器逻辑如楼主所说,含有一组固定 secret,直接取用户名字组去做 TOTP 运算。
我写了个简单的 caller 去呼叫验证器,用户名部份我写成固定的 "Trial",可从专案直接改。
这样应该算是半个 keygen 了,有空再来解正式版和前面解密的部份。
完全不会算法,学了一下ModPow是什么东西,然后靠你留下来的方法keygen了试用版,RSA实在不会,不知道怎么弄正式版的,只能这样了
第一个图里面,断点上一行的strKey是keygen出来的key
然后复制出的结果,别的都不会了
1549872576:Trial:05453982 wwh1004 发表于 2019-2-11 16:09
完全不会算法,学了一下ModPow是什么东西,然后靠你留下来的方法keygen了试用版,RSA实在不会,不知道怎么 ...
你要用自己的用户名和注册码来注册试用版,再复制验证码
你现在复制的验证码是Trial的,不过你的注册码确实正确! JemmyloveJenny 发表于 2019-2-11 16:20
你要用自己的用户名和注册码来注册试用版,再复制验证码
你现在复制的验证码是Trial的,不过你的注册码 ...
好吧,可能复制错了,程序开了好几个,忘了哪个窗口了
1549873892:Trial:42308669
这样么? wwh1004 发表于 2019-2-11 16:32
好吧,可能复制错了,程序开了好几个,忘了哪个窗口了
1549873892:Trial:42308669
嗯,这样的对了! 先插个眼.做完单子再好好看...
撩了一眼Form_Input.
里面有几个 看着很眼熟的东西...
File.ReadAllBytes
Type type = Assembly.Load(array).GetType(yu2XUkVf8chkOx5N5I.FVHwEwDkM);
(Form)Activator.CreateInstance(type2, args);
这貌似都把dat给加密了...正式版难度不小呀. 本帖最后由 JemmyloveJenny 于 2019-2-11 21:56 编辑
aisht 发表于 2019-2-11 21:05
先插个眼.做完单子再好好看...
撩了一眼Form_Input.
嗯~分析挺正确的,所以说这个CM我看源码都没法爆破……
页:
[1]
2