首页
社区
课程
招聘
[原创]abooMe的破解和算法分析
发表于: 2006-8-18 14:17 5675

[原创]abooMe的破解和算法分析

jdxyw 活跃值
19
2006-8-18 14:17
5675

【文章标题】: abooMe的破解和算法分析
【文章作者】: jdxyw
【软件名称】: abooMe
【下载地址】: 自己搜索下载
【加壳方式】: 无
【编写语言】: C/C++
【使用工具】: peid OD
【操作平台】: XP
【作者声明】: 如果某位高手已经破过这个了,请告诉我,我把附件删了,给论坛省点空间
--------------------------------------------------------------------------------
【详细过程】
  首先用peid查壳,无壳
  
  点击运行,没有任何反应
  
  运行OD,将crack载入 ctrl+N 查看调用函数,将断点断在GetDlgItemTextA上,输入用户名和序列号
  
  004047D8  |>  8B4D 90       /MOV ECX,DWORD PTR SS:[EBP-70]
  004047DB  |.  83C1 01       |ADD ECX,1
  004047DE  |.  894D 90       |MOV DWORD PTR SS:[EBP-70],ECX
  004047E1  |>  8B55 90        MOV EDX,DWORD PTR SS:[EBP-70]
  004047E4  |.  3B55 8C       |CMP EDX,DWORD PTR SS:[EBP-74]                              EDX是用来计数的,当为用户名长度的时候,跳出循环
  004047E7  |.  7D 36         |JGE SHORT aboome2.0040481F
  004047E9  |.  8B45 90       |MOV EAX,DWORD PTR SS:[EBP-70]                              
  004047EC  |.  0FBE8C05 18FF>|MOVSX ECX,BYTE PTR SS:[EBP+EAX-E8]                         逐个取用户名字节到ECX
  004047F4  |.  8B55 90       |MOV EDX,DWORD PTR SS:[EBP-70]                              
  004047F7  |.  33C0          |XOR EAX,EAX
  004047F9  |.  8A82 C1AC4100 |MOV AL,BYTE PTR DS:[EDX+41ACC1]                            在内存中有个表,是固定的,是用来计算序列号的,按顺序取一个
                                                                                          字节到AL中
  004047FF  |.  0345 FC       |ADD EAX,DWORD PTR SS:[EBP-4]                               将计算所得,原先存入堆栈中的数值,加到EAX中
  00404802  |.  03C1          |ADD EAX,ECX                                                将前面取出的用户名字节加到EAX中
  00404804  |.  8945 FC       |MOV DWORD PTR SS:[EBP-4],EAX                               将计算所的,保存到前两步中用到的数值的保存地址中
  00404807  |.  8B4D 90       |MOV ECX,DWORD PTR SS:[EBP-70]                              
  0040480A  |.  0FBE940D 18FF>|MOVSX EDX,BYTE PTR SS:[EBP+ECX-E8]                         将这个循环用到的用户名字节取到EDX
  00404812  |.  6BD2 0A       |IMUL EDX,EDX,0A                                            EDX=EDX*OAH
  00404815  |.  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]                               将先前计算所得取到EAX
  00404818  |.  03C2          |ADD EAX,EDX                                                EAX=EAX*EDX
  0040481A  |.  8945 FC       |MOV DWORD PTR SS:[EBP-4],EAX                               将计算所得存入同一地址
  0040481D  |.^ EB B9         \JMP SHORT aboome2.004047D8
  0040481F  |>  C745 90 00000>MOV DWORD PTR SS:[EBP-70],0
  00404826  |.  EB 09         JMP SHORT aboome2.00404831
  00404828  |>  8B4D 90       /MOV ECX,DWORD PTR SS:[EBP-70]
  0040482B  |.  83C1 01       |ADD ECX,1
  0040482E  |.  894D 90       |MOV DWORD PTR SS:[EBP-70],ECX
  00404831  |>  8B55 90        MOV EDX,DWORD PTR SS:[EBP-70]                             SS:[EBP-70]保存的是已经的循环次数
  00404834  |.  3B55 8C       |CMP EDX,DWORD PTR SS:[EBP-74]                             SS:[EBP-74]保存的是用户名长度
  00404837  |.  7D 3D         |JGE SHORT aboome2.00404876
  00404839  |.  8B45 90       |MOV EAX,DWORD PTR SS:[EBP-70]                              
  0040483C  |.  33C9          |XOR ECX,ECX
  0040483E  |.  8A88 C0AC4100 |MOV CL,BYTE PTR DS:[EAX+41ACC0]                           逐个取表中字节到CL中
  00404844  |.  6BC9 0A       |IMUL ECX,ECX,0A                                           ECX=ECX*OAh
  00404847  |.  8B55 F8       |MOV EDX,DWORD PTR SS:[EBP-8]                              取保存计算结果到EDX
  0040484A  |.  03D1          |ADD EDX,ECX                                               EDX=EDX+ECX
  0040484C  |.  8955 F8       |MOV DWORD PTR SS:[EBP-8],EDX                              将计算结果返回到保存处
  0040484F  |.  0FBE85 1AFFFF>|MOVSX EAX,BYTE PTR SS:[EBP-E6]                            取用户名字节到EAX  
  00404856  |.  8B4D 90       |MOV ECX,DWORD PTR SS:[EBP-70]                             
  00404859  |.  33D2          |XOR EDX,EDX                                             
  0040485B  |.  8A91 C0AC4100 |MOV DL,BYTE PTR DS:[ECX+41ACC0]                           取表中字节数到DL中
  00404861  |.  0355 F8       |ADD EDX,DWORD PTR SS:[EBP-8]                              将计算结果加到EDX上
  00404864  |.  03D0          |ADD EDX,EAX                                               将EAX加到EDX上
  00404866  |.  8955 F8       |MOV DWORD PTR SS:[EBP-8],EDX                              将计算结果返回到保存处
  00404869  |.  8B45 F8       |MOV EAX,DWORD PTR SS:[EBP-8]                              将计算结果取到EAX
  0040486C  |.  05 37130300   |ADD EAX,31337                                             将31337H加到eax上
  00404871  |.  8945 F8       |MOV DWORD PTR SS:[EBP-8],EAX                              将计算结果送到保存处   
  00404874  |.^ EB B2         \JMP SHORT aboome2.00404828
  00404876  |>  8B4D F8       MOV ECX,DWORD PTR SS:[EBP-8]
  00404879  |.  51            PUSH ECX
  0040487A  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]
  0040487D  |.  52            PUSH EDX
  0040487E  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
  00404881  |.  50            PUSH EAX
  00404882  |.  68 D0AC4100   PUSH aboome2.0041ACD0                    ;  ASCII "%X-aboo-me-%X%i-SCA"
  00404887  |.  8D4D 94       LEA ECX,DWORD PTR SS:[EBP-6C]
  0040488A  |.  51            PUSH ECX
  0040488B  |.  E8 E90A0000   CALL aboome2.00405379                                  这个call是将前面计算的结果
                                                                           格式化保存到"%X-aboo-me-%X%i-SCA"中,
                                                                           这个就是序列号的形式
  00404890  |.  83C4 14       ADD ESP,14
  00404890  |.  83C4 14       ADD ESP,14
  00404893  |.  6A 64         PUSH 64                                  ; /Count = 64 (100.)
  00404895  |.  8D95 28FFFFFF LEA EDX,DWORD PTR SS:[EBP-D8]            ; |
  0040489B  |.  52            PUSH EDX                                 ; |Buffer
  0040489C  |.  68 ED030000   PUSH 3ED                                 ; |ControlID = 3ED (1005.)
  004048A1  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]             ; |
  004048A4  |.  50            PUSH EAX                                 ; |hWnd
  004048A5  |.  FF15 E0204100 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA
  004048AB  |.  8D8D 28FFFFFF LEA ECX,DWORD PTR SS:[EBP-D8]
  004048B1  |.  51            PUSH ECX                                 ; /String2                假序列号
  004048B2  |.  8D55 94       LEA EDX,DWORD PTR SS:[EBP-6C]            ; |
  004048B5  |.  52            PUSH EDX                                 ; |String1                真序列号
  004048B6  |.  FF15 0C204100 CALL DWORD PTR DS:[<&KERNEL32.lstrcmpA>] ; \lstrcmpA                  
  004048BC  |.  8985 14FFFFFF MOV DWORD PTR SS:[EBP-EC],EAX
  004048C2  |.  83BD 14FFFFFF>CMP DWORD PTR SS:[EBP-EC],0
  004048C9  |.  75 14         JNZ SHORT aboome2.004048DF
  004048CB  |.  68 E4AC4100   PUSH aboome2.0041ACE4                    ; /Text = "Good Work! now make a keygen!      "
  004048D0  |.  68 ED030000   PUSH 3ED                                 ; |ControlID = 3ED (1005.)
  004048D5  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]             ; |
  004048D8  |.  50            PUSH EAX                                 ; |hWnd
  004048D9  |.  FF15 DC204100 CALL DWORD PTR DS:[<&USER32.SetDlgItemTe>; \SetDlgItemTextA
  004048DF  |>  E9 86000000   JMP aboome2.0040496A
  
  算法分析
  内存中的表
  0041ACB9                       13     13是表的第一项      
  0041ACC1  16 99 11 63 15 54 52 88  
  我的用户名是yutou 序列号 1A3A-ab00-me-F6FA91011625-SCA
  在第一个循环中
  设表为table 结果为A用户名为name
  
  A += name[t] + table [t+1] + (name[t] * 0x0A);循环5次
  
  在第二个循环中 结果为B
  
  B += (table [t] * 0x0A) + name[2] + table [t] + 0x31337;循环五次
  
  在序列号的形式中"%X-aboo-me-%X%i-SCA"
  第一个%X就是A的十六进制表示 第二个%X是B的十六进制表示,%i是B的十进制的表示。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年08月18日 14:14:44


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (3)
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
算法分析的好详细!!学习!
2006-8-18 17:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好文章,值得研究!
2006-8-18 19:51
0
雪    币: 333
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wan
4
不错,好好学习中...
2006-8-18 20:02
0
游客
登录 | 注册 方可回帖
返回
//