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
继续分析之
程序目录内有一个elcom_reg.dll文件,Resource hacker分析,注册码填写框位于该DLL文件中。2007年了,
先向大家问候一下!!!!祝大家新年快乐1!!!!! 继续补充,程序注册时调用elcom_reg.dll文件进行注册,也就是注册码验证和计算部份在这里 你没试下标志位吗? 试过的,和我那样爆破没有什么区别 看看在说了啊,支持哈 我也玩了下3.11版...修改了两处变为专业版...那个按钮也不会搞,资源修改把那个按钮隐藏掉了;P 好文章哦呵呵 学习!!!!!!!!!!!!!!!!!!!!!
页:
[1]
2