|
【下载地址】: 自己搜索下载
【编写语言】: Microsoft Visual C# / Basic .NET
【使用工具】: Reflector,SNRemove,CFF,IDA,Simple Assembly Explorer,Hex Workshop
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
简单的一个.NET的程序。。。适合对.Net逆向不熟悉的菜菜。。。
PEID查壳显示:Microsoft Visual C# / Basic .NET
Basic .NET的。。
试着运行下标题上显示试用时间。。。功能上没有限制。。
开始动手:
Reflector 载入:
看看有什么敏感信息:
发现RegisterForm:
很明显被混淆过了。。。
在里面找到关键部分:
- private void (object, EventArgs)
- {
- if (Environment.OSVersion.Version.Minor == 1)
- {
- Encryption.CryptoProvider defaultProvider = Encryption.CryptoProvider.RC2;
- Encryption encryption = new Encryption("zse3432WERtgyh87opDDertyuMKioiirq24D5bnA", defaultProvider);
- if (!this..ValidateKey(this..Text))
- {
- MessageBox.Show("The key you enter is INVALID!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
- }
- else
- {
- MessageBox.Show("Thank you for the registration!", "Registration complete", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- try
- {
- RegistryKey key2 = Registry.CurrentUser.OpenSubKey(@"Software\Dasain.com\CodeKeeper.NET", true);
- string str = encryption.Encrypt(this..Text, "zse3432WERtgyh87opDDertyuMKioiirq24D5bnA");
- key2.SetValue("Registration", str);
- key2.Close();
- }
- catch
- {
- }
- }
- }
- else if (this..ValidateKey(this..Text))//ValidateKey通过方法判断用户输入的序列号是否有效!!!!
- {
- MessageBox.Show("Thank you for the registration!", "CodeKeeper .NET", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- try
- {
- RegistryKey key4 = Registry.CurrentUser.OpenSubKey(@"Software\Dasain.com\CodeKeeper.NET", true);
- string text = this..Text;
- key4.SetValue("Registration", text);
- key4.Close();
- }
- catch
- {
- }
- }
- else
- {
- MessageBox.Show("The key you enter is INVALID!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
- }
- }
-
-
-
复制代码 双击下来到ValidateKey方法,发现在Dasain.Key.dll中。。。
- public bool ValidateKey(string key)
- {
- char[] chArray = new char[0x18];
- int num2 = 0;
- for (int i = 0; (i < key.Length) && (num2 < 0x18); i++)
- {
- char ch = key[i];
- if ((((ch >= '0') && (ch <= '9')) || ((ch >= 'a') && (ch <= 'z'))) || ((ch >= 'A') && (ch <= 'Z')))
- {
- chArray[num2++] = key[i];
- }
- }
- for (int j = 0; j < chArray.Length; j++)
- {
- if ((chArray[j] >= 'a') && (chArray[j] <= 'z'))
- {
- chArray[j] = (char) ((chArray[j] + 'A') - 0x61);
- }
- }
- for (int k = 0; k < chArray.Length; k++)
- {
- if (chArray[k] == 'I')
- {
- chArray[k] = '1';
- }
- if (chArray[k] == 'L')
- {
- chArray[k] = '1';
- }
- if (chArray[k] == 'O')
- {
- chArray[k] = '0';
- }
- if (chArray[k] == 'S')
- {
- chArray[k] = '5';
- }
- }
- for (int m = 0; m < chArray.Length; m++)
- {
- char[] chArray2;
- int num6;
- if ((chArray[m] >= '0') && (chArray[m] <= '9'))
- {
- (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - '0');
- }
- if ((chArray[m] >= 'A') && (chArray[m] <= 'H'))
- {
- (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - '7');
- }
- if ((chArray[m] >= 'J') && (chArray[m] <= 'K'))
- {
- (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - '8');
- }
- if ((chArray[m] >= 'M') && (chArray[m] <= 'N'))
- {
- (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - '9');
- }
- if ((chArray[m] >= 'P') && (chArray[m] <= 'R'))
- {
- (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - ':');
- }
- if ((chArray[m] >= 'T') && (chArray[m] <= 'Z'))
- {
- (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - ';');
- }
- }
- long num7 = 0L;
- long num8 = 0L;
- long num9 = 1L;
- for (int n = 0; n < 12; n++)
- {
- num7 += chArray[n] * num9;
- num9 *= 0x20L;
- }
- num9 = 1L;
- for (int num11 = 12; num11 < 0x18; num11++)
- {
- num8 += chArray[num11] * num9;
- num9 *= 0x20L;
- }
- num7 = (num7 ^ 0x89b01d3da4d55a9L) ^ this.;
- num8 = (num8 ^ 0x8bc9f8bd58b03d5L) ^ this.;
- long num12 = num7 & 0x3fffffffL;
- long num13 = (num7 & 0xfffffffc0000000L) >> 30;
- long num14 = num8 & 0x3fffffffL;
- long num15 = (num8 & 0xfffffffc0000000L) >> 30;
- return (((num12 == num13) && (num12 == num14)) && (num12 == num15));
- }
- 有兴趣的朋友试试做个注册机吧~~!!
-
复制代码 再看下程序哪里还用到了这个方法:
有两处:
现在开始来修改程序,只要ValidateKey方法返回的总是1就可以了:
就用个工具去改吧。。。
Simple Assembly Explorer打开程序
双击dasain.key.dll
- 386 L_0288: bne.un.s 389 -> ldc.i4.0
- 387 L_028a: ldc.i4.1
- 388 L_028b: ret
- 389 L_028c: ldc.i4.0 //右击EDIT改为ldc.i4.1保存退出
- 390 L_028d: ret
-
复制代码 试运行下。。发现强名称检验失败:
讲下强名称的去除方法:
手动来:
IDA载入dasain.key.dll到开始位置如下图:
这里就是强名称了。。。
用Hex Workshop打开搜索一下。。
用工具Strong Name Remove就更简单了就不说了。。
修改完后运行还是提示强名称检验失败。。。汗汗。。。dasain.key.dll强名称已经去除了。。。那肯定就是主程序的事咯。
同样的方法去除CodeKeeper.NET.exe的强名称。。
之后用CFF打开:
这次就用工具试下吧:
好了。。。再来运行下。。哈哈。。可以了。。。
|
评分
-
参与人数 24 | HB +22 |
THX +13 |
收起
理由
|
猫妖的故事
| |
+ 1 |
|
虚心学习
| + 1 |
|
[吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩! |
24567
| + 2 |
|
|
花盗睡鼠
| + 1 |
|
[吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守! |
Jawon
| |
+ 1 |
|
一路走来不容易
| + 1 |
|
|
后学真
| |
+ 1 |
|
消逝的过去
| |
+ 1 |
|
飞刀梦想
| + 1 |
|
|
冷亦飞
| |
+ 1 |
[吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意! |
zxjzzh
| |
+ 1 |
[吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守! |
xgbnapsua
| |
+ 1 |
|
4957465
| + 1 |
|
|
liugu0hai
| + 1 |
|
[吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意! |
ghostxu
| + 1 |
|
[吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守! |
ldljlzw
| + 1 |
|
|
zwj00544
| + 1 |
|
|
hackysh
| + 1 |
|
|
lies
| |
+ 1 |
|
呴呴喽
| + 1 |
+ 1 |
★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!! |
逍遥枷锁
| + 4 |
+ 1 |
好人有好报!你的热心我永远不忘!谢谢! |
飞行太保
| + 1 |
+ 1 |
★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!! |
雪里红
| + 1 |
+ 1 |
★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!! |
Shark恒
| + 3 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品!! |
查看全部评分
|