环境:

Windows xp sp3

打开,输入点东西到输入框(这里把第一个输出框称为text1)里面,点一下注册,什么反应都没有。

到处都点一点,每张图片都点一下,还是什么反应都没有。

查壳:

发现这东西有个upx壳,把壳脱掉

脱掉后OD载入,有了上次的经验,猜测这次也是一样

在字符串中搜索成功的字眼。如果用插件搜索是可以找到成功注册的内容的

如果不用插件的话,我是搜不到的。只有一些有趣的字符串:

00446AEB   ascii "FormCreate"
00446AFC   ascii "Timer1Timer"
00446B0E   ascii "Button1MouseDown"
00446B25   ascii "Panel1DblClick"
00446B3A   ascii "Edit2DblClick"
00446B4E   ascii "FormMouseMove"
00446B62   ascii "Image1MouseDown"
00446B78   ascii "Image2MouseDown"
00446B8E   ascii "Image3MouseDown"
00446BA4   ascii "Image4MouseDown"
00446BBA   ascii "Timer2Timer"
00446BCC   ascii "Button1Click"

突然间发现:

00446AE6     /1C6C4400      dd CKme002.00446C1C
00446AEA   . |0A            db 0A
00446AEB   . |46 6F 72 6D 4>ascii "FormCreate"
00446AF5     |12            db 12
00446AF6     |00            db 00
00446AF7     |286E4400      dd CKme002.00446E28
00446AFB   . |0B            db 0B
00446AFC   . |54 69 6D 65 7>ascii "Timer1Timer"
00446B07     |17            db 17
00446B08     |00            db 00
00446B09     |A46F4400      dd CKme002.00446FA4
00446B0D   . |10            db 10
00446B0E   . |42 75 74 74 6>ascii "Button1MouseDown"
00446B1E     |15            db 15
00446B1F     |00            db 00
00446B20     |DC6F4400      dd CKme002.00446FDC
00446B24   . |0E            db 0E
00446B25   . |50 61 6E 65 6>ascii "Panel1DblClick"
00446B33     |14            db 14
00446B34     |00            db 00
00446B35     |F86F4400      dd CKme002.00446FF8
00446B39   . |0D            db 0D
00446B3A   . |45 64 69 74 3>ascii "Edit2DblClick"
00446B47     |14            db 14
00446B48     |00            db 00
00446B49     |EC704400      dd CKme002.004470EC
00446B4D   . |0D            db 0D
00446B4E   . |46 6F 72 6D 4>ascii "FormMouseMove"
00446B5B     |16            db 16
00446B5C     |00            db 00
00446B5D     |34724400      dd CKme002.00447234
00446B61   . |0F            db 0F
00446B62   . |49 6D 61 67 6>ascii "Image1MouseDown"
00446B71     |16            db 16
00446B72     |00            db 00
00446B73     |A0724400      dd CKme002.004472A0
00446B77   . |0F            db 0F
00446B78   . |49 6D 61 67 6>ascii "Image2MouseDown"
00446B87     |16            db 16
00446B88     |00            db 00
00446B89     |0C734400      dd CKme002.0044730C
00446B8D   . |0F            db 0F
00446B8E   . |49 6D 61 67 6>ascii "Image3MouseDown"
00446B9D     |16            db 16
00446B9E     |00            db 00
00446B9F     |78734400      dd CKme002.00447378
00446BA3   . |0F            db 0F
00446BA4   . |49 6D 61 67 6>ascii "Image4MouseDown"
00446BB3     |12            db 12
00446BB4     |00            db 00
00446BB5     |E4734400      dd CKme002.004473E4
00446BB9   . |0B            db 0B
00446BBA   . |54 69 6D 65 7>ascii "Timer2Timer"

每个事件都有个函数
跟FormCreate进去看看:

00446AE6     /1C6C4400      dd CKme0023.00446C1C
00446AEA   . |0A            db 0A
00446AEB   . |46 6F 72 6D 4>ascii "FormCreate"

跟00446C1C看看:

一直往下翻看到一个这个:

00446D49  |.  BA EC6D4400   mov edx,CKme002.00446DEC                 ;  ASCII "X:\ajj.126.c0m\j\o\j\o\ok.txt"
00446D4E  |.  8D85 30FEFFFF lea eax,[local.116]
00446D54  |.  E8 EDE7FBFF   call CKme002.00405546
00446D59  |.  8D85 30FEFFFF lea eax,[local.116]
00446D5F  |.  E8 07EAFBFF   call CKme002.0040576B
00446D64  |.  E8 8BBAFBFF   call CKme002.004027F4
00446D69  |.  85C0          test eax,eax
00446D6B  |.  75 4B         jnz XCKme002.00446DB8
00446D6D  |.  8D55 FC       lea edx,[local.1]
00446D70  |.  8D85 30FEFFFF lea eax,[local.116]
00446D76  |.  E8 5DD1FBFF   call CKme002.00403ED8
00446D7B  |.  E8 44BAFBFF   call CKme002.004027C4
00446D80  |.  8B45 FC       mov eax,[local.1]
00446D83  |.  BA 146E4400   mov edx,CKme002.00446E14
00446D88  |.  E8 0BCFFBFF   call CKme002.00403C98
00446D8D  |.  74 0A         je XCKme002.00446D99
00446D8F  |.  C783 04030000>mov dword ptr ds:[ebx+0x304],0xC34
00446D99  |>  8D85 30FEFFFF lea eax,[local.116]
00446D9F  |.  E8 44E8FBFF   call CKme002.004055E8
00446DA4  |.  E8 1BBAFBFF   call CKme002.004027C4
00446DA9  |.  B2 01         mov dl,0x1
00446DAB  |.  8B83 F0020000 mov eax,dword ptr ds:[ebx+0x2F0]
00446DB1  |.  E8 EED1FDFF   call CKme002.00423FA4
00446DB6  |.  EB 0A         jmp XCKme002.00446DC2
00446DB8  |>  C783 04030000>mov dword ptr ds:[ebx+0x304],0xC34
00446DC2  |>  33C0          xor eax,eax
00446DC4  |.  5A            pop edx
00446DC5  |.  59            pop ecx
00446DC6  |.  59            pop ecx
00446DC7  |.  64:8910       mov dword ptr fs:[eax],edx
00446DCA  |.  68 DF6D4400   push CKme002.00446DDF
00446DCF  |>  8D45 FC       lea eax,[local.1]
00446DD2  |.  E8 31CBFBFF   call CKme002.00403908
00446DD7  \.  C3            retn

这是打开X盘里面的(……)的ok.txt文件吗?我技术不佳,不知道哪里来的X盘,就算有打开了这个文件又有什么用呢?

先不管,跑到第二个--Timer1Timer这里看一看,翻了翻好像没什么特别的东西。

反正Timer1都看了,也看看Timer2是干什么的:

004473E4   .  53            push ebx
004473E5   .  8BD8          mov ebx,eax
004473E7   .  81BB 04030000>cmp dword ptr ds:[ebx+0x304],0xC34          ; [ebx+0x304]的值不能为0xC34
004473F1   .  0F84 88000000 je CKme0021.0044747F
004473F7   .  81BB 08030000>cmp dword ptr ds:[ebx+0x308],0x230D         ; [ebx+0x308]的值不能为0x230D
00447401   .  74 7C         je XCKme0021.0044747F
00447403   .  81BB 10030000>cmp dword ptr ds:[ebx+0x310],0xF94          ; [ebx+0x310]的值要是0xF94
0044740D   .  75 70         jnz XCKme0021.0044747F
0044740F   .  8B83 18030000 mov eax,dword ptr ds:[ebx+0x318]
00447415   .  3B83 14030000 cmp eax,dword ptr ds:[ebx+0x314]
0044741B   .  75 62         jnz XCKme0021.0044747F                      ; [ebx+0x318]和[ebx+0x314]的值要相同
0044741D   .  81BB 1C030000>cmp dword ptr ds:[ebx+0x31C],0x3E7          ; [ebx+0x31C]这里的值不能为 0x3E7
00447427   .  74 56         je XCKme0021.0044747F
00447429   .  33D2          xor edx,edx
0044742B   .  8B83 D8020000 mov eax,dword ptr ds:[ebx+0x2D8]
00447431   .  8B08          mov ecx,dword ptr ds:[eax]
00447433   .  FF51 5C       call dword ptr ds:[ecx+0x5C]
00447436   .  33D2          xor edx,edx
00447438   .  8B83 DC020000 mov eax,dword ptr ds:[ebx+0x2DC]
0044743E   .  8B08          mov ecx,dword ptr ds:[eax]
00447440   .  FF51 5C       call dword ptr ds:[ecx+0x5C]
00447443   .  33D2          xor edx,edx
00447445   .  8B83 E0020000 mov eax,dword ptr ds:[ebx+0x2E0]
0044744B   .  8B08          mov ecx,dword ptr ds:[eax]
0044744D   .  FF51 5C       call dword ptr ds:[ecx+0x5C]
00447450   .  33D2          xor edx,edx
00447452   .  8B83 E4020000 mov eax,dword ptr ds:[ebx+0x2E4]
00447458   .  8B08          mov ecx,dword ptr ds:[eax]
0044745A   .  FF51 5C       call dword ptr ds:[ecx+0x5C]
0044745D   .  A1 A8984400   mov eax,dword ptr ds:[0x4498A8]
00447462   .  83C0 70       add eax,0x70
00447465   .  BA 8C744400   mov edx,CKme0021.0044748C                ;  厉害厉害真厉害!佩服佩服真佩服!!
0044746A   .  E8 EDC4FBFF   call CKme0021.0040395C
0044746F   .  BA B8744400   mov edx,CKme0021.004474B8                ;  注册了
00447474   .  8B83 EC020000 mov eax,dword ptr ds:[ebx+0x2EC]
0044747A   .  E8 3DCCFDFF   call CKme0021.004240BC
0044747F   >  5B            pop ebx
00447480   .  C3            retn

发现有好多个比较,比较后面居然有个成功注册的地方(反正我这里不用插件找字符串的话是看不到这个注释的)。

那上面就是检测的地方咯,在004473E4下个断点,跑起来,等一段时间后就停下来了,发现[ebx+304]这个位置是:961AFC

后面比较的数据也在后面。得到上面每个位置的值的要求后,就找找看哪里修改了这5个地方的值。

突然发现在FormCreate这个事件里面有几个0xC34。

本来是没有x盘的,要求又要是x盘,试一试把文件里的X改为D(希望没有检测),虽然这样做不好

00446D49  |.  BA EC6D4400   mov edx,CKme0023.00446DEC                ;  D:\ajj.126.c0m\j\o\j\o\ok.txt
00446D4E  |.  8D85 30FEFFFF lea eax,[local.116]
00446D54  |.  E8 EDE7FBFF   call CKme0023.00405546
00446D59  |.  8D85 30FEFFFF lea eax,[local.116]
00446D5F  |.  E8 07EAFBFF   call CKme0023.0040576B
00446D64  |.  E8 8BBAFBFF   call CKme0023.004027F4                   ;  猜测用来判断文件是否存在
00446D69  |.  85C0          test eax,eax                             ;  不存在就跳
00446D6B  |.  75 4B         jnz XCKme0023.00446DB8
00446D6D  |.  8D55 FC       lea edx,[local.1]
00446D70  |.  8D85 30FEFFFF lea eax,[local.116]
00446D76  |.  E8 5DD1FBFF   call CKme0023.00403ED8
00446D7B  |.  E8 44BAFBFF   call CKme0023.004027C4
00446D80  |.  8B45 FC       mov eax,[local.1]
00446D83  |.  BA 146E4400   mov edx,CKme0023.00446E14
00446D88  |.  E8 0BCFFBFF   call CKme0023.00403C98           ; 这里跟进去看一看
00446D8D  |.  74 0A         je XCKme0023.00446D99                    ;  比较,等于就跳。
00446D8F  |.  C783 04030000>mov dword ptr ds:[ebx+0x304],0xC34
00446D99  |>  8D85 30FEFFFF lea eax,[local.116]
00446D9F  |.  E8 44E8FBFF   call CKme0023.004055E8
00446DA4  |.  E8 1BBAFBFF   call CKme0023.004027C4
00446DA9  |.  B2 01         mov dl,0x1
00446DAB  |.  8B83 F0020000 mov eax,dword ptr ds:[ebx+0x2F0]
00446DB1  |.  E8 EED1FDFF   call CKme0023.00423FA4
00446DB6  |.  EB 0A         jmp XCKme0023.00446DC2
00446DB8  |>  C783 04030000>mov dword ptr ds:[ebx+0x304],0xC34

00403C98:

00403C98  /$  53            push ebx
00403C99  |.  56            push esi
00403C9A  |.  57            push edi
00403C9B  |.  89C6          mov esi,eax                              ;  esi是文件指针
00403C9D  |.  89D7          mov edi,edx                              ;  edi是比较内容
00403C9F  |.  39D0          cmp eax,edx                              ;  指向的内容是一样的,没必要继续下去
00403CA1  |.  0F84 8F000000 je CKme0023.00403D36
00403CA7  |.  85F6          test esi,esi                             ;  检测指针是否为空
00403CA9  |.  74 68         je XCKme0023.00403D13
00403CAB  |.  85FF          test edi,edi
00403CAD  |.  74 6B         je XCKme0023.00403D1A
00403CAF  |.  8B46 FC       mov eax,dword ptr ds:[esi-0x4]           ;  文件长度
00403CB2  |.  8B57 FC       mov edx,dword ptr ds:[edi-0x4]           ;  13
00403CB5  |.  29D0          sub eax,edx                              ;  如果长度为13,eax是0,影响后面的ZF标志位
00403CB7  |.  77 02         ja XCKme0023.00403CBB
00403CB9  |.  01C2          add edx,eax
00403CBB  |>  52            push edx                                 ;  取小的那个长度
00403CBC  |.  C1EA 02       shr edx,0x2                              ;  /4设置循环次数
00403CBF  |.  74 26         je XCKme0023.00403CE7
00403CC1  |>  8B0E          /mov ecx,dword ptr ds:[esi]              ;  文件的内容
00403CC3  |.  8B1F          |mov ebx,dword ptr ds:[edi]              ;  内存的内容
00403CC5  |.  39D9          |cmp ecx,ebx                             ;  比较
00403CC7  |.  75 58         |jnz XCKme0023.00403D21                  ;  不等就跳
00403CC9  |.  4A            |dec edx                                 ;  循环次数减1
00403CCA  |.  74 15         |je XCKme0023.00403CE1                   ;  用来退出循环
00403CCC  |.  8B4E 04       |mov ecx,dword ptr ds:[esi+0x4]
00403CCF  |.  8B5F 04       |mov ebx,dword ptr ds:[edi+0x4]
00403CD2  |.  39D9          |cmp ecx,ebx
00403CD4  |.  75 4B         |jnz XCKme0023.00403D21
00403CD6  |.  83C6 08       |add esi,0x8
00403CD9  |.  83C7 08       |add edi,0x8
00403CDC  |.  4A            |dec edx
00403CDD  |.^ 75 E2         \jnz XCKme0023.00403CC1                  ;  观察跳转的位置,不对的时候跳到找找是哪个位置不对
00403CDF  |.  EB 06         jmp XCKme0023.00403CE7
00403CE1  |>  83C6 04       add esi,0x4                              ;  过早退出
00403CE4  |.  83C7 04       add edi,0x4
00403CE7  |>  5A            pop edx                                  ;  拿回长度
00403CE8  |.  83E2 03       and edx,0x3                              ;  和0x3比较,等于就跳
00403CEB  |.  74 22         je XCKme0023.00403D0F                    ;  用于确定剩下来的比较次数
00403CED  |.  8B0E          mov ecx,dword ptr ds:[esi]               ;  后面那一部分内容
00403CEF  |.  8B1F          mov ebx,dword ptr ds:[edi]
00403CF1  |.  38D9          cmp cl,bl
00403CF3  |.  75 41         jnz XCKme0023.00403D36
00403CF5  |.  4A            dec edx
00403CF6  |.  74 17         je XCKme0023.00403D0F
00403CF8  |.  38FD          cmp ch,bh
00403CFA  |.  75 3A         jnz XCKme0023.00403D36
00403CFC  |.  4A            dec edx
00403CFD  |.  74 10         je XCKme0023.00403D0F
00403CFF  |.  81E3 0000FF00 and ebx,0xFF0000
00403D05  |.  81E1 0000FF00 and ecx,0xFF0000
00403D0B  |.  39D9          cmp ecx,ebx
00403D0D  |.  75 27         jnz XCKme0023.00403D36
00403D0F  |>  01C0          add eax,eax                              ;  这里会使得ZF改变,如果文件是正确的内容,eax是0
00403D11  |.  EB 23         jmp XCKme0023.00403D36
00403D13  |>  8B57 FC       mov edx,dword ptr ds:[edi-0x4]
00403D16  |.  29D0          sub eax,edx
00403D18  |.  EB 1C         jmp XCKme0023.00403D36
00403D1A  |>  8B46 FC       mov eax,dword ptr ds:[esi-0x4]
00403D1D  |.  29D0          sub eax,edx
00403D1F  |.  EB 15         jmp XCKme0023.00403D36
00403D21  |>  5A            pop edx
00403D22  |.  38D9          cmp cl,bl
00403D24  |.  75 10         jnz XCKme0023.00403D36
00403D26  |.  38FD          cmp ch,bh
00403D28  |.  75 0C         jnz XCKme0023.00403D36
00403D2A  |.  C1E9 10       shr ecx,0x10
00403D2D  |.  C1EB 10       shr ebx,0x10
00403D30  |.  38D9          cmp cl,bl
00403D32  |.  75 02         jnz XCKme0023.00403D36
00403D34  |.  38FD          cmp ch,bh
00403D36  |>  5F            pop edi
00403D37  |.  5E            pop esi
00403D38  |.  5B            pop ebx
00403D39  \.  C3            retn

跟进去之后看到比较的内容地址是:00446E14 ,内容是:

00446E14  20 61 6A 6A D0 B4 B5 C4 43 4B 6D 65 D5 E6 C0 C3   ajj写的CKme真烂
00446E24  21 FF FF                                         !

部分内容显示不出来,也输入不进去。那就用16进制编辑器填进去。填进去之后再OD载入文件,发现内存里面的[ebx+304]不是0xC34了(哈哈哈),

而且程序的界面又多了一个输入框(这里称为text2)。这个text2是输入不了东西的,也点不了。但是的确是可以用的,因为有个:

Edit2DblClick

在这个事件上面下断点,双击也是没有反应。没办法,先看其他,那就看看FormMouseMove吧:

004470EC  /.  55            push ebp
004470ED  |.  8BEC          mov ebp,esp
004470EF  |.  6A 00         push 0x0
004470F1  |.  6A 00         push 0x0
004470F3  |.  53            push ebx
004470F4  |.  8BD8          mov ebx,eax
004470F6  |.  8B55 08       mov edx,[arg.1]
004470F9  |.  8B45 0C       mov eax,[arg.2]
004470FC  |.  33C9          xor ecx,ecx
004470FE  |.  55            push ebp
004470FF  |.  68 17724400   push CKme0023.00447217
00447104  |.  64:FF31       push dword ptr fs:[ecx]
00447107  |.  64:8921       mov dword ptr fs:[ecx],esp
0044710A  |.  8B8B E0020000 mov ecx,dword ptr ds:[ebx+0x2E0]
00447110  |.  8079 47 01    cmp byte ptr ds:[ecx+0x47],0x1           ;  只有在第3张图片出现时才为1
00447114  |.  75 19         jnz XCKme0023.0044712F
00447116  |.  3D E2000000   cmp eax,0xE2                 ; 这里的eax是指鼠标的横坐标
0044711B  |.  7E 12         jle XCKme0023.0044712F
0044711D  |.  81FA 2C010000 cmp edx,0x12C                ; 这里的edx是指鼠标的纵坐标
00447123  |.  7E 0A         jle XCKme0023.0044712F
00447125  |.  C783 10030000>mov dword ptr ds:[ebx+0x310],0x10        ;如果条件符合了就把[ebx+0x310]的值赋为0x10
0044712F  |>  8B8B DC020000 mov ecx,dword ptr ds:[ebx+0x2DC]
00447135  |.  8079 47 01    cmp byte ptr ds:[ecx+0x47],0x1          ; 只有第2张图片出现时才为1
00447139  |.  75 6C         jnz XCKme0023.004471A7
0044713B  |.  83F8 17       cmp eax,0x17                ; 这里的eax同上
0044713E  |.  7D 67         jge XCKme0023.004471A7
00447140  |.  81FA 2C010000 cmp edx,0x12C                           ; 这里的edx同上
00447146  |.  7E 5F         jle XCKme0023.004471A7
00447148  |.  83BB 10030000>cmp dword ptr ds:[ebx+0x310],0x10        ;如果[ebx+0x310]的值为0x10时才继续往下,否则就跳走
0044714F  |.  75 56         jnz XCKme0023.004471A7
00447151  |.  83BB 0C030000>cmp dword ptr ds:[ebx+0x30C],0x9         ;  30c不能为9
00447158  |.  74 4D         je XCKme0023.004471A7                    ; 这里不能跳
0044715A  |.  C783 10030000>mov dword ptr ds:[ebx+0x310],0xF94       ; 这里赋值
00447164  |.  8B83 0C030000 mov eax,dword ptr ds:[ebx+0x30C]
0044716A  |.  83E8 01       sub eax,0x1                              ;  Switch (cases 1..3)
0044716D  |.  72 0A         jb XCKme0023.00447179
0044716F  |.  74 14         je XCKme0023.00447185
00447171  |.  48            dec eax
00447172  |.  74 1D         je XCKme0023.00447191
00447174  |.  48            dec eax
00447175  |.  74 26         je XCKme0023.0044719D
00447177  |.  EB 2E         jmp XCKme0023.004471A7
00447179  |>  C783 14030000>mov dword ptr ds:[ebx+0x314],0x41
00447183  |.  EB 22         jmp XCKme0023.004471A7
00447185  |>  C783 14030000>mov dword ptr ds:[ebx+0x314],0x3D        ;  Case 1 of switch 0044716A
0044718F  |.  EB 16         jmp XCKme0023.004471A7
00447191  |>  C783 14030000>mov dword ptr ds:[ebx+0x314],0x34        ;  Case 2 of switch 0044716A
0044719B  |.  EB 0A         jmp XCKme0023.004471A7
0044719D  |>  C783 14030000>mov dword ptr ds:[ebx+0x314],0xDF        ;  Case 3 of switch 0044716A
004471A7  |>  81BB 10030000>cmp dword ptr ds:[ebx+0x310],0xF94       ;  Default case of switch 0044716A
004471B1  |.  75 46         jnz XCKme0023.004471F9

发现这里可以吧[ebx+310]的值改为0xF94,但是[ebx+0x30C]的值又不能为0x9。

那就可以猜测把[ebx+310]的值改为0xF94的方法是在第3张图出现时鼠标从程序界面的右下角进入,多晃鼠标几次,让[ebx+0x310]的值变成0x10,

等到第2张图片的时候鼠标从程序界面的左下角进入,也是多晃几次,让[ebx+0x310]的值变成0xF94

在完成上面的操作之前要保证[ebx+0x30C]的值不为0x9,但是程序一开始这个值就是0x9了,所以应该有地方更改的。

看一看Button1MouseDown:

00446FA4  /.  55            push ebp
00446FA5  |.  8BEC          mov ebp,esp
00446FA7  |.  8B90 08030000 mov edx,dword ptr ds:[eax+0x308]
00446FAD  |.  81FA 0D230000 cmp edx,0x230D
00446FB3  |.  74 20         je XCKme0023.00446FD5
00446FB5  |.  80F9 01       cmp cl,0x1                               ;  按左键cl值为0,右键为1,中键为2
00446FB8  |.  75 09         jnz XCKme0023.00446FC3
00446FBA  |.  8380 08030000>add dword ptr ds:[eax+0x308],0x3         ;  每按一次右键就加3,加到29D为止
00446FC1  |.  EB 12         jmp XCKme0023.00446FD5
00446FC3  |>  81FA 94020000 cmp edx,0x294
00446FC9  |.  7D 0A         jge XCKme0023.00446FD5
00446FCB  |.  C780 08030000>mov dword ptr ds:[eax+0x308],0x230D      ; 这里把[eax+0x308]的值改为0x230D
00446FD5  |>  5D            pop ebp
00446FD6  \.  C2 0C00       retn 0xC

这个“注册”按钮按了下去反而注册不了,点击的时候还要看是用鼠标什么键按。如果用右键按[eax+0x308]也就是

[961B00],一开始是0x28E的。点5次就够了。为什么说加到0x29D就够了呢?

往下翻一翻就是了:

00446FDC   .  81B8 08030000>cmp dword ptr ds:[eax+0x308],0x29D     ;比较是不是0x29D,不是就跳
00446FE6   .  75 0D         jnz XCKme0023.00446FF5
00446FE8   .  B2 01         mov dl,0x1
00446FEA   .  8B80 F0020000 mov eax,dword ptr ds:[eax+0x2F0]
00446FF0   .  8B08          mov ecx,dword ptr ds:[eax]
00446FF2   .  FF51 5C       call dword ptr ds:[ecx+0x5C]     ;这个开放了text2
00446FF5   >  C3            retn

原来上面这个函数是Panel1DblClick事件的。

于是有了个解锁text2的方法:

一开始就右键点注册5次,然后趁着“人之初”那些图片还没出来或者没有完全显示的时候,双击那个图片框框(Panel),

然后发现text2解锁了,可以输入了,可以双击了。在Edit2DblClick事件函数下个断点,输入个“123456”,然后双击

发现停了下来:

00446FF8  /.  55            push ebp
00446FF9  |.  8BEC          mov ebp,esp
00446FFB  |.  33C9          xor ecx,ecx
00446FFD  |.  51            push ecx
00446FFE  |.  51            push ecx
00446FFF  |.  51            push ecx
00447000  |.  51            push ecx
00447001  |.  51            push ecx
00447002  |.  53            push ebx
00447003  |.  8BD8          mov ebx,eax
00447005  |.  33C0          xor eax,eax
00447007  |.  55            push ebp
00447008  |.  68 DF704400   push CKme0023.004470DF
0044700D  |.  64:FF30       push dword ptr fs:[eax]
00447010  |.  64:8920       mov dword ptr fs:[eax],esp
00447013  |.  8D55 FC       lea edx,[local.1]
00447016  |.  8B83 F0020000 mov eax,dword ptr ds:[ebx+0x2F0]
0044701C  |.  E8 6BD0FDFF   call CKme0023.0042408C                   ;  获取输入的内容
00447021  |.  8B45 FC       mov eax,[local.1]
00447024  |.  E8 5FCBFBFF   call CKme0023.00403B88
00447029  |.  83F8 08       cmp eax,0x8                  ; 要求输入的内容是8个字符
0044702C  |.  0F85 92000000 jnz CKme0023.004470C4
00447032  |.  8D55 F8       lea edx,[local.2]                        ;  输入内容保存的位置
00447035  |.  8B83 F0020000 mov eax,dword ptr ds:[ebx+0x2F0]
0044703B  |.  E8 4CD0FDFF   call CKme0023.0042408C                   ;  获取输入的内容
00447040  |.  8B45 F8       mov eax,[local.2]
00447043  |.  8078 01 5F    cmp byte ptr ds:[eax+0x1],0x5F      ; 这里要求输入的内容第2个字符是“_”下划线
00447047  |.  75 7B         jnz XCKme0023.004470C4
00447049  |.  8D55 F4       lea edx,[local.3]
0044704C  |.  8B83 F0020000 mov eax,dword ptr ds:[ebx+0x2F0]
00447052  |.  E8 35D0FDFF   call CKme0023.0042408C
00447057  |.  8B45 F4       mov eax,[local.3]
0044705A  |.  8078 05 2C    cmp byte ptr ds:[eax+0x5],0x2C      ; 这里要求输入的内容第6个字符是“,”英语的逗号
0044705E  |.  75 64         jnz XCKme0023.004470C4
00447060  |.  8D55 F0       lea edx,[local.4]
00447063  |.  8B83 E8020000 mov eax,dword ptr ds:[ebx+0x2E8]
00447069  |.  E8 1ED0FDFF   call CKme0023.0042408C
0044706E  |.  8B45 F0       mov eax,[local.4]
00447071  |.  E8 12CBFBFF   call CKme0023.00403B88
00447076  |.  83C0 03       add eax,0x3                              ;
00447079  |.  B9 03000000   mov ecx,0x3                              ;
0044707E  |.  99            cdq
0044707F  |.  F7F9          idiv ecx                                 ;
00447081  |.  85D2          test edx,edx
00447083  |.  75 3F         jnz XCKme0023.004470C4
00447085  |.  6A 00         push 0x0
00447087  |.  6A 04         push 0x4
00447089  |.  8D55 EC       lea edx,[local.5]
0044708C  |.  8B83 E8020000 mov eax,dword ptr ds:[ebx+0x2E8]
00447092  |.  E8 F5CFFDFF   call CKme0023.0042408C
00447097  |.  8B45 EC       mov eax,[local.5]
0044709A  |.  E8 E9CAFBFF   call CKme0023.00403B88
0044709F  |.  99            cdq
004470A0  |.  52            push edx
004470A1  |.  50            push eax
004470A2  |.  33C0          xor eax,eax
004470A4  |.  E8 E70EFCFF   call CKme0023.00407F90
004470A9  |.  030424        add eax,dword ptr ss:[esp]
004470AC  |.  135424 04     adc edx,dword ptr ss:[esp+0x4]
004470B0  |.  83C4 08       add esp,0x8
004470B3  |.  83C0 02       add eax,0x2
004470B6  |.  83D2 00       adc edx,0x0
004470B9  |.  E8 47ECFBFF   call CKme0023.00405D05
004470BE  |.  8983 0C030000 mov dword ptr ds:[ebx+0x30C],eax        ;往下翻啊翻,翻到这里来,发现这里把那个0x9改掉了。
004470C4  |>  33C0          xor eax,eax
004470C6  |.  5A            pop edx
004470C7  |.  59            pop ecx
004470C8  |.  59            pop ecx
004470C9  |.  64:8910       mov dword ptr fs:[eax],edx
004470CC  |.  68 E6704400   push CKme0023.004470E6
004470D1  |>  8D45 EC       lea eax,[local.5]
004470D4  |.  BA 05000000   mov edx,0x5
004470D9  |.  E8 4EC8FBFF   call CKme0023.0040392C
004470DE  \.  C3            retn

于是就有:

在text2可用之后,输入个字符串,第2个字符要是“_”,第6个字符是“,”(这个是逗号),我输入的是”1_345,78”,然后双击text2,使得[ebx+0x30C]变成其他东西。

目前位置我们把[ebx+0x304]、[ebx+0x308]、[ebx+0x310]、[ebx+0x31C]都搞好了,至于说前面的内容没有提到过[ebx+0x31C]这个东西,因为这是个Button1Click事件

会导致[ebx+0x31C]的值为0x3E7,不要去click就好了。

004474C0   ?  C780 1C030000>mov dword ptr ds:[eax+0x31C],0x3E7

[ebx+0x314] 和 [ebx+0x318]的值是怎么才使得相同的呢?

看看我们还有什么事件没有看过,就是那4个点图片了。

00447234  /.  55            push ebp                                 ;  这个是第1张图片的
00447235  |.  8BEC          mov ebp,esp
00447237  |.  53            push ebx
00447238  |.  56            push esi
00447239  |.  8BD9          mov ebx,ecx
0044723B  |.  8BF0          mov esi,eax
0044723D  |.  6A 00         push 0x0
0044723F  |.  66:8B0D 70724>mov cx,word ptr ds:[0x447270]
00447246  |.  B2 02         mov dl,0x2
00447248  |.  B8 7C724400   mov eax,CKme0023.0044727C                ;  注册尚未成功,同志仍需努力!  8)
0044724D  |.  E8 42E4FFFF   call CKme0023.00445694
00447252  |.  84DB          test bl,bl
00447254  |.  75 07         jnz XCKme0023.0044725D
00447256  |.  8386 18030000>add dword ptr ds:[esi+0x318],0x2         ; 这里就是将[ebx+0x318]的值加上来,其他的也是差不多
0044725D  |>  80FB 01       cmp bl,0x1
00447260  |.  75 07         jnz XCKme0023.00447269
00447262  |.  8386 18030000>add dword ptr ds:[esi+0x318],0x11
00447269  |>  5E            pop esi
0044726A  |.  5B            pop ebx
0044726B  |.  5D            pop ebp
0044726C  \.  C2 0C00       retn 0xC

于是有:

点第1张图:+2

点第2张图:+3

点第3张图:+5

点第4张图:+7

最终[ebx+0x314的值是]0x34的,那么一开始就把第1张图点26次。这样[ebx+0x314]和[ebx+0x318]就相同了

总结操作过程:

保证那个ok.txt的存在,使得打开程序后,能看到text2。 然后在第1张图片出来前,右键点5下注册,双击显示图片的框框没有图片的那些部分。

用于解锁text2,然后点第1张图片26次。如果还没点完,那就等下一轮吧。在第3张图片“性相近”出来之前在text2输入内容,一共8个字符,

第2个字符是“_”,第6个字符是",",在第3张图片出来的时候鼠标在程序界面的右下角晃来晃去,多晃几遍保证成功使得[ebx+0x310]的值变成0x10,

然后等第2张图出来,如果第1张没有点够26次的就继续点,够了就不点。第2张图出来后就用鼠标在程序左下角晃来晃去。多晃几次,注册按钮就

会变成"注册了"。

不是一定要点第1张图片26次,反正4张图片点一次的变化量出来了,将总的变化量加起来是52就行了。

如何不更改任何文件内容,可以搜索更改盘符的相关信息。将D盘改为X盘,或者将多分一个盘出来且将盘符改为X并且

在相关路径创建文件。只有在成功读取文件,程序界面才能出现text2

网站有资料说是[ebx+0x314]的值是不固定的,但是我在虚拟机得出的解决方法在实机上也可以用。

160 - 5 ajj.2相关推荐

  1. 160 - 4 ajj.1

    环境: Windows Xp sp3 输入Name和Serial,无错误提示.看说明,只有正确时才有提示 OD载入,搜索字符串,发现两个字符串: Panel1DblClick和Panel1Click ...

  2. 004/160 CrackMe ajj CKme

    分析 可以通过搜索字符串的方式找到 "恭喜恭喜!注册成功" 的提示 在关键跳转上面打断点,输入一组假的 Name Serial 测试 发现点击图片框时程序会停在断点,说明图片框和按 ...

  3. 160个CrackMe-第四个“ajj与黑头兄!”

    从前有160个CreakMe,后来-. 程序分析 首先运行程序 输入伪码测试,Name:123456789 Serial:qqqqqqq 但是这个程序似乎除了这两个编辑框还有一个鼠标提示外就没有&qu ...

  4. 160个crackme 持续更新(1\2\3\4\6\8\9)

    最近感觉自己啥都不会吧,就算会也就是点皮毛,还是练的太少了,从160个crackme开始 慢慢来吧,从简单的开始 1.Acid burn OD动态调试一下,靠字符串定位打断点,如下 跟进这个函数可以看 ...

  5. [反汇编练习] 160个CrackMe之004

    [反汇编练习] 160个CrackMe之004. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  6. 硬盘温度70度正常吗_70多岁老年人原来血压160,现在130正常吗?医生为你分析实情...

    70多岁的老年人,原来有高血压,高压160左右,现在是130左右,正常吗?这个问题问的太过笼统,我们只好通过这个问题,来分享一些老年高血压患者血压控制的一些知识点,希望能够对老年人的高血压控制,能够有 ...

  7. 微软语音扩展全球语言支持,发布160个新声音

    导语:全世界有数千种语言,最具语言天赋的人也只能说数十种,普通人能够学会两三种语言已属不易.然而,在科技日新月异的今天,具备自然语言对话能力的AI已经能够掌握上百种语言,扩展人类自身能力,为不同场景的 ...

  8. 5分钟带你读「大清」微积分!160多年前清朝数学家撰写文言文版高等数学

     视学算法报道   编辑:小咸鱼 好困 [新智元导读]你有见过160多年前清朝数学家写的微积分书吗?这可能是最难懂的高数教材了,堪称天书!近日,网上流传着一本清朝的微积分课本,其中的所有数学表达式都是 ...

  9. 机器学习160个常见问题.pdf

    来自公众号:机器学习算法与Python实战 原文链接:https://hackernoon.com/160-data-science-interview-questions-415s3y2a (Ale ...

最新文章

  1. php读取西门子plc_基于Socket访问西门子PLC系列教程(二)
  2. 程序员面试题精选100题(50)-树的子结构[数据结构]
  3. Spring-bean的生命周期
  4. 第二次考试:错题总结
  5. python如何用matplotlib绘图_Python绘图的多图控制(使用Matplotlib),python,利用,matplotlib...
  6. 使用Typescript开发(二)
  7. 分析app和wap手机网站的不同
  8. ArcGIS实验教程——实验四十三:ArcGIS栅格重分类(Reclass)案例详解
  9. unity与3dmax 单位统一的方法
  10. SQL文件切割工具、大文件操作工具
  11. [授权发表]程序执行的那一刹那
  12. ADFS Change Token SigningEncryption Certificate Expiration Date
  13. 华为交换机RRPP环协议
  14. CSS-边框和边距详解
  15. VB中对EXCEL的各种操作
  16. 2017企业网盘年终盘点|机遇与挑战并存,寡头显现
  17. XFTP软件连接虚拟机
  18. linux下gperf工具(tcmalloc)检查C/C++代码内存泄露问题操作说明
  19. 如何判断是手机端还是PC端?
  20. 像素与分辨率之间的关系

热门文章

  1. 《JavaScript100例|01》之javaScript实现俄罗斯方块,唤起了女朋友儿时的回忆!
  2. 如何做好内容策划并完成一篇合格的深度文?
  3. 孙叫兽进阶之路之Gitlab的使用(图文教程)
  4. jq 方法函数(淡入淡出,查找元素,过滤)遍历
  5. 【Set jsonObj = toJson( jsonString )】创建JSON实例
  6. Bootstrap中的条纹进度条使用案例
  7. openocd安装与调试
  8. 不同设备屏幕尺寸和DPR适配
  9. Airflow安装与使用
  10. 【BZOJ2073】[POI2004]PRZ 状压DP