吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9494|回复: 19
收起左侧

[原创] crack一简单的反调试软件 KGM1Tal.exe

[复制链接]
ja3klyTim9k 发表于 2013-11-12 01:26
本帖最后由 ja3klyTim9k 于 2013-11-12 09:22 编辑

    作为吾爱破解的新人,第一次发帖.最近刚开始学习逆向,对很多东西都还不是很懂,所以此贴适合初学者观看,大牛请略过,,,

     得益学校一大牛指点,前两天发给我一个软件,带有反调试的CM,从来没有接触过这些东东呀,心里顿感压力,作为菜鸟的我们果断首先百度,发现网上果然是大牛云集的地方,终获一方案,果断跟随学习,到目前,算是基本了解此软件的一些运行原理,下面详解:

        一如破解的顺序,首先拖入PEid中探求有无壳,发现没壳;接下来打开软件探求破解之道,发现随意输入密码后会弹出“Try Again,something did not work right.”于是果断拖入OD,先前说过此软件带有反调试,所以在OD中很多断点根本无法准确断下,经过反复调试,确认用消息断点下断,于是,首先F9运行起来,“查看”->“窗口”,刷新如下:


在&Redister上右键选择在CLASSPRO上设置消息断点..
如下图:
图片2.jpg



设置好后点击运行的软件上的Register按键,然后选择OD上的M按钮,或者alt+m快捷键,进入下面:
图片3.jpg


在00401000上右键“在访问上设置断点”(至于为什么在此处设置断点,相信你们都应该有一些理解,一般软件在载入内存后,默认的偏移地址的1000,这个你可以在PEIDEPSection后面的“>”可以看到:
图片4.jpg



所以我们在此下断点,直接F9运行,它会断在程序的入口处执行,如下图:

[AppleScript] 纯文本查看 复制代码
00401230 /.  55            push ebp
00401231 |.  8BEC          mov ebp,esp
00401233 |.  817D 0C 10010>cmp [arg.2],0x110                      ;  --110 消息断点WM_INITDIALOG
0040123A  |.  75 1E        jnz short KGM1Tal.0040125A
0040123C  |.  68 057F0000   push 0x7F05                            ; /RsrcName =IDI_WINLOGO
00401241 |.  6A 00        push 0x0                              ; |hInst = NULL
00401243 |.  E8 5A030000   call<jmp.&user32.LoadIconA>          ; \LoadIconA
00401248 |.  50            push eax                               ; /lParam =7FFDD000
00401249 |.  6A 01        push 0x1                              ; |wParam = 1
0040124B |.  68 80000000   push 0x80                              ; |Message =WM_SETICON
00401250 |.  FF75 08       push [arg.1]                           ; |hWnd = 1A00A2
00401253 |.  E8 56030000   call<jmp.&user32.SendMessageA>       ; \SendMessageA
00401258 |.  EB 36         jmp short KGM1Tal.00401290
0040125A  |>  817D 0C11010>cmp [arg.2],0x111                     ;  --消息断点111是WM_COMMAND
00401261      75 1D         jnz short KGM1Tal.00401280
00401263 |.  817D 10 E9030>cmp[arg.3],0x3E9
0040126A      75 24         jnz short KGM1Tal.00401290
0040126C  |.  E8 A8020000   call KGM1Tal.00401519                  ;  <--  F7跟进




[AppleScript] 纯文本查看 复制代码
00401519  $  BF 96124000   mov edi,KGM1Tal.00401296        ; 入口地址
0040151E  .  B9 00010000   mov ecx,0x100                       ecx为下面REPNE的循环次数
00401523  .  B0 99         mov al,0x99
00401525  .  34 55         xor al,0x55                     ;             0x99与0x55异或得到0xcc
00401527  .  F2:AE         repne scas byte ptr es:[edi]    ;      检查有无INT3断点,在401296--401395内不能有断点,否则出错
00401529  .  85C9         test ecx,ecx
0040152B  .  74 06         je short KGM1Tal.00401533       ;    --此处必须跳转,否则出错
0040152D  .  5E            pop esi                         ;  KGM1Tal.00401271
0040152E  .  33F6         xor esi,esi                    ;  KGM1Tal.00401230
00401530  .  57            push edi                        ;  KGM1Tal.00401396
00401531  .^ EB C2         jmp short KGM1Tal.004014F5
00401533  >  C3            retn

[AppleScript] 纯文本查看 复制代码
00401271 |.  E8 33020000   call KGM1Tal.004014A9           ;              <--  F7跟进,检测有没有对GETDLGITEM下断
004014A9   $  BE 9C154000   movesi,<jmp.&user32.GetDlgItem>;    入口地址
004014AE  .  8B7E 02       mov edi,dword ptr ds:[esi+0x2]  ;  <&user32.GetDlgItemTextA>
004014B1  .  8B3F          movedi,dword ptr ds:[edi]
004014B3  .  B9 06000000   mov ecx,0x6
004014B8  .  B0 CC         mov al,0xCC
004014BA  .  F2:AE         repne scas byte ptr es:[edi]    ;  --检测有没有对GETDLGITEM下断
004014BC  .  85C9         test ecx,ecx
004014BE  .  74 06         je short KGM1Tal.004014C6       ; --此处必须跳,不然出错
004014C0   .  5E           pop esi                        ;  KGM1Tal.00401276
004014C1   .  33F6          xor esi,esi                     ;  KGM1Tal.0040159C
004014C3   .  57           push edi                       ;  user32.77D6AC0C
004014C4   .  EB 2F         jmp short KGM1Tal.004014F5
004014C6   >  C3           retn
00401276 |.  FF75 08       push [arg.1]
00401279 |.  E8 18000000   call KGM1Tal.00401296           ;  <-- 跟进






[AppleScript] 纯文本查看 复制代码
00401296  $  55            push ebp
00401297  .  8BEC          mov ebp,esp
00401299  .  60            pushad
0040129A   .  BE FE124000  mov esi,KGM1Tal.004012FE
0040129F   .  56           push esi                       ;  KGM1Tal.0040159C
004012A0   .  64:FF35 00000>push dword ptr fs:[0]
004012A7   .  64:8925 00000>mov dword ptr fs:[0],esp
004012AE  .  FF35 3C304000 push dword ptr ds:[0x40303C]   ; /Count = 1E (30.)
004012B4  .  68 00304000   push KGM1Tal.00403000           ; |Buffer = KGM1Tal.00403000
004012B9  .  68 EC030000   push 0x3EC                      ; |ControlID = 3EC(1004.)
004012BE  .  FF75 08       push dword ptr ss:[ebp+0x8]     ; |hWnd = 001A00A2('KeyGen1 - Taliesin',class='#32770')
004012C1   .  E8 D6020000  call <jmp.&user32.GetDlgItemTex>; \GetDlgItemTextA  此处获取用户名
004012C6   .  FF35 40304000 push dword ptrds:[0x403040]    ; /Count = 14 (20.)
004012CC  .  68 23304000   push KGM1Tal.00403023           ; |Buffer = KGM1Tal.00403023
004012D1  .  68 ED030000   push 0x3ED                      ; |ControlID = 3ED(1005.)
004012D6  .  FF75 08       push dword ptr ss:[ebp+0x8]     ; |hWnd = 001A00A2('KeyGen1 - Taliesin',class='#32770')
004012D9  .  E8 BE020000   call <jmp.&user32.GetDlgItemTex>;\GetDlgItemTextA  此处获取密码
004012DE  .  E8 4F000000   callKGM1Tal.00401332          跟进


[AppleScript] 纯文本查看 复制代码
00401332  $  33C0         xor eax,eax
00401334  .  B9 00000000   mov ecx,0x0
00401339  .  BE 23304000   mov esi,KGM1Tal.00403023                 ;  ASCII "HAOHAOXUEXI"
0040133E  .  8A06         mov al,byte ptr ds:[esi]
00401340  .  EB 10         jmp short KGM1Tal.00401352
00401342  >  0FB6C0        movzxeax,al
00401345  .  80B8 50314000>cmp byte ptrds:[eax+0x403150],0x2       ;  判断是否为大写,2为大写,其他的则为符号或者小写,此处可以用DD 403150命令看下此处的内存



寄存器数据如下:

00403150  09090900
00403154  09090909
00403158  09050609
0040315C  09090509
00403160  09090909
00403164  09090909
00403168  09090909
0040316C  09090909
00403170  05050506
00403174  05050509
00403178  04040505
0040317C  04050405
00403180  01010101
00403184  01010101
00403188  05050101
0040318C  05050505
00403190  02020209
00403194  02020202
00403198  02020202
0040319C  02020202
004031A0  02020202
004031A4  02020202
004031A8  05020202

所以我们大概可以明白为什么是和0x2比较了,继续向下分析:

[AppleScript] 纯文本查看 复制代码
0040134C     /75 0A         jnzshort KGM1Tal.00401358               ;  不是则跳,所以密码必须为大写
0040134E  . |41            inc ecx
0040134F   . |8A0431       mov al,byte ptr ds:[ecx+esi]
00401352  > |3C00         cmp al,0x0                               ;  判断密码是否取完
00401354  .^|77 EC         ja shortKGM1Tal.00401342
00401356  . |EB 07         jmp short KGM1Tal.0040135F
00401358  > \C605 44304000>mov byte ptr ds:[0x403044],0x40
0040135F   >  BE 00304000  mov esi,KGM1Tal.00403000                 ; ASCII "jackylin"
00401364  .  33C9         xor ecx,ecx
00401366  .  B8 01000000   mov eax,0x1
0040136B  .  33D2          xor edx,edx
0040136D  .  C705 45304000>mov dword ptrds:[0x403045],0x0
00401377  >  B9 00000000   mov ecx,0x0
0040137C   .  8A0C32        mov cl,byte ptr ds:[edx+esi]
0040137F   .  80F900       cmp cl,0x0                               ;  判断用户名是否取完
00401382  .  74 09         je short KGM1Tal.0040138D
00401384  .  42            inc edx
00401385  .  000D 45304000 add byte ptrds:[0x403045],cl            ;  将用户名所有字符的ascll码值相加,得到和SUM1
0040138B  .^ EB EA         jmp shortKGM1Tal.00401377
0040138D  >  A1 45304000   mov eax,dword ptr ds:[0x403045]
00401392  .  B9 18000000   mov ecx,0x18
00401397  .  99            cdq
00401398  .  F7F9         idiv ecx
0040139A   .  8815 4F304000mov byte ptr ds:[0x40304F],dl
004013A0   .  8A0D44304000 mov cl,byte ptr ds:[0x403044]
004013A6   .  80F940       cmp cl,0x40                              ;  如果之前不是大写的话,这里就不会跳转,不跳则错,所以密码必须大写
004013A9      75 05         jnz short KGM1Tal.004013B0               ;  此处必须跳
004013AB      E9 45010000   jmp KGM1Tal.004014F5
004013B0  >  E9 CB000000   jmp KGM1Tal.00401480
004013B5  .  C3            retn
00401480  > \E8 8B000000   callKGM1Tal.00401510                    ;  --F7跟进






[AppleScript] 纯文本查看 复制代码
00401510   $  A024304000   mov al,byte ptrds:[0x403024]            ;  --此处将密码的第二个字符移入al中,你若不确定,可以用DD 403024命令查看该地址的ASCLL码
00401515   .  3C 45         cmp al,0x45                              ;                            --- - ---比较,不等则跳
00401517    ^ 75 DC         jnz short KGM1Tal.004014F5
00401519   $  BF96124000   mov edi,KGM1Tal.00401296                 ;             --- ---  入口地址
0040151E   .  B900010000   mov ecx,0x100
00401523   .  B099         mov al,0x99
00401525   .  3455         xor al,0x55                              ;  0x99与0x55异或得到0xcc
00401527   . F2:AE         repne scas byte ptres:[edi]             ;  检查有无INT3断点,在401296--401395内不能有断点,否则出错
00401529   .  85C9          test ecx,ecx
0040152B   .  7406         je short KGM1Tal.00401533                ;  --此处必须跳转,否则出错
0040152D   . 5E            pop esi                                  ;  KGM1Tal.00401485
0040152E   .  33F6          xor esi,esi                              ;  KGM1Tal.00403000
00401530   . 57            push edi                                 ;  KGM1Tal.00401396
00401531   .^ EB C2         jmp short KGM1Tal.004014F5
00401533   > C3            retn
00401485   . 33DB          xor ebx,ebx
00401487   .  BF80144000   mov edi,KGM1Tal.00401480
0040148C   .  83EF60       sub edi,0x60
0040148F   .  B8DE000000   mov eax,0xDE
00401494   .  83F0 12       xor eax,0x12                             ;  0x60与0x12异或得到CC
00401497   .  B959000000   mov ecx,0x59
0040149C   . F2:AE         repne scas byte ptres:[edi]             ;  --检查00401420-00401479处有无断点
0040149E   .  85C9          test ecx,ecx
004014A0   .  74 06        je short KGM1Tal.004014A8                ;  --此处必须跳转,否则失败
004014A2   .  5E           pop esi                                 ;  KGM1Tal.004012E3
004014A3   .  33F6          xor esi,esi                              ;  KGM1Tal.00403000
004014A5   .  57           push edi                                 ; KGM1Tal.00401479
004014A6   .  EB 4D        jmp short KGM1Tal.004014F5
004014A8   >  C3           retn
004012E8   .  E8 C9000000   call KGM1Tal.004013B6                    ;  --F7跟进

[AppleScript] 纯文本查看 复制代码
004013B6   $ 55            push ebp
004013B7   .  8BEC          mov ebp,esp
004013B9   .  6823304000   push KGM1Tal.00403023                    ;  ASCII "HAOHAOXUEXI"
004013BE   .  E87D010000   call KGM1Tal.00401540                    ;  --F7跟进




[AppleScript] 纯文本查看 复制代码
00401540  /$ 8B4424 04     mov eax,dword ptrss:[esp+0x4]           ;  --取密码
00401544  |. 83E8 04       sub eax,0x4                              ;  --此段代码主要作用是用一个循环依次比较在密码的第几位为零,即密码的位数是多少
00401547  |>  83C0 04       /add eax,0x4
0040154A  |. 8038 00       |cmp byte ptrds:[eax],0x0
0040154D  |.  7430         |je short KGM1Tal.0040157F
0040154F  |. 8078 01 00    |cmp byte ptrds:[eax+0x1],0x0
00401553  |.  7420         |je short KGM1Tal.00401575
00401555  |. 8078 02 00    |cmp byte ptrds:[eax+0x2],0x0
00401559  |.  7410         |je short KGM1Tal.0040156B
0040155B  |. 8078 03 00    |cmp byte ptrds:[eax+0x3],0x0
0040155F  |.^ 75 E6         \jnz short KGM1Tal.00401547
00401561  |. 2B4424 04     sub eax,dword ptrss:[esp+0x4]           ;  KGM1Tal.004012ED
00401565  |.  83C0 03       add eax,0x3
00401568  |.  C20400       retn 0x4
0040156B  |> 2B4424 04     sub eax,dword ptrss:[esp+0x4]           ;  KGM1Tal.004012ED
0040156F  |.  83C0 02       add eax,0x2
00401572  |.  C20400       retn 0x4
00401575  |> 2B4424 04     sub eax,dword ptrss:[esp+0x4]           ; KGM1Tal.004012ED
00401579  |.  83C0 01       add eax,0x1
0040157C  |.  C20400       retn 0x4
0040157F  |> 2B4424 04     sub eax,dword ptrss:[esp+0x4]           ;  KGM1Tal.004012ED
00401583  \.  C20400       retn 0x4
004013C3  |.  83F80A       cmp eax,0xA                              ;  --密码必须为十位
004013C6  |.  0F8529010000 jnz KGM1Tal2.004014F5
004013CC  |.  BE23304000   mov esi,KGM1Tal2.00403023                ;  ASCII "HAOHAOXUEXI"
004013D1  |.  B800000000   mov eax,0x0
004013D6  |.  BB00000000   mov ebx,0x0
004013DB  |.  33C9          xor ecx,ecx
004013DD  |.  EB06         jmp short KGM1Tal2.004013E5
004013DF  |>  8A0C30        /mov cl,byte ptr ds:[eax+esi]
004013E2  |. 03D9          |add ebx,ecx                             ;  ---取密码的ASCLL码值相加得到SUM2
004013E4  |. 40            |inc eax
004013E5  |>  83F8 09        cmp eax,0x9
004013E8  |.^ 72 F5         \jb short KGM1Tal2.004013DF
004013EA  |. 8BC3          mov eax,ebx
004013EC  |.  B909000000   mov ecx,0x9
004013F1  |.  99           cdq
004013F2  |.  F7F9          idiv ecx
004013F4  |.  A3 4A304000   mov dword ptr ds:[0x40304A],eax
004013F9  |.  8B7D 08      mov edi,[arg.1]                         ;  KGM1Tal2.00403053
004013FC  |.  8A15 4F304000mov dl,byte ptr ds:[0x40304F]
00401402  |.  8AC2          mov al,dl
00401404  |.  3C 18         cmp al,0x18
00401406  |.  7602         jbe short KGM1Tal2.0040140A
00401408  |.  2C 18         sub al,0x18
0040140A  |> A2 4E304000   mov byte ptrds:[0x40304E],al
0040140F  |.  33C0          xor eax,eax
00401411  |.  A04E304000   mov al,byte ptr ds:[0x40304E]
00401416  |.  8A2438        mov ah,byte ptr ds:[eax+edi]
00401419  |.  8A36          mov dh,byte ptr ds:[esi]                 ;  --移入第一位密码进行比较
0040141B  |.  38F4          cmp ah,dh
0040141D  |.  0F85 D2000000 jnz KGM1Tal2.004014F5
00401423  |. 80EE 41       sub dh,0x41
00401426  |. 8AF2          mov dh,dl
00401428  |.  B400         mov ah,0x0
0040142A  |.  A24E304000   mov byte ptr ds:[0x40304E],al
0040142F  |.  33C0          xor eax,eax
00401431  |.  A04E304000   mov al,byte ptr ds:[0x40304E]
00401436  |.  02C2          add al,dl
00401438  |.  3C 18         cmp al,0x18
0040143A  |.  7602         jbe short KGM1Tal2.0040143E
0040143C  |.  2C 18         sub al,0x18                              ;  --若大于0x18就减去它
0040143E  |> B9 02000000   mov ecx,0x2
00401443  |.  8A2438        mov ah,byte ptr ds:[eax+edi]
00401446  |.  8A3431        mov dh,byte ptr ds:[ecx+esi]             ; --移入密码第三位
00401449  |.  38F4          cmp ah,dh
0040144B  |.  0F85 A4000000jnz KGM1Tal2.004014F5


到这里各位童鞋是否觉得有点茫然,很正常,里面绕的弯子比较多,但是没事,一遍看不懂就多看两遍,你总会看懂的,我就是这样子的,继续往后分析:


[AppleScript] 纯文本查看 复制代码
00401451  |. /EB 24         jmp short KGM1Tal2.00401477              ; - -此处代码比较第四位到第九位的密码
00401453  |> |A2 4E304000   /mov byte ptr ds:[0x40304E],al
00401458  |. |33C0          |xor eax,eax
0040145A  |. |A0 4E304000   |mov al,byte ptr ds:[0x40304E]
0040145F  |. |80EE 41       |sub dh,0x41
00401462  |. |8AD6          |mov dl,dh
00401464  |. |41            |inc ecx
00401465  |. |02C2          |add al,dl
00401467  |. |3C18         |cmp al,0x18
00401469  |. |76 02         |jbe short KGM1Tal2.0040146D
0040146B  |. |2C18         |sub al,0x18
0040146D  |> |8A2438        |mov ah,byte ptr ds:[eax+edi]
00401470  |. |8A3431        |mov dh,byte ptr ds:[ecx+esi]
00401473  |. |38F4          |cmp ah,dh
00401475  |. |75 7E         |jnz short KGM1Tal2.004014F5
00401477  |> \83F908        cmp ecx,0x8
0040147A  |.^ 72 D7         \jb short KGM1Tal2.00401453
0040147C  |. C9            leave
0040147D  \.  C20400       retn 0x4
004012ED   .  E8DC010000   call KGM1Tal2.004014CE                   ;                      ---f7跟进


[AppleScript] 纯文本查看 复制代码
004014CE  /$  BE23304000   mov esi,KGM1Tal2.00403023                ;  ASCII "HAOHAOXUEXI"
004014D3  |.  A1 4A304000  mov eax,dword ptr ds:[0x40304A]
004014D8  |.  8A5E 09       mov bl,byte ptr ds:[esi+0x9]             ;                                                   ---取密码最后一位
004014DB  |. 38D8          cmp al,bl
004014DD  |.  7516         jnz short KGM1Tal2.004014F5
004014DF  |.  B8 6C304000  mov eax,KGM1Tal2.0040306C                ;  ASCII "Great Job!"
004014E4  |.  8BD8          mov ebx,eax
004014E6  |.  83C3 0B       add ebx,0xB




到此就算跟完了,各位童鞋是否已经睡着,但是不急,我们确实已经跟完了,细细回想发现过程其实也不是很难,只是内容较多…

最后附带两个链接,里面有原版的软件和一个破解补丁…
希望各位童鞋好好学习,天天向上…
第一次的贴被提出字迹太乱,希望想认真看着帖子的人多提意见,我会继续编辑修改,不好意思...

软件地址链接: http://pan.baidu.com/share/link?shareid=481844&uk=1344482023
破解补丁链接:http://pan.baidu.com/share/link?shareid=481840&uk=1344482023

免费评分

参与人数 2热心值 +2 收起 理由
asd9988 + 1 -
Peace + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

良辰美景 发表于 2013-11-12 01:32
内容很乱,图片也看不到,建议先在草稿箱整理好以后在发出来!
RichieChan 发表于 2013-11-12 01:45
 楼主| ja3klyTim9k 发表于 2013-11-12 01:52
良辰美景 发表于 2013-11-12 01:32
内容很乱,图片也看不到,建议先在草稿箱整理好以后在发出来!

不好意思哈,第一次发帖,不知道这些,现在改过来了,应该看得到了吧!!
头像被屏蔽
yc016 发表于 2013-11-12 01:52
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| ja3klyTim9k 发表于 2013-11-12 01:53
RichieChan 发表于 2013-11-12 01:45
图挂了!!!!!!

刚刚在修改中,现在可以看了.
 楼主| ja3klyTim9k 发表于 2013-11-12 01:54
yc016 发表于 2013-11-12 01:52
表示图全挂了  = =、

现在应该可以看了

点评

图全挂了,尽量不要使用baidu的图片。会有防盗链  发表于 2013-11-12 01:56
没文化真可怕丶 发表于 2013-11-12 01:56
看不懂这些代码啊啊啊啊啊
 楼主| ja3klyTim9k 发表于 2013-11-12 02:30
ja3klyTim9k 发表于 2013-11-12 01:54
现在应该可以看了

额,,把原文图片搞上来了,现在可以了.
langhubao 发表于 2013-11-12 04:33
正在学习中 谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 14:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表