首页
社区
课程
招聘
[原创]一个crackme简单分析
发表于: 2012-3-21 17:20 3819

[原创]一个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看了一下那个函数,可以知道大体流程。我也不知道我这么分析是不是正确的。
等大牛仔细分析。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//