- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
楼主 |
发表于 2007-4-11 12:57:19
|
显示全部楼层
3.调试工具|-爆破简介(文图见附件)
【破文标题】精装友情通讯录 V2005 Build 11.20 简单分析
【破文作者】Nisy
【作者邮箱】[email protected]
【作者主页】bbs.chinapyg.com
【破解工具】PEiD v0.94、ODICEv1.10(汉化第二版)
【破解平台】Win XPsp2
【软件名称】精装友情通讯录 V2005 Build 11.20
【软件大小】1722 KB
【保护方式】注册码
【原版下载】http://www.skycn.com/soft/10355.html
05年时候的软件,两年多未更新了,加密的的强度相对来说不高,我们通过分析这个软件来讲解下该软件的验证方式、暴破。
第一步PEiD插壳:Borland Delphi 6.0 - 7.0 无壳,我们打开软件随意输入注册码,注册看软件给我们什么提示。以来是一个对话框:“注册失败,请重新注册!”
这是一个很关键的信息,通过他就可以有的放矢的来动态调试这个软件。在该程序上右键我们OD载入该软件。
我们观看一下,看到该行有一个红色箭头从上方指下来,我们从该行代码向上找,在上方一个retn语句的下一行PUSH这里下断(这里就是软件注册部分的开始),按F2或者左键双击该行Hex 数据这一部分。该行的地址部分就会以红色表示我们已经成功下断。
我们F8运行到0051539A行代码的时候,可以看到寄存器窗口EAX和EDX进行了真假码的比较。我们F8一下,来到下一行代码。
我们看到这一行的JNZ语句已经实现跳转(以默认的红色显示),这里如果跳走,软件就会执行“注册失败”的代码,我们在这里修改其代码,暴力破解。
在该行点空格,出现汇编于此处的代码。我们在这里将“jnz”修改为“jz” 。点一次汇编后我们看到该行的语句已经变为了“JZ”。
然后在我们修改后的那行点右键,如图操作:
我们为我们修改后的文件重新命名保存即可,到此时暴破完成。
如果不修改该行代码,其实我们也可以达到使其不跳转的目的。我们在寄存器窗口在标志未“Z”上左键双击为“1”(上方的比较处其实修改的就是这里的标志位),这里我们就发现该跳转已经变为了灰色。接着我们继续跟踪,看软件的注册信息保存在哪里。这里大家要注意,软件在注册成功之后的代码一般包含了将注册信息保存在哪里。软件的注册信息我们一定要尽力追到保存位置。
该软件OD简单分析(算法部分省略)
00515264 /. 55 push ebp ; 我们在这里下断点 然后F8一路向下即可。
00515265 |. 8BEC mov ebp, esp
00515267 |. B9 17000000 mov ecx, 17
0051526C |> 6A 00 /push 0
0051526E |. 6A 00 |push 0
00515270 |. 49 |dec ecx
00515271 |.^ 75 F9 \jnz short 0051526C
00515273 |. 53 push ebx
00515274 |. 56 push esi
00515275 |. 8BD8 mov ebx, eax
00515277 |. 33C0 xor eax, eax
00515279 |. 55 push ebp
0051527A |. 68 E9545100 push 005154E9
0051527F |. 64:FF30 push dword ptr fs:[eax]
00515282 |. 64:8920 mov dword ptr fs:[eax], esp
00515285 |. 68 80000000 push 80 ; /BufSize = 80 (128.)
0051528A |. 8D85 7BFFFFFF lea eax, dword ptr [ebp-85] ; |
00515290 |. 50 push eax ; |Buffer
00515291 |. E8 B220EFFF call <jmp.&kernel32.GetSystemDir>; \GetSystemDirectoryA
00515296 |. 8D45 FC lea eax, dword ptr [ebp-4]
00515299 |. 8D95 7BFFFFFF lea edx, dword ptr [ebp-85]
0051529F |. B9 81000000 mov ecx, 81
005152A4 |. E8 DBF9EEFF call 00404C84
005152A9 |. 8D95 74FFFFFF lea edx, dword ptr [ebp-8C]
005152AF |. 8B83 1C030000 mov eax, dword ptr [ebx+31C]
005152B5 |. E8 F2D8F2FF call 00442BAC ; 这里取出我们输入注册码的位数 在EAX寄存器中
005152BA |. 83BD 74FFFFFF>cmp dword ptr [ebp-8C], 0 ; 我们输入的注册码位数和0比较
005152C1 |. 74 1A je short 005152DD ; 如果和0相等就跳向“注册信息没有填写齐全”的对话框
005152C3 |. 8D95 70FFFFFF lea edx, dword ptr [ebp-90]
005152C9 |. 8B83 10030000 mov eax, dword ptr [ebx+310]
005152CF |. E8 D8D8F2FF call 00442BAC ; 这里取我们输入的定单号位数 放EAX寄存器中
005152D4 |. 83BD 70FFFFFF>cmp dword ptr [ebp-90], 0 ; 和0比较
005152DB |. 75 0F jnz short 005152EC ; 相等就飞走
005152DD |> B8 00555100 mov eax, 00515500 ; 注册信息没有填写齐全
005152E2 |. E8 B96AF2FF call 0043BDA0
005152E7 |. E9 80010000 jmp 0051546C
005152EC |> 8D95 6CFFFFFF lea edx, dword ptr [ebp-94]
005152F2 |. 8B83 1C030000 mov eax, dword ptr [ebx+31C]
005152F8 |. E8 AFD8F2FF call 00442BAC
005152FD |. 8B85 6CFFFFFF mov eax, dword ptr [ebp-94]
00515303 |. 50 push eax
00515304 |. 8D95 60FFFFFF lea edx, dword ptr [ebp-A0]
0051530A |. 8B83 10030000 mov eax, dword ptr [ebx+310]
00515310 |. E8 97D8F2FF call 00442BAC
00515315 |. 8B85 60FFFFFF mov eax, dword ptr [ebp-A0]
0051531B |. E8 9042EFFF call 004095B0
00515320 |. B9 40080000 mov ecx, 840
00515325 |. 99 cdq
00515326 |. F7F9 idiv ecx
00515328 |. 8BC2 mov eax, edx
0051532A |. 8D95 64FFFFFF lea edx, dword ptr [ebp-9C]
00515330 |. E8 1742EFFF call 0040954C
00515335 |. FFB5 64FFFFFF push dword ptr [ebp-9C]
0051533B |. 8D95 54FFFFFF lea edx, dword ptr [ebp-AC]
00515341 |. 8B83 10030000 mov eax, dword ptr [ebx+310]
00515347 |. E8 60D8F2FF call 00442BAC
0051534C |. 8B85 54FFFFFF mov eax, dword ptr [ebp-AC]
00515352 |. E8 5942EFFF call 004095B0
00515357 |. 8D95 58FFFFFF lea edx, dword ptr [ebp-A8]
0051535D |. E8 C6FCFFFF call 00515028
00515362 |. 8B85 58FFFFFF mov eax, dword ptr [ebp-A8]
00515368 |. E8 4342EFFF call 004095B0
0051536D |. 8D95 5CFFFFFF lea edx, dword ptr [ebp-A4]
00515373 |. E8 90FDFFFF call 00515108
00515378 |. FFB5 5CFFFFFF push dword ptr [ebp-A4]
0051537E |. 68 20555100 push 00515520 ; 1
00515383 |. 8D85 68FFFFFF lea eax, dword ptr [ebp-98]
00515389 |. BA 03000000 mov edx, 3
0051538E |. E8 01FAEEFF call 00404D94
00515393 |. 8B95 68FFFFFF mov edx, dword ptr [ebp-98]
00515399 |. 58 pop eax ; 上方的汇编语言是来计算软件正确的注册码 我们这里不做分析
0051539A |. E8 79FAEEFF call 00404E18 ; 这个Call 用来比较真假注册码 我们看寄存器窗口
0051539F 0F85 A3000000 jnz 00515448 ; 还记得这个跳转吧 如果跳走 软件注册失败
005153A5 |. B8 2C555100 mov eax, 0051552C ; 注册码正确,感谢你的注册!
005153AA |. E8 F169F2FF call 0043BDA0 ; 如果不跳走,则向系统写入正确注册信息
005153AF |. A1 109C5300 mov eax, dword ptr [539C10]
005153B4 |. 8B00 mov eax, dword ptr [eax]
005153B6 |. 8B80 C8040000 mov eax, dword ptr [eax+4C8]
005153BC |. 8B80 08020000 mov eax, dword ptr [eax+208]
005153C2 |. 33D2 xor edx, edx
005153C4 |. E8 A79BF5FF call 0046EF70
005153C9 |. BA 50555100 mov edx, 00515550 ; 精装友情-软件已注册
005153CE |. E8 F99AF5FF call 0046EECC ; 这里弹出“注册成功”的对话框 点确定后 又返回到OD 我们继续向下分析看注册信息保存到哪里
005153D3 |. 8D85 50FFFFFF lea eax, dword ptr [ebp-B0]
005153D9 |. B9 6C555100 mov ecx, 0051556C ; \hdwl21.dll
005153DE |. 8B55 FC mov edx, dword ptr [ebp-4] ; OK 这里基本上就可以断定注册信息保存在C:\WINDOWS\system32\hdwl21.dll文件中 我们收工
005153E1 |. E8 3AF9EEFF call 00404D20
005153E6 |. 8B8D 50FFFFFF mov ecx, dword ptr [ebp-B0] ; 上方注册信息的地址 我们看OD的信息窗口,看到这个:C:\WINDOWS\system32\ 所以才得出这个结论
005153EC |. B2 01 mov dl, 1
005153EE |. A1 8C424600 mov eax, dword ptr [46428C]
005153F3 |. E8 44EFF4FF call 0046433C
005153F8 |. 8BF0 mov esi, eax
005153FA |. 8D95 4CFFFFFF lea edx, dword ptr [ebp-B4]
00515400 |. 8B83 10030000 mov eax, dword ptr [ebx+310]
00515406 |. E8 A1D7F2FF call 00442BAC
0051540B |. 8B85 4CFFFFFF mov eax, dword ptr [ebp-B4]
00515411 |. 50 push eax
00515412 |. B9 80555100 mov ecx, 00515580 ; setet567
00515417 |. BA 94555100 mov edx, 00515594 ; sym
0051541C |. 8BC6 mov eax, esi
0051541E |. 8B18 mov ebx, dword ptr [eax]
00515420 |. FF53 04 call dword ptr [ebx+4]
00515423 |. 8D85 48FFFFFF lea eax, dword ptr [ebp-B8]
00515429 |. B9 A0555100 mov ecx, 005155A0 ; \hdw121.dll
0051542E |. 8B55 FC mov edx, dword ptr [ebp-4]
00515431 |. E8 EAF8EEFF call 00404D20
00515436 |. 8B85 48FFFFFF mov eax, dword ptr [ebp-B8]
0051543C |. BA 02000000 mov edx, 2
00515441 |. E8 9644EFFF call 004098DC
00515446 |. EB 24 jmp short 0051546C
00515448 |> B8 B4555100 mov eax, 005155B4 ; 注册失败,请重新注册!
OK,我们跟出了注册信息保存在哪里(C:\WINDOWS\system32\hdwl21.dll文件中)。现在就去该文件看看,我们用记事本打开该文件(DLL文件还能用记事本打开?呵呵,这里是软件的作者偷懒了,现在更多的软件都会对注册信息先进行加密在保存)
hdwl21.dll文件中内容:
[sym]
setet567=2597758
这里保存的就是我们输入的定单号,那为什么我们修改一个跳转,就达到了软件注册的目的呢?由于时间关系,这里就不再详述,只是简单的把软件验证的思路和大家说一下:软件在重新启动时,肯定要调用软件保存的注册信息来判断软件是否已注册。而该软件判断注册与否的标志呢就是看系统中是否存在hdwl21.dll这个文件,至于文件中有什么信息无所谓。大家把hdwl21.dll文件中的内容删除后,再打开软件,呵呵仍是注册版。这一点也可以说是该软件加密上的一个败笔。
【版权声明】PYG版权所有。未经许可,请勿转载。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入我们
x
|