-
-
[原创]一个crackme简单分析
-
发表于: 2012-3-21 17:20 3819
-
这个crackme不知道怎么说,我分析的应该不是作者想要的,也就不是重点,大家看了就知道了,我只是想得到那个“Congratulations, you're a true artist!”成功框,里面有一些字母按键,当你按这个键的同时,别的键会变灰,如果按错了,别的就不能按了,这个是明文比较,字符串是“AAARBADACARBA”所以路过按错了,应该就不会成功,作者的意思是有多少种可能实现这些按键还是什么,我也没仔细看,分析不怎么样,求大家指导。下面我分析的一点,希望大牛们分析出来完整的还有算法给我看看。
作者使用了DialogBoxParam函数,所以所有的消息函数都在0040118F这个DialogFunc(HWND, UINT, WPARAM, LPARAM)函数中。下面是我分析的出来框框的。
.text:00401546
.text:00401546 loc_401546: ; CODE XREF: DialogFunc+39Cj
.text:00401546 cmp [ebp+hdc], 0FA0h
.text:0040154D jnz loc_40165A
.text:00401553 push 0Eh ; cchMax
.text:00401555 push offset byte_406198 ; lpString ;获取编辑框里面的字母串放在这个地址中
.text:0040155A push 8AEh ; nIDDlgItem
.text:0040155F push [ebp+hDlg] ; hDlg
.text:00401562 call GetDlgItemTextA
.text:00401567 cmp eax, 0Dh 获取字符串个数与14比较,小于等于则跳转,
.text:0040156A jnb short loc_40156E
.text:0040156C jmp short loc_4015ED
.text:0040156E ; ---------------------------------------------------------------------------
.text:0040156E
.text:0040156E loc_40156E: ; CODE XREF: DialogFunc+3DBj
.text:0040156E xor ecx, ecx
.text:00401570 mov eax, 0Ch 其实是取前13个字符串进行比较
.text:00401575 jmp short loc_401585
text:00401577 ; ---------------------------------------------------------------------------
.text:00401577
.text:00401577 loc_401577: ; CODE XREF: DialogFunc+3F9j
.text:00401577 mov dl, byte_406198[eax]
.text:0040157D mov String2[ecx], dl 将前13个字符串放入String2中
.text:00401583 inc ecx
.text:00401584 dec eax
.text:00401585
.text:00401585 loc_401585: ; CODE XREF: DialogFunc+3E6j
.text:00401585 cmp ecx, 0Ch
.text:00401588 jbe short loc_401577
.text:0040158A push offset String2 ; lpString2 ;获取的字符串与下面的字符串比较
.text:0040158F push offset String1 ; "AAARBADACARBA" ;明文比较
.text:00401594 call lstrcmpA
.text:00401599 or eax, eax
.text:0040159B jnz short loc_4015ED //不相等跳
.text:0040159D mov ecx, 65h //放这个数应该是为下面再做验证
.text:004015A2 jmp short loc_4015C6
.text:004015A4 ; ---------------------------------------------------------------------------
.text:004015A4
.text:004015A4 loc_4015A4: ; CODE XREF: DialogFunc+43Aj
.text:004015A4 push ecx
.text:004015A5 push ecx ; nIDDlgItem
.text:004015A6 push hDlg ; hDlg
.text:004015AC call GetDlgItem
.text:004015B1 mov dword_406254, eax
.text:004015B6 push 0 ; bEnable
.text:004015B8 push eax ; hWnd
.text:004015B9 call EnableWindow
.text:004015BE pop ecx
.text:004015BF inc ecx
.text:004015C0 or eax, eax
.text:004015C2 jnz short loc_4015C6
.text:004015C4 jmp short loc_4015ED //这里会跳走
text:004015C6 ; ---------------------------------------------------------------------------
.text:004015C6
.text:004015C6 loc_4015C6: ; CODE XREF: DialogFunc+413j
.text:004015C6 ; DialogFunc+433j
.text:004015C6 cmp ecx, 74h ;再次验证
.text:004015C9 jbe short loc_4015A4
.text:004015CB push offset aCongratulation ; "Congratulations, you're a true artist!"
.text:004015D0 pop lpString
.text:004015D6 push 0 ; dwInitParam
.text:004015D8 push offset sub_401704 ; lpDialogFunc
.text:004015DD push [ebp+hDlg] ; hWndParent
.text:004015E0 push 65h ; lpTemplateName
.text:004015E2 push hModule ; hInstance
.text:004015E8 call DialogBoxParamA ;这里出现“Congratulations, you're。。”窗口
.text:004015ED
.text:004015ED loc_4015ED: ; CODE XREF: DialogFunc+3DDj
.text:004015ED ; DialogFunc+40Cj ...
.text:004015ED mov ecx, 65h //这里和前面一样
.text:004015F2 jmp short loc_401610
.text:004015F4 ; ---------------------------------------------------------------------------
.text:004015F4
.text:004015F4 loc_4015F4: ; CODE XREF: DialogFunc+484j
.text:004015F4 push ecx
.text:004015F5 push ecx ; nIDDlgItem
.text:004015F6 push hDlg ; hDlg
.text:004015FC call GetDlgItem
.text:00401601 mov dword_406254, eax
.text:00401606 push 1 ; bEnable
.text:00401608 push eax ; hWnd
.text:00401609 call EnableWindow
.text:0040160E pop ecx
.text:0040160F inc ecx
.text:00401610
.text:00401610 loc_401610: ; CODE XREF: DialogFunc+463j
.text:00401610 cmp ecx, 74h ;前面一样
.text:00401613 jbe short loc_4015F4
.text:00401615 push 16h
.text:00401617 push offset byte_406182
.text:0040161C call RtlZeroMemory
.text:00401621 push 0Eh
.text:00401623 push offset byte_406198
.text:00401628 call RtlZeroMemory
.text:0040162D push 0Eh
.text:0040162F push offset String2
.text:00401634 call RtlZeroMemory
.text:00401639 mov dword_40617E, 0
.text:00401643 push offset byte_406182 ; lpString
.text:00401648 push 8AEh ; nIDDlgItem
.text:0040164D push hDlg ; hDlg
.text:00401653 call SetDlgItemTextA
.text:00401658 jmp short loc_4016C7 ;跳走
分析了一点,里面那些按键是怎么算的,按哪个键变灰哪个键没有分析,等大牛分析吧,F5看了一下那个函数,可以知道大体流程。我也不知道我这么分析是不是正确的。
等大牛仔细分析。
作者使用了DialogBoxParam函数,所以所有的消息函数都在0040118F这个DialogFunc(HWND, UINT, WPARAM, LPARAM)函数中。下面是我分析的出来框框的。
.text:00401546
.text:00401546 loc_401546: ; CODE XREF: DialogFunc+39Cj
.text:00401546 cmp [ebp+hdc], 0FA0h
.text:0040154D jnz loc_40165A
.text:00401553 push 0Eh ; cchMax
.text:00401555 push offset byte_406198 ; lpString ;获取编辑框里面的字母串放在这个地址中
.text:0040155A push 8AEh ; nIDDlgItem
.text:0040155F push [ebp+hDlg] ; hDlg
.text:00401562 call GetDlgItemTextA
.text:00401567 cmp eax, 0Dh 获取字符串个数与14比较,小于等于则跳转,
.text:0040156A jnb short loc_40156E
.text:0040156C jmp short loc_4015ED
.text:0040156E ; ---------------------------------------------------------------------------
.text:0040156E
.text:0040156E loc_40156E: ; CODE XREF: DialogFunc+3DBj
.text:0040156E xor ecx, ecx
.text:00401570 mov eax, 0Ch 其实是取前13个字符串进行比较
.text:00401575 jmp short loc_401585
text:00401577 ; ---------------------------------------------------------------------------
.text:00401577
.text:00401577 loc_401577: ; CODE XREF: DialogFunc+3F9j
.text:00401577 mov dl, byte_406198[eax]
.text:0040157D mov String2[ecx], dl 将前13个字符串放入String2中
.text:00401583 inc ecx
.text:00401584 dec eax
.text:00401585
.text:00401585 loc_401585: ; CODE XREF: DialogFunc+3E6j
.text:00401585 cmp ecx, 0Ch
.text:00401588 jbe short loc_401577
.text:0040158A push offset String2 ; lpString2 ;获取的字符串与下面的字符串比较
.text:0040158F push offset String1 ; "AAARBADACARBA" ;明文比较
.text:00401594 call lstrcmpA
.text:00401599 or eax, eax
.text:0040159B jnz short loc_4015ED //不相等跳
.text:0040159D mov ecx, 65h //放这个数应该是为下面再做验证
.text:004015A2 jmp short loc_4015C6
.text:004015A4 ; ---------------------------------------------------------------------------
.text:004015A4
.text:004015A4 loc_4015A4: ; CODE XREF: DialogFunc+43Aj
.text:004015A4 push ecx
.text:004015A5 push ecx ; nIDDlgItem
.text:004015A6 push hDlg ; hDlg
.text:004015AC call GetDlgItem
.text:004015B1 mov dword_406254, eax
.text:004015B6 push 0 ; bEnable
.text:004015B8 push eax ; hWnd
.text:004015B9 call EnableWindow
.text:004015BE pop ecx
.text:004015BF inc ecx
.text:004015C0 or eax, eax
.text:004015C2 jnz short loc_4015C6
.text:004015C4 jmp short loc_4015ED //这里会跳走
text:004015C6 ; ---------------------------------------------------------------------------
.text:004015C6
.text:004015C6 loc_4015C6: ; CODE XREF: DialogFunc+413j
.text:004015C6 ; DialogFunc+433j
.text:004015C6 cmp ecx, 74h ;再次验证
.text:004015C9 jbe short loc_4015A4
.text:004015CB push offset aCongratulation ; "Congratulations, you're a true artist!"
.text:004015D0 pop lpString
.text:004015D6 push 0 ; dwInitParam
.text:004015D8 push offset sub_401704 ; lpDialogFunc
.text:004015DD push [ebp+hDlg] ; hWndParent
.text:004015E0 push 65h ; lpTemplateName
.text:004015E2 push hModule ; hInstance
.text:004015E8 call DialogBoxParamA ;这里出现“Congratulations, you're。。”窗口
.text:004015ED
.text:004015ED loc_4015ED: ; CODE XREF: DialogFunc+3DDj
.text:004015ED ; DialogFunc+40Cj ...
.text:004015ED mov ecx, 65h //这里和前面一样
.text:004015F2 jmp short loc_401610
.text:004015F4 ; ---------------------------------------------------------------------------
.text:004015F4
.text:004015F4 loc_4015F4: ; CODE XREF: DialogFunc+484j
.text:004015F4 push ecx
.text:004015F5 push ecx ; nIDDlgItem
.text:004015F6 push hDlg ; hDlg
.text:004015FC call GetDlgItem
.text:00401601 mov dword_406254, eax
.text:00401606 push 1 ; bEnable
.text:00401608 push eax ; hWnd
.text:00401609 call EnableWindow
.text:0040160E pop ecx
.text:0040160F inc ecx
.text:00401610
.text:00401610 loc_401610: ; CODE XREF: DialogFunc+463j
.text:00401610 cmp ecx, 74h ;前面一样
.text:00401613 jbe short loc_4015F4
.text:00401615 push 16h
.text:00401617 push offset byte_406182
.text:0040161C call RtlZeroMemory
.text:00401621 push 0Eh
.text:00401623 push offset byte_406198
.text:00401628 call RtlZeroMemory
.text:0040162D push 0Eh
.text:0040162F push offset String2
.text:00401634 call RtlZeroMemory
.text:00401639 mov dword_40617E, 0
.text:00401643 push offset byte_406182 ; lpString
.text:00401648 push 8AEh ; nIDDlgItem
.text:0040164D push hDlg ; hDlg
.text:00401653 call SetDlgItemTextA
.text:00401658 jmp short loc_4016C7 ;跳走
分析了一点,里面那些按键是怎么算的,按哪个键变灰哪个键没有分析,等大牛分析吧,F5看了一下那个函数,可以知道大体流程。我也不知道我这么分析是不是正确的。
等大牛仔细分析。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [原创crackme简单分析(二) 2760
- [原创]一个crackme简单分析 3820
- [原创]一个简单的木马分析 5781
谁下载
kanxue
breezer
zrhai
请哥慢捂
bfqyygy
fmaliang
月之精灵
foxber
fangbingyu
饺仔
kingmanscu
bridgeic
tfzxyinhao
gdteng
gushiaoke
Cyane
ximo
Chinache
syjlyl
hatling
landeaxm
qwayy
tfk
evilight
atompure
代码疯子
evilor
friendkill
ronging
机器精灵
cornera
psmao
好色之徒
木叶ss
ytyay
xingpan
tokiii
drap
tiya
oujuanfei
饭团
丐世奇侠
zhangtaopy
BoyXiao
toynasc
rufeifei
recoo
crackJ
dingfengla
sinver
sunlulu
hijker
yikeshu
Spritutu
hackerhand
powernick
juian
ytbjplh
黑涩火焰
zhouyoujie
游荡小空
bluegb
小艾AI
skerempija
顾健健
瑞許家
DZYLin
寂寞尘埃
lanying蓝影
shmilywst
ynwlgh
forlovefor
MRCDG
维尔康
fanslinux
miaomiaowa
海浪花
ranshu
犀羊羊
warriorhu
ArborJ
山顶冻人
GHChen
metaexp
qqwwwww
myste
kelcer
qwertqwer
lker
NoAir
督月
xiaomingta
Xuxianghaa
ldyxy
wdone
cdweng
向往星空
lidacui
siuwai
看原图
赞赏
雪币:
留言: