-
-
Delphi内联汇编做注册机
-
发表于: 2011-10-6 20:03 4995
-
目标程序是Delphi写的,没有加壳方便分析了。
OD加载目标程序,F9运行来到软件注册界面,输入假注册码,根据提示很容易定位到关键的算法。
注册算法如下,就是先取机器码的奇数位ASCII码并相加得“和一”,再取机器码的偶数位ASCII码并相加得“和二”,“和一”乘“和二”得到注册码。算法很简单用高级语言写出注册机不是难事。
00474B99 |> /8B45 FC /mov eax,dword ptr ss:[ebp-4] //[ebp-4]中是机器码
00474B9C |. |0FB64418 FF |movzx eax,byte ptr ds:[eax+ebx-1]
00474BA1 |. |03F8 |add edi,eax
00474BA3 |. |83C3 02 |add ebx,2
00474BA6 |> |8B45 FC |mov eax,dword ptr ss:[ebp-4]
00474BA9 |. |E8 72FCF8FF |call 00404820
00474BAE |. |3BD8 |cmp ebx,eax
00474BB0 |.^\7E E7 \jle short 00474B99 //此循环取机器码的奇数位ASCII码并相加
00474BB2 |. EB 0E jmp short 00474BC2
00474BB4 |> 8B45 FC /mov eax,dword ptr ss:[ebp-4] //[ebp-4]中是机器码
00474BB7 |. 0FB64430 FF |movzx eax,byte ptr ds:[eax+esi-1]
00474BBC |. 0145 F8 |add dword ptr ss:[ebp-8],eax
00474BBF |. 83C6 02 |add esi,2
00474BC2 |> 8B45 FC |mov eax,dword ptr ss:[ebp-4]
00474BC5 |. E8 56FCF8FF |call 00404820
00474BCA |. 3BF0 |cmp esi,eax
00474BCC |.^ 7E E6 \jle short 00474BB4 //此循环取机器码的偶数位ASCII码并相加
00474BCE |. 8BDF mov ebx,edi
00474BD0 |. 0FAF5D F8 imul ebx,dword ptr ss:[ebp-8] //两数相乘,结果在ebx中,转为十进制后即是注册码
有的朋友说,我的分析能力不行,也想写注册机,那么怎么办呢?
听说Delphi容易上手,于是就下载了个DelphiXE2,它有很多令人惊叹的新功能,还支持64位,现在就用它的内联汇编功能写个注册机玩玩,这对分析
能力暂时不行,又想写注册机的朋友也许会有所帮助。
===============================================================================================================
选中00474B99到0047BD0之间部分,右键,如图。这步要用到DataChage.dll这个OD插件。
L00474B99:
mov eax,dword ptr ss:[ebp-04h]
movzx eax,byte ptr ds:[eax+ebx-01h]
add edi,eax
add ebx,02h
mov eax,dword ptr ss:[ebp-04h]
call L00404820
cmp ebx,eax
jle short L00474B99
jmp short L00474BC2
L00474BB4:
mov eax,dword ptr ss:[ebp-04h]
movzx eax,byte ptr ds:[eax+esi-01h]
add dword ptr ss:[ebp-08h],eax
add esi,02h
L00474BC2:
mov eax,dword ptr ss:[ebp-04h]
call L00404820
cmp esi,eax
jle short L00474BB4
mov ebx,edi
imul ebx,dword ptr ss:[ebp-08h]
L00404820 Proc
test eax,eax
je short L00404827
mov eax,dword ptr ds:[eax-04h]
ret
L00404820 Endp
复制下来的数据是上面这样的,为了能在delphi中使用,我们要稍做修改,修改量很小,基本上是原汁原味,修改后的数据(也即delphi源码)如下:
procedure L00404820;
begin
asm
test eax,eax
je @L00404827
mov eax,dword ptr ds:[eax-04h]
@L00404827:
ret
end;
end;
procedure TForm1.cmdGenClick(Sender: TObject);
var
HDID: AnsiString;
SN, len: Integer;
begin
HDID := txtID.Text;
len := Length(HDID);
if (len = 0) then
begin
ShowMessage('用户名或机器码长度必须大于0,请检查!');
Exit;
end;
asm
pushad
xor eax,eax
xor esi,esi
xor edi,edi
xor ebx,ebx
mov ebx,1
@L00474B99:
mov eax,dword ptr [HDID]
movzx eax,byte ptr ds:[eax+ebx-01h]
add edi,eax
add ebx,02h
mov eax,dword ptr ss:[HDID]
call L00404820
cmp ebx,eax
jle @L00474B99
jmp @L00474BC2
@L00474BB4:
mov eax,dword ptr ss:[HDID]
movzx eax,byte ptr ds:[eax+esi-01h]
add dword ptr ss:[ebp-08h],eax
add esi,02h
@L00474BC2:
mov eax,dword ptr [HDID]
call L00404820
cmp esi,eax
jle @L00474BB4
mov ebx,edi
imul ebx,dword ptr ss:[ebp-08h]
mov SN,ebx
popad
end;
txtSN.Text := IntToStr(SN);
end;
以上代码在XP3,DelphiXE2中测试通过,附件中是目标软件。
目标软件.rar
OD加载目标程序,F9运行来到软件注册界面,输入假注册码,根据提示很容易定位到关键的算法。
注册算法如下,就是先取机器码的奇数位ASCII码并相加得“和一”,再取机器码的偶数位ASCII码并相加得“和二”,“和一”乘“和二”得到注册码。算法很简单用高级语言写出注册机不是难事。
00474B99 |> /8B45 FC /mov eax,dword ptr ss:[ebp-4] //[ebp-4]中是机器码
00474B9C |. |0FB64418 FF |movzx eax,byte ptr ds:[eax+ebx-1]
00474BA1 |. |03F8 |add edi,eax
00474BA3 |. |83C3 02 |add ebx,2
00474BA6 |> |8B45 FC |mov eax,dword ptr ss:[ebp-4]
00474BA9 |. |E8 72FCF8FF |call 00404820
00474BAE |. |3BD8 |cmp ebx,eax
00474BB0 |.^\7E E7 \jle short 00474B99 //此循环取机器码的奇数位ASCII码并相加
00474BB2 |. EB 0E jmp short 00474BC2
00474BB4 |> 8B45 FC /mov eax,dword ptr ss:[ebp-4] //[ebp-4]中是机器码
00474BB7 |. 0FB64430 FF |movzx eax,byte ptr ds:[eax+esi-1]
00474BBC |. 0145 F8 |add dword ptr ss:[ebp-8],eax
00474BBF |. 83C6 02 |add esi,2
00474BC2 |> 8B45 FC |mov eax,dword ptr ss:[ebp-4]
00474BC5 |. E8 56FCF8FF |call 00404820
00474BCA |. 3BF0 |cmp esi,eax
00474BCC |.^ 7E E6 \jle short 00474BB4 //此循环取机器码的偶数位ASCII码并相加
00474BCE |. 8BDF mov ebx,edi
00474BD0 |. 0FAF5D F8 imul ebx,dword ptr ss:[ebp-8] //两数相乘,结果在ebx中,转为十进制后即是注册码
有的朋友说,我的分析能力不行,也想写注册机,那么怎么办呢?
听说Delphi容易上手,于是就下载了个DelphiXE2,它有很多令人惊叹的新功能,还支持64位,现在就用它的内联汇编功能写个注册机玩玩,这对分析
能力暂时不行,又想写注册机的朋友也许会有所帮助。
===============================================================================================================
选中00474B99到0047BD0之间部分,右键,如图。这步要用到DataChage.dll这个OD插件。
L00474B99:
mov eax,dword ptr ss:[ebp-04h]
movzx eax,byte ptr ds:[eax+ebx-01h]
add edi,eax
add ebx,02h
mov eax,dword ptr ss:[ebp-04h]
call L00404820
cmp ebx,eax
jle short L00474B99
jmp short L00474BC2
L00474BB4:
mov eax,dword ptr ss:[ebp-04h]
movzx eax,byte ptr ds:[eax+esi-01h]
add dword ptr ss:[ebp-08h],eax
add esi,02h
L00474BC2:
mov eax,dword ptr ss:[ebp-04h]
call L00404820
cmp esi,eax
jle short L00474BB4
mov ebx,edi
imul ebx,dword ptr ss:[ebp-08h]
L00404820 Proc
test eax,eax
je short L00404827
mov eax,dword ptr ds:[eax-04h]
ret
L00404820 Endp
复制下来的数据是上面这样的,为了能在delphi中使用,我们要稍做修改,修改量很小,基本上是原汁原味,修改后的数据(也即delphi源码)如下:
procedure L00404820;
begin
asm
test eax,eax
je @L00404827
mov eax,dword ptr ds:[eax-04h]
@L00404827:
ret
end;
end;
procedure TForm1.cmdGenClick(Sender: TObject);
var
HDID: AnsiString;
SN, len: Integer;
begin
HDID := txtID.Text;
len := Length(HDID);
if (len = 0) then
begin
ShowMessage('用户名或机器码长度必须大于0,请检查!');
Exit;
end;
asm
pushad
xor eax,eax
xor esi,esi
xor edi,edi
xor ebx,ebx
mov ebx,1
@L00474B99:
mov eax,dword ptr [HDID]
movzx eax,byte ptr ds:[eax+ebx-01h]
add edi,eax
add ebx,02h
mov eax,dword ptr ss:[HDID]
call L00404820
cmp ebx,eax
jle @L00474B99
jmp @L00474BC2
@L00474BB4:
mov eax,dword ptr ss:[HDID]
movzx eax,byte ptr ds:[eax+esi-01h]
add dword ptr ss:[ebp-08h],eax
add esi,02h
@L00474BC2:
mov eax,dword ptr [HDID]
call L00404820
cmp esi,eax
jle @L00474BB4
mov ebx,edi
imul ebx,dword ptr ss:[ebp-08h]
mov SN,ebx
popad
end;
txtSN.Text := IntToStr(SN);
end;
以上代码在XP3,DelphiXE2中测试通过,附件中是目标软件。
目标软件.rar
赞赏
谁下载
freecat
clide2000
hxhsy
winndy
china
aqtata
email123
lanmao
yosen2001
dssz
rooky2000
djzxzzm
不古龙
gxggxy103
BlueT
lhjjx
you_known
mclkings
mxt72
苦默含笑
csa
CoolSlob
yzslly
chenfeng
lightgun
kwzlj
dico
luohb
tsee
cntrump
小七
lysoft
hyperiris
saya
ycdear
dtcser
红色神话
真实的我
issasth
gxwtk
mozha
suredwang
hacknr
gfgddx
M小猫H
OildFish
plusv
jiangjing
asmcatii
qwedcx
hackerxina
lenceliu
lohua
jmgsliue
ainideyang
飞天蜈蚣
同林鸟
靴子
wkxq
zhoudongzh
小菜鸟一
leeone
iceway
leisurely
asdcxz
flflw
secsoft
魔之幻灵
kangcin
kelieke
vitik
达文西
Etr
yezhulove
Eroor
ddsoft
luckyzjx
zhuangbx
wmfeel
popecvd
完美毛毛
NJDK
木叶ss
haostrange
主菜单
tokiii
菜鸟小虫
hezhang
ymenking
kindli
sysercn
ffff七四
YangCoCol
雨耕山
0xRT
松下书童
ccini
ProbieTmp
下一页
看原图
赞赏
雪币:
留言: