【破文标题】:PowerCHM v5.0 之暴破
【破文作者】:Steven
【作者邮箱】:lugb2003@sina.com
【软件名称】:PowerCHM v5.0
【软件大小】:3.0MB
【软件语言】:英文
【下载地址】:
http://www.dawningsoft.com/products/powerchm.htm
【软件简介】:PowerCHM 软件可以转换 .html(.htm)、.doc、.txt 格式的文件为 .CHM 格式的文件,它还能反编译 .CHM文件。
【保护方式】:注册码 + 30天试用期限制 + 功能限制
【目标程序】:PowerCHM.exe
【编译语言】:VC++ 6.0
【调试环境】:WinXP、Ollydbg、W32Dasm、Hiew
【破解日期】:2005-08-25
【破解目的】:推广使用Ollydbg动态分析,和W32Dasm静态分析相结合
【作者声明】:初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
=============================================================================
【破解过程】:
1. 首先要明确爆破的思路是改变程序的流程,使得程序按照我们所期望的流程运行!
2. 由于我现在还是个菜鸟,跟踪注册码算法时,跟着跟着就晕了,只好暴破了,有哪位大侠感兴趣研究一下算法;请赐教!
3. 现在来看一下程序的注册流程,运行程序,随意输入注册码注册,弹出窗口提示"PowerCHM must be restarted to validate the code."(必须重启软件才能验证注册码的有效性);注意观察一下,软件安装目录中多了一个reg.ini文件;根据这两个线索进行分析;
(1).先用W32Dasm工具反编译,查找字符串"PowerCHM must be restarted to validate the code."
经过分析,注册码的关键比较部分不在这里,一般情况下这个线索不必分析;
(2).查找字符串"reg.ini";发现有三个地方,分别为0043766E、00437721、00439060,用OD动态分析;
(3).用OD载入程序,在0043766E、00437721、00439060这三处下断,F9运行
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
0043766E |. 68 BCAA5200 push PowerCHM.0052AABC ; ASCII "reg.ini"
★停在这里★
00437673 |. 8D4C24 38 lea ecx,dword ptr ss:[esp+38]
00437677 |. 50 push eax
00437678 |. 51 push ecx
00437679 |. C68424 50060000 01 mov byte ptr ss:[esp+650],1
00437681 |. E8 DD080A00 call PowerCHM.004D7F63
00437686 |. 8B00 mov eax,dword ptr ds:[eax]
00437688 |. 50 push eax ; /Path
00437689 |. FF15 8C345000 call dword ptr ds:<&SHLWAPI.PathFileExi> ; \PathFileExistsA
★判断reg.ini文件是否存在★
0043768F |. 85C0 test eax,eax
00437691 |. 8D4C24 34 lea ecx,dword ptr ss:[esp+34]
00437695 |. 0F94C3 sete bl
00437698 |. E8 31060A00 call PowerCHM.004D7CCE
0043769D |. 84DB test bl,bl
0043769F |. 74 21 je short PowerCHM.004376C2★如果reg.ini文件存在,跳走,否则会弹出注册窗口★
004376A1 |. 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
004376A5 |. C68424 44060000 00 mov byte ptr ss:[esp+644],0
004376AD |. E8 1C060A00 call PowerCHM.004D7CCE
004376B2 |. C78424 44060000 FFF>mov dword ptr ss:[esp+644],-1
004376BD |. E9 E1060000 jmp PowerCHM.00437DA3
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
单步执行到这里
00437721 |. 68 BCAA5200 push PowerCHM.0052AABC ; ASCII "reg.ini"
00437726 |. 8D5424 38 lea edx,dword ptr ss:[esp+38]
0043772A |. 51 push ecx
0043772B |. 52 push edx
0043772C |. C68424 50060000 06 mov byte ptr ss:[esp+650],6
00437734 |. E8 2A080A00 call PowerCHM.004D7F63
00437739 |. 8B00 mov eax,dword ptr ds:[eax]
0043773B |. 8D4C24 40 lea ecx,dword ptr ss:[esp+40]
0043773F |. 51 push ecx ; /Arg3
00437740 |. 56 push esi ; |Arg2
00437741 |. 50 push eax ; |Arg1
00437742 |. 8D4C24 60 lea ecx,dword ptr ss:[esp+60] ; |
00437746 |. C68424 50060000 07 mov byte ptr ss:[esp+650],7 ; |
0043774E |. E8 14630A00 call PowerCHM.004DDA67 ; \PowerCHM.004DDA67
00437753 |. 8D4C24 34 lea ecx,dword ptr ss:[esp+34]
00437757 |. C68424 44060000 06 mov byte ptr ss:[esp+644],6
0043775F |. E8 6A050A00 call PowerCHM.004D7CCE
00437764 |. 8D5424 10 lea edx,dword ptr ss:[esp+10]
00437768 |. 8D4C24 54 lea ecx,dword ptr ss:[esp+54]
0043776C |. 52 push edx
0043776D |. E8 D8640A00 call PowerCHM.004DDC4A
00437772 |. 8D4C24 54 lea ecx,dword ptr ss:[esp+54]
00437776 |. E8 1C660A00 call PowerCHM.004DDD97
0043777B |. 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
0043777F |. E8 BCCD0900 call PowerCHM.004D4540
00437784 |. 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
00437788 |. E8 67CD0900 call PowerCHM.004D44F4
0043778D |. 8B4424 10 mov eax,dword ptr ss:[esp+10]
00437791 |. 8B40 F8 mov eax,dword ptr ds:[eax-8] ★注册码长度★
00437794 |. 83F8 00 cmp eax,078 ★注册码长度与120比较,修改为0★
00437797 |. 0F8C B7050000 jl PowerCHM.00437D54 ★小于120跳走,会弹出注册窗口★
0043779D |. 3D A5000000 cmp eax,082 ★注册码长度与130比较,修改为000000A5★
004377A2 |. 0F8F AC050000 jg PowerCHM.00437D54 ★大于130跳走,会弹出注册窗口★
修改上面两处是为了能够输入任意长度的注册码,进行注册!最大值改为A5,是因为在输入注册码时最多只能输入这么多的字符;
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
继续单步执行到这里
00437986 |. 40 inc eax
00437987 |> 83F8 01 cmp eax,1
0043798A |. 0F 85B7000000 jne PowerCHM.00437A47★关键跳转一,修改为jmp(机器码为E9B8000000)修改后少了一个字节,可用90补一个字节★
00437990 |. 8D4C24 68 lea ecx,dword ptr ss:[esp+68]
00437994 |. C68424 44060000 12 mov byte ptr ss:[esp+644],12
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
继续单步执行到这里
00437A98 |. 68 28AA5200 push PowerCHM.0052AA28 ; ASCII "copyno"
00437A9D |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
00437AA1 |. E8 B5C60900 call PowerCHM.004D415B
00437AA6 |. 8BF0 mov esi,eax
00437AA8 |. 3BF3 cmp esi,ebx
00437AAA |. 0F 85C8000000 jne PowerCHM.00437B78★关键跳转二,修改为jmp(机器码为E9C9000000)修改后少了一个字节,可用90补一个字节★
00437AB0 |. 8D4C24 20 lea ecx,dword ptr ss:[esp+20]
00437AB4 |. C68424 44060000 13 mov byte ptr ss:[esp+644],13
到此就大功告成了!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课