菜鸟的《半仙算命》手动脱壳,追注册码,算法注册机全系列.大侠莫笑我~~
昨天刚刚注册的PYG,一直很想进来,看到开放注册了马上就注册了,大礼包里面有Delphi的培训班,正好我可以借着发这个帖子来个原创,呵呵,两个月前在FF写的东西,大侠莫笑我哦 o(∩_∩)o...呵呵。【破文标题】《半仙算命》手动脱壳,追注册码,算法注册机全系列.大侠莫笑我~~
【破文作者】Xusually
【作者邮箱】[email protected]
【作者主页】http://blog.csdn.net/xusually/
【破解工具】PEID OD KeyMaker
【破解平台】WindowsXP
【软件名称】半仙算命 V2007 Build0415
【软件大小】2.04M
【原版下载】http://www.fuzi.cn/rj/ssbx070415.exe
【保护方式】
【软件简介】
〖半仙算命〗软件是目前网上功能最为强大,内容最为丰富的算命工具。软件集成了多种测算选项,测算内容、测算项目极其丰富,包括姓名吉凶测算、命运推算、科学起名向导、生男生女查询以及万年历、农历、中国黄历、皇历等等实用查询等。软件功能强大,使用简单、绿色、环保,只要你正确选择好出生的日期,即可自动转换为农历、属相、星座等然后软件将依此进行命运推算、姓名推算等等,软件运算参考数十种古代命理、算命、运程、吉凶书籍,有根有据。
【破解声明】
个人兴趣,讨论技术....
【破解过程】
1,查壳:
ssbx.exe拖至PEiD.结果为: ASPack 2.12 -> Alexey Solodovnikov.是个压缩壳,我还可以handle.嘿嘿.
http://xusually.a.orn.jp/shell.jpg
2,脱壳:
祭出OD,OD加载,停在00689001 >60 pushad ; (initial cpu selection)
F8一次,ESP红色 0012FFA4.
使用ESP定律,在Command中输入 dd esp,回车.
在内存窗口中第一行上右键->断点->硬件访问->DWord
F9,程序开始执行,停在:006893B0 /75 08 jnz short 006893BA
3次F8,程序大跳跃,飞到00573998,这里就是OEP了,在反汇编窗口右键->Dump debugged process->Dump->保存为ssbx_unpack.exe
运行一下ssbx_unpack.exe,成功运行,脱壳成功.使用PEiD查壳,显示Borland Delphi 6.0 - 7.0.
http://xusually.a.orn.jp/unpacked.jpg
3,追码:
运行ssbx_unpack.exe.点软件注册,什么都不要填写,点注册,弹出:注册信息没有填写齐全.
OK,OD加载ssbx_unpack.exe,停在00573998 >/$55 push ebp,
反汇编窗口上右键->UltraStringReference->Find ASCii->Ctrl+F->搜索"注册信息没有填写齐全",成功找到.
双击这一行,回到0055BC54|> \B8 84BE5500 mov eax, 0055BE84 ;注册信息没有填写齐全.
这里附近都是注册验证的代码,往上面找个合适的地方下断.我们在这段子程序入口的地方下0055BB50/.55 push ebp,
按F2下断.F9,开始运行,点软件注册,确认码填写11111111,注册码填写22222222.
点确认注册,程序停在我们下的断点.多次F8,遇到回跳的跳转在其下一行F4,一直往下跟,同时注意寄存器窗口,多次F8之后到达0055BCB3|.E8 C890EAFF call 00404D80,
右边寄存器窗口出现真假注册码
EAX 0105B9F8 ASCII "22222222"----我们写的假的注册码
ECX 00000001
EDX 0105BA5C ASCII "73565055"----真码
好了,我们退出OD,运行ssbx.exe.
输入确认码和注册码.成功注册!追码成功!(追出的可用确认码:11111111,注册码:73565055)
4,制作内存注册机:
如下图,中断地址:55BCB3,中断次数1,第一字节E8,指令长度5.内存方式,寄存器EDX,地址指针一层.可是生成的注册机就是无法成功使用,进程管理器里面有注册机和ssbx_unpack.exe的进程,可是没有任何界面,强行结束后explorer.exe桌面和任务栏还停止响应.郁闷.至今不知为什么.各位大大经过的话指点一下,小弟先谢谢了.
http://xusually.a.orn.jp/memokeygen.jpg
5,算法注册机:
正在我为内存注册机的事情郁闷的时候,看到那个帖子里面flying2000大大贴出了这个软件的算法分析,如下(开始的时候他的分析有误,后来更正):
【文章标题】: 半仙算命算法简析
【文章作者】: Flying2000
【软件名称】: 半仙算命
【加壳方式】: Aspack
【编写语言】: Delphi
【使用工具】: OllyDbg
【操作平台】: Vista
【软件介绍】: 算命软件
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
如LZ所述,找到关键点:
0055BC54|> \B8 84BE5500MOV EAX,unpacked.0055BE84 ;注册信息没有填写齐全
0055BC59|.E8 0E50EEFFCALL unpacked.00440C6C
0055BC5E|.E9 5E010000JMP unpacked.0055BDC1
0055BC63|>8D95 5CFFFFFF LEA EDX,DWORD PTR SS://经过了简单的有效性验证的注册码
0055BC69|.8B83 04030000 MOV EAX,DWORD PTR DS:
继续往下看:
0055BC6F|.E8 6CC2EEFFCALL unpacked.00447EE0 ;获得输入的注册码
0055BC74|.8B85 5CFFFFFF MOV EAX,DWORD PTR SS:
0055BC7A|.50 PUSH EAX
0055BC7B|.8D95 54FFFFFF LEA EDX,DWORD PTR SS:
0055BC81|.8B83 FC020000 MOV EAX,DWORD PTR DS:
0055BC87|.E8 54C2EEFFCALL unpacked.00447EE0
0055BC8C|.8B85 54FFFFFF MOV EAX,DWORD PTR SS: ;获得输入的确认码
0055BC92|.E8 E9D9EAFFCALL unpacked.00409680 ;确认码StrToInt转成整形Code1
0055BC97|.B9 FC200000MOV ECX,20FC
0055BC9C|.99 CDQ
0055BC9D|.F7F9 IDIV ECX
0055BC9F|.8BC2 MOV EAX,EDX ;eax=Code1 除 0x20FC的余数
0055BCA1|.8D95 58FFFFFF LEA EDX,DWORD PTR SS:
0055BCA7|.E8 B0FDFFFFCALL unpacked.0055BA5C//关键算法call,跟入
0055BCAC|.8B95 58FFFFFF MOV EDX,DWORD PTR SS:
0055BCB2|.58 POP EAX
0055BCB3|.E8 C890EAFFCALL unpacked.00404D80//明码比较,做内存注册机就看这里了:D
0055BCB8|.0F85 E9000000 JNZ unpacked.0055BDA7
0055BCBE|.A1 807D5700MOV EAX,DWORD PTR DS:
0055BCC3|.8B00 MOV EAX,DWORD PTR DS:
0055BCC5|.8B80 2C040000 MOV EAX,DWORD PTR DS:
0055BCCB|.BA A4BE5500MOV EDX,unpacked.0055BEA4 ;本软件已注册
0055BCD0|.E8 3BC2EEFFCALL unpacked.00447F10
0055BCD5|.8D95 50FFFFFF LEA EDX,DWORD PTR SS:
0055BCDB|.8B83 FC020000 MOV EAX,DWORD PTR DS:
0055BCE1|.E8 FAC1EEFFCALL unpacked.00447EE0
0055BCE6|.8B8D 50FFFFFF MOV ECX,DWORD PTR SS:
0055BCEC|.BA BCBE5500MOV EDX,unpacked.0055BEBC ;ssbxr
0055BCF1|.8BC6 MOV EAX,ESI
0055BCF3|.E8 BCDEF4FFCALL unpacked.004A9BB4
跟入算法call,来到:
0055BA5C/$55 PUSH EBP
0055BA5D|.8BEC MOV EBP,ESP
0055BA5F|.33C9 XOR ECX,ECX
0055BA61|.51 PUSH ECX
0055BA62|.51 PUSH ECX
0055BA63|.51 PUSH ECX
0055BA64|.51 PUSH ECX
0055BA65|.53 PUSH EBX
0055BA66|.56 PUSH ESI
0055BA67|.8BF2 MOV ESI,EDX
0055BA69|.8BD8 MOV EBX,EAX
0055BA6B|.33C0 XOR EAX,EAX
0055BA6D|.55 PUSH EBP
0055BA6E|.68 2CBB5500PUSH unpacked.0055BB2C
0055BA73|.64:FF30 PUSH DWORD PTR FS:
0055BA76|.64:8920 MOV DWORD PTR FS:,ESP
0055BA79|.81F3 F1250B00 XOR EBX,0B25F1 ;Code1 = Code1 xor 0x0B25F1
0055BA7F|.8BC3 MOV EAX,EBX
0055BA81|.33D2 XOR EDX,EDX
0055BA83|.52 PUSH EDX ; /Arg2 => 00000000
0055BA84|.50 PUSH EAX ; |Arg1
0055BA85|.8D45 FC LEA EAX,DWORD PTR SS: ; |
0055BA88|.E8 BFDBEAFFCALL unpacked.0040964C ; \unpacked.0040964C 该call将计算完的整形转为string
0055BA8D|.8B45 FC MOV EAX,DWORD PTR SS: ;
0055BA90|.0FB600 MOVZX EAX,BYTE PTR DS: ;第一位的ASCII
0055BA93|.8B55 FC MOV EDX,DWORD PTR SS: ;
0055BA96|.0FB652 01 MOVZX EDX,BYTE PTR DS: ;第二位的ASCII
0055BA9A|.03C2 ADD EAX,EDX ;相加
0055BA9C|.B9 05000000MOV ECX,5
0055BAA1|.99 CDQ
0055BAA2|.F7F9 IDIV ECX
0055BAA4|.80C2 34 ADD DL,34 ;除5的余数+0x34
0055BAA7|.8855 F8 MOV BYTE PTR SS:,DL
0055BAAA|.8B45 FC MOV EAX,DWORD PTR SS:
0055BAAD|.0FB640 02 MOVZX EAX,BYTE PTR DS: ;第三位ASCII
0055BAB1|.8B55 FC MOV EDX,DWORD PTR SS:
0055BAB4|.0FB652 03 MOVZX EDX,BYTE PTR DS: ;第四位ASCII
0055BAB8|.03C2 ADD EAX,EDX
0055BABA|.B9 05000000MOV ECX,5
0055BABF|.99 CDQ
0055BAC0|.F7F9 IDIV ECX
0055BAC2|.8BDA MOV EBX,EDX
0055BAC4|.80C3 33 ADD BL,33 ;一样,+0x33
0055BAC7|.885D F9 MOV BYTE PTR SS:,BL
0055BACA|.8D45 F4 LEA EAX,DWORD PTR SS:
0055BACD|.8A55 F8 MOV DL,BYTE PTR SS:
0055BAD0|.E8 8F90EAFFCALL unpacked.00404B64
0055BAD5|.8B45 F4 MOV EAX,DWORD PTR SS:
0055BAD8|.8D55 FC LEA EDX,DWORD PTR SS:
0055BADB|.B9 1B000000MOV ECX,1B
0055BAE0|.E8 3794EAFFCALL unpacked.00404F1C//连接字符串1
0055BAE5|.8D45 F0 LEA EAX,DWORD PTR SS:
0055BAE8|.8BD3 MOV EDX,EBX
0055BAEA|.E8 7590EAFFCALL unpacked.00404B64
0055BAEF|.8B45 F0 MOV EAX,DWORD PTR SS:
0055BAF2|.8D55 FC LEA EDX,DWORD PTR SS:
0055BAF5|.B9 19000000MOV ECX,19
0055BAFA|.E8 1D94EAFFCALL unpacked.00404F1C//连接字符串2
0055BAFF|.8BC6 MOV EAX,ESI
0055BB01|.8B55 FC MOV EDX,DWORD PTR SS:
0055BB04|.E8 CF8EEAFFCALL unpacked.004049D8
0055BB09|.33C0 XOR EAX,EAX
0055BB0B|.5A POP EDX
0055BB0C|.59 POP ECX
0055BB0D|.59 POP ECX
0055BB0E|.64:8910 MOV DWORD PTR FS:,EDX
0055BB11|.68 33BB5500PUSH unpacked.0055BB33
0055BB16|>8D45 F0 LEA EAX,DWORD PTR SS:
0055BB19|.BA 02000000MOV EDX,2
0055BB1E|.E8 858EEAFFCALL unpacked.004049A8
0055BB23|.8D45 FC LEA EAX,DWORD PTR SS:
0055BB26|.E8 598EEAFFCALL unpacked.00404984
0055BB2B\.C3 RETN
算法总结:
A=确认码除0x20FC的余数与0x0B25F1进行异或。
B=A的第一位ASCII+A的第二位ASCII
C=A的第三位ASCII+A的第四位ASCII
注册码=A的字符串形态+(B除5的余数+0x34)对应的字符+(C除5的余数+0x33)对应的字符
--------------------------------------------------------------------------------
【经验总结】
软件的算法很简单只是我说起来有点晕而已,呵呵。明码比较更是其中的重大破绽,总体来说,是个适合练手的软件^_^
--------------------------------------------------------------------------------
【版权声明】: 本文原创于霏凡论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年09月04日 16:06:15
看过算法后,正好初学Delphi,就用Delphi写的注册机,TForm1上用了三个TLabel,一个TButton,两个TEdit,源码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ron:integer;
varA:integer;
varB:integer;
varC:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
randomize;
ron:=random(90000000)+10000000;//产生10000000-99999999的随机数,作为确认码
form1.Edit1.Text:=inttostr(ron);
varA:=(ron mod 8444) xor 730609; //确认码除以0x20FC的余数和0x0B25F1异或
varB:=ord(copy(inttostr(varA),1,1))+ord(copy(inttostr(varA),2,1)); //varA的第一位的ascii码+varA的第二位的ascii码的和
varC:=ord(copy(inttostr(varA),3,1))+ord(copy(inttostr(varA),4,1)); //varA的第三位的ascii码+varA的第四位的ascii码的和
form1.Edit2.Text:=inttostr(varA)+inttostr(((varB mod 5)+34) mod 10)+inttostr(((varC mod 5)+33) mod 10);
//注册码
end;
end.
效果如下图:
http://xusually.a.orn.jp/keygen.jpg
偶写好的注册机下载地址:半仙算命V2007 Build0415注册机
注册效果:
http://xusually.a.orn.jp/reg.jpg
终于发完了,这是我在PYG的第二贴,有什么不对的大虾们一定要斧正哦~~~thx adv.
[ 本帖最后由 Xusually 于 2007-12-2 15:22 编辑 ] 不错..比我强了很多..看来是高手云集啊... ls的,偶真的菜鸟一个。呵呵。大家共同进步。 说的很详细,学习一下。 终于注册到了,呵呵,第一次发帖
顶你!!呵呵/ 学习。。。。。。。。。。。。 本帖最近评分记录
tianxj 飘云币 +5 感谢您发布的原创作品! 2007-12-2 21:16
谢谢tianxj!!!大家共同进步! 看过这个软件
不过不懂算法啊 真是强,学习中……
页:
[1]