wyh1983 发表于 2006-12-31 23:03:10

2006年最后一天之OFFICE文档解密专家爆破

猫老大:找你一天了,不知道你什么时候在,兄弟想加入学习小组,好好学习,不知道什么时候能给个机会啊?知道现在学习小组已经停止招收学员了,但是还请猫老大~~~~~~~~~~~~~~~~~~


【文章标题】: 2006年最后一天之OFFICE文档解密专家爆破
【文章作者】: 神猪
【作者QQ号】: 80930686
【软件名称】: Advanced Office Password RecoveryV3.10
【下载地址】: 自己搜索下载
【保护方式】: ASProtect壳
【编写语言】: Borland C++ 1999
【使用工具】: PEID ,OD
【操作平台】: XP
【软件介绍】:针对 MS Office 系列的密码破解工具 AOPR 可破解 95~03 版的各类 Office 文档,
本软件分精简、标准、专业三个版本,而本专业版便是其中支持的格式最全、开放的特性最多的一款。
主要格式如下:
Microsoft Word 文档
Microsoft Excel 文档
Microsoft Access 数据库
Microsoft Outlook 个人存储文件
Microsoft Outlook VBA 宏文件
Microsoft Money 数据库
Microsoft Schedule+ 文件
Microsoft Backup 文件
Microsoft Mail 文件
Visio 文件
Microsoft PowerPoint 演示
Microsoft Project 文件
Microsoft Pocket Excel 文件
Microsoft OneNote 文件


【作者声明】: 今天是2006年最后一天,总得为PYG交点作业,虽然偶水平有限!!这个软件网上已经有破解
版,但是偶没看到破文,正好闲来无事,就拿它分析一下吧。--------------------------------------------------------------------------------
【详细过程】
PEID查壳为ASProtect 1.33 - 2.1 Registered -> Alexey Solodovnikov * ,对偶个菜鸟来说算是强壳了。为了节省时间
怕交不了作业,嘿嘿~~~~~,所以,脱壳机脱之~~~,我用的是stripper_v211rc2,还好,脱了之后,不用
修复,也可以使用 !~~~!

此软件最早应该是英文版,后来哪位大哥给汉化的吧?因为我下载的是汉化版。所以W32ADSW找不到有用的提示!
没办法,取出法宝OD~~~,载入!!!
软件有注册错误提示,下断点BPX MessageboxA
程序断下来,看下面


004168C8/$55            PUSH EBP
004168C9|.8BEC          MOV EBP,ESP
004168CB|.81C4 00FEFFFF ADD ESP,-200
004168D1|.53            PUSH EBX
004168D2|.8B5D 08       MOV EBX,DWORD PTR SS:
004168D5|.53            PUSH EBX                                 ; /Arg1
004168D6|.E8 39650300   CALL _aopr.0044CE14                      ; \此处应该为关键CALLF7跟近
004168DB|.59            POP ECX
004168DC      85C0          TEST EAX,EAX
004168DE      74 68         JE SHORT _aopr.00416948                  ;此处关键跳转,跳则注册错误!
004168E0      53            PUSH EBX
004168E1|.E8 9EFFFFFF   CALL _aopr.00416884                      ; \_aopr.00416884
004168E6|.59            POP ECX
004168E7|.68 B1605B00   PUSH _aopr.005B60B1                      ;AOPR
004168EC|.833D 20755B00>CMP DWORD PTR DS:,0
004168F3|.74 07         JE SHORT _aopr.004168FC
004168F5|.A1 20755B00   MOV EAX,DWORD PTR DS:
004168FA|.EB 05         JMP SHORT _aopr.00416901
004168FC|>B8 B6605B00   MOV EAX,_aopr.005B60B6
00416901|>50            PUSH EAX                                 ; |<%s>
00416902|.68 A9605B00   PUSH _aopr.005B60A9                      ; |%s %s !
00416907|.8D95 00FEFFFF LEA EDX,DWORD PTR SS:         ; |
0041690D|.52            PUSH EDX                                 ; |s
0041690E|.E8 6F4A1900   CALL <JMP.&user32.wsprintfA>             ; \wsprintfA
00416913|.83C4 10       ADD ESP,10
00416916|.833D 18755B00>CMP DWORD PTR DS:,0
0041691D|.6A 40         PUSH 40
0041691F|.74 08         JE SHORT _aopr.00416929
00416921|.8B0D 18755B00 MOV ECX,DWORD PTR DS:
00416927|.EB 05         JMP SHORT _aopr.0041692E
00416929|>B9 B7605B00   MOV ECX,_aopr.005B60B7
0041692E|>51            PUSH ECX                                 ; |Title
0041692F|.8D85 00FEFFFF LEA EAX,DWORD PTR SS:         ; |
00416935|.50            PUSH EAX                                 ; |Text
00416936|.E8 BD461900   CALL <JMP.&user32.GetFocus>            ; |[GetFocus
0041693B|.50            PUSH EAX                                 ; |hOwner
0041693C|.E8 91481900   CALL <JMP.&user32.MessageBoxA>         ; \注册成功提示框
00416941|.B8 01000000   MOV EAX,1
00416946|.EB 3C         JMP SHORT _aopr.00416984
00416948|>6A 30         PUSH 30
0041694A|.833D 18755B00>CMP DWORD PTR DS:,0
00416951|.74 08         JE SHORT _aopr.0041695B
00416953|.8B15 18755B00 MOV EDX,DWORD PTR DS:
00416959|.EB 05         JMP SHORT _aopr.00416960
0041695B|>BA B9605B00   MOV EDX,_aopr.005B60B9
00416960|>52            PUSH EDX
00416961|.833D 24755B00>CMP DWORD PTR DS:,0
00416968|.74 07         JE SHORT _aopr.00416971
0041696A|.A1 24755B00   MOV EAX,DWORD PTR DS:
0041696F|.EB 05         JMP SHORT _aopr.00416976
00416971|>B8 B8605B00   MOV EAX,_aopr.005B60B8
00416976|>50            PUSH EAX                                 ; |Text
00416977|.E8 7C461900   CALL <JMP.&user32.GetFocus>            ; |[GetFocus
0041697C|.50            PUSH EAX                                 ; |hOwner
0041697D|.E8 50481900   CALL <JMP.&user32.MessageBoxA>         ; \注册失败提示框
00416982|.33C0          XOR EAX,EAX
00416984|>5B            POP EBX
00416985|.8BE5          MOV ESP,EBP
00416987|.5D            POP EBP
00416988\.C3            RETN



这里我将004168DE      74 68         JE SHORT _aopr.00416948                  ;此处关键跳转,跳则注册错误!
中的JE一行NOP掉了。



OD中保存,运行程序,点注册,随便输入注册码,点注册按钮,提示注册成功~~,嘿嘿~~~,

再次运行程序,晕,还是可以注册,不过经过测试,暂时没有发现这样爆破后,有限制的地方。

这个程序注册之后,界面上少一个获取完全版的按钮。未注册则显示。

接着往下分析,重新起动之后,仍然显示那个按钮,有两种可能,一种是软件把注册码写入到文件中,一种是软件把注册码写入注册表!
用注册表监视工具监视软件运行,发现软件将注册码存放在这个位置。

"Code"="2323V-66344"    这个就是我注册时写的注册码

重新运行软件,下断点BPX RegQueryValueExA
下断,程序会断下来很多次。因为偶是菜鸟,对于程序分析一直是不过关,所以只能理解一部份。

分析结果:软件会验证注册码,注册码开头部份必须以AOPRH- 开头,举个例子,实际的注册码可以是这样的
AOXPPH-PRO-LWXFW-46678-FTDBV-66344


现在是十一点,因为时间关系,先把这个贴子贴上来,我将继续分析这程序,如果将详细算法分析出来,会回来补充的。
如果哪位老大有空,一起来分析一下,给小弟指点一下了~~~~~~~


下面这部份就是读取验证注册表中的注册码的。
004167D0|.E8 8D3D1900   CALL <JMP.&advapi32.RegQueryValueExA>      ; \RegQueryValueExA
004167D5|.85C0          TEST EAX,EAX
004167D7|.75 28         JNZ SHORT _aopr.00416801
004167D9|.8D55 F4       LEA EDX,DWORD PTR SS:
004167DC|.8D4D F8       LEA ECX,DWORD PTR SS:
004167DF|.52            PUSH EDX                                     ; /pBufSize
004167E0|.53            PUSH EBX                                     ; |Buffer
004167E1|.51            PUSH ECX                                     ; |pValueType
004167E2|.6A 00         PUSH 0                                       ; |Reserved = NULL
004167E4|.68 11605B00   PUSH _aopr.005B6011                        ; |Code
004167E9|.8B45 FC       MOV EAX,DWORD PTR SS:               ; |
004167EC|.50            PUSH EAX                                     ; |hKey
004167ED|.E8 703D1900   CALL <JMP.&advapi32.RegQueryValueExA>      ; \RegQueryValueExA
004167F2|.85C0          TEST EAX,EAX
004167F4|.75 0B         JNZ SHORT _aopr.00416801
004167F6|.8B55 FC       MOV EDX,DWORD PTR SS:
004167F9|.52            PUSH EDX                                     ; /hKey
004167FA|.E8 153D1900   CALL <JMP.&advapi32.RegCloseKey>             ; \RegCloseKey
004167FF|.EB 7B         JMP SHORT _aopr.0041687C
00416801|>8B4D FC       MOV ECX,DWORD PTR SS:
00416804|.51            PUSH ECX                                     ; /hKey
00416805|.E8 0A3D1900   CALL <JMP.&advapi32.RegCloseKey>             ; \RegCloseKey
0041680A|.8D45 FC       LEA EAX,DWORD PTR SS:
0041680D|.50            PUSH EAX                                     ; /pHandle
0041680E|.68 16605B00   PUSH _aopr.005B6016                        ; |SOFTWARE\ElcomSoft\Advanced Office Password Recovery\Registration
00416813|.68 02000080   PUSH 80000002                              ; |hKey = HKEY_LOCAL_MACHINE
00416818|.E8 FD3C1900   CALL <JMP.&advapi32.RegCreateKeyA>         ; \RegCreateKeyA
0041681D|.837D FC 00    CMP DWORD PTR SS:,0
00416821|.74 4D         JE SHORT _aopr.00416870
00416823|.8D55 F4       LEA EDX,DWORD PTR SS:
00416826|.8D4D F8       LEA ECX,DWORD PTR SS:
00416829|.52            PUSH EDX                                     ; /pBufSize
0041682A|.6A 00         PUSH 0                                       ; |Buffer = NULL
0041682C|.51            PUSH ECX                                     ; |pValueType
0041682D|.6A 00         PUSH 0                                       ; |Reserved = NULL
0041682F|.68 58605B00   PUSH _aopr.005B6058                        ; |Code
00416834|.8B45 FC       MOV EAX,DWORD PTR SS:               ; |
00416837|.50            PUSH EAX                                     ; |hKey
00416838|.E8 253D1900   CALL <JMP.&advapi32.RegQueryValueExA>      ; \RegQueryValueExA
0041683D|.85C0          TEST EAX,EAX
0041683F|.75 2F         JNZ SHORT _aopr.00416870
00416841|.8D55 F4       LEA EDX,DWORD PTR SS:
00416844|.8D4D F8       LEA ECX,DWORD PTR SS:
00416847|.52            PUSH EDX                                     ; /pBufSize
00416848|.53            PUSH EBX                                     ; |Buffer
00416849|.51            PUSH ECX                                     ; |pValueType
0041684A|.6A 00         PUSH 0                                       ; |Reserved = NULL
0041684C|.68 5D605B00   PUSH _aopr.005B605D                        ; |Code
00416851|.8B45 FC       MOV EAX,DWORD PTR SS:               ; |
00416854|.50            PUSH EAX                                     ; |hKey
00416855|.E8 083D1900   CALL <JMP.&advapi32.RegQueryValueExA>      ; \RegQueryValueExA
0041685A|.85C0          TEST EAX,EAX
0041685C|.75 12         JNZ SHORT _aopr.00416870
0041685E|.8B55 FC       MOV EDX,DWORD PTR SS:
00416861|.52            PUSH EDX                                     ; /hKey
00416862|.E8 AD3C1900   CALL <JMP.&advapi32.RegCloseKey>             ; \RegCloseKey
00416867|.53            PUSH EBX                                     ; /Arg1
00416868|.E8 17000000   CALL _aopr.00416884                        ; \_aopr.00416884
0041686D|.59            POP ECX
0041686E|.EB 0C         JMP SHORT _aopr.0041687C
00416870|>8B4D FC       MOV ECX,DWORD PTR SS:
00416873|.51            PUSH ECX                                     ; /hKey
00416874|.E8 9B3C1900   CALL <JMP.&advapi32.RegCloseKey>             ; \RegCloseKey
00416879|.C603 00       MOV BYTE PTR DS:,0
0041687C|>5B            POP EBX
0041687D|.8BE5          MOV ESP,EBP
0041687F|.5D            POP EBP
00416880\.C3            RETN
00416881      90            NOP
00416882      90            NOP
00416883      90            NOP
00416884/$55            PUSH EBP
00416885|.8BEC          MOV EBP,ESP
00416887|.51            PUSH ECX
00416888|.53            PUSH EBX
00416889|.8B5D 08       MOV EBX,DWORD PTR SS:
0041688C|.8D45 FC       LEA EAX,DWORD PTR SS:
0041688F|.50            PUSH EAX                                     ; /pHandle
00416890|.68 62605B00   PUSH _aopr.005B6062                        ; |SOFTWARE\ElcomSoft\Advanced Office Password Recovery\Registration
00416895|.68 01000080   PUSH 80000001                              ; |hKey = HKEY_CURRENT_USER
0041689A|.E8 7B3C1900   CALL <JMP.&advapi32.RegCreateKeyA>         ; \RegCreateKeyA
0041689F|.53            PUSH EBX                                     ; /String
004168A0|.E8 51411900   CALL <JMP.&kernel32.lstrlenA>                ; \lstrlenA
004168A5|.50            PUSH EAX                                     ; /BufSize
004168A6|.53            PUSH EBX                                     ; |Buffer
004168A7|.6A 01         PUSH 1                                       ; |ValueType = REG_SZ
004168A9|.6A 00         PUSH 0                                       ; |Reserved = 0
004168AB|.68 A4605B00   PUSH _aopr.005B60A4                        ; |Code
004168B0|.8B55 FC       MOV EDX,DWORD PTR SS:               ; |
004168B3|.52            PUSH EDX                                     ; |hKey
004168B4|.E8 BB3C1900   CALL <JMP.&advapi32.RegSetValueExA>          ; \RegSetValueExA
004168B9|.8B4D FC       MOV ECX,DWORD PTR SS:
004168BC|.51            PUSH ECX                                     ; /hKey
004168BD|.E8 523C1900   CALL <JMP.&advapi32.RegCloseKey>             ; \RegCloseKey
004168C2|.5B            POP EBX
004168C3|.59            POP ECX
004168C4|.5D            POP EBP
004168C5\.C3            RETN



--------------------------------------------------------------------------------
【版权声明】: 偶的这篇文原创于PYG论坛, 网上到底有没有这个软件的破文,小弟不详,因没有查证!!!!

                                                       2006年12月31日 22:58:11

wyh1983 发表于 2006-12-31 23:29:21

继续分析之

程序目录内有一个elcom_reg.dll文件,Resource hacker分析,注册码填写框位于该DLL文件中。

wyh1983 发表于 2007-1-1 00:07:35

2007年了,

先向大家问候一下!!!!
祝大家新年快乐1!!!!!

wyh1983 发表于 2007-1-1 10:22:08

继续补充,程序注册时调用elcom_reg.dll文件进行注册,也就是注册码验证和计算部份在这里

温柔 发表于 2007-1-1 11:11:59

你没试下标志位吗?

wyh1983 发表于 2007-1-1 12:51:24

试过的,和我那样爆破没有什么区别

heavyrain 发表于 2007-1-2 13:50:46

看看在说了啊,支持哈

wan 发表于 2007-1-5 11:16:32

我也玩了下3.11版...修改了两处变为专业版...那个按钮也不会搞,资源修改把那个按钮隐藏掉了;P

madshime 发表于 2007-1-18 07:45:55

好文章哦呵呵

zchh19 发表于 2007-2-1 13:17:32

学习!!!!!!!!!!!!!!!!!!!!!
页: [1] 2
查看完整版本: 2006年最后一天之OFFICE文档解密专家爆破