[PYG官方教程]开悟之门-跟飘云学算法-1
特别说明:根据网友强烈要求~~特编写~继系列之后的又一算法系列,希望大家学有所成
教程约定:出于版权考虑~全部采用2008年之前的老版本软件做试验~ 仅做研究学习!
【破文标题】奇门遁甲演义CASR 10.31 算法分析
【破文作者】飘云
【作者主页】https://www.chinapyg.com
【破解平台】WinXp
【破解工具】PEiD0.94、OllyDbg
【作者邮箱】[email protected]
【软件名称】奇门遁甲演义CASR 10.31
【软件大小】1004KB
【原版下载】http://www.onlinedown.net/soft/22167.htm
【软件简介】恒古星旋中心商城精心推出『奇门遁甲演义』面向广大奇门爱好者
一、精致的经典盘图
完全仿照中国古代的奇门活盘并有所发展,盘图上每一块元素均可以点击查看说明或分析。另外还提供便于复制和传播的多种风格的纯文本局图
二、众多的奇门类型
支持拆补时家奇门、置闰拆补奇门、日家奇门、月家奇门、年家奇门一共五种奇门起局
三、广阔的时间支持
支持1901-2050年共150年时间,完全满足绝大多数用户的需要
四、计算机预测功能
计算机能够自行运用相应的奇门原理进行相关的课题预测,例如彩票、大盘、失盗等等,还可以看计算机的奇门推理过程
五、详尽的古今注语
1080格局的每一格局后均有详尽的现代注解和古注语,恒古星旋中心商城的作者们是将23万字硬敲进了程序,程序自动用彩色将常见的吉格凶格标明以便用户清楚看到
六、时间搜索功能
输入你所要搜索的要求,例如正北有奇门、吉星;天遁;青龙回首等等,程序能自动在设定的时间段内搜索出所有符合条件的时间
七、简洁的方位吉凶
将各个方位的吉凶程度计算机分析后用-8到18进行了27梯度量化,并用相应的颜色表示,便于用户及时快速知道各方吉凶
八、时间调整功能
运用时间调整技术将北京时间调为本地时间,使预测更加精确,内有中国各大城市一年24个半月的日出时间表直接选取即可,也可按照方法自行调整
九、完善的售后服务
一次注册终身免费升级,所有问题均在24小时内得到答复。
【破解过程】
直逼主体算法(别问我怎么来的,不明白的话查看原来的算法教程~~~):
0040CED4|>push ecx
0040CED5|>push edx
0040CED6|>push 00437DF4 ;qmdjyy10
0040CEDB|>mov ecx, esi
0040CEDD|>call 0040D1C0 ;计算"qmdjyy10" ASCII码总和设为Sum1
0040CEE2|>lea eax, dword ptr
0040CEE6|>lea ecx, dword ptr
0040CEEA|>push eax
0040CEEB|>lea edx, dword ptr
0040CEEF|>push ecx
0040CEF0|>push edx
0040CEF1|>mov ecx, esi
0040CEF3|>call 0040D1C0 ;计算用户名前12位ASCII码总和 设为Sum2
0040CEF8|>mov edi, 00437DF4 ;qmdjyy10
0040CEFD|>or ecx, FFFFFFFF ;ecx 用户名长度
0040CF00|>xor eax, eax ;EAX清零初始化
0040CF02|>repne scas byte ptr es:
0040CF04|>not ecx
0040CF06|>cmp ecx, 0C ;上面计算 小于 0x0C则跳 这里ECX = 9
0040CF09|>jle short 0040CF10
0040CF0B|>mov ecx, 0C ;否则ECX = 0x0C
0040CF10|>push ebp
0040CF11|>xor edi, edi ;EDI清零初始化
0040CF13|>lea ebp, dword ptr
0040CF16|>lea esi, dword ptr
0040CF1A|>/mov eax, edi
0040CF1C|>|cdq ;把EAX中的字的符号扩展到EDX中去
0040CF1D|>|idiv ecx ;商存放EAX,余数存放EDX
0040CF1F|>|inc edx ;edx+1 设为变量i
0040CF20|>|cmp edx, ebp
0040CF22|>|jge short 0040CF39
0040CF24|>|mov ebx, ebp ;ebx = ebp = 10
0040CF26|>|lea eax, dword ptr
0040CF2D|>|sub ebx, edx ;ebx-edx 作为循环次数
0040CF2F|>|/mov edx, dword ptr ;从"qmdjyy10"字符串中 第i位起取逐位ASCII送edx
0040CF31|>||add eax, 4 ;不解释了,自己看一下内存就知道如何要+4了
0040CF34|>||xor dword ptr , edx ;和用户名第i位ASCII异或,并覆盖第一位ASCII最终结果设为Xor1
0040CF36|>||dec ebx ;循环次数减1
0040CF37|>|\jnz short 0040CF2F
0040CF39|>|mov eax, dword ptr ;Sum1
0040CF3D|>|mov ebx, dword ptr ;Sum2
0040CF41|>|mov edx, dword ptr ;Xor1
0040CF43|>|sub eax, ebx ;Sum1 - Sum2
0040CF45|>|xor eax, edx ;(Sum1 - Sum2) xor Xor1
0040CF47|>|mov ebx, 1A ;ebx = 0x1A
0040CF4C|>|cdq
0040CF4D|>|xor eax, edx
0040CF4F|>|add esi, 4
0040CF52|>|sub eax, edx
0040CF54|>|cdq
0040CF55|>|idiv ebx ;只关心余数EDX中的内容
0040CF57|>|add dl, 41 ;0x41是什么??去查ASCII表吧! 是 'A',加上这个的意思就是保持输出的内容为字符~~~ 不知道的去恶补一下基础之基础~
0040CF5A|>|mov byte ptr , dl ;保存结果
0040CF5E|>|inc edi ;edi + 1
0040CF5F|>|cmp edi, 0C ;循环12次,别想了,注册码是12位
0040CF62|>\jl short 0040CF1A
【算法总结】
1.取特征码"qmdjyy10" ASCII总和,设为Sum1;
2.取用户名前12位ASCII总和,设为Sum2;
3.采用两个循环生成注册码:
外循环:12次,主要控制内循环中的变量i
内循环:10 - i 次~~~ 特征码第I位开始逐位和ASCII第i位进行异或运算并覆盖之,最终结果设为XOR1;
4.(Sum1 - Sum2) xor XOR1运算;
5.一系列的扩张、取于运算;
6.注册码生成
【算法注册】
我只贴出几个函数和框架,别偷懒,一起玩,根据算法,把循环部分完成之!!只要你拼接起来,不难吧?以后的注册机代码大都会这样做!{-------------------------------------------------------------------------------
过程名: Sum_Ascii
作用: 计算字符串的ASCII总和
作者: piaoyun
日期: 2008.10.17
参数: str:string
返回值: Integer
-------------------------------------------------------------------------------}
function Sum_Ascii(str:string):Integer;
var
i:integer;
begin
Result := 0;
for i := 1 to Length(str) do Result := Result + byte(str);
end;
{-------------------------------------------------------------------------------
过程名: ASM_Fun
作用: 算法分析中的那一系列头晕的东西,让它来处理~~~
作者: piaoyun
日期: 2008.10.17
参数: sum1,sum2,xor1:integer
返回值: Char
-------------------------------------------------------------------------------}
function ASM_Fun(sum1,sum2,xor1:integer):Char;
var
temp:Char;
begin
asm
pushad
xor eax,eax
xor ebx,ebx
xor edx,edx
mov eax, sum1
mov ebx, sum2
mov edx, xor1
sub eax, ebx
xor eax, edx
mov ebx, $1A
cdq
xor eax, edx
add esi, 4
sub eax, edx
cdq
idiv ebx
add dl, $41
mov temp,dl
popad
end;
Result := temp;
end;
procedure TForm1.btnOkClick(Sender: TObject);
var
i,j,k:integer;
sum1,sum2,xor1:integer;
name:string;
sn:string;
const
qmdj = 'qmdjyy10';
begin
if edtName.Text <> '' then
begin
name := edtName.Text;
sum1 := Sum_Ascii(qmdj);
sum2 := Sum_Ascii(leftStr(edtName.Text,12));
//-----------------------------------
for i := 1 to 12 do
begin
//自己动脑筋拼接
for j := k to 10 do
begin
//自己动脑筋拼接
end;
sn := sn + ASM_Fun(sum1,sum2,xor1);
end;
//输出注册码
edtSn.Text := sn;
//------------------------------------
end
else
ShowMessage('请输入用户名!');
end;【版权声明】 本文原创于P.Y.G官方,纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢! 顶上,坐上飘云老大的沙发。。。。 大家快来跟飘云老大学算法/:09 /:09 /:001 /:001 /:001
HOHO!!!!!!跟飘云老大学算法来了!!!!!!!!!!!!!!! 希望 能坚持带领我们走下去 !
不希望 有太多的好的开头,只希望有一个美好的句号!:loveliness:
感谢! 学习并继续关注。/:good 学算法,学delphi/:018 太好了,可以跟着老大学习算法了!/:018 支持 .学习了!!:victory: :victory: :victory: 仔细阅读中。。。。。