y.a过程计算出第一步注册码,6位数字 818768
x.a过程,通过818768,计算出第2过程的注册码,32位长度:EFE1499CED0B97FE91CFCBB71E0F2C98
这个过程太过于复杂,没有看明白,只能略过去了。
(备注:整体的计算过程如此,由于之前破解的时候,已经把软件注册了,这个是刚安装的虚拟机,在里面计算出来的,机器码
是:67154-29574-61760-40730,最终计算出来的注册为:2TTUCKBA2181B81)
y.b过程:此过程是通过上面的步骤计算出来的字符串,通过循环计算、取ASC码,再间隔取位拼接出最终的8位值:2TTU2181
这是该软件的整个注册流程示意。
小结:能从头一步一步看到这里,如果还能跟着动手实践过来,那么这款软件,或者同同样类型的软件,我们就可以尝试着来破解了。
我们回过头来,在从新看一下过程,
软件查壳---->(如有De4dot去混淆)----->扔进Dnspy进行动态分析----->依据注册提示搜索关键字(注册、注册错误等提示信息)
---->根据找到的方法或者函数或者调用,单步跟踪---->观察局部变量窗口,注意其中的每个值----->遇到关键的调用,F11步进跟踪
或者Ctrl+鼠标单击调用开新窗口跟踪过去。--->能到这里,基本上可以有80%的可能性找到注册码。余下的就是耐心和不断遇到新问题,
遇新问题,多多论坛搜索或者百度。
至此,已经完成整个注册过程的分析,虽然很短,也可能讲的不太明白。但是对于一个新入门的小白来说,已经是很不容易了。
也希望得到更多的坛友与大神的帮助,共同成长。
三、最后的最后
由于算法中关于机器码的第2个步骤没有看懂,太过冗长与复杂,只能选择先爆破,还做不出注册机来。只能先做个爆破的版本,给
坛友使用。
最后附上爆破的主程序地址:http://pan.baidu.com/s/1mimIAIO
[C#] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
catch (Exception exception1)
{
ProjectData.SetProjectError(exception1);
Exception exception = exception1;
ProjectData.ClearProjectError();
}
if (Operators.CompareString(y.b, right, true) <= 0)
{
y.a(ref right);
if (Operators.CompareString(left, y.c, true) == 0)
{
y.c = "a@^*(^*ga$(&%io";
return true;
}
}
return false;
}
return false;
}
|
编辑了好长好长时间,那个将word中粘贴过来的功能好像不太好用。不知道编辑出来的效果好不好。
编辑完看了一下,图片的顺序好像有点乱,最后面还多出一张,重新编辑,还看不到。大家对付看吧,
有不明白的地方,可以留言,我看见了会回复,也可以一起来学习,更希望得到大神的指点。
总结:;
1、通过本次的破解体验,基本上掌握和了解了.net破解的流程与使用的工具。其中大爱Scan id/Dot net id用来查壳,De4dot脱壳,
Dnspy动态调试追码,Reflector+Reflexi爆破。本次调试由于软件可以看出反汇编的代码,没有用De4dot反混淆。这个软件的使用
相对简单,在cmd模式下,执行 de4dot 空格 待反混淆软件名称 回车就OK,我看他们有带/df参数的,结果都报错,直接de4dot
加软件的路径名称就可以脱掉。但是它们说DN Guard这种干不掉,好像是个强壳。
2、了解了.net的混淆、反混淆、强命名、命名空间等的一些概念,如果能会一些编程语言,对调试程序有很多益处,哪怕只有一点点。
知道一些基础语法,对于逆向调试的软件整个流程的逻辑结构会有个大致的掌握。
3、软件的注册机制,个人感觉绝大部分或者全部,都应该会在软件内有一个验证机制,也就是在软件内部一定会有注册码的计算过程。
通过跟踪到特定的领空,就可以把码拿出来。(也可能会有网络验证的那种,读取到注册码,直接服务器比对,来验证软件的授权情况,
不过针对这种情况,也可以处理,就是跟踪到验证的部位,直接修改代码的返回值,还和爆破差不多。),在这里就是思考注册的流程
然后想不同的办法来对付它。
能想到的就这些,寻求逆向的小伙伴一起上路。
上一页 [1] [2]
|