吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4796|回复: 20
收起左侧

[CrackMe] .NET CrackeMe Level 2

[复制链接]
breezer 发表于 2018-2-13 10:57
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

整理电脑时发现了以前写的 .NET CrackMe,源代码早就找不到了,算法也忘了。简单混淆,有爆破点,能写出 Keygen 最好啦,这样我才有动力写 Level 3 哦!
注册码正确会弹出对话框提示。
爆破难度:++
Keygen 难度:+++

祝大家春节快乐!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ghostfish + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

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

zeknight 发表于 2018-2-26 15:36
传说中的算法部分
namespace Razr
{
        // Token: 0x02000002 RID: 2
        internal static class Decode
        {
                // Token: 0x06000001 RID: 1 RVA: 0x000020A0 File Offset: 0x000002A0
                public static string PolyText(string input, string key)
                {
                        char[] array = input.ToCharArray();
                        char[] array2 = key.ToCharArray();
                        char[] array3 = new char[input.Length - 1];
                        int num = (int)array[input.Length - 1];
                        array[input.Length - 1] = '\0';
                        int num2 = 0;
                        for (int i = 0; i < input.Length; i++)
                        {
                                if (i < input.Length - 1)
                                {
                                        if (num2 >= array2.Length)
                                        {
                                                num2 = 0;
                                        }
                                        int num3 = (int)array[i];
                                        int num4 = (int)array2[num2];
                                        int num5 = num3 - num - num4;
                                        array3[i] = 睷.HAAAAA==(num5);
                                        num2++;
                                }
                        }
                        return new string(array3);
                }

                // Token: 0x06000002 RID: 2 RVA: 0x00002144 File Offset: 0x00000344
                public static byte[] Byteside(byte[] Data, byte[] Key)
                {
                        if (Data.Length == 0)
                        {
                                return Data;
                        }
                        return Decode.ToByteArray(Decode.BDecrypt(Decode.ToUInt32Array(Data, false), Decode.ToUInt32Array(Key, false)), true);
                }

                // Token: 0x06000003 RID: 3 RVA: 0x00002168 File Offset: 0x00000368
                private static uint[] BDecrypt(uint[] v, uint[] k)
                {
                        int num = v.Length - 1;
                        if (num < 1)
                        {
                                return v;
                        }
                        if (k.Length < 4)
                        {
                                uint[] array = new uint[4];
                                睸.HgAAAA==%(k, array, 0);
                                k = array;
                        }
                        uint num2 = v[num];
                        uint num3 = v[0];
                        uint num4 = 2654435769u;
                        int num5 = 6 + 52 / (num + 1);
                        for (uint num6 = (uint)((long)num5 * (long)((ulong)num4)); num6 != 0u; num6 -= num4)
                        {
                                uint num7 = num6 >> 2 & 3u;
                                int i;
                                for (i = num; i > 0; i--)
                                {
                                        num2 = v[i - 1];
                                        num3 = (v[i] -= ((num2 >> 5 ^ num3 << 2) + (num3 >> 3 ^ num2 << 4) ^ (num6 ^ num3) + (k[(int)(checked((IntPtr)(unchecked((long)(i & 3) ^ (long)((ulong)num7)))))] ^ num2)));
                                }
                                num2 = v[num];
                                num3 = (v[0] -= ((num2 >> 5 ^ num3 << 2) + (num3 >> 3 ^ num2 << 4) ^ (num6 ^ num3) + (k[(int)(checked((IntPtr)(unchecked((long)(i & 3) ^ (long)((ulong)num7)))))] ^ num2)));
                        }
                        return v;
                }

                // Token: 0x06000004 RID: 4 RVA: 0x00002274 File Offset: 0x00000474
                private static uint[] ToUInt32Array(byte[] Data, bool IncludeLength)
                {
                        int num = ((Data.Length & 3) == 0) ? (Data.Length >> 2) : ((Data.Length >> 2) + 1);
                        uint[] array;
                        if (IncludeLength)
                        {
                                array = new uint[num + 1];
                                array[num] = (uint)Data.Length;
                        }
                        else
                        {
                                array = new uint[num];
                        }
                        num = Data.Length;
                        for (int i = 0; i < num; i++)
                        {
                                array[i >> 2] |= (uint)((uint)Data[i] << ((i & 3) << 3));
                        }
                        return array;
                }

                // Token: 0x06000005 RID: 5 RVA: 0x000022E4 File Offset: 0x000004E4
                private static byte[] ToByteArray(uint[] Data, bool IncludeLength)
                {
                        int num = Data.Length << 2;
                        if (IncludeLength)
                        {
                                int num2 = (int)Data[Data.Length - 1];
                                if (num2 > num)
                                {
                                        throw new BytesideException("Byteside Decrypt Error: Wrong input data.");
                                }
                                num = num2;
                        }
                        byte[] array = new byte[num];
                        for (int i = 0; i < num; i++)
                        {
                                array[i] = (byte)(Data[i >> 2] >> ((i & 3) << 3));
                        }
                        return array;
                }
        }
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
tfrist + 1 + 1 热心回复!

查看全部评分

Niuer 发表于 2018-2-14 22:11
[C#] 纯文本查看 复制代码
// CrackMe.MainForm
// Token: 0x0600001D RID: 29 RVA: 0x00002434 File Offset: 0x00000634
[DebuggerHidden]
private void Button1Click(object sender, EventArgs e)
{
	byte[] array = new byte[]
	{
		85,
		51,
		192,
		144,
		139,
		236,
		144,
		139,
		69,
		8,
		82,
		185,
		16,
		0,
		72,
		43
	};
	if (睼.FgAAAA==(this.textBox1.Text) || 睼.FgAAAA==(this.textBox2.Text))
	{
		MessageBox.Show(this.username, this.err);
		return;
	}
	if (!this.textBox2.Text.Contains("-") || this.textBox2.TextLength != 19)
	{
		MessageBox.Show(this.invalidsn, this.err);
		return;
	}
	string text = this.textBox2.Text.Replace("-", "");
	if (!this.IsNumeric(text))
	{
		睽.dgAAAA==(this.invalidsn, this.err);
		return;
	}
	int a = Convert.ToInt32(text.Substring(0, 4));
	int a2 = 睾.HQAAAA==(text.Substring(8, 4));
	byte[] array2 = Decode.Byteside(HexData.CalBytes, array);
	string text2 = 睿.GgAAAA==(this.key, ShellCode.LoadHexData(ref array2, a, 1000, a2, 380).ToString());
	Type type = base.GetType();
	MethodInfo methodInfo = 瞀.KAAAAA==%(type, Decode.PolyText(this.me, text2));
	if (methodInfo != null)
	{
		瞁.KgAAAA==%(methodInfo, this, new object[0]);
	}
}



没学过C#不过大概知道关键部分应该在这
boyulin 发表于 2018-2-13 17:09
請教一下  這階段的 錯誤 是因為打錯 驗證碼還是程式 有問題!?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

点评

你可以点一下详细资料,应该能知道个大概哪出错。  详情 回复 发表于 2018-2-13 17:53
云在天 发表于 2018-2-13 17:53
boyulin 发表于 2018-2-13 17:09
請教一下  這階段的 錯誤 是因為打錯 驗證碼還是程式 有問題!?

你可以点一下详细资料,应该能知道个大概哪出错。
boyulin 发表于 2018-2-13 18:02
云在天 发表于 2018-2-13 17:53
你可以点一下详细资料,应该能知道个大概哪出错。

恩 我有下斷點 去跟 大概是這段Razr.UnsafeNativeMethods.CallWindowProc  
不曉得是他 值給錯 導致崩潰還是怎樣
云在天 发表于 2018-2-13 18:15


楼主啊,城会玩

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 1吾爱币 +1 收起 理由
breezer + 1 我很赞同!

查看全部评分

DEFwa 发表于 2018-2-13 18:16
真是厉害,绝对高手强烈支持.
天若幽心 发表于 2018-2-13 18:20
本帖最后由 天若幽心 于 2018-2-13 18:22 编辑

厉害,这个爆破很容易,注册码不好找。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 1吾爱币 +1 收起 理由
breezer + 1 我很赞同!

查看全部评分

无痕软件 发表于 2018-2-13 19:01
System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
   在 Razr.UnsafeNativeMethods.CallWindowProc(IntPtr lpPrevWndFunc, Int32 a1, Int32 a2, Int32 a3, Int32 a4)
   在 Razr.ShellCode.LoadHexData(Byte[]& HexBytes, Int32 a1, Int32 a2, Int32 a3, Int32 a4)
   在 CrackMe.MainForm.Button1Click(Object sender, EventArgs e)
   在 System.Windows.Forms.Control.OnClick(EventArgs e)
   在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   在 System.Windows.Forms.Control.WndProc(Message& m)

navtive 方法调用出错。
boyulin 发表于 2018-2-13 19:53
本帖最后由 boyulin 于 2018-2-13 19:55 编辑

還是不懂那個報錯 怎解

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 1吾爱币 +1 收起 理由
breezer + 1 当年写的比较草率,Bug 很多。

查看全部评分

海盗小K 发表于 2018-2-13 22:05
你的Shellcode应该有问题,调用CallWindowProc的时候会抛异常。而且,.Net的程序,本来就不应该调API,更别提用shellcode调API了。。。思路很好,同时也很危险

爆破很简单,输入19位key抛异常,不想追keygen了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 16:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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