当前位置: 首页 > 工具软件 > OllyDbg > 使用案例 >

ollydbg 练手(1)

岑俊弼
2023-12-01

我是小菜,不会传图片。首先找到,关键跳转,见
004011F3  ^\0F84 DEFEFFFF   je chap203.004010D7                
下面是程序

004011D9  ^\EB C1           jmp short chap203.0040119C                ; 返回跳转位置继续比较
004011DB    FF35 AF214000   push dword ptr ds:[4021AF]
004011E1    68 94214000     push chap203.00402194
004011E6    68 79214000     push chap203.00402179
004011EB    E8 54000000     call chap203.00401244
004011F0    83F8 01         cmp eax,1                                 ; 比较EAX,(标志位)
004011F3  ^ 0F84 DEFEFFFF   je chap203.004010D7                       ; 如果相等就注册成功
004011F9    EB 1F           jmp short chap203.0040121A                ; 不相等就 失败,跳转
004011FB    837D 10 01      cmp dword ptr ss:[ebp+10],1
004011FF  ^ 0F84 22FFFFFF   je chap203.00401127
00401205    837D 10 02      cmp dword ptr ss:[ebp+10],2
00401209    75 2F           jnz short chap203.0040123A
0040120B    E8 B4000000     call <jmp.&KERNEL32.ExitProcess>
00401210    B8 01000000     mov eax,1
00401215  ^ E9 FFFEFFFF     jmp chap203.00401119


然发现前面,还有一段,是判断 数字的长度。 应该是 大于1小于等于80040112F    FF75 08         push dword ptr ss:[ebp+8]
00401132    E8 41020000     call <jmp.&USER32.SendDlgItemMessageA>
00401137    A3 AF214000     mov dword ptr ds:[4021AF],eax
0040113C    83F8 00         cmp eax,0                                 ; 看数据长度是否大于0
0040113F    0F84 D5000000   je chap203.0040121A                       ; 数据长度小于0提示错误
00401145    83F8 08         cmp eax,8                                 ; 比较数据长度
00401148    0F8F CC000000   jg chap203.0040121A                       ; 数据长度大于8提示错误
0040114E    8BF0            mov esi,eax                               ; 存储数据长度1~8 位
00401150    6A 00           push 0
00401152    6A 00           push 0
00401154    6A 0E           push 0E
00401156    6A 04           push 4
00401158    FF75 08         push dword ptr ss:[ebp+8]
0040115B    E8 18020000     call <jmp.&USER32.SendDlgItemMessageA>
00401160    83F8 00         cmp eax,0
00401163    0F84 B1000000   je chap203.0040121A                       ; 如果数据长度等于0 提示错误
00401169    3BF0            cmp esi,eax                               ; 两个数据的长度要一致
0040116B    0F85 A9000000   jnz chap203.0040121A
00401171    68 60214000     push chap203.00402160
00401176    6A 08           push 8
00401178    6A 0D           push 0D

关键的密码生成部分。也是找了半个小时,没办法,小菜一枚。
0040119C    41              inc ecx                                   ; ecx 加1,当ECX=9,的时候  eax 返回的是0
0040119D    0FBE81 60214000 movsx eax,byte ptr ds:[ecx+402160]        ; 402160+偏移0 给 EAX
004011A4    83F8 00         cmp eax,0
004011A7    74 32           je short chap203.004011DB
004011A9    BE FFFFFFFF     mov esi,-1
004011AE    83F8 41         cmp eax,41                                ; 和0x41比较 就是 ‘A’
004011B1 >  7C 67           jl short chap203.0040121A                 ; 小于‘A’,就失败
004011B3    83F8 7A         cmp eax,7A                                ; 就是‘z’
004011B6    77 62           ja short chap203.0040121A                 ; 大于z,就失败
004011B8    83F8 5A         cmp eax,5A                                ; 就是‘Z’
004011BB    7C 03           jl short chap203.004011C0                 ; 小于‘Z’,就进去查表
004011BD    83E8 20         sub eax,20                                ; eax减去32
004011C0    46              inc esi                                   ; 查表中下一个数字
004011C1    0FBE96 17204000 movsx edx,byte ptr ds:[esi+402017]        ; 隐含了“ASCII码大于Z直接查表,和小于Z的,减掉32,来查表”
004011C8    3BC2            cmp eax,edx                               ; 比较第二位
004011CA  ^ 75 F4           jnz short chap203.004011C0                ; 不相等就向后比较
004011CC    0FBE86 3C204000 movsx eax,byte ptr ds:[esi+40203C]        ; 查表
004011D3    8981 94214000   mov dword ptr ds:[ecx+402194],eax         ; 生成加密后的数据
004011D9  ^ EB C1           jmp short chap203.0040119C                ; 返回跳转位置,继续比较
004011DB    FF35 AF214000   push dword ptr ds:[4021AF]
004011E1    68 94214000     push chap203.00402194

继续寻找,发现还有一个核对的部分。将序列号,和生成的 密码对比。
00401244    C8 000000       enter 0,0                                 ; 进入函数
00401248    B8 01000000     mov eax,1                                 ; EAX=1,作为标记使用
0040124D    8B7D 08         mov edi,dword ptr ss:[ebp+8]              ; 存入CODE
00401250    8B75 0C         mov esi,dword ptr ss:[ebp+C]              ; 加密后的数据
00401253    8B4D 10         mov ecx,dword ptr ss:[ebp+10]             ; 下一句 REPE的长度,8个数据
00401256    F3:A6           repe cmps byte ptr es:[edi],byte ptr ds:[>; 比较 加密后的数据 和user name  是否相等
00401258    67:E3 05        jcxz short chap203.00401260               ; 不等就离开
0040125B    B8 00000000     mov eax,0                                 ; 给EAX =0
00401260    C9              leave
00401261    C2 0C00         retn 0C                                   ; 对比成功时,EAX=1;

。如果想强力爆破,可以直接修改EAX的值,后面判断会用到。
这里就是最后了,比较EAX ,进行核对。
004011F0    83F8 01         cmp eax,1                                 ; 比较EAX,(标志位)
004011F3  ^ 0F84 DEFEFFFF   je chap203.004010D7                       ; 如果相等就注册成功
。到这里,这个Crakeme,  就结束了。本想写个注册机,如果写了,稍候传上。
附上里面的两个码表:
//402017
00402017  41 31 4C 53 4B 32 44 4A 46 34 48 47 50 33 51 57  A1LSK2DJF4HGP3QW
00402027  4F 35 45 49 52 36 55 54 59 5A 38 4D 58 4E 37 43  O5EIR6UTYZ8MXN7C
00402037  42 56 39 00 20 53 55 37 43 53 4A 4B 46 30 39 4E  BV9. SU7CSJKF09N
00402047  43 53 44 4F 39 53 44 46 30 39 53 44 52 4C 56 4B  CSDO9SDF09SDRLVK
00402057  37 38 30 39 53 34 4E 46 00                       7809S4NF.

码表2:
//40203c
0040203C  53 55 37 43 53 4A 4B 46 30 39 4E 43 53 44 4F 39  SU7CSJKF09NCSDO9
0040204C  53 44 46 30 39 53 44 52 4C 56 4B 37 38 30 39 53  SDF09SDRLVK7809S
0040205C  34 4E 46 00                                      4NF.

CRAKEme 下载地址:
http://pan.baidu.com/share/link?shareid=481557&uk=4095171087

 类似资料: